[ 
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="james.mcin...@biogenidec.com" />
>       <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.

Reply via email to