Utilisateur:ContributorQ/scripts/Gadget-Relecture.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.// Gadget-Relecture.js - Adds counters to the "WP:FdN/Relecture" and "Discussion Wikipédia:WikiMOOC/Relecture" pages on fr.wikipedia.org
// 27/11/2014 - This is a "Utilisateur:UserName/common.js" add-on.
// Last revison : march 30 2017.
// Dependencies : implicit 'mediawiki' and 'jquery' objects.
// Distributed under the terms of the GNU GPLv2 license: http://www.gnu.org/licenses/gpl-2.0.html
// Copyright (c) ContributorQ (2014-2015).
// The script modifies the pages "Wikipédia:Forum des nouveaux/relecture" and "Discussion Wikipédia:WikiMOOC/Relecture" only.
if ( mw
&& mw.config.get( 'wgAction' ) != 'edit'
&& mw.config.get( 'wgAction' ) != 'submit'
&& ( ( mw.config.get( 'wgTitle' ) == 'Forum des nouveaux/relecture'
&& mw.config.get( 'wgNamespaceNumber' ) == 4 )
|| ( mw.config.get( 'wgTitle' ) == 'WikiMOOC/Relecture'
&& mw.config.get( 'wgNamespaceNumber' ) == 5 ) ) ) {
$( document ).ready( function () {
var $requestsEntries,
$requestsHeaders,
undefinedStatus,
$requestStatus,
searchRequestStatus,
$requestStatusColor,
newColor,
colors,
statusTitle,
htmlBlock;
// Extracts requests titles from the current page's TOC.
$requestsEntries = $( '#toc' ).find( 'ul:first' ).children( 'li' );
if ( $requestsEntries.length > 0 ) {
// Gets the requests' headers.
$requestsHeaders = $( '#mw-content-text > div.mw-parser-output' ).children( 'h2' );
colors = [];
// Function to search for the current request status which corresponds to a div element with a style attribute.
searchRequestStatus = function( statusTag ) {
var ok = false, loopsCount = 0;
do {
loopsCount++;
if ( statusTag.length > 0 && statusTag.is( 'div' ) && statusTag.attr( 'style' ) !== undefined ) {
ok = true;
}
else {
statusTag = statusTag.next();
if ( statusTag.length > 0 && statusTag.is( 'h2' ) ) {
ok = true;
}
}
if ( loopsCount > 7 ) {
break;
}
} while ( !ok );
return statusTag;
};
$requestsEntries.each( function ( requestNum ) {
// Search for the current request status which corresponds to a div element with a style attribute.
$requestStatus = null;
if ( $requestsHeaders.eq( requestNum ).length > 0 ) {
$requestStatus = searchRequestStatus( $requestsHeaders.eq( requestNum ).next() );
}
if ( $requestStatus !== null /** && $requestStatus.length > 0 **/ ) {
undefinedStatus = false;
// Gets the status color.
$requestStatusColor = $requestStatus.css( 'border-left-color' );
// An "already answered" banner is set.
if ( $requestStatusColor === 'rgb(255, 255, 255)' || $requestStatusColor === '#fff' ) {
$requestStatusColor = $requestStatus.css( 'background-color' );
}
else if ( $requestStatusColor === 'rgb(0, 0, 0)' || $requestStatusColor === '#000000' ) {
// Bogue : no div or messy style attribute.
$requestStatusColor = 'Grey';
undefinedStatus = true;
}
// Inserts status indicator before the current request title in the TOC.
this.insertAdjacentHTML( 'afterbegin', '<span style="border-left: 6px solid ' + $requestStatusColor + ';"> </span> ' );
// Counts all the status occurrences.
newColor = true;
if ( colors.length > 0 ) {
$.each( colors, function( idx, elt ) {
if ( colors[idx].colorName == $requestStatusColor ) {
colors[idx].counter += 1;
newColor = false;
return false;
}
});
}
if ( newColor ) {
statusTitle = ( undefinedStatus ) ? 'Statut non identifié' : $requestStatus.text();
colors.push( { colorName: $requestStatusColor, counter: 1, colorTitle: statusTitle } );
}
}
else {
this.insertAdjacentHTML( 'afterbegin', '<span style="border-left: 6px solid Red;"> </span> ' );
}
});
// Display data on header's page.
htmlBlock = '<div style="margin-right: 4px; text-align: right;">';
$.each( colors, function( idx, elt ) {
htmlBlock += '<span title="' + colors[idx].colorTitle + '" style="padding-right: 16px; border-left: 6px solid ' + colors[idx].colorName + ';"> ' + colors[idx].counter + '</span>';
});
htmlBlock += '</div>';
document.getElementById( 'contentSub' ).insertAdjacentHTML( 'beforeend', htmlBlock );
}
});
}