MediaWiki:Gadget-FlowDeluxe.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./*
--------------------------------------------------------------------------------------------------------
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();
}