From: Krinkle Date: Sun, 8 May 2011 20:48:20 +0000 (+0000) Subject: Fix exception thrown in mw.util.addPortletLink X-Git-Tag: 1.31.0-rc.0~30322 X-Git-Url: http://git.cyclocoop.org/%40spipnet%40?a=commitdiff_plain;h=66a61a9448b95e02cccc990a83f969a149b6c997;p=lhc%2Fweb%2Fwiklou.git Fix exception thrown in mw.util.addPortletLink * As of jQuery 1.4.4, Sizzle's query must be a string (it does a query.replace call before everything else). It fails otherwise. * In REL1_17 and 1.17wmf1 this isn't a problem since jQuery 1.4.2 is there, in which Sizzle didn't fail on non-strings yet. * Nonetheless this is undocumented support, we should make sure that the variable passed is a string on our side * Adding a check for it in mw.util.addPortletLink's nextnode argument. * Adding a test to mw.util.test that calls addPortletLink with three arguments, making nextnode implied undefined/null. This test returned "ERROR" before I made the fix in mw.util.addPortletLink. Exact error: TypeError: Result of expression 'query' [undefined] is not an object. Origin: line 4085 of jQuery/mediaWiki module load. Line 4081: Sizzle = function( query, context, extra, seed ) { Line 4085: query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); --- diff --git a/resources/mediawiki.util/mediawiki.util.js b/resources/mediawiki.util/mediawiki.util.js index 39ceb7779b..dd53c43446 100644 --- a/resources/mediawiki.util/mediawiki.util.js +++ b/resources/mediawiki.util/mediawiki.util.js @@ -375,19 +375,23 @@ this.updateTooltipAccessKeys( $link ); } - // Append using DOM-element passing - if ( nextnode && nextnode.parentNode == $ul[0] ) { + // Where to put our node ? + // - nextnode is a DOM element (before MW 1.17, in wikibits.js, this was the only option) + if ( nextnode && nextnode.parentNode == $ul[0] ) { $(nextnode).before( $item ); + + // - nextnode is a CSS selector for jQuery + } else if ( typeof nextnode == 'string' && $ul.find( nextnode ).length !== 0 ) { + $ul.find( nextnode ).eq( 0 ).before( $item ); + + + // If the jQuery selector isn't found within the