Author: max
Date: 2007-11-12 16:48:24 -0800 (Mon, 12 Nov 2007)
New Revision: 7224

Modified:
   openlaszlo/trunk/lps/includes/source/embednew.js
Log:
Change 20071112-maxcarlson-P by [EMAIL PROTECTED] on 2007-11-12 16:01:00 PST
    in /Users/maxcarlson/openlaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Add APIs for attaching and removing browser event handlers

New Features:

Bugs Fixed: LPP-4715 - Include a method for attaching event handlers in the 
platform javascript

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

Documentation:

Release Notes:

Details: Add attachEventHandler: function(eventscope, eventname, callbackscope, 
callbackname)  and removeEventHandler: function(eventscope, eventname, 
callbackscope, callbackname) APIs to listen for and remove browser events.
    

Tests: See LPP-4715



Modified: openlaszlo/trunk/lps/includes/source/embednew.js
===================================================================
--- openlaszlo/trunk/lps/includes/source/embednew.js    2007-11-13 00:43:49 UTC 
(rev 7223)
+++ openlaszlo/trunk/lps/includes/source/embednew.js    2007-11-13 00:48:24 UTC 
(rev 7224)
@@ -582,4 +582,59 @@
     _sendMouseWheel: function(d) {
         if (d != null) this.callMethod("LzKeys.__mousewheelEvent(" + d + ")"); 
     }
+    ,/**
+     * Utility method for attaching DOM events
+     *
+     * @param eventscope:Object Scope to register the event, e.g. window 
+     * @param eventname:String Event name to register in eventscope, e.g. 
'load'
+     * @param callbackscope:Object Scope to receive the callback
+     * @param callbackname:String Method name to receive callback in 
callbackscope
+     */
+    attachEventHandler: function(eventscope, eventname, callbackscope, 
callbackname) {
+        if (! callbackscope || !callbackname || !callbackscope[callbackname]) {
+            return;
+        }
+        var s = eventscope + eventname + callbackscope + callbackname;
+        var handler = function() {
+            var a = window.event ? [window.event] : arguments;
+            callbackscope[callbackname].apply(callbackscope, a);
+        }
+        this._handlers[s] = handler;
+        //alert('add '+ s);
+        if(eventscope['addEventListener']) {
+            eventscope.addEventListener(eventname, handler, false);
+            return true;
+        } else if(eventscope['attachEvent']) {
+            return eventscope.attachEvent("on" + eventname, handler);
+        } 
+    }
+    ,/**
+     * Utility method for removing DOM events
+     *
+     * @param eventscope:Object Scope to register the event, e.g. window 
+     * @param eventname:String Event name to register in eventscope, e.g. 
'load'
+     * @param callbackscope:Object Scope to receive the callback
+     * @param callbackname:String Method name to receive callback in 
callbackscope
+     */
+    removeEventHandler: function(eventscope, eventname, callbackscope, 
callbackname) {
+        var s = eventscope + eventname + callbackscope + callbackname;
+        var handler = this._handlers[s];
+        //console.log('remove', this._handlers);
+        this._handlers[s] = null;
+        if (! handler) return;
+        if(eventscope['removeEventListener']) {
+            eventscope.removeEventListener(eventname, handler, false);
+            return true;
+        } else if(eventscope['detachEvent']) {
+            return eventscope.detachEvent("on" + eventname, handler);
+        } 
+    }
+    ,/** @access private */
+    _handlers: {} 
+    ,/** @access private */
+    _cleanupHandlers: function() {
+        Lz._handlers = {};
+        //alert('_cleanupHandlers');
+    }
 };
+Lz.attachEventHandler(window, 'beforeunload', Lz, '_cleanupHandlers');


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

Reply via email to