MediaWiki:Common.js : Différence entre versions

De La Grande Bibliotheque de Tamriel
Aller à : navigation, rechercher
 
(32 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
/**
+
/*
  * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
+
  * Use Gadgets whenever possible to minimize loading for all users for every page.
* loaded for all users on every wiki page. If possible create a gadget that is
+
  * Wait for mediawiki.util to be ready because some things assume its availability.
  * enabled by default instead of adding it here (since gadgets are fully
 
* optimized ResourceLoader modules with possibility to add dependencies etc.)
 
*
 
* Since Common.js isn't a gadget, there is no place to declare its
 
* dependencies, so we have to lazy load them with mw.loader.using on demand and
 
* then execute the rest in the callback. In most cases these dependencies will
 
* be loaded (or loading) already and the callback will not be delayed. In case a
 
* 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 () {
 
/* Begin of mw.loader.using callback */
 
 
 
/**
 
* Main Page layout fixes
 
*
 
* Description: Adds an additional link to the complete list of languages available.
 
* Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
 
*/
 
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
 
    $( document ).ready( function () {
 
        mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
 
            'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );
 
    } );
 
}
 
 
 
/**
 
* Redirect User:Name/skin.js and skin.css to the current skin's pages
 
* (unless the 'skin' page really exists)
 
* @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 
* @rev: 2
 
 
  */
 
  */
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
 
    var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
 
    /* Make sure there was a part before and after the slash
 
      and that the latter is 'skin.js' or 'skin.css' */
 
    if ( titleParts.length == 2 ) {
 
        var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
 
        if ( titleParts.slice( -1 ) == 'skin.js' ) {
 
            window.location.href = mw.util.wikiGetlink( userSkinPage + '.js' );
 
        } else if ( titleParts.slice( -1 ) == 'skin.css' ) {
 
            window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
 
        }
 
    }
 
}
 
  
 
/**
 
/**
  * Map addPortletLink to mw.util
+
  * Boîtes déroulantes
 
  *
 
  *
  * @deprecated: Use mw.util.addPortletLink instead.
+
  * Pour [[Modèle:Méta palette de navigation]]
 
  */
 
  */
mw.log.deprecate( window, 'addPortletLink', function () {
 
    return mw.util.addPortletLink.apply( mw.util, arguments );
 
}, 'Use mw.util.addPortletLink() instead' );
 
  
/**
+
var Palette_Derouler = '[afficher]';
* Extract a URL parameter from the current URL
+
var Palette_Enrouler = '[masquer]';
*
 
* @deprecated: Use mw.util.getParamValue with proper escaping
 
*/
 
mw.log.deprecate( window, 'getURLParamValue', function () {
 
    return mw.util.getParamValue.apply( mw.util, arguments );
 
}, 'Use mw.util.getParamValue() instead' );
 
  
/**
+
var Palette_max = 1;
* Test if an element has a certain class
 
*
 
* @deprecated:  Use $(element).hasClass() instead.
 
*/
 
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
 
    return $( element ).hasClass( className );
 
}, 'Use jQuery.hasClass() instead' );
 
  
/**
+
function Palette_toggle( $table ) {
* @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
+
$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
* @rev 5
 
*/
 
// CSS
 
var extraCSS = mw.util.getParamValue( 'withCSS' );
 
if ( extraCSS ) {
 
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
 
importStylesheet( extraCSS );
 
} else {
 
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
 
}
 
 
}
 
}
  
// JS
+
function Palette( $content ) {
var extraJS = mw.util.getParamValue( 'withJS' );
 
if ( extraJS ) {
 
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
 
importScript( extraJS );
 
} else {
 
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
 
}
 
}
 
  
/**
+
var $tables = $content.find( 'table.collapsible' );
* Import more specific scripts if necessary
+
var groups = {};
*/
 
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' || mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
 
    /* scripts specific to editing pages */
 
    importScript( 'MediaWiki:Common.js/edit.js' );
 
} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
 
    /* watchlist scripts */
 
    importScript( 'MediaWiki:Common.js/watchlist.js' );
 
}
 
if ( mw.config.get( 'wgNamespaceNumber' ) === 6 ) {
 
    /* file description page scripts */
 
    importScript( 'MediaWiki:Common.js/file.js' );
 
}
 
  
/**
+
$tables.each( function( _, table ) {
* Load scripts specific to Internet Explorer
+
var group = table.dataset.autocollapseGroup || '__default__';
*/
+
groups[group] = ( groups[group] || 0 ) + 1;
if ( $.client.profile().name === 'msie' ) {
+
} );
    importScript( 'MediaWiki:Common.js/IEFixes.js' );
 
}
 
  
/**
+
$tables.each( function( _, table ) {
* Fix for Windows XP Unicode font rendering
+
var $table = $( table );
*/
 
if ( navigator.appVersion.search(/windows nt 5/i) !== -1 ) {
 
    mw.util.addCSS( '.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; } ' +
 
                '.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; } ' );
 
}
 
  
/**
+
var group = table.dataset.autocollapseGroup || '__default__';
* WikiMiniAtlas
+
var autoCollapse = groups[group] > Palette_max;
*
+
var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );
* Description: WikiMiniAtlas is a popup click and drag world map.
 
*              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.
 
*              See [[Meta:WikiMiniAtlas]] for more information.
 
* Maintainers: [[User:Dschwen]]
 
*/
 
( function () {
 
    var require_wikiminiatlas = false;
 
    var coord_filter = /geohack/;
 
    $( document ).ready( function() {
 
        $( 'a.external.text' ).each( function( key, link ) {
 
            if ( link.href && coord_filter.exec( link.href ) ) {
 
                require_wikiminiatlas = true;
 
                // break from loop
 
                return false;
 
            }
 
        } );
 
        if ( $( 'div.kmldata' ).length ) {
 
            require_wikiminiatlas = true;
 
        }
 
        if ( require_wikiminiatlas ) {
 
            mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
 
        }
 
    } );
 
} )();
 
  
/**
+
// le modèle dispose d'une classe "navbox-title",
* Interwiki links to featured articles ***************************************
+
// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
*
+
$table.find( 'tr:first th:first' ).prepend(
* Description: Highlights interwiki links to featured articles (or
+
$( '<span class="navboxToggle">\u00a0</span>' ).append(
*              equivalents) by changing the bullet before the interwiki link
+
$( '<a href="javascript:">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function ( e ) {
*              into a star.
+
e.preventDefault();
* Maintainers: [[User:R. Koot]]
+
if ( this.textContent === Palette_Enrouler ) {
*/
+
this.textContent = Palette_Derouler;
function LinkFA() {
+
} else {
    if ( document.getElementById( 'p-lang' ) ) {
+
this.textContent = Palette_Enrouler;
        var InterwikiLinks = document.getElementById( 'p-lang' ).getElementsByTagName( 'li' );
+
}
 +
Palette_toggle( $table );
 +
} )
 +
)
 +
);
 +
if ( collapsed ) {
 +
Palette_toggle( $table );
 +
}
 +
} );
  
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
+
// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
            var className = InterwikiLinks[i].className.match(/interwiki-[-\w]+/);
+
// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
            if ( document.getElementById( className + '-fa' ) ) {
+
$content.find( '.navbox-title' )
                InterwikiLinks[i].className += ' FA';
+
.click( function ( e ) {
                InterwikiLinks[i].title = 'This is a featured article in this language.';
+
if ( $( e.target ).closest( 'a' ).length ) {
            } else if ( document.getElementById( className + '-ga' ) ) {
+
return;
                InterwikiLinks[i].className += ' GA';
+
}
                InterwikiLinks[i].title = 'This is a good article in this language.';
+
$( this ).find( '.navboxToggle a' ).click();
            }
+
} )
        }
+
.css( 'cursor', 'pointer' );
    }
 
 
}
 
}
 
+
mw.hook( 'wikipage.content' ).add( Palette );
mw.hook( 'wikipage.content' ).add( LinkFA );
 
  
 
/**
 
/**
* Collapsible tables *********************************************************
+
* Boîtes déroulantes
*
+
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
* Description: Allows tables to be collapsed, showing only the header. See
+
*/
*              [[Wikipedia:NavFrame]].
 
* Maintainers: [[User:R. Koot]]
 
*/
 
  
var autoCollapse = 2;
+
var BoiteDeroulante_Derouler = '[afficher]';
var collapseCaption = 'hide';
+
var BoiteDeroulante_Enrouler = '[masquer]';
var expandCaption = 'show';
 
  
window.collapseTable = function ( tableIndex ) {
+
function BoiteDeroulante_toggle(NavToggle){
     var Button = document.getElementById( 'collapseButton' + tableIndex );
+
     var NavFrame = NavToggle.parentNode;
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
  
    if ( !Table || !Button ) {
+
var caption = [];
        return false;
+
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
    }
+
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
  
    var Rows = Table.rows;
+
var $NavContent = $(NavFrame).find('.NavContent').first();
    var i;
 
  
    if ( Button.firstChild.data === collapseCaption ) {
+
if ( NavToggle.textContent === caption[1] ) {
        for ( i = 1; i < Rows.length; i++ ) {
+
         NavToggle.textContent = caption[0];
            Rows[i].style.display = 'none';
+
$NavContent.hide();
        }
+
} else {
        Button.firstChild.data = expandCaption;
+
NavToggle.textContent = caption[1];
    } else {
+
$NavContent.show();
        for ( i = 1; i < Rows.length; i++ ) {
+
}
            Rows[i].style.display = Rows[0].style.display;
 
        }
 
        Button.firstChild.data = collapseCaption;
 
    }
 
};
 
 
 
function createCollapseButtons() {
 
    var tableIndex = 0;
 
    var NavigationBoxes = {};
 
    var Tables = document.getElementsByTagName( 'table' );
 
    var i;
 
 
 
    function handleButtonLink( index, e ) {
 
         window.collapseTable( index );
 
        e.preventDefault();
 
    }
 
 
 
    for ( i = 0; i < Tables.length; i++ ) {
 
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
 
 
 
            /* only add button and increment count if there is a header row to work with */
 
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
 
            if ( !HeaderRow ) continue;
 
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
 
            if ( !Header ) continue;
 
 
 
            NavigationBoxes[ tableIndex ] = Tables[i];
 
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
 
 
            var Button    = document.createElement( 'span' );
 
            var ButtonLink = document.createElement( 'a' );
 
            var ButtonText = document.createTextNode( collapseCaption );
 
 
 
            Button.className = 'collapseButton';  /* Styles are declared in Common.css */
 
 
 
            ButtonLink.style.color = Header.style.color;
 
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
 
            ButtonLink.setAttribute( 'href', '#' );
 
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
 
            ButtonLink.appendChild( ButtonText );
 
 
 
            Button.appendChild( document.createTextNode( '[' ) );
 
            Button.appendChild( ButtonLink );
 
            Button.appendChild( document.createTextNode( ']' ) );
 
 
 
            Header.insertBefore( Button, Header.firstChild );
 
            tableIndex++;
 
        }
 
    }
 
 
 
    for ( i = 0;  i < tableIndex; i++ ) {
 
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
 
            window.collapseTable( i );
 
        }
 
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
 
            var element = NavigationBoxes[i];
 
            while ((element = element.parentNode)) {
 
                if ( $( element ).hasClass( 'outercollapse' ) ) {
 
                    window.collapseTable ( i );
 
                    break;
 
                }
 
            }
 
        }
 
    }
 
 
}
 
}
  
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
+
function BoiteDeroulante( $content ) {
 
 
/**
 
* Dynamic Navigation Bars (experimental)
 
*
 
* Description: See [[Wikipedia:NavFrame]].
 
* Maintainers: UNMAINTAINED
 
*/
 
 
 
/* set up the words in your language */
 
var NavigationBarHide = '[' + collapseCaption + ']';
 
var NavigationBarShow = '[' + expandCaption + ']';
 
 
 
/**
 
* Shows and hides content and picture (if available) of navigation bars
 
* Parameters:
 
*    indexNavigationBar: the index of navigation bar to be toggled
 
**/
 
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
 
    var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
 
    var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
 
    var NavChild;
 
 
 
    if ( !NavFrame || !NavToggle ) {
 
        return false;
 
    }
 
  
    /* if shown now */
+
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
    if ( NavToggle.firstChild.data === NavigationBarHide ) {
+
var CustomTexts, Derouler, Enrouler, NavToggle;
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
 
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
 
                NavChild.style.display = 'none';
 
            }
 
        }
 
    NavToggle.firstChild.data = NavigationBarShow;
 
  
    /* if hidden now */
+
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
    } else if ( NavToggle.firstChild.data === NavigationBarShow ) {
+
CustomTexts = NavFrame.title.split("/");
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
+
Derouler = CustomTexts[0];
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
+
Enrouler = CustomTexts[1];
                NavChild.style.display = 'block';
+
} else {
            }
+
Derouler = BoiteDeroulante_Derouler;
        }
+
Enrouler = BoiteDeroulante_Enrouler;
        NavToggle.firstChild.data = NavigationBarHide;
+
}
    }
+
NavFrame.title = '';
 +
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
 +
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
  
    event.preventDefault();
+
NavToggle = document.createElement("a");
};
+
NavToggle.className = 'NavToggle';
 +
NavToggle.href = 'javascript:';
 +
NavToggle.onclick = function (e) {
 +
e.preventDefault();
 +
BoiteDeroulante_toggle(e.target);
 +
};
 +
NavToggle.textContent = Enrouler;
  
/* adds show/hide-button to navigation bars */
+
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
function createNavigationBarToggleButton() {
 
    var indexNavigationBar = 0;
 
    var NavFrame;
 
    var NavChild;
 
    /* iterate over all < div >-elements */
 
    var divs = document.getElementsByTagName( 'div' );
 
    for ( var i = 0; (NavFrame = divs[i]); i++ ) {
 
        /* if found a navigation bar */
 
        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
 
  
            indexNavigationBar++;
+
BoiteDeroulante_toggle(NavToggle);
            var NavToggle = document.createElement( 'a' );
+
} );
            NavToggle.className = 'NavToggle';
 
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
 
            NavToggle.setAttribute( 'href', '#' );
 
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );
 
  
            var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
+
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
            /**
+
$content.find( '.NavHead' )
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
+
.click( function ( e ) {
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
+
if ( $( e.target ).closest( 'a' ).length ) {
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
+
return;
            * the content visible without JavaScript support), the new recommended way is to add the class
+
}
            * "collapsed" to the NavFrame itself, just like with collapsible tables.
+
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
            */
+
if ( toggle ) {
            for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
+
toggle.click(); // pas du jquery, mais du vanilla js
                if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
+
}
                    if ( NavChild.style.display === 'none' ) {
+
} )
                        isCollapsed = true;
+
    .css( 'cursor', 'pointer' );
                    }
 
                }
 
            }
 
            if ( isCollapsed ) {
 
                for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
 
                    if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
 
                        NavChild.style.display = 'none';
 
                    }
 
                }
 
            }
 
            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );
 
            NavToggle.appendChild( NavToggleText );
 
 
 
            /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
 
            for( var j = 0; j < NavFrame.childNodes.length; j++ ) {
 
                if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
 
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
 
                    NavFrame.childNodes[j].appendChild( NavToggle );
 
                }
 
            }
 
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
 
        }
 
    }
 
 
}
 
}
  
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
+
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
  
 
/**
 
/**
* Uploadwizard_newusers
+
* FIN : Boîtes déroulantes
* Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
+
*/
*
 
* Maintainers: [[User:Krimpet]]
 
*/
 
function uploadwizard_newusers() {
 
    if ( mw.config.get( 'wgNamespaceNumber' ) === 4 && mw.config.get( 'wgTitle' ) === 'Upload' && mw.config.get( 'wgAction' ) === 'view' ) {
 
        var oldDiv = document.getElementById( 'autoconfirmedusers' ),
 
            newDiv = document.getElementById( 'newusers' );
 
        if ( oldDiv && newDiv ) {
 
            var userGroups = mw.config.get( 'wgUserGroups' );
 
            if ( userGroups ) {
 
                for ( var i = 0; i < userGroups.length; i++ ) {
 
                    if ( userGroups[i] === 'autoconfirmed' ) {
 
                        oldDiv.style.display = 'block';
 
                        newDiv.style.display = 'none';
 
                        return;
 
                    }
 
                }
 
            }
 
            oldDiv.style.display = 'none';
 
            newDiv.style.display = 'block';
 
            return;
 
        }
 
    }
 
}
 
 
 
$(uploadwizard_newusers);
 
 
 
/**
 
* Magic editintros ****************************************************
 
*
 
* Description: Adds editintros on disambiguation pages and BLP pages.
 
* Maintainers: [[User:RockMFR]]
 
*/
 
function addEditIntro( name ) {
 
    $( '.mw-editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {
 
        el.href = $( this ).attr( 'href' ) + '&editintro=' + name;
 
    } );
 
}
 
 
 
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
 
    $( function () {
 
        if ( document.getElementById( 'disambigbox' ) ) {
 
            addEditIntro( 'Template:Disambig_editintro' );
 
        }
 
    } );
 
 
 
    $( function () {
 
        var cats = document.getElementById( 'mw-normal-catlinks' );
 
        if ( !cats ) {
 
            return;
 
        }
 
        cats = cats.getElementsByTagName( 'a' );
 
        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
+
  * Ajouter un bouton à la fin de la barre d'outils
* Maintainers: [[User:TheDJ]]
 
 
  */
 
  */
if ( document.location && document.location.protocol  && document.location.protocol === 'https:' ) {
+
if ( typeof addCustomButton === 'undefined' ) {
    /* New secure servers */
+
mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
    importScript( 'MediaWiki:Common.js/secure new.js' );
+
if ( mw.toolbar ) {
 +
mw.toolbar.addButton( {
 +
imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
 +
speedTip: speedTip,
 +
tagOpen: tagOpen,
 +
tagClose: tagClose,
 +
sampleText: sampleText,
 +
imageId: imageId
 +
} );
 +
}
 +
}, 'Use mw.toolbar.addButton instead.' );
 
}
 
}
  
/* End of mw.loader.using callback */
+
/*
} );
+
Bilingual links
/* DO NOT ADD CODE BELOW THIS LINE */
+
Functions through the DoubleWiki extension.  
 +
Author: wikisource:fr:ThomasV, jQuery version by wikipedia:en:GreenReaper
 +
*/
 +
$(function(){
 +
    var doc_url = document.URL;
 +
    // iterate over all interlanguage links
 +
    $('.interlanguage-link>a[hreflang]').each(function() {
 +
      var lang = this.getAttribute("hreflang");
 +
      var qm = doc_url.indexOf( doc_url.indexOf('?title=') != -1 ? '&match=' : '?' );
 +
      var url = doc_url+"?match="+lang;
 +
      if( qm != -1 ) url = doc_url.substring(0,qm)+"?match="+lang;
 +
      this.outerHTML += "<a href='"+url+"'> ⇔</a>";
 +
    })
 +
})

Version actuelle datée du 28 septembre 2020 à 20:23

/*
 * Use Gadgets whenever possible to minimize loading for all users for every page.
 * Wait for mediawiki.util to be ready because some things assume its availability.
 */

/**
 * Boîtes déroulantes
 *
 * Pour [[Modèle:Méta palette de navigation]]
 */

var Palette_Derouler = '[afficher]';
var Palette_Enrouler = '[masquer]';

var Palette_max = 1;

function Palette_toggle( $table ) {
	$table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' );
}

function Palette( $content ) {

	var $tables = $content.find( 'table.collapsible' );
	var groups = {};

	$tables.each( function( _, table ) {
		var group = table.dataset.autocollapseGroup || '__default__';
		groups[group] = ( groups[group] || 0 ) + 1;
	} );

	$tables.each( function( _, table ) {
		var $table = $( table );

		var group = table.dataset.autocollapseGroup || '__default__';
		var autoCollapse = groups[group] > Palette_max;
		var collapsed = $table.hasClass( 'collapsed' ) || ( autoCollapse && $table.hasClass( 'autocollapse' ) );

		// le modèle dispose d'une classe "navbox-title",
		// sauf que les palettes "inlinées" (e.g. « {| class="navbox collapsible collapsed" ») n'ont pas cette classe
		$table.find( 'tr:first th:first' ).prepend(
			$( '<span class="navboxToggle">\u00a0</span>' ).append(
				$( '<a href="javascript:">' + (collapsed ? Palette_Derouler : Palette_Enrouler) + '</a>' ).click( function ( e ) {
					e.preventDefault();
					if ( this.textContent === Palette_Enrouler ) {
						this.textContent = Palette_Derouler;
					} else {
						this.textContent = Palette_Enrouler;
					}
					Palette_toggle( $table );
				} )
			)
		);
		if ( collapsed ) {
			Palette_toggle( $table );
		}
	} );

	// permet de dérouler/enrouler les palettes en cliquant n'importe où sur l'entête
	// (utilisation de la classe "navbox-title", comme ça seules les vraies palettes utilisant le modèle sont ciblées)
	$content.find( '.navbox-title' )
		.click( function ( e ) {
			if ( $( e.target ).closest( 'a' ).length ) {
				return;
			}
			$( this ).find( '.navboxToggle a' ).click();
		} )
		.css( 'cursor', 'pointer' );
}
mw.hook( 'wikipage.content' ).add( Palette );

/**
* Boîtes déroulantes
* Source : https://en.wikipedia.org/wiki/MediaWiki:Common.js
*/

var BoiteDeroulante_Derouler = '[afficher]';
var BoiteDeroulante_Enrouler = '[masquer]';

function BoiteDeroulante_toggle(NavToggle){
    var NavFrame = NavToggle.parentNode;

	var caption = [];
	caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
	caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;

	var $NavContent = $(NavFrame).find('.NavContent').first();

	if ( NavToggle.textContent === caption[1] ) {
        NavToggle.textContent = caption[0];
		$NavContent.hide();
	} else {
		NavToggle.textContent = caption[1];
		$NavContent.show();
	}
}

function BoiteDeroulante( $content ) {

	$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
		var CustomTexts, Derouler, Enrouler, NavToggle;

		if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
			CustomTexts = NavFrame.title.split("/");
			Derouler = CustomTexts[0];
			Enrouler = CustomTexts[1];
		} else {
			Derouler = BoiteDeroulante_Derouler;
			Enrouler = BoiteDeroulante_Enrouler;
		}
		NavFrame.title = '';
		NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
		NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;

		NavToggle = document.createElement("a");
		NavToggle.className = 'NavToggle';
		NavToggle.href = 'javascript:';
		NavToggle.onclick = function (e) {
			e.preventDefault();
			BoiteDeroulante_toggle(e.target);
		};
		NavToggle.textContent = Enrouler;

		NavFrame.insertBefore(NavToggle, NavFrame.firstChild);

		BoiteDeroulante_toggle(NavToggle);
	} );

	// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
	$content.find( '.NavHead' )
		.click( function ( e ) {
			if ( $( e.target ).closest( 'a' ).length ) {
				return;
			}
			var toggle = $( this ).siblings( 'a.NavToggle' )[0];
			if ( toggle ) {
				toggle.click(); // pas du jquery, mais du vanilla js
			}
		} )
	    .css( 'cursor', 'pointer' );
}

mw.hook( 'wikipage.content' ).add( BoiteDeroulante );

/**
* FIN : Boîtes déroulantes
*/

/**
 * Ajouter un bouton à la fin de la barre d'outils
 */
if ( typeof addCustomButton === 'undefined' ) {
	mw.log.deprecate( window, 'addCustomButton', function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId ) {
		if ( mw.toolbar ) {
			mw.toolbar.addButton( {
				imageFile: imageFile.replace( /^http:(\/\/upload\.wikimedia\.org\/)/, '$1' ),
				speedTip: speedTip,
				tagOpen: tagOpen,
				tagClose: tagClose,
				sampleText: sampleText,
				imageId: imageId
			} );
		}
	}, 'Use mw.toolbar.addButton instead.' );
}

/*
Bilingual links
Functions through the DoubleWiki extension. 
Author: wikisource:fr:ThomasV, jQuery version by wikipedia:en:GreenReaper
*/
$(function(){
    var doc_url = document.URL;
    // iterate over all interlanguage links
    $('.interlanguage-link>a[hreflang]').each(function() {
      var lang = this.getAttribute("hreflang");
      var qm = doc_url.indexOf( doc_url.indexOf('?title=') != -1 ? '&match=' : '?' );
      var url = doc_url+"?match="+lang;
      if( qm != -1 ) url = doc_url.substring(0,qm)+"?match="+lang;
      this.outerHTML += "<a href='"+url+"'> ⇔</a>";
    })
})