https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112118

Revision: 112118
Author:   jdlrobson
Date:     2012-02-22 16:53:18 +0000 (Wed, 22 Feb 2012)
Log Message:
-----------
abstract addEventListener

IE < 9 doesn't support addEventListener so it is
useful to have a utility function to attach events going
forward.

Note discussion here:
http://www.mediawiki.org/wiki/Special:Code/MediaWiki/112019

Modified Paths:
--------------
    trunk/extensions/MobileFrontend/javascripts/application.js
    trunk/extensions/MobileFrontend/javascripts/beta_application.js
    trunk/extensions/MobileFrontend/javascripts/beta_opensearch.js
    trunk/extensions/MobileFrontend/javascripts/opensearch.js

Modified: trunk/extensions/MobileFrontend/javascripts/application.js
===================================================================
--- trunk/extensions/MobileFrontend/javascripts/application.js  2012-02-22 
16:41:01 UTC (rev 112117)
+++ trunk/extensions/MobileFrontend/javascripts/application.js  2012-02-22 
16:53:18 UTC (rev 112118)
@@ -14,7 +14,7 @@
                        }
                }
                for( i = 0; i < sectionHeadings.length; i++ ) {
-                       sectionHeadings[i].addEventListener( 'click', 
openSectionHandler, false );
+                       utilities( sectionHeadings[i] ).bind( 'click', 
openSectionHandler, false );
                }
                search = document.getElementById( 'search' );
                clearSearch = document.getElementById( 'clearsearch' );
@@ -26,9 +26,9 @@
                                search.select();
                        }
                        clearSearch.setAttribute( 'title', 'Clear' );
-                       clearSearch.addEventListener( 'mousedown', 
clearSearchBox, true );
-                       search.addEventListener( 'keyup', 
handleClearSearchLink, false );
-                       search.addEventListener( 'click', onFocusHandler, true 
);
+                       utilities( clearSearch ).bind( 'mousedown', 
clearSearchBox, true );
+                       utilities( search ).bind( 'keyup', 
handleClearSearchLink, false );
+                       utilities( search ).bind( 'click', onFocusHandler, true 
);
                }
 
                function navigateToLanguageSelection() {
@@ -40,7 +40,7 @@
                                }
                        }
                }
-               languageSelection.addEventListener( 'change', 
navigateToLanguageSelection );
+               utilities( languageSelection ).bind( 'change', 
navigateToLanguageSelection );
 
                function handleClearSearchLink() {
                        if ( clearSearch ) {
@@ -79,7 +79,7 @@
                        }
                }
                initClearSearchLink();
-               document.getElementById( 'logo' ).addEventListener( 'click', 
logoClick );
+               utilities( document.getElementById( 'logo' ) ).bind( 'click', 
logoClick );
                dismissNotification = document.getElementById( 
'dismiss-notification' );
 
                if ( dismissNotification ) {
@@ -107,7 +107,7 @@
                }
                checkHash();
                for ( a = document.getElementsByTagName( 'a' ), i = 0; i < 
a.length; i++ ) {
-                       a[i].addEventListener( 'click', checkHash );
+                       utilities( a[i] ).bind( 'click', checkHash );
                }
 
                // Try to scroll and hide URL bar
@@ -199,8 +199,16 @@
                        el.className = newClasses.join( ' ' );
                }
 
+               function bind( type, handler ) {
+                       if ( el.addEventListener ) { // standardised browser
+                               el.addEventListener( type, handler, false );
+                       } else if( el.attachEvent ) {
+                               el.attachEvent( 'on' + type, handler );
+                       }
+               }
                return {
                        addClass: addClass,
+                       bind: bind,
                        removeClass: removeClass
                };
        }

Modified: trunk/extensions/MobileFrontend/javascripts/beta_application.js
===================================================================
--- trunk/extensions/MobileFrontend/javascripts/beta_application.js     
2012-02-22 16:41:01 UTC (rev 112117)
+++ trunk/extensions/MobileFrontend/javascripts/beta_application.js     
2012-02-22 16:53:18 UTC (rev 112118)
@@ -1,5 +1,9 @@
 /*global document, window */
 /*jslint sloppy: true, white:true, maxerr: 50, indent: 4, plusplus: true*/
+/*
+TODO: getElementsByClassName not supported by IE < 9
+TODO: addEventListener not supported by IE < 9
+*/
 MobileFrontend = (function() {
 
        function init() {
@@ -14,7 +18,7 @@
                        }
                }
                for( i = 0; i < sectionHeadings.length; i++ ) {
-                       sectionHeadings[i].addEventListener( 'click', 
openSectionHandler, false );
+                       utilities( sectionHeadings[i] ).bind( 'click', 
openSectionHandler, false );
                }
                search = document.getElementById( 'search' );
                clearSearch = document.getElementById( 'clearsearch' );
@@ -29,10 +33,10 @@
                                search.select();
                        }
                        clearSearch.setAttribute( 'title', 'Clear' );
-                       clearSearch.addEventListener( 'mousedown', 
clearSearchBox, true );
-                       search.addEventListener( 'keyup', 
handleClearSearchLink, false );
-                       search.addEventListener( 'keydown', handleDefaultText, 
false );
-                       search.addEventListener( 'click', onFocusHandler, true 
);
+                       utilities( clearSearch ).bind( 'mousedown', 
clearSearchBox, true );
+                       utilities( search ).bind( 'keyup', 
handleClearSearchLink, false );
+                       utilities( search ).bind( 'keydown', handleDefaultText, 
false );
+                       utilities( search ).bind( 'click', onFocusHandler, true 
);
                }
 
                function navigateToLanguageSelection() {
@@ -44,7 +48,7 @@
                                }
                        }
                }
-               languageSelection.addEventListener( 'change', 
navigateToLanguageSelection );
+               utilities( languageSelection ).bind( 'change', 
navigateToLanguageSelection );
 
                function handleDefaultText() {
                        var pE = document.getElementById( 'placeholder' );
@@ -87,7 +91,7 @@
                search.onpaste = function() {
                        handleDefaultText();
                };
-               document.getElementById( 'logo' ).addEventListener( 'click', 
logoClick );
+               utilities( document.getElementById( 'logo' ) ).bind( 'click', 
logoClick );
                dismissNotification = document.getElementById( 
'dismiss-notification' );
 
                if ( dismissNotification ) {
@@ -115,7 +119,7 @@
                }
                checkHash();
                for ( a = document.getElementsByTagName( 'a' ), i = 0; i < 
a.length; i++ ) {
-                       a[i].addEventListener( 'click', checkHash );
+                       utilities( a[i] ).bind( 'click', checkHash );
                }
 
                // Try to scroll and hide URL bar
@@ -207,8 +211,16 @@
                        el.className = newClasses.join( ' ' );
                }
 
+               function bind( type, handler ) {
+                       if ( el.addEventListener ) { // standardised browser
+                               el.addEventListener( type, handler, false );
+                       } else if( el.attachEvent ) {
+                               el.attachEvent( 'on' + type, handler );
+                       }
+               }
                return {
                        addClass: addClass,
+                       bind: bind,
                        removeClass: removeClass
                };
        }

Modified: trunk/extensions/MobileFrontend/javascripts/beta_opensearch.js
===================================================================
--- trunk/extensions/MobileFrontend/javascripts/beta_opensearch.js      
2012-02-22 16:41:01 UTC (rev 112117)
+++ trunk/extensions/MobileFrontend/javascripts/beta_opensearch.js      
2012-02-22 16:53:18 UTC (rev 112118)
@@ -14,7 +14,8 @@
                zeroRatedBanner = document.getElementById( 'zero-rated-banner' 
) ||
                        document.getElementById( 'zero-rated-banner-red' ),
                clearSearch = document.getElementById( 'clearsearch' ),
-               focused = false, ol = {};
+               focused = false, ol = {},
+               u = MobileFrontend.utils;
 
        if ( scriptPath ) {
                apiUrl = scriptPath + apiUrl;
@@ -28,7 +29,7 @@
                        var viewportmeta = document.querySelector( 
'meta[name="viewport"]' );
                        if ( viewportmeta ) {
                                viewportmeta.content = 'width=device-width, 
minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0';
-                               document.body.addEventListener( 'gesturestart', 
function () {
+                               u( document.body ).bind( 'gesturestart', 
function () {
                                        viewportmeta.content = 
'width=device-width, initial-scale=1.0';
                                }, false );
                    }
@@ -72,7 +73,7 @@
                                rrd = document.createElement( 'a' );
                                rrd.setAttribute( 'href', '#' );
                                rrd.setAttribute( 'id', 'remove-results' );
-                               rrd.addEventListener( 'click', removeResults );
+                               u( rrd ).bind( 'click', removeResults );
                                rrdD = document.createElement( 'div' );
                                rrdD.setAttribute( 'id', 'left-arrow' );
                                rrd.appendChild( rrdD );
@@ -135,7 +136,7 @@
        }
 
        window.onload = function () {
-               search.addEventListener( 'keyup',
+               u( search ).bind( 'keyup',
                        function() {
                                clearTimeout( timer );
                                term = this.value;
@@ -233,7 +234,7 @@
                                label = document.createTextNode( '+' );
                                link.appendChild(label);
                                link.className = 'sq-val-update';
-                               link.addEventListener( 'click', 
suggestionListener );
+                               u( link ).bind( 'click', suggestionListener );
                                suggestionsResult.appendChild( link );
 
                                link = document.createElement( 'a' );

Modified: trunk/extensions/MobileFrontend/javascripts/opensearch.js
===================================================================
--- trunk/extensions/MobileFrontend/javascripts/opensearch.js   2012-02-22 
16:41:01 UTC (rev 112117)
+++ trunk/extensions/MobileFrontend/javascripts/opensearch.js   2012-02-22 
16:53:18 UTC (rev 112118)
@@ -5,7 +5,8 @@
                numResults = 5, pixels = 'px',
                results = document.getElementById( 'results' ),
                search = document.getElementById( 'search' ),
-               sb = document.getElementById( 'searchbox' );
+               sb = document.getElementById( 'searchbox' ),
+               u = MobileFrontend.utils;
 
        if ( scriptPath ) {
                apiUrl = scriptPath + apiUrl;   
@@ -43,7 +44,7 @@
        }
 
        window.onload = function () {
-               search.addEventListener( 'keyup',
+               u( search ).bind( 'keyup',
                        function() {
                                clearTimeout( timer );
                                var term = this.value;
@@ -131,7 +132,7 @@
                                label = document.createTextNode( '+' );
                                link.appendChild(label);
                                link.className = 'sq-val-update';
-                               link.addEventListener( 'click', 
suggestionListener );
+                               u( link ).bind( 'click', suggestionListener );
                                suggestionsResult.appendChild( link );
 
                                link = document.createElement( 'a' );


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to