Aller au contenu

Utilisateur:ContributorQ/scripts/Gadget-Relecture.js

Une page de Wikipédia, l'encyclopédie libre.
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 + ';">&nbsp;</span>&nbsp;' );

					// 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;">&nbsp;</span>&nbsp;' );
				}
			});

			// 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 + ';">&nbsp;' + colors[idx].counter + '</span>';
			});

			htmlBlock += '</div>';
			document.getElementById( 'contentSub' ).insertAdjacentHTML( 'beforeend', htmlBlock );
		}
	});
}