Utilisateur:Louistisserand/Scripts/portail-eval.js

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.
//var cpeSpecialPage = "Spécial:Portail-éval";
var cpeSpecialPage = "Utilisateur:Louistisserand/Spécial/Portail-éval";

$(function () {
  mw.loader.using( 'mediawiki.util', function () {
    mw.util.addPortletLink('p-tb', mw.config.get("wgArticlePath").replace(/\$1/, cpeSpecialPage), 'Portail-éval', 'r-cpe', 'Portail-éval');
  });
});

if (mw.config.get("wgPageName") == cpeSpecialPage) {

/* Génération de la liste */

function cpeArticleLink(article) {
    return "<a href=\"" + mw.config.get("wgArticlePath").replace(/\$1/, encodeURIComponent(article)) + "\">" + mw.html.escape(article) + "</a>";
}

function cpeArticleActionLink(article) {
	//var encodeArticle= encodeURIComponent(article).replace(/'/g, "&apos;");
	var encodeArticle= encodeURIComponent(article.replace(/'/g, "&apos;"));
	var sOut="";
	//var sOut="<a href=\"#\" onclick=\"cpeCBArticle('" + encodeArticle + "');return false;\">Run JavaScript Code on " + encodeURIComponent(article) + "</a>";
	//console.log(sOut);
	return sOut;
    // --- problème avec la ligne qui suit: cas des titres d'article contenant un apostrophe '
	//return "<a href=\"#\" onclick=\"cpeCBArticle('" + encodeURIComponent(article) + "');return false;\">Run JavaScript Code on " + encodeURIComponent(article) + "</a>";

	//return "<a href=\"#\" onclick=\"function(){cpeCBArticle(\"" + encodeURIComponent(article) + "\");return false;}\">Run JavaScript Code on " + encodeURIComponent(article) + "</a>";
/***
    var CAT_EVAL_PREFIX = "Catégorie:Article ";
    var portail, catEval;

    portail = $('#cpePortail').val();
    if (portail == "") {
        return "Erreur : le champ 'Portail' est vide.";
    }
    if ($('#cpeCatTypeAuto').attr('checked')) {
        catEval = $('#cpeCatAuto').text();
        if (catEval.substr(0, CAT_EVAL_PREFIX.length) != CAT_EVAL_PREFIX) {
            return "Erreur : le champ 'Préfixe des catégories' n'est pas valide.";
        }
    } else {
        catEval = $("#cpeCatManuel").val();
        catEval = CAT_EVAL_PREFIX + catEval;
    }
    portail = portail.substr(0, 1).toUpperCase() + portail.substr(1);
    var directLink = location.protocol + mw.config.get("wgServer") + mw.config.get("wgScript")
        + "?title=" + encodeURIComponent(cpeSpecialPage)
        + "&portail=" + encodeURIComponent(portail)
        + "&cateval=" + encodeURIComponent(catEval.substr(CAT_EVAL_PREFIX.length))
		+ "&updatepage=" + encodeURIComponent(article);
    return "<a href=\"" + mw.html.escape(directLink) + "\">" + " change link :" + mw.html.escape(directLink) + "</a>";
	***/
}

function cpeReadCat(categ, callbackFun, progressFun) {
    var query = {format: 'json', action: 'query', list: 'categorymembers', cmtitle: categ, cmlimit: 500, rawcontinue: ''};   /* SLD : 500 => 4 = catastrophe */
    var catMembers = [];

    function readCatLoop(obj) {
        $.merge(catMembers, obj.query.categorymembers);
        progressFun(catMembers.length);
        if (obj["query-continue"]) {
            query.cmcontinue = obj["query-continue"].categorymembers.cmcontinue;
            $.getJSON(mw.util.wikiScript('api'), query, readCatLoop);
        } else {
            callbackFun(catMembers);
        }
    }

    $.getJSON(mw.util.wikiScript('api'), query, readCatLoop);
}

function cpeComputeLists(portail, evalCatPrefix, callbackFun) {
    var cpeImp = ["inconnue", "faible", "moyenne", "élevée", "maximum"];
    var cpeListePortail = new Object;
    var cpeListeEval = new Object;

    function initReadInfo(cat) {
        $("#cpeResult").html("Lecture de <tt>" + mw.html.escape(cat) + "</tt> <span id=\"cpeCatReadCount\"></span>");
    }
    function updateReadInfo(size) {
        $("#cpeCatReadCount").text("(" + size + " lus)");
    }

    function listeEval(index) {
        if (index < cpeImp.length) {
            initReadInfo(evalCatPrefix + " d'importance " + cpeImp[index]);
            cpeReadCat(evalCatPrefix + " d'importance " + cpeImp[index],
                function (catMembers) {
                    for (var i = 0; i < catMembers.length; i++) {
                        if (catMembers[i].ns == 1) {
                            var talkTitle = catMembers[i].title;
                            var title = talkTitle.substr(talkTitle.indexOf(":") + 1);
                            cpeListeEval[title] = true;
                        }
                    }
                    listeEval(index + 1);
                }, updateReadInfo
            );
        } else {
            callbackFun(cpeListePortail, cpeListeEval);
        }
    }

    initReadInfo("Catégorie:Portail:" + portail + "/Articles liés");
    cpeReadCat("Catégorie:Portail:" + portail + "/Articles liés",
        function (catMembers) {
            for (var i = 0; i < catMembers.length; i++) {
                cpeListePortail[catMembers[i].title] = true;
            }
            listeEval(0);
        }, updateReadInfo
    );
}

/* Formulaire */

var cpeTimeout = false, cpeUpdateCatId = 0, cpeCatCache = {};

function cpeCompute() {
    var CAT_EVAL_PREFIX = "Catégorie:Article ";
    var portail, catEval;

    portail = $('#cpePortail').val();
    if (portail === "") {
        $("#cpeResult").text("Erreur : le champ 'Portail' est vide.");
        return;
    }
    if ($('#cpeCatTypeAuto').attr('checked')) {
        catEval = $('#cpeCatAuto').text();
        if (catEval.substr(0, CAT_EVAL_PREFIX.length) != CAT_EVAL_PREFIX) {
            $("#cpeResult").text("Erreur : le champ 'Préfixe des catégories' n'est pas valide.");
            return;
        }
    } else {
        catEval = $("#cpeCatManuel").val();
        if (catEval === "") {
            $("#cpeResult").text("Erreur : le champ 'Préfixe des catégories' est vide.");

        }
        catEval = CAT_EVAL_PREFIX + catEval;
    }
    portail = portail.substr(0, 1).toUpperCase() + portail.substr(1);

    $("#cpeCompute").prop('disabled', true);

    cpeComputeLists(portail, catEval,
        function (listePortail, listeEval) {
    	var inputNB = parseInt($('#cpeRequestSize').val());  /* SLT */
    	if (isNaN(inputNB) || inputNB < 1) inputNB = 6; /* SLT */
            var directLink = location.protocol + mw.config.get("wgServer") + mw.config.get("wgScript")
                + "?title=" + encodeURIComponent(cpeSpecialPage)
                + "&portail=" + encodeURIComponent(portail)
                + "&cateval=" + encodeURIComponent(catEval.substr(CAT_EVAL_PREFIX.length));
            var html = "<p><small>Lien direct pour revenir à cette requête&nbsp;: <a href=\"" + mw.html.escape(directLink) + "\">" + mw.html.escape(directLink) + "</a></small></p>";
            html += '<p><a href="#" id="cpeDisplayWikicode" class="cpe-closed">Version en wikicode à copier-coller</a></p>';
            var list1 = '', list2 = '';
            var wikicodeList1 = '', wikicodeList2 = '';
            var listCount1 = 0, listCount2 = 0, maxListCount = inputNB; //4;   /* SLD : 500 => 4 */
            for (var article in listePortail) {
                if (!listeEval[article]) {
                    listCount1++;
                    if (listCount1 <= maxListCount) {
                        list1 += "<li>" + cpeArticleLink(article);
                        //
                        // --- try and add second link to action
                        list1 += " ";
                        list1 += cpeArticleActionLink(article);
                        //
                        wikicodeList1 += '*[[' + article + ']]\n';
                    }
                } else {  // added 3/5/2018 for dump of all articles related to portal
                    listCount2++;
                    if (listCount2 <= maxListCount) {
                        list2 += "<li>" + cpeArticleLink(article);
                        //
                    }					
				}
            }

            /***
            for (article in listeEval) {
                if (!listePortail[article]) {
                    listCount2++;
                    if (listCount2 <= maxListCount) {
                        list2 += "<li>" + cpeArticleLink(article);
                        wikicodeList2 += '*[[' + article + ']]\n';
                    }
                }
            }
            ***/

            function formatCount(c) {
                if (c === 0) {
                    return "Aucun article";
                } else if (c == 1) {
                    return "1 article";
                } else if (c <= maxListCount) {
                    return c + " articles";
                } else {
                    return c + " articles (seulement " + maxListCount + " affichés)";
                }
            }

            html += "<h2>Articles du portail non évalués</h2>"
                + "<p>" + formatCount(listCount1) + "</p><ul>" + list1 + "</ul>" //;
                //
                + "<h2>Articles du portail évalués </h2>"
                + "<p>" + formatCount(listCount2) + "</p><ul>" + list2 + "</ul>";
                //
                /***
                + "<h2>Articles évalués sans le portail</h2>"
                + "<p>" + formatCount(listCount2) + "</p><ul>" + list2 + "</ul>";
***/
            $("#cpeResult").html(html);
            $("#cpeCompute").prop('disabled', false);
            $("#cpeDisplayWikicode").click(function() {
                var link = $(this);
                link.toggleClass('cpe-closed cpe-opened');
                if (link.hasClass('cpe-opened')) {
                    link.after('<div id="cpeWikicodeDiv"><textarea id="cpeWikicode" cols="80" rows="25" readonly></textarea></div>');
                    $('#cpeWikicode').val('== Articles du portail non évalués ==\n' + wikicodeList1 + '\n== Articles évalués sans le portail ==\n' + wikicodeList2);
                } else {
                    $('#cpeWikicodeDiv').remove();
                }
            });
        }
    );
}

function cpeUpdateCatSpan() {
    var indexSel = $('#cpeCatTypeAuto').attr('checked') ? 0 : 1;
    $("#cpeCatAuto").css("display", indexSel == 0 ? "" : "none");
    $("#cpeCatManuelSpan").css("display", indexSel == 1 ? "" : "none");
}

function cpeInitForm(portail, catEval) {
    $('head').append('<style>'
        + '.cpe-closed {padding: 0 0 0 16px; background: url(//upload.wikimedia.org/wikipedia/commons/4/41/MediaWiki_Vector_skin_right_arrow.png) no-repeat left center;}'
        + '.cpe-opened {padding: 0 0 0 16px; background: url(//upload.wikimedia.org/wikipedia/commons/1/10/MediaWiki_Vector_skin_action_arrow.png) no-repeat left center;}'
        + '</style>');
    html = '<p>Ce formulaire sert à calculer la liste des articles qui ont un portail mais pas une évaluation, et réciproquement.</p>'
        + '<p>Portail (par exemple <i>Chemin de fer</i>)<br /><input id="cpePortail" size="64" value="'
        + mw.html.escape(portail) + '" /></p>'
        + '<p>Taille requete<br /><input id="cpeRequestSize" size="4" value="2" /></p>'
        + '<p>Préfixe des catégories liées à l\'évaluation (la casse doit être respectée ; par exemple <tt>Catégorie:Article <i>ferroviaire</i></tt>)<br />'
        + '<input name="cpeCatType" id="cpeCatTypeAuto" type="radio" ' + (catEval ? '' : 'checked="checked" ') + '/>'
        + '<label for="cpeCatTypeAuto">Automatique</label> '
        + '<input name="cpeCatType" id="cpeCatTypeManuel" type="radio" ' + (catEval ? 'checked="checked" ' : '') + '/>'
        + '<label for="cpeCatTypeManuel">Manuel</label><br />'
        + '<span id="cpeCatAuto" style="display:none"></span><span id="cpeCatManuelSpan" style="display:none"><tt>Catégorie:Article </tt>'
        + '<input size="40" id="cpeCatManuel" value="' + mw.html.escape(catEval) + '" /></span></p>'
        + '<p><input type="button" id="cpeCompute" onclick="cpeCompute();" value="Calculer" /></p><div id="cpeResult"></div>'
    $("#bodyContent").html(html);
    mw.loader.using(["jquery.ui"], function () {
        var inputPortail = $("#cpePortail");
        inputPortail.autocomplete({source:
            function (request, response) {
                if (/[{}|<>\[\]]/.test(request.term)) {
                    response([]);
                    return;
                }
                var prefix = "Portail " + request.term.substr(0, 1).toUpperCase() + request.term.substr(1);
                var query = {format: 'json', action: 'query', list: 'allpages', apprefix: prefix, apnamespace: 10, rawcontinue: ''};
                $.getJSON(mw.util.wikiScript('api'), query, function (obj) {
                    var portails = [];
                    for (var i = 0; i < obj.query.allpages.length; i++) {
                        var portail = obj.query.allpages[i].title;
                        portails.push(portail.substr(portail.indexOf(':') + 9));
                    }
                    if (portails.length == 1 && portails[0] == request.term) {
                        response([]);
                    } else {
                        response(portails);
                    }
                });
            }, select: cpeInvalidateCat});
        inputPortail.bind("change", cpeInvalidateCat);
        $("#cpeCatManuel").bind("change", function() {$("#cpeCatTypeManuel").prop('checked', true);});
        $("#cpeCatTypeAuto,#cpeCatTypeManuel").bind("change", cpeUpdateCatSpan);
        if (portail) cpeInvalidateCat();
        cpeUpdateCatSpan();
    });
}

function cpeActiveProject()
{
	//
 	var portail = $('#cpePortail').val();
	//
	//console.log("***** cpeActiveProject ***  portail : [" + portail + "] *****");
   for(var i=0; i<window.evaluation_multiprojets.length;i++)
   {
		if (portail==window.evaluation_multiprojets.project[i])
		{ 
			window.evaluation_multiprojets.state[t] = true;
			return;
		}
		else
		{
			window.evaluation_multiprojets.state[t] = false;
		}
			
        // if (window.evaluation_multiprojets.avancement[t] == null)
		//	 window.evaluation_multiprojets.avancement[t] ="?";
   }
	//
        var t = window.evaluation_multiprojets.project.length;
	//console.log("***** cpeActiveProject ***  portail : [" + portail + "] non trouvé parmi "+t+" *****");

        window.evaluation_multiprojets.project[t] = portail;
        window.evaluation_multiprojets.importance[t] = "?";
		window.evaluation_multiprojets.state[t] = true;
			
        window.evaluation_multiprojets.avancement[t] = null;
	
}

function cpeCBArticle(encodedArticle)
{
	//console.log("***** cpeCBArticle in "+encodedArticle+" (encodé) *****");
	var decodeArt=decodeURIComponent(encodedArticle);
	//console.log("***** cpeCBArticle in "+decodeArt+" (décodé) *****");
	var replacedArt=decodeArt.replace(/&apos;/g, "'");
	//console.log("***** cpeCBArticle in "+replacedArt+" (remplacé) *****");
	var article= encodeURIComponent(replacedArt);
	//var article=encodedArticle.replace(/"&apos;"/g, /'/);
	//console.log("***** cpeCBArticle décodé: "+article+" puis appel ev_initVars(); *****");

	ev_initVars();
	// --- 
	var portail = $('#cpePortail').val();
	//
	//console.log("***** cpeCBArticle ***  portail : [" + portail + "] *****");
	//
    var req=new XMLHttpRequest();
    var dummy = new Date().getTime();
	var discussionPage=mw.config.get( 'wgFormattedNamespaces' )[1]+":" + article;
	var decodedPage=mw.config.get( 'wgFormattedNamespaces' )[1]+":" + decodeURIComponent(article);
	//--// var forDump = mw.config.get( 'wgScript' ) +"?title="+ mw.config.get( 'wgFormattedNamespaces' )[1]+":" + encodeURIComponent( mw.config.get( 'wgPageName') )   + "&action=raw&_dum=" + dummy
	var toOpen = mw.config.get( 'wgScript' ) +"?title="+ discussionPage + "&action=raw&_dum=" + dummy
	//console.log("***** cpeCBArticle open demandé avec :["+toOpen+"]  *****");
	
   req.onreadystatechange = function()
   {
      if(req.readyState == 4)
      {
         if(req.status==200)
         {
			//console.log("***** cpeCBArticle open OK avec :["+toOpen+"] => appel ev_ExtractEvaluation *****");
            ev_ExtractEvaluation(req.responseText);

			//console.log("***** cpeCBArticle  appel ev_AddMyProjects(); *****");
            ev_AddMyProjects();
			cpeActiveProject();
			//console.log("***** cpeCBArticle  appel wpEditPage(); *****");
			wpEditPage(decodedPage, {}, ev_editFoo, ev_saveFoo, {});
			//console.log("***** cpeCBArticle  après wpEditPage(); *****");
            //??//ev_drawEvaluation();
			
         }
         else if(req.status==404) //la pdd n'existe pas
         {
			//console.log("***** cpeCBArticle open KO avec :["+toOpen+"] *****");
			//console.log("***** cpeCBArticle  appel ev_AddMyProjects(); *****");
            ev_AddMyProjects();
			cpeActiveProject();
			//console.log("***** cpeCBArticle  appel wpEditPage(); *****");
			wpEditPage(decodedPage, {}, ev_editFoo, ev_saveFoo, {});
			//console.log("***** cpeCBArticle  après wpEditPage(); *****");
            //??//ev_drawEvaluation();
         }
      }//fin readyState == 4
   };

	
	
	
	req.open("GET", toOpen , true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.send(null);
	
	return;
}

function cpeInvalidateCat() {
    if (cpeTimeout) clearTimeout(cpeTimeout);
    cpeUpdateCatId++;

    var portail = $('#cpePortail').val();
    if (portail == "") {
        $('#cpeCatAuto').text("");
    } else if (cpeCatCache[portail]) {
        $('#cpeCatAuto').html(cpeCatCache[portail]);
    } else {
        $('#cpeCatAuto').text("...");
        cpeTimeout = setTimeout(cpeUpdateCat, 300);
    }
}

function cpeUpdateCat() {
    var portail = $('#cpePortail').val();

    if (/[{}|<>\[\]]/.test(portail)) {
        $('#cpeCatAuto').text('');
        return;
    } else if (cpeCatCache[portail]) {
        $('#cpeCatAuto').html(cpeCatCache[portail]);
        return;
    }

    var initId = cpeUpdateCatId;
    $.getJSON(mw.util.wikiScript('api'),
        {format: 'json', action: 'expandtemplates', text: 'Article du projet {{ucfirst:' + portail + '}}'},
        function(obj) {
            var catPrefix = "Catégorie:" + obj.expandtemplates['*'];
            $.getJSON(mw.util.wikiScript('api'),
                {format: 'json', action: 'query', titles: catPrefix + " d'importance faible", prop: 'revisions', rvprop: 'timestamp'},
                function (obj) {
                    if (initId != cpeUpdateCatId) return;
                    var catPrefixHTML = '<span style="color:red">Impossible de trouver les catégories d\'évaluation</span>';
                    for (var pageId in obj.query.pages) {
                        if (pageId != "-1") {
                            catPrefixHTML = "<tt>" + mw.html.escape(catPrefix) + "</tt>";
                            break;
                        }
                    }
                    cpeCatCache[portail] = catPrefixHTML;
                    $('#cpeCatAuto').html(catPrefixHTML);
                }
            );
        }
    );
}
/*
 * Fonctions extraites du gadget Evaluation
 */
 //initialise les variables
function ev_initVars()
{
   if(typeof window.initEvalProjectNames != "undefined")
      window.initEvalProjectNames();
   else
      window.evalProjectNames=new Array();

   try {if(window.evalProjectNames){}}
   catch(e){ window.evalProjectNames = new Array(); }

   window.evaluation_multiprojets = new Object();
   window.evaluation_multiprojets.project = new Array();
   window.evaluation_multiprojets.importance = new Array();
   window.evaluation_multiprojets.avancement = new Array();
   window.evaluation_multiprojets.state = new Array();
   window.evaluation_multiprojets.avancement_global = "?";
   window.evaluation_multiprojets.autres = {}; // pour ramasser le reste (WP1.0, todo, wikiconcours, ...)
}

function ev_AddMyProjects()
{
   for(var i=0; i<window.evalProjectNames.length;i++)
   {
      if(window.evaluation_multiprojets.project.indexOf(window.evalProjectNames[i]) == -1)
      {
        var t = window.evaluation_multiprojets.project.length;

        window.evaluation_multiprojets.project[t] = window.evalProjectNames[i];
        window.evaluation_multiprojets.importance[t] = "?";
		window.evaluation_multiprojets.state[t] = false;
			
        window.evaluation_multiprojets.avancement[t] = null;
      }
   }
}

function ev_ExtractEvaluation(discussion)
{
   var modeles;

   discussion = " "  + discussion;
   modeles = discussion.split(/\{\{[W|w]ikiprojet /);
   modeles.shift();

   var reg_plus_consultes = /{{([lL]es plus consultés\s*\|[^}]*}})/;
   var m = reg_plus_consultes.exec(discussion);
   if(m) { modeles.push(m[1]); }

   var tab_anc_eval = new Array();

   for(var i=0;i<modeles.length;i++)
   {
      try
      {
         modeles[i] = modeles[i].split("}}")[0];
         var temp = modeles[i].split("|");
         window.evaluation_multiprojets.project[i] = temp[0];
         tab_anc_eval.push(temp[0]);
         window.evaluation_multiprojets.avancement[i] = "?";
         window.evaluation_multiprojets.importance[i] = "?";

         if(temp.length >= 2) ev_getOldEval(temp[1], i);
         if(temp.length >= 3) ev_getOldEval(temp[2], i);
         if(temp.length >= 4) ev_getOldEval(temp[3], i);

         window.evaluation_multiprojets.state[i] = true;
      }
      catch(e){alert(e);}
   }

   var reg_modele_multiprojet = /{{([wW]ikiprojet|[éÉ]valuation multiprojet)\s*\|([^}]*)}}/;
   var regAv = /avancement\s*((\s\S.*)?)$/;
   m = reg_modele_multiprojet.exec(discussion);
   if(m)
   {
      var tab = m[2].split("|");
      var i=0;
      var ind=window.evaluation_multiprojets.project.length;
      var tab_avancement=new Array();
      while(i<tab.length)
      {
         var t = tab[i].split("=");
         if(t.length == 2)
         {
            var mm = regAv.exec(t[0]);
            if(mm)
            {
               if(mm[1] == "")
                  window.evaluation_multiprojets.avancement_global = ev_cleanAvancement(t[1].replace(/^\s+|\s+$/g, ''));
               else
                  tab_avancement[mm[1].replace(/^\s+|\s+$/g, '')] = ev_cleanAvancement(t[1].replace(/^\s+|\s+$/g, ''));
            }
            else
            {
               window.evaluation_multiprojets.autres[t[0]] = t[1].replace(/^\s+|\s+$/g, '');
            }
         }
         else if(t.length == 1)
         {
            var _proj =tab[i].replace(/^\s+|\s+$/g, '');
            if(_proj in tab_anc_eval) { i+= 2 ; continue; }
            window.evaluation_multiprojets.project[ind] =_proj;
            if(i==tab.length-1) alert("Erreur de lecture du modèle {{éÉvaluation multiprojet}}");
            window.evaluation_multiprojets.importance[ind] = ev_cleanImportance(tab[i+1].replace(/^\s+|\s+$/g, ''));
            window.evaluation_multiprojets.avancement[ind] = null;
            window.evaluation_multiprojets.state[ind] = true;
            ind++;
            i++;
         }
         i++;
      }

      for(var i=0; i<window.evaluation_multiprojets.project.length; i++)
      {
         if(window.evaluation_multiprojets.project[i] in tab_avancement)
            window.evaluation_multiprojets.avancement[i] = tab_avancement[window.evaluation_multiprojets.project[i]];
      }
   }
}

function ev_cleanAvancement(val)
{
   if(val=="AdQ") return "AdQ";
   if(val=="BA") return "BA";
   if(val=="A") return "A";
   if(val=="B") return "B";
   if(val=="BD") return "BD";
   if(val=="ébauche" || val=="Ébauche" || val=="E") return "ébauche";

   return "?";
}

function ev_cleanImportance(val)
{
   if(val.toLowerCase()=="maximum" || val.toLowerCase()=="maximale") return "maximum";
   if(val.toLowerCase()=="élevée") return "élevée";
   if(val.toLowerCase()=="moyenne") return "moyenne";
   if(val.toLowerCase()=="faible") return "faible";

   return "?";
}

function ev_getOldEval(str,i)
{
   var params = str.split("=");

   if(params[0]=="importance") window.evaluation_multiprojets.importance[i] = ev_cleanImportance(params[1]);
   else if(params[0]=="avancement") window.evaluation_multiprojets.avancement[i] = ev_cleanAvancement(params[1]);
}

window.ev_setEvaluation = function()
{
   //xx//document.getElementById("EvalButton").disabled = true;
   wpEditPage("Discuter:" + mw.config.get( 'wgPageName' ), {}, ev_editFoo, ev_saveFoo, {});
};
function ev_editFoo(text, summary, doc, data)
{
   summary = "by-script: "+ev_getSummary_multiprojects();
   text = ev_suppr_anc_eval(text);
   text = ev_process_multiprojects(text);
   text = ev_remise_en_tete(text);
 	//console.log("***** ev_editFoo *** text ["+text+"] *****");
 	//console.log("***** ev_editFoo *** summary ["+summary+"] *****");
   return { wpTextbox1: text, wpSummary: summary, data: data };
}

function ev_saveFoo()
{
   //xx//document.getElementById("EvalButton").disabled = false;
}

function ev_getSummary_multiprojects()
{
   var summary = " Multiprojet ("+window.evaluation_multiprojets.avancement_global+")";
   for(var i=0; i<window.evaluation_multiprojets.project.length; i++)
   {
      if(window.evaluation_multiprojets.state[i])
      {
         summary += " "+window.evaluation_multiprojets.project[i] + "|" + window.evaluation_multiprojets.importance[i];
         if(window.evaluation_multiprojets.avancement[i] != null)
            summary += "|"+window.evaluation_multiprojets.avancement[i];
      }
   }
   return summary+")";
}
function ev_suppr_anc_eval(text)
{
   var regtxt =new RegExp("\\{\\{([W|w]ikiprojet [^\\}|]|[lL]es plus consultés)[^\\}]*\\}\\}", "g");
   // return eval("text.replace(" + regtxt + ",'')")
   var regtext_b = new RegExp("\\{\\{[éÉ]valuations[ _]WP1[^\\}\\{]*\\}\\}", "g");
   return text.replace(regtxt, '').replace(regtext_b, '');
}

function ev_process_multiprojects(text)
{
   var regtxt = /\{\{([wW]ikiprojet|[éÉ]valuation multiprojet)\s*\|[^\}]*\}\}/;
   var newtxt = "{{Wikiprojet";
   var regtodo=/\{\{([tT]odo\|?\*?|[àÀ] faire\|?\*?)\}\}/;
   var ok = false;
   for(var i=0; i<window.evaluation_multiprojets.project.length; i++)
   {
      if(window.evaluation_multiprojets.state[i])
      {
         newtxt += "\n|"+window.evaluation_multiprojets.project[i]+"|"+window.evaluation_multiprojets.importance[i];
         if(window.evaluation_multiprojets.avancement[i] != null)
            newtxt += "|avancement "+window.evaluation_multiprojets.project[i]+"="+window.evaluation_multiprojets.avancement[i];
         ok = true;
      }
   }
   ok = ok || (window.evaluation_multiprojets.avancement_global != "?");
   newtxt += "\n|avancement="+window.evaluation_multiprojets.avancement_global;

   for(var i in window.evaluation_multiprojets.autres)
   {
      newtxt += "\n|"+i+"="+window.evaluation_multiprojets.autres[i];
   }
   newtxt += "\n}}";

   if(ok)
   {
      if(regtxt.test(text))
         text = text.replace(regtxt, newtxt);
      else
         text = newtxt + "\n" + text;
      text = text.replace(regtodo, "");
   }
    return text;
}
function ev_remise_en_tete(text)
{
   var reg = /(\{\{[tT]raduit de\s*\|[^}]*\}\})/;
   var m = reg.exec(text);
   if(m)
   {
      var left = RegExp.leftContext;
      var right = RegExp.rightContext;
      text = m[1]+"\n"+left.replace(/\s+$/, '')+"\n"+right.replace(/^\s+/, '');
   }
   return text;
}


// URL encode
if (typeof(wpURLEncode) == "undefined") {
  wpURLEncode = function(string) {
    if (!string) return "";
    return string.replace(/ /g, "_").replace(/[\x00-\x2C\x3B-\x40\x5B-\x5E\x60\x7B-\uFFFF]/g,
      function (match) {
        var c = match.charCodeAt(0);
        var s = new Array();
        if (c < 0x80) s.push(c);
        else if (c < 0x0800) s.push(c >>  6 | 0xC0, c & 0x3F | 0x80);
        else if (c < 0x010000) s.push(c >> 12 | 0xE0, c >>  6 & 0x3F | 0x80, c & 0x3F | 0x80);
        else if (c < 0x110000) s.push(c >> 18 | 0xF0, c >> 12 & 0x3F | 0x80, c >>  6 & 0x3F | 0x80, c & 0x3F | 0x80);
        for (var i = 0, len = s.length; i < len; i++)
          s[i] = (s[i] < 16 ? "%0" : "%") + s[i].toString(16).toUpperCase();
        return s.join("");
      });
  };
}

// getElementById
if (typeof(getElementById) == "undefined") {
  getElementById = function(id) {
    var element = null;
    if (this.id == id) {
      element = this;
      element.getElementsByClassName = document.getElementsByClassName;
    }
    for (var child = this.firstChild; !element && child; child = child.nextSibling)
      if (child.nodeType == 1) {
        child.getElementById = getElementById;
        element = child.getElementById(id);
      }
    return element;
  };
}

// HTTP
if (typeof(httpRequest) == "undefined") {
  httpRequest = function(url, options, data) {
    // options.async
    // options.method
    // options.headers
    // options.content
    // options.onSuccess(request,data)
    // options.onFailure(request,data)
    var request;
    try {
      request = new XMLHttpRequest();
    } catch(e) {
      try {
        request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          request = false;
        }
      }
    }

    if (request) {
      request.onreadystatechange = function() {
        if (request.readyState == 4)
          httpComplete(request, options, data);
      };
      request.open(options.method ? options.method : "GET", url, options.async == false ? false : true);
      if (options.headers) {
        for (var field in options.headers)
          request.setRequestHeader(field, options.headers[field]);
      }
      request.send(options.content ? options.content : null);
    }
    return request;
  };
}

if (typeof(httpComplete) == "undefined") {
  httpComplete = function(request, options, data) {
    if (request.status >= 200 && request.status < 300) {
      if (options.onSuccess) {
        var contentType = request.getResponseHeader("Content-Type");
        var regex = new RegExp(/^([^\/]+\/[^;]+).*/);
        contentType = contentType.replace(regex, "$1");
        if (contentType == "text/html") {
          var doc = document.createElement("div");
          doc.innerHTML = request.responseText;
          doc.getElementsByClassName = document.getElementsByClassName;
          doc.getElementById = getElementById;
          options.onSuccess(doc, data);
        } else if (contentType == "text/xml") {
          var xml = null;
          if (navigator.appName == "Microsoft Internet Explorer") {
            xml = new ActiveXObject("Microsoft.XMLDOM");
            xml.async = false;
            xml.loadXML(request.responseText);
          } else if (window.DOMParser) {
            xml = new DOMParser();
            xml = xml.parseFromString(request.responseText, 'text/xml');
          }
          options.onSuccess(xml, data);
        } else {
          options.onSuccess(request, data);
        }
      }
    } else if (options.onFailure) {
      options.onFailure(request, data);
    } else {
      alert(request.statusText);
    }
  };
}

// Edit WP page
if (typeof(wpEditPage) == "undefined") {
  wpEditPage = function(title, params, editFunction, saveFunction, data) {
 	//console.log("***** wpEditPage *** in *****");
    var url = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=' + wpURLEncode(title)
            + '&action=edit';

    for (var name in params)
      url += '&' + name + '=' + wpURLEncode(params[name]);

 	//console.log("***** wpEditPage *** url  to edit ["+url +"] *****");

    var options = { onSuccess: wpSavePage };

    data.title = title;
    data.editFunction = editFunction;
    data.saveFunction = saveFunction;

 	//console.log("***** wpEditPage *** calling httpRequest *****");
    httpRequest(url, options, data);
  	//console.log("***** wpEditPage *** out *****");
 };
}

// Save WP page
if (typeof(wpSavePage) == "undefined") {
   wpSavePage = function(doc, data) {
 	//console.log("***** wpSavePage *** in *****");
 	//console.log("***** wpSavePage ***   doc ["+doc+"]*****");
      var inputs = doc.getElementById('editform').getElementsByTagName('input');
      var editform = new Array();
      for (var i = 0, len = inputs.length; i < len; i++)
      {
         var value = inputs[i].value;
         if(inputs[i].type != "checkbox" || inputs[i].checked)
            editform[inputs[i].name] = value;
      }

      var wpTextbox1 = doc.getElementById('wpTextbox1').value;
      var wpSummary = editform['wpSummary'];

      var regex = new RegExp(/var wgArticleId = "(\d+)";(?:\n.*)*var wgCurRevisionId = "(\d+)";/m);
      var match = regex.exec(doc.textContent);
      if (match) {
         data.pageId = match[1];
         data.curRevId = match[2];
      }

  	//console.log("***** wpSavePage ***  call editFunction *****");
     var edit = data.editFunction(wpTextbox1, wpSummary, doc, data);

      if (typeof(edit.error) == "undefined") {
   	//console.log("***** wpSavePage ***  after editFunction no error *****");
        editform['wpTextbox1'] = edit.wpTextbox1;
         editform['wpSummary'] = edit.wpSummary;

         var params = [ 'wpTextbox1', 'wpSummary', 'wpSection',
                        'wpStarttime', 'wpEdittime', 'wpEditToken', 'wpSave' ];

         if(editform['wpWatchthis']) params.push('wpWatchthis');
         var content = params.map(function(name) { return name + '=' + encodeURIComponent(editform[name]); }).join("&");

         var url = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=' + wpURLEncode(data.title)
                 + '&action=submit';

         var headers = new Object();
         headers['Content-Type'] = 'application/x-www-form-urlencoded';

         var options = { method: 'POST', headers: headers, content: content, onSuccess: data.saveFunction };

         data = edit.data;

         httpRequest(url, options, data);
      } else {
   	//console.log("***** wpSavePage ***  after editFunction with error *****");
         edit.error(edit.data);
      }
   };
}

var wpfunctions = 1;


$(function () {
	//console.log("*** ENTREE de script ***");
    var title = "Comparaison portail et articles évalués";
    var portail = "", catEval = "", updatePage="";
    window.document.title = title;
    $('#firstHeading').html(title);
	var bInitForm=true;

    var params = location.search.substr(1).split("&");
    for (var i = 0; i < params.length; i++) {
        var nameVal = params[i].split("=");
        if (nameVal.length < 2) continue;
        if (nameVal[0] == "portail")
            portail = decodeURIComponent(nameVal[1]);
        else if (nameVal[0] == "cateval")
            catEval = decodeURIComponent(nameVal[1]);
		/***
		else if (nameVal[0] == "updatepage")
		{ 
            updatePage = decodeURIComponent(nameVal[1]);
			//console.log("*** TROUVE page " + updatePage + " ***");
			bInitForm=false;
		} ***/
    }
	//if (bInitForm == true)
		cpeInitForm(portail, catEval);
	/***
	else
		//console.log("*** appel cpeUpdatePage ***");
		cpeUpdatePage(updatePage,portail,catEval);    ***/

	});
	//console.log("*** SORTIE de script ***");

}