Fix event hooking for suggest.
authorBrion Vibber <brion@users.mediawiki.org>
Tue, 22 Apr 2008 18:04:49 +0000 (18:04 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Tue, 22 Apr 2008 18:04:49 +0000 (18:04 +0000)
Works around bug with custom search form destinations on Wikipedia; multiple event handlers for form submission were overwriting each other

includes/DefaultSettings.php
skins/common/mwsuggest.js

index a782a5d..4ec5eb1 100644 (file)
@@ -1334,7 +1334,7 @@ $wgCacheEpoch = '20030516000000';
  * to ensure that client-side caches don't keep obsolete copies of global
  * styles.
  */
-$wgStyleVersion = '137';
+$wgStyleVersion = '138';
 
 
 # Server-side caching:
index c27c6a2..53dbcf9 100644 (file)
@@ -660,18 +660,26 @@ function os_eventOnsubmit(e){
        return true;
 }
 
+function os_hookEvent(element, hookName, hookFunct) {
+       if (element.addEventListener) {
+               element.addEventListener(hookName, hookFunct, false);
+       } else if (window.attachEvent) {
+               element.attachEvent("on" + hookName, hookFunct);
+       }
+}
+
 /** Init Result objects and event handlers */
 function os_initHandlers(name, formname, element){
        var r = new os_Results(name, formname); 
        // event handler
-       element.onkeyup = function(event) { os_eventKeyup(event); };
-       element.onkeydown = function(event) { os_eventKeydown(event); };
-       element.onkeypress = function(event) { os_eventKeypress(event); };
-       element.onblur = function(event) { os_eventBlur(event); };
-       element.onfocus = function(event) { os_eventFocus(event); };
+       os_hookEvent(element, "keyup", function(event) { os_eventKeyup(event); });
+       os_hookEvent(element, "keydown", function(event) { os_eventKeydown(event); });
+       os_hookEvent(element, "keypress", function(event) { os_eventKeypress(event); });
+       os_hookEvent(element, "blur", function(event) { os_eventBlur(event); });
+       os_hookEvent(element, "focus", function(event) { os_eventFocus(event); });
        element.setAttribute("autocomplete","off");
        // stopping handler
-       document.getElementById(formname).onsubmit = function(event){ return os_eventOnsubmit(event); };
+       os_hookEvent(document.getElementById(formname), "onsubmit", function(event){ return os_eventOnsubmit(event); });
        os_map[name] = r; 
        // toggle link
        if(document.getElementById(r.toggle) == null){