shindig-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Chabot (JIRA)" <>
Subject [jira] Commented: (SHINDIG-1260) Improper JavaScript inclusion logic leads to out-of-order and duplicate includes / JavaScript errors
Date Tue, 09 Feb 2010 08:35:28 GMT


Chris Chabot commented on SHINDIG-1260:

New patch looks good, everything is working smoothly again!

It does seem to have made the external js feature code disappear though (no script src=.../js/feature:foo:bar.js
is being generated in the gadget doc).

> Improper JavaScript inclusion logic leads to out-of-order and duplicate includes / JavaScript
> ----------------------------------------------------------------------------------------------------
>                 Key: SHINDIG-1260
>                 URL:
>             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
>             Fix For: 1.1-BETA6
>         Attachments: shindig-1260-final.patch, shindig-1260-revised.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="" />
> 	<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
> 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.

View raw message