Aucun résumé des modifications Balise : sourceedit |
Aucun résumé des modifications |
||
Ligne 27 : | Ligne 27 : | ||
*/ |
*/ |
||
− | var |
+ | var Palette_Derouler = '[afficher]'; |
− | var |
+ | var Palette_Enrouler = '[masquer]'; |
+ | |||
− | |||
− | var Palette_max = 1; |
+ | var Palette_max = 1; |
+ | |||
− | var Palette_index = -1; |
||
⚫ | |||
− | |||
+ | $table.find( 'tr:not(:first)' ).toggleClass( 'navboxHidden' ); |
||
⚫ | |||
− | var Button = document.getElementById( "collapseButton" + indexPalette ); |
||
− | var Table = document.getElementById( "collapsibleTable" + indexPalette ); |
||
− | if ( !Table || !Button ) return false; |
||
− | var FirstRow = Table.getElementsByTagName("tr")[0]; |
||
− | var RowDisplay; |
||
⚫ | |||
− | RowDisplay = "none" |
||
⚫ | |||
− | }else{ |
||
− | RowDisplay = FirstRow.style.display; |
||
⚫ | |||
− | } |
||
− | var Row = FirstRow.nextSibling; |
||
− | while(Row){ |
||
− | if(Row.tagName && Row.tagName.toLowerCase() === "tr"){ |
||
− | Row.style.display = RowDisplay; |
||
− | } |
||
− | Row = Row.nextSibling; |
||
− | } |
||
⚫ | |||
− | |||
⚫ | |||
− | if(!Element) Element = document; |
||
− | var TableIndex = 0; |
||
− | var TableIndexes = new Array(); |
||
− | var Tables = Element.getElementsByTagName( "table" ); |
||
− | for ( var i = 0; i < Tables.length; i++ ) { |
||
− | if ( hasClass( Tables[i], "collapsible" ) ) { |
||
− | var Table = Tables[i]; |
||
− | var Header = Table.getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0]; |
||
− | /* only add button and increment count if there is a header row to work with */ |
||
− | if (Header) { |
||
− | TableIndex++ |
||
− | Palette_index++; |
||
− | TableIndexes[Palette_index] = Table; |
||
− | Table.setAttribute( "id", "collapsibleTable" + Palette_index ); |
||
− | var Button = document.createElement( "span" ); |
||
− | var ButtonLink = document.createElement( "a" ); |
||
− | var ButtonText = document.createTextNode( Palette_Enrouler ); |
||
− | Button.className = "navboxToggle"; |
||
− | ButtonLink.setAttribute( "id", "collapseButton" + Palette_index ); |
||
− | ButtonLink.setAttribute( "href", "javascript:Palette_toggle(" + Palette_index + ");" ); |
||
− | ButtonLink.appendChild( ButtonText ); |
||
− | Button.appendChild( ButtonLink ); |
||
− | Header.insertBefore( Button, Header.childNodes[0] ); |
||
− | } |
||
− | } |
||
− | } |
||
− | for(var index in TableIndexes){ |
||
− | var Table = TableIndexes[index]; |
||
⚫ | |||
− | Palette_toggle(index); |
||
− | } |
||
} |
} |
||
+ | |||
− | addOnloadHook(Palette); |
||
⚫ | |||
+ | |||
+ | 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; |
||
⚫ | |||
+ | |||
+ | // 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(); |
||
⚫ | |||
⚫ | |||
+ | } else { |
||
⚫ | |||
+ | } |
||
+ | 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 ); |
||
importArticles({ |
importArticles({ |
Version du 21 octobre 2020 à 21:38
/**
* Diverses fonctions manipulant les classes
* Utilise des expressions régulières et un cache pour de meilleures perfs
* isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211
* hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html
* surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions
*
* (provient du common.js de wikipedia.fr)
*/
function hasClass(node, className) {
var haystack = node.className;
if(!haystack) return false;
if (className === haystack) {
return true;
}
return (" " + haystack + " ").indexOf(" " + className + " ") > -1;
}
/**
* Boîtes déroulantes
*
* Pour [[Modèle:Méta palette de navigation]]
*
* (vient du common.js de wikipedia.fr)
*/
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 );
importArticles({
type: 'script',
articles: [
'u:dev:ExtendedNavigation/code.js'
]
});