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
