MediaWiki:Common.js: Difference between revisions

m
Undo revision 37163 by Abhidevananda (talk) - did not resolve problem of missing Twinkle
m (Testing latest version from Wikiipedia)
m (Undo revision 37163 by Abhidevananda (talk) - did not resolve problem of missing Twinkle)
Line 11: Line 11:
  * dependency hasn't arrived yet it'll make sure those are loaded before this.
  * dependency hasn't arrived yet it'll make sure those are loaded before this.
  */
  */
/*global mw, $, importStylesheet, importScript */
/*jshint curly:false eqnull:true, strict:false, browser:true, */


/* global mw, $, importStylesheet, importScript */
mw.loader.using( ['mediawiki.util', 'mediawiki.notify', 'jquery.client'], function () {
/* jshint strict:false, browser:true */
 
mw.loader.using( ['mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {
/* Begin of mw.loader.using callback */
/* Begin of mw.loader.using callback */


Line 23: Line 22:
  * Description: Adds an additional link to the complete list of languages available.
  * Description: Adds an additional link to the complete list of languages available.
  * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
  * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
  */
  *
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
     $( function () {
     $( function () {
Line 30: Line 29:
     } );
     } );
}
}
*/


/**
/**
Line 52: Line 52:


/**
/**
  * Map addPortletLink to mw.util
  * Map addPortletLink to mw.util  
*
  * @deprecated: Use mw.util.addPortletLink instead.
  * @deprecated: Use mw.util.addPortletLink instead.
  */
  */
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );
mw.log.deprecate( window, 'addPortletLink', function () {
    return mw.util.addPortletLink.apply( mw.util, arguments );
}, 'Use mw.util.addPortletLink() instead' );


/**
/**
  * Extract a URL parameter from the current URL
  * Extract a URL parameter from the current URL
*
  * @deprecated: Use mw.util.getParamValue with proper escaping
  * @deprecated: Use mw.util.getParamValue with proper escaping
  */
  */
mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );
mw.log.deprecate( window, 'getURLParamValue', function () {
    return mw.util.getParamValue.apply( mw.util, arguments );
}, 'Use mw.util.getParamValue() instead' );


/**
/**  
  * Test if an element has a certain class
  * Test if an element has a certain class
*
  * @deprecated:  Use $(element).hasClass() instead.
  * @deprecated:  Use $(element).hasClass() instead.
  */
  */
Line 73: Line 80:
/**
/**
  * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
  * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
  * @rev 6
  * @rev 5
  */
  */
var extraCSS = mw.util.getParamValue( 'withCSS' ),
// CSS
    extraJS = mw.util.getParamValue( 'withJS' );
var extraCSS = mw.util.getParamValue( 'withCSS' );
 
if ( extraCSS ) {
if ( extraCSS ) {
    if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
        importStylesheet( extraCSS );
importStylesheet( extraCSS );
    } else {
} else {
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
    }
}
}
}


// JS
var extraJS = mw.util.getParamValue( 'withJS' );
if ( extraJS ) {
if ( extraJS ) {
    if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
        importScript( extraJS );
importScript( extraJS );
    } else {
} else {
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
    }
}
}
}


Line 110: Line 118:


/**
/**
  * Helper script for .hlist class in Common.css
  * Load scripts specific to Internet Explorer
* Add pseudo-selector class to last-child list items in IE8
* @source mediawiki.org/wiki/Snippets/Horizontal_lists
* @revision 6 (2014-08-23)
* @author [[User:Edokter]]
  */
  */
( function ( mw, $ ) {
if ( $.client.profile().name === 'msie' ) {
    var profile = $.client.profile();
    importScript( 'MediaWiki:Common.js/IEFixes.js' );
    if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
}
        mw.hook( 'wikipage.content' ).add( function ( $content ) {
            $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
                .addClass( 'hlist-last-child' );
        } );
    }
}( mediaWiki, jQuery ) );


/**
/**
Line 130: Line 128:
  */
  */
if ( navigator.appVersion.search(/windows nt 5/i) !== -1 ) {
if ( navigator.appVersion.search(/windows nt 5/i) !== -1 ) {
     mw.util.addCSS( '.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; } ' +
     mw.util.addCSS( '.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; } ' +  
                 '.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; } ' );
                 '.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; } ' );
}
}
Line 140: Line 138:
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
  *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
  *              The script itself is located on meta because it is used by many projects.
  *              The script itself is located on meta because it is used by many projects.
  *              See [[Meta:WikiMiniAtlas]] for more information.
  *              See [[Meta:WikiMiniAtlas]] for more information.  
  * Maintainers: [[User:Dschwen]]
  * Maintainers: [[User:Dschwen]]
  */
  */
Line 162: Line 160:
     } );
     } );
} )();
} )();
/**
* Interwiki links to featured articles ***************************************
*
* Description: Highlights interwiki links to featured articles (or
*              equivalents) by changing the bullet before the interwiki link
*              into a star.
* Maintainers: [[User:R. Koot]]
*/
function LinkFA() {
    if ( document.getElementById( 'p-lang' ) ) {
        var InterwikiLinks = document.getElementById( 'p-lang' ).getElementsByTagName( 'li' );
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
            var className = InterwikiLinks[i].className.match(/interwiki-[-\w]+/);
            if ( document.getElementById( className + '-fa' ) ) {
                InterwikiLinks[i].className += ' FA';
                InterwikiLinks[i].title = 'This is a featured article in this language.';
            } else if ( document.getElementById( className + '-ga' ) ) {
                InterwikiLinks[i].className += ' GA';
                InterwikiLinks[i].title = 'This is a good article in this language.';
            }
        }
    }
}
mw.hook( 'wikipage.content' ).add( LinkFA );


/**
/**
  * Collapsible tables
  * Collapsible tables
  *
  *
  * Allows tables to be collapsed, showing only the header. See [[Wikipedia:NavFrame]].
  * Allows tables to be collapsed, showing only the header. See [[Wikipedia:NavFrame]].
  *
  *
  * @version 2.0.3 (2014-03-14)
  * @version 2.0.3 (2014-03-14)
Line 179: Line 204:
var collapseCaption = 'hide';
var collapseCaption = 'hide';
var expandCaption = 'show';
var expandCaption = 'show';
var tableIndex = 0;


function collapseTable( tableIndex ) {
function collapseTable( tableIndex ) {
Line 204: Line 228:
     }
     }
}
}
 
function createClickHandler( tableIndex ) {
function createClickHandler( tableIndex ) {
     return function ( e ) {
     return function ( e ) {
Line 212: Line 236:
}
}


function createCollapseButtons( $content ) {
function createCollapseButtons() {
    var tableIndex = 0;
     var NavigationBoxes = {};
     var NavigationBoxes = {};
     var $Tables = $content.find( 'table' );
     var Tables = document.getElementsByTagName( 'table' );
     var i;
     var i;


     $Tables.each( function( i, table ) {
     for ( i = 0; i < Tables.length; i++ ) {
         if ( $(table).hasClass( 'collapsible' ) ) {
         if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {


             /* only add button and increment count if there is a header row to work with */
             /* only add button and increment count if there is a header row to work with */
             var HeaderRow = table.getElementsByTagName( 'tr' )[0];
             var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
             if ( !HeaderRow ) {
             if ( !HeaderRow ) {
                 return;
                 continue;
             }
             }
             var Header = table.getElementsByTagName( 'th' )[0];
             var Header = HeaderRow.getElementsByTagName( 'th' )[0];
             if ( !Header ) {
             if ( !Header ) {
                 return;
                 continue;
             }
             }


             NavigationBoxes[ tableIndex ] = table;
             NavigationBoxes[ tableIndex ] = Tables[i];
             table.setAttribute( 'id', 'collapsibleTable' + tableIndex );
             Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );


             var Button    = document.createElement( 'span' );
             var Button    = document.createElement( 'span' );
Line 252: Line 277:
             tableIndex++;
             tableIndex++;
         }
         }
     } );
     }


     for ( i = 0;  i < tableIndex; i++ ) {
     for ( i = 0;  i < tableIndex; i++ ) {
Line 259: Line 284:
         ) {
         ) {
             collapseTable( i );
             collapseTable( i );
         }
         }  
         else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
         else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
             var element = NavigationBoxes[i];
             var element = NavigationBoxes[i];
Line 284: Line 309:
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var indexNavigationBar = 0;


/**
/**
Line 323: Line 347:


/* adds show/hide-button to navigation bars */
/* adds show/hide-button to navigation bars */
function createNavigationBarToggleButton( $content ) {
function createNavigationBarToggleButton() {
    var indexNavigationBar = 0;
    var NavFrame;
     var NavChild;
     var NavChild;
     /* iterate over all < div >-elements */
     /* iterate over all < div >-elements */
     var $divs = $content.find( 'div' );
     var divs = document.getElementsByTagName( 'div' );
     $divs.each( function ( i, NavFrame ) {
     for ( var i = 0; (NavFrame = divs[i]); i++ ) {
         /* if found a navigation bar */
         /* if found a navigation bar */
         if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
         if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
Line 372: Line 398:
             NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
             NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
         }
         }
     } );
     }
}
}


Line 427: Line 453:


     $( function () {
     $( function () {
         var cats = mw.config.get('wgCategories');
         var cats = document.getElementById( 'mw-normal-catlinks' );
         if ( !cats ) {
         if ( !cats ) {
             return;
             return;
         }
         }
         if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
         cats = cats.getElementsByTagName( 'a' );
            addEditIntro( 'Template:BLP_editintro' );
        for ( var i = 0; i < cats.length; i++ ) {
            if ( cats[i].title === 'Category:Living people' || cats[i].title === 'Category:Possibly living people' ) {
                addEditIntro( 'Template:BLP_editintro' );
                break;
            }
         }
         }
     } );
     } );
}
/**
* Description: Stay on the secure server as much as possible
* Maintainers: [[User:TheDJ]]
*/
if ( document.location && document.location.protocol === 'https:' ) {
    /* New secure servers */
    importScript( 'MediaWiki:Common.js/secure new.js' );
}
/**
* Description: Removes ArticleFeedback related cookies from clients.
* Can be removed in a couple of weeks to a month or so.
* Maintainers: [[User:Reedy]]
*/
var match, re = /[\S]*articleFeedback[^=]*/g;
while ( ( match = re.exec( document.cookie ) ) !== null ) {
    document.cookie = match + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;';
}
}