Author: max
Date: 2007-11-14 22:08:29 -0800 (Wed, 14 Nov 2007)
New Revision: 7282

Modified:
   openlaszlo/trunk/lps/includes/source/embednew.js
Log:
Change 20071114-maxcarlson-n by [EMAIL PROTECTED] on 2007-11-14 14:20:59 PST
    in /Users/maxcarlson/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Fix history initialization in dhtml

New Features:

Bugs Fixed: LPP-5108 - History broken in DHTML

Technical Reviewer: promanik
QA Reviewer: jcrowley
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details: Add _onload array to store methods called onload.  Attach history.init 
method if properties.history != false.  Call all methods in _onload inside 
_ready().

r7133 removed a call to Lz.history.init that was attached ot the window.onload 
event handler - which runs too early in some cases.  

Tests: http://localhost:8080/trunk/test/history/history.lzx?lzt=html and 
http://localhost:8080/trunk/test/history/history.lzx?lzr=dhtml&lzt=html work, 
as does the testcase attached to LPP-5108.  Tested in Safari 3 and Firefox 2 OS 
X.



Modified: openlaszlo/trunk/lps/includes/source/embednew.js
===================================================================
--- openlaszlo/trunk/lps/includes/source/embednew.js    2007-11-15 05:08:14 UTC 
(rev 7281)
+++ openlaszlo/trunk/lps/includes/source/embednew.js    2007-11-15 06:08:29 UTC 
(rev 7282)
@@ -104,31 +104,36 @@
         };
 
         // Add entry for this application 
-        Lz[properties.id] = { 
+        var app = Lz[properties.id] = { 
             runtime: 'swf'
             ,_id: properties.id
             ,setCanvasAttribute: Lz._setCanvasAttributeSWF
             ,getCanvasAttribute: Lz._getCanvasAttributeSWF
             ,callMethod: Lz._callMethodSWF
             ,_ready: Lz._ready
+            // List of functions to call when the app is loaded
+            ,_onload: []
             ,loaded: false
             ,_sendMouseWheel: Lz._sendMouseWheel
             ,_setCanvasAttributeDequeue: Lz._setCanvasAttributeDequeue
         }
+        // listen for history unless properties.history == false
+        if (properties.history != false) {
+            app._onload.push(Lz.history.init);
+        }
         // for callbacks onload
         Lz._swfid = properties.id;
         dojo.flash.addLoadedListener(Lz._loaded);
-        dojo.flash.addLoadedListener(Lz.history.init)
         if (! Lz['setCanvasAttribute']) {
-            Lz.setCanvasAttribute = Lz[properties.id].setCanvasAttribute;
+            Lz.setCanvasAttribute = app.setCanvasAttribute;
         }
-        if (! Lz['getCanvasAttribute']) Lz.getCanvasAttribute = 
Lz[properties.id].getCanvasAttribute;
-        if (! Lz['callMethod']) Lz.callMethod = Lz[properties.id].callMethod;
+        if (! Lz['getCanvasAttribute']) Lz.getCanvasAttribute = 
app.getCanvasAttribute;
+        if (! Lz['callMethod']) Lz.callMethod = app.callMethod;
 
         dojo.flash.setSwf(swfargs, minimumVersion);
         Lz.__BrowserDetect.init();
         if (Lz.__BrowserDetect.OS == 'Mac') {
-            LzMousewheelKernel.setCallback(Lz[properties.id], 
'_sendMouseWheel');
+            LzMousewheelKernel.setCallback(app, '_sendMouseWheel');
         }
     }
 
@@ -205,16 +210,21 @@
         };
 
         // Add entry for this application 
-        Lz[properties.id] = { 
+        var app = Lz[properties.id] = { 
             runtime: 'dhtml'
             ,_id: properties.id
             ,_ready: Lz._ready
+            ,_onload: []
             ,loaded: false
             ,setCanvasAttribute: Lz._setCanvasAttributeDHTML
             ,getCanvasAttribute: Lz._getCanvasAttributeDHTML
         }
-        if (! Lz['setCanvasAttribute']) Lz.setCanvasAttribute = 
Lz[properties.id].setCanvasAttribute;
-        if (! Lz['getCanvasAttribute']) Lz.getCanvasAttribute = 
Lz[properties.id].getCanvasAttribute;
+        // listen for history unless properties.history == false
+        if (properties.history != false) {
+            app._onload.push(Lz.history.init);
+        }
+        if (! Lz['setCanvasAttribute']) Lz.setCanvasAttribute = 
app.setCanvasAttribute;
+        if (! Lz['getCanvasAttribute']) Lz.getCanvasAttribute = 
app.getCanvasAttribute;
 
         this.__dhtmlLoadScript(url)
     }
@@ -396,7 +406,7 @@
             this.setCanvasAttribute(a[0], a[1], a[2]);
         }
     }
-    ,/** @access private */
+    ,/** @access private called on canvas init */
     _ready: function (cref) {
         this.loaded = true;
         Lz.loaded = true;
@@ -404,6 +414,12 @@
             this._setCanvasAttributeDequeue();
         }
         if (cref) this.canvas = cref;
+        // call list of functions in _onload array
+        for (var i = 0; i < this._onload.length; i++) {
+            var f = this._onload[i];
+            if (typeof f == 'function') f(this);
+        }
+        // for backward compatibility and simplicity
         if (this.onload && typeof this.onload == 'function') {
             this.onload();
         }


_______________________________________________
Laszlo-checkins mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-checkins

Reply via email to