---------- Forwarded message ---------- From: <[email protected]> Date: 2010/9/21 Subject: Fix for SHINDIG-1412: Internet Explorer does not display external taglibraries in template (issue2203045) To: [email protected] Cc: [email protected]
Reviewers: , Description: This patches fixes the following issues: - Internet Explorer does not display tags from external tag libraries in templates if it's rendered by JavaScript (autoupdate=true) due to differences in JavaScript DOM parsing - PHP version does not include external tag libraries into JavaScript at all Please review this at http://codereview.appspot.com/2203045/ Affected files: features/src/main/javascript/features/opensocial-templates/loader.js php/src/gadgets/render/GadgetBaseRenderer.php Index: php/src/gadgets/render/GadgetBaseRenderer.php =================================================================== --- php/src/gadgets/render/GadgetBaseRenderer.php (Revision 999297) +++ php/src/gadgets/render/GadgetBaseRenderer.php (Arbeitskopie) @@ -346,6 +346,11 @@ $script .= "opensocial.data.DataContext.putDataSet(\"$key\", $data);\n"; } } + if ($this->gadget->gadgetSpec->templatesRequireLibraries) { + foreach ($this->gadget->gadgetSpec->templatesRequireLibraries as $url => $library) { + $script .= "os.Loader.loadContent(" . json_encode($library) . ", '" . $url . "');\n"; + } + } if ($this->gadget->gadgetSpec->templatesDisableAutoProcessing) { $script .= "opensocial.template.Container.disableAutoProcessing();\n"; } Index: features/src/main/javascript/features/opensocial-templates/loader.js =================================================================== --- features/src/main/javascript/features/opensocial-templates/loader.js (Revision 999297) +++ features/src/main/javascript/features/opensocial-templates/loader.js (Arbeitskopie) @@ -169,7 +169,12 @@ * Processes the <Templates> node. */ os.Loader.processTemplatesNode = function(node) { - for (var child = node.firstChild; child; child = child.nextSibling) { + // since the ie domparse does not return a general parent element + // we check here if firstChild is really present + if (node.firstChild) { + node = node.firstChild; + } + for (var child = node; child; child = child.nextSibling) { if (child.nodeType == DOM_ELEMENT_NODE) { var handler = os.Loader.getProcessorFunction_(child.tagName); if (handler) { @@ -295,7 +300,7 @@ } } } catch (err) { - gadgets.error('Error in stylesheet: ' + rule + ' - ' + e.name + ' - ' + e.message); + gadgets.error('Error in stylesheet: ' + rule + ' - ' + err.name + ' - ' + err.message); } } };
