MediaWiki:Gadget-FlowDeluxe.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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/*
--------------------------------------------------------------------------------------------------------
AVERTISSEMENT : les pages de discussions structurées (Flow) sont dépréciées et vont être retirées en 2024
cf : https://www.mediawiki.org/wiki/Structured_Discussions/Deprecation

Le gadget est donc aussi voué à être supprimé
--------------------------------------------------------------------------------------------------------

Code à inclure dans le common.js depuis wikipédia.fr
obtenir('FlowDeluxe');

Depuis un autre wiki
mw.loader.load("https://fr.wikipedia.org/w/index.php?title=MediaWiki:Gadget-FlowDeluxe.js&action=raw&ctype=text/javascript");


Documentation complète : https://www.mediawiki.org/wiki/Help:Structured_Discussions/FlowDeluxe/fr

//Options Flow Deluxe à inclure également :
flowDeluxeSujetsOuverts = "#FDE18C"; //Couleur des sujets ouverts
flowDeluxeSujetsClos = "rgba(60, 207, 90, 0.13)"; //Couleur des sujets fermés
flowDeluxeDiscuterContributions = true; //Voir en permanence les liens (discuter | contributions)
flowDeluxeDateComplete = true; //Voir en permanence les dates complètes en plus du texte "il y a X jours"
flowDeluxeBoutonsResumes = true; //Barre d'insertion rapide de modèles de résumé
flowDeluxeIndentationColors = true; //Indentation colorée comme dans l'ancien système de discussions
flowDeluxeNeverHide = true; //Ne jamais cacher les sujets flow, même ceux marqués comme étant résolus
flowDeluxeButtonsInline = true; //Bouttons, historique, liens du sujet en une seule ligne
*/

/* globals mw, ve, $ */

var flowDeluxeSujetsOuverts = typeof window.flowDeluxeSujetsOuverts !== 'undefined' ? window.flowDeluxeSujetsOuverts : false;
var flowDeluxeSujetsClos = typeof window.flowDeluxeSujetsClos !== 'undefined' ? window.flowDeluxeSujetsClos : false;
var flowDeluxeDiscuterContributions = typeof window.flowDeluxeDiscuterContributions !== 'undefined' ? window.flowDeluxeDiscuterContributions : false;
var flowDeluxeDateComplete = typeof window.flowDeluxeDateComplete !== 'undefined' ? window.flowDeluxeDateComplete : false;
var flowDeluxeBoutonsResumes = typeof window.flowDeluxeBoutonsResumes !== 'undefined' ? window.flowDeluxeBoutonsResumes : false;
var flowDeluxeIndentationColors = typeof window.flowDeluxeIndentationColors !== 'undefined' ? window.flowDeluxeIndentationColors : false;
var flowDeluxeNeverHide = typeof window.flowDeluxeNeverHide !== 'undefined' ? window.flowDeluxeNeverHide : false;
var flowDeluxeButtonsInline = typeof window.flowDeluxeButtonsInline !== 'undefined' ? window.flowDeluxeButtonsInline : false;

var resumesPredefinis = [{
		libelle:'Répondu',
		modele:'Répondu'
	},{
		libelle:'Lu',
		modele:'Lu'
	},{
		libelle:'Fait',
		modele:'Fait.'
	},{
		libelle:'Ok',
		modele:'Ok'
	},{
		libelle:'En attente réponse',
		modele:'En attente d\'une réponse'
	},{
		libelle:'Publication',
		modele:'Publication'
	},{
		libelle:'FDN autre avis',
		modele:'Forum des nouveaux autre avis'
	},{
		libelle:'FDN hors-sujet',
		modele:'Forum des nouveaux hors-sujet'
	},{
		libelle:'FDN en attente',
		modele:'Forum des nouveaux en attente'
	},{
		libelle:'FDN en cours',
		modele:'Forum des nouveaux en cours'
	}
	];

function changeTitleColor(coll, color){
	var element;
    for(var i=0, len=coll.length; i<len; i++) {
    	element = coll[[i]];
    	for(var j=0, lenj=element.children.length; j<lenj; j++){
    		if (element.children[j] && element.children[j].className === "flow-topic-titlebar")
    			element.children[j].style["background-color"] = color;
    	}
    }
}

function showTexte(elements){
	for(var i=0, len=elements.length; i<len; i++){
		elements[i].style.opacity = 1;
	}
}

function showCompleteDate(elements){
	$(".flow-topic-meta").removeClass("flow-timestamp");
	$(".flow-timestamp-user-formatted, .flow-timestamp-ago").css('display', 'inline');

    $('.flow-timestamp-user-formatted').text(function(i, oldText) {
        return oldText.indexOf(" • ") < 0 ? oldText + ' • ' : oldText;
    });
}

function ajouterResume(texte,parent){
	var zones = parent.getElementsByTagName("textarea");

	if(zones.length) {
		if (zones[0]) {
			zones[0].value += "{{"+texte+"}}";
		}
	} else {
		insertContent([{
		      type: 'mwTransclusionBlock',
		      attributes: {
		        mw: {
		          parts: [
		            {
		              template: {
		                target: {
		                  href: mw.config.get('wgFormattedNamespaces')[10] + ':' + texte,
		                  wt: texte
		                },
		                params: { }
		              }
		            }
		          ]
		        }
		      }
		    }]);
	}
}

function lienBar(resume,parent) {
 	var li = document.createElement('li');
 	var a = document.createElement('a');
 	
 	a.innerHTML = resume.libelle;
	a.setAttribute("title", "Ajouter ce modèle au résumé de la discussion");
	a.style.cursor = "pointer";
	
	a.addEventListener("click", function(event) {
	  ajouterResume(resume.modele,parent);
	});
	
	li.appendChild(a);
	
	return li;
}

function addBoutonsResumes() {
	var resumes = document.getElementsByClassName('flow-ui-editTopicSummaryWidget');

	for(var i=0, len=resumes.length; i<len; i++) {
		 var element = resumes[i];
 		if(element.firstChild && element.firstChild.className != 'FlowDeluxeResume') {
 			var bouttonBar = document.createElement('div');
 			bouttonBar.innerHTML = "Résumés prédéfinis :";
 			bouttonBar.className = "FlowDeluxeResume";
 			
 			var ul = document.createElement('ul');
 			ul.className = 'liste-horizontale';
 			ul.style.display = 'inline';
 			ul.style.marginLeft = '3px';
 			
 			for(var index=0; index<resumesPredefinis.length; index++) {
 				var li = lienBar(resumesPredefinis[index],element);
 				ul.appendChild(li);
 			}
 			
 			bouttonBar.appendChild(ul);
 			
 			element.insertBefore(bouttonBar, element.firstChild);
 		}
	}
}

function insertContent (content, annotate) {
        var newRange, range = {
        	start : 0
        };
        
	    var surfaceModel = ve.init.target.getSurface().getModel();
        var collapse = surfaceModel.getFragment().collapseToEnd();
        var doc = collapse.getDocument();
     
        var offset = range.start;
   
        if (content.length) {
            var tx = ve.dm.TransactionBuilder.static.newFromInsertion(doc, offset, content);
            newRange = tx.getModifiedRange(doc, null);
	        collapse.change(tx, newRange ? new ve.dm.LinearSelection(newRange) : new ve.dm.NullSelection());
        }
        return this;
}


function switchColor(color) {
	if (color == '#f5faff')
	   	return 'white';
	else
		return '#f5faff';
}

function indentPostWithColors() {
	var posts = document.getElementsByClassName('flow-post-main');
	var element;
	var color;
	
	for(var i=0, len=posts.length; i<len; i++) {
		element = posts[[i]];
		color = switchColor(color);
		element.style.backgroundColor = color;
		//element.style.padding = "5px";
	}
}

function neverHide() {
	$(".flow-post").show();
}

function buttonsInline() {
   var elements = document.getElementsByClassName('flow-list');
   
   for(var i=0, len=elements.length; i<len-1; i++) {
	   	if(elements[i].className.indexOf("moved-flow-list") < 0 && elements[i].innerHTML.indexOf("flow-ui-summarize-topic-link") > 0 ) {
	   		var parentItem = elements[i].parentElement;
			var grandParentItem = elements[i].parentElement.parentElement;
			grandParentItem.insertBefore(elements[i],null);
			elements[i].className = elements[i].className + " moved-flow-list";
			elements[i].style.fontSize= "13px";
			
			var sections = elements[i].getElementsByTagName( "section" );
			for(var j=0; j<sections.length; j++) {
				sections[j].style.display="inline";
			}
			
			var li = elements[i].getElementsByTagName( "li" );
			for(j=0; j<li.length; j++) {
				li[j].style.display="inline";
				li[j].getElementsByTagName("a")[0].style.paddingLeft="10px";
				li[j].getElementsByTagName("a")[0].style.paddingRight="0";
			}
			
			parentItem.remove();
	   }
   }
}

function applyChanges() {
	var sujets = $('.flow-topic:not(.flow-topic-moderatestate-lock)');
    var sujetsLocked = document.getElementsByClassName('flow-topic-moderatestate-lock');
    var usersDiscuterContribs = document.getElementsByClassName('mw-usertoollinks');
    var datesSujets = document.getElementsByClassName('flow-timestamp');

	if(flowDeluxeSujetsOuverts)
     changeTitleColor(sujets, flowDeluxeSujetsOuverts);
    if(flowDeluxeSujetsClos)
     changeTitleColor(sujetsLocked, flowDeluxeSujetsClos);
    if(flowDeluxeDiscuterContributions)
     showTexte(usersDiscuterContribs);
    if(flowDeluxeDateComplete)
     showCompleteDate(datesSujets);
    if(flowDeluxeBoutonsResumes)
     addBoutonsResumes();
    if(flowDeluxeIndentationColors)
     indentPostWithColors();
    if(flowDeluxeNeverHide)
     neverHide();
    if(flowDeluxeButtonsInline)
     buttonsInline();
     
    setTimeout(applyChanges,2000); /* rappel toutes les 2 secondes (TODO: voir si on ne peut pas mieux gérer le cas du chargement des sujets les plus anciens)*/
}

/*
 * Activation du gadget
 */
if (document.getElementsByClassName('flow-component').length) {
  applyChanges();
}