MediaWiki:Common.js : Différence entre versions
(7 révisions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 3 : | Ligne 3 : | ||
* Wait for mediawiki.util to be ready because some things assume its availability. | * 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>"; | ||
+ | }) | ||
+ | }) |
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>"; }) })