MediaWiki:Common.js: Difference between revisions

Jump to navigation Jump to search
m
Undo revision 37164 by Abhidevananda (talk) on the other hand, newer version is more compact and does no apparent damage
m (Undo revision 37163 by Abhidevananda (talk) - did not resolve problem of missing Twinkle)
m (Undo revision 37164 by Abhidevananda (talk) on the other hand, newer version is more compact and does no apparent damage)
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, */


mw.loader.using( ['mediawiki.util', 'mediawiki.notify', 'jquery.client'], function () {
/* global mw, $, importStylesheet, importScript */
/* 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 22: Line 23:
  * 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 29: Line 30:
     } );
     } );
}
}
*/


/**
/**
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', function () {
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );
    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', function () {
mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );
    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 80: Line 73:
/**
/**
  * @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 5
  * @rev 6
  */
  */
// CSS
var extraCSS = mw.util.getParamValue( 'withCSS' ),
var extraCSS = mw.util.getParamValue( 'withCSS' );
    extraJS = mw.util.getParamValue( 'withJS' );
 
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 118: Line 110:


/**
/**
  * Load scripts specific to Internet Explorer
  * Helper script for .hlist class in Common.css
* 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]]
  */
  */
if ( $.client.profile().name === 'msie' ) {
( function ( mw, $ ) {
    importScript( 'MediaWiki:Common.js/IEFixes.js' );
    var profile = $.client.profile();
}
    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 128: Line 130:
  */
  */
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 138: Line 140:
  *              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 160: Line 162:
     } );
     } );
} )();
} )();
/**
* 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 204: Line 179:
var collapseCaption = 'hide';
var collapseCaption = 'hide';
var expandCaption = 'show';
var expandCaption = 'show';
var tableIndex = 0;


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


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


     for ( i = 0; i < Tables.length; i++ ) {
     $Tables.each( function( i, table ) {
         if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
         if ( $(table).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 = Tables[i].getElementsByTagName( 'tr' )[0];
             var HeaderRow = table.getElementsByTagName( 'tr' )[0];
             if ( !HeaderRow ) {
             if ( !HeaderRow ) {
                 continue;
                 return;
             }
             }
             var Header = HeaderRow.getElementsByTagName( 'th' )[0];
             var Header = table.getElementsByTagName( 'th' )[0];
             if ( !Header ) {
             if ( !Header ) {
                 continue;
                 return;
             }
             }


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


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


     for ( i = 0;  i < tableIndex; i++ ) {
     for ( i = 0;  i < tableIndex; i++ ) {
Line 284: Line 259:
         ) {
         ) {
             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 309: Line 284:
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var indexNavigationBar = 0;


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


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


Line 453: Line 427:


     $( function () {
     $( function () {
         var cats = document.getElementById( 'mw-normal-catlinks' );
         var cats = mw.config.get('wgCategories');
         if ( !cats ) {
         if ( !cats ) {
             return;
             return;
         }
         }
         cats = cats.getElementsByTagName( 'a' );
         if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
        for ( var i = 0; i < cats.length; i++ ) {
            addEditIntro( 'Template:BLP_editintro' );
            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=/;';
}
}


Navigation menu