[
https://issues.apache.org/jira/browse/SHINDIG-1260?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jacky Wang updated SHINDIG-1260:
--------------------------------
Attachment: shindig-1260-jacky-final.patch
1) feature list sorted.
2) un-used features are removed from forcedJsLibs
3) re-factored Gadget*Renderer.php
4) don't expend the js on JsServlet.
> Improper JavaScript inclusion logic leads to out-of-order and duplicate
> includes / JavaScript errors
> ----------------------------------------------------------------------------------------------------
>
> Key: SHINDIG-1260
> URL: https://issues.apache.org/jira/browse/SHINDIG-1260
> Project: Shindig
> Issue Type: Bug
> Components: PHP
> Affects Versions: 1.1-BETA5, 1.1-BETA6, 1.1-RC1
> Environment: RedHat Linux 5.3, Apache 2.2.3, PHP 5.2.10
> Reporter: James McIninch
> Attachments: shindig-1260-jacky-final.patch, shindig-1260.patch
>
>
> The logic for selecting and inserting JavaScript using the
> GadgetFeatureRegistry and GadgetBaseRender is incorrect. The result is that
> JavaScript for features is included out-of-order of their dependencies,
> sometimes multiply included, and the 'gadgets' JavaScript object is not
> defined.
> Consider the following simple gadget:
> <?xml version="1.0" encoding="UTF-8"?>
> <Module>
> <ModulePrefs title="Hello" description="An example of a simple gadget"
> author="James McIninch" author_email="[email protected]" />
> <UserPref name="firstname" display_name="Your name" datatype="string"
> default_value="stranger" />
> <Content type="html" preferred_height="50" preferred_width="200">
> <![CDATA[
> <script type="text/javascript">
> var prefs = new gadgets.Prefs();
> var name = prefs.getString("firstname");
> document.getElementById("placeholder").innerHTML = name;
> </script>
>
> Hello, <span id="placeholder">name goes here</span>!
> ]]>
> </Content>
> </Module>
> This is rendered as:
> Hello, name goes here!
> Inspecting the JavaScript error console shows that 'gadgets' is undefined.
> However, the first instance of 'gadgets' being undefined lies in the
> Shindig-included JavaScript. This is because auth-init.js is included before
> config.js (both in features/src/main/javascript/features/core.*), but
> auth-init.js contains the line (28):
> shindig.auth = new shindig.Auth();
> which, in turn calls (auth.js line 159):
> gadgets.config.register("shindig.auth", null, init);
> ... but the 'gadgets' and 'gadgets.config' objects are not yet defined at
> that point. Despite being dependencies for the auth.js, they aren't included
> in the order where the dependencies precede the code that depends on them.
> Also looking at the source of the rendered gadget, the taming.js code is
> included 5 separate times.
> Correcting the bug will entail re-thinking the logic of the feature ordering
> to include the dependency information and order the features based on the
> dependencies.
> All gadgets requiring the 'gadgets' object to be defined currently fail.
> Gadgets using the legacy model still function, though there exists redundant
> and erroneous JavaScript.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.