User:OldBee/MassEval.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
//<source lang=javascript>
// Documentation : [[m:User:OldBee/PortalEval.js/doc]]
window.PortalEval = {
// ############################### PARTIE PERSONNALISABLE ###############################
// ------------------------------- Textes -------------------------------
texts : {
"LinkText" : "Évaluer",
"LinkTitle" : "Évaluer les articles de cette catégorie",
"SpecialpageText" : "(S)",
"SpecialpageTip" : "Page spéciale : Évaluation par catégorie",
"Cat" : "Catégorie",
"Portal" : "Thème d’évaluation",
"Sort" : "Options de tri",
"Actions" : "Actions",
"EvalResume" : "[[$docpage|Mise à jour de l’évaluation]] : $template",
"StubResume" : "[[$docpage|Mise à jour du bandeau d’ébauche]] : $template",
"SaveParamsResume" : "[[$docpage|Sauvegarde des paramètres]]",
"GoListText" : "Vérifier l’évaluation",
"GoListTitle" : "Vérifier l’évaluation des pages de cette catégorie",
"SubCatTitle" : "Inclure les sous-catégories",
"GoSortText" : "Trier",
"GoSortTitle" : "Trier les pages de la liste",
"SortTitle" : "Pages",
"SortTitleTip" : "Tri selon le titre de la page",
"SortDS" : "Defaultsort",
"SortDSTip" : "Tri selon la clé de tri",
"SortStub" : "Ébauches",
"SortStubTip" : "Tri selon le nombre de thèmes d’ébauche",
"SortAVT" : "Avancement",
"SortAVTTip" : "Tri selon l’avancement",
"SortIMP" : "Importance",
"SortIMPTip" : "Tri selon l’importance dans le thème sélectionné",
"SortUPTip" : "$1 (tri croissant)",
"SortDOWNTip" : "$1 (tri décroissant)",
"SortUPArrow" : "$1 (↑)",
"SortDOWNArrow" : "$1 (↓)",
"GoChangeText" : "Valider",
"GoChangeTitle" : "Valider les $1changements d’évaluation des pages de cette catégorie",
"GoCancelText" : "Annuler",
"GoCancelTitle" : "Annuler les $1changements d’évaluation des pages de cette catégorie",
"GoOptionsText" : "Options",
"GoOptionsTitle" : "Modifier les options",
"GoCloseTitle" : "Fermer",
"TH0text" : "Page",
"TH1text" : "Bandeau d’ébauche",
"TH2text" : "Avancement",
"TH3text" : "Importances",
"TH4text" : "Actions",
"TalkText" : "D",
"PreviewText" : "$1 (preview)",
"RedirectText" : "Page redirigée vers la page : $page",
"DisambigTitle" : "Homonymie",
"PreviewDown" : "Agrandir la prévisualisation",
"PreviewUp" : "Rétrécir la prévisualisation",
"PreviewClose" : "Fermer la prévisualisation",
"DeleteSTUBText" : "(-)",
"DeleteSTUBTitle" : "Supprimer ce bandeau d’ébauche",
"AddSTUBText" : "(+)",
"AddSTUBTitle" : "Ajouter un bandeau d’ébauche",
"DeleteIMPText" : "(-)",
"DeleteIMPTitle" : "Supprimer cette évaluation d’importance",
"AddIMPText" : "(+)",
"AddIMPTitle" : "Ajouter une évaluation d’importance",
"GoChangeOneText" : "Valider",
"GoChangeOneTitle" : "Valider les changements d’évaluation de cette page",
"GoCancelOneText" : "Annuler",
"GoCancelOneTitle" : "Annuler les changements d’évaluation de cette page",
"NoEdition" : "L’édition via ce script a été désactivée.\n"
+ "Voici le texte qui aurait dû être pris en compte :\n"
+ "----------AVANT----------\n"
+ "$1\n"
+ "----------APRÈS----------\n"
+ "$2\n"
+ "-------------------------\n",
"Warning" : "Ce script en cours de maintenance. Son fonctionnement n’est pas assuré !",
"AlertMsgThemes" : "Listage des thèmes d’ébauche et d’évaluation",
"AlertMsgPages" : "Listage des pages ($count) : $cat",
"AlertMsgParams" : "Recherche des paramètres d’ébauche et d’évaluation ($count) : $page",
"AlertMsgSort" : "Tri des lignes",
"AlertMsgSaveParams" : "Sauvegarde des options personnalisées sur la page $page",
"AlertMsgPreview" : "$running Chargement de la prévisualisation",
"OptionValidate" : "Valider les changements",
"OptionValidateTip" : "Valider les changements d’options",
"DefButtonText" : "(D)",
"DefButtonTitle" : "Rétablir l’option par défaut : $1",
"OptionModified" : "Paramètre différent du paramètre par défaut",
"SpecialpageName" : "Évaluation par catégorie",
"SpecialpageNameH" : "$1 — Wikipédia",
"CatDaughters" : "Catégorie filles",
"CatParents" : "Catégorie parentes",
"HiddenCat" : "Catégorie cachée",
"CatExistsNo" : "La catégorie <b>$cat</b> n’existe pas.",
"CatExistsYes" : "La catégorie <b>$cat</b> comprend :",
"CatPages" : "$1 page(s)",
"CatCats" : "$1 catégorie(s)",
"OPTIONparams" : "Paramètres",
"OPTIONtexts" : "Textes",
"OPTIONmoreparams" : "Paramétrage manuel supplémentaire",
// -------------------- Textes de description des textes et paramètres --------------------
// -------------------- Descriptions des paramètres --------------------
"OPTIONAddWarning" : "Afficher un avertissement en haut de page",
"OPTIONAutoLaunchList" : "Lancer automatiquement le listage des page après l’apparition du tableau",
"OPTIONAutoLaunchPreview" : "Lancer automatiquement la prévisualisation des pages à la création de la ligne du tableau",
"OPTIONPreloadPreview" : "Précharger la prévisualisation des pages",
"OPTIONAllowEdition" : "Permettre l’édition",
"OPTIONTH1width" : "Largeur en pixels de la colonne \"Bandeau d’ébauche\"",
"OPTIONTH2width" : "Largeur en pixels de la colonne \"Avancement\"",
"OPTIONTH3width" : "Largeur en pixels de la colonne \"Importances\"",
"OPTIONTH4width" : "Largeur en pixels de la colonne \"Actions\"",
"OPTIONOptionsHeight" : "Hauteur en pixels de la fenêtre des options",
"OPTIONPreviewHeight" : "Hauteur en pixels de la fenêtre de prévisualisation",
"OPTIONPreviewHeightStep" : "Nombre de pixels ajoutés ou retirés de la fenêtre de prévisualisation lors de son agrandissement/rétrécissement",
"OPTIONCatInputWidth" : "Largeur en pixels du champ de texte \"Catégorie\"",
"OPTIONMainEvalThemeWidth" : "Largeur en pixels de la liste des thèmes d’évaluation (options principales)",
"OPTIONEvalThemeWidth" : "Largeur en pixels de la liste des thèmes d’évaluation (colonne \"Importances\")",
"OPTIONStubThemeWidth" : "Largeur en pixels de la liste des thèmes d’ébauche",
"OPTIONOptionUlColumnWidth" : "Largeur en pixels d’une colonne dans les options",
"OPTIONOptionStringWidth" : "Largeur en pixels des champs de texte dans les options (texte demandé)",
"OPTIONOptionNumberWidth" : "Largeur en pixels des champs de texte dans les options (nombre demandé)",
"OPTIONMoreParamsRows" : "Nombre de ligne du champ de texte pour le paramétrage manuel supplémentaire",
"OPTIONDefaultPortal" : "Thème d’évaluation sélectionné par défaut",
"OPTIONDefaultSort" : "Tri de pages par défaut",
"OPTIONLinkPortletID" : "Attribut id de l’élément où est ajouté le lien \"Évaluer\"",
"OPTIONDocPage" : "Titre de la page de documentation",
"OPTIONDocURL" : "URL de la page de documentation",
"OPTIONImageURL" : "URL de base pour les images",
"OPTIONRunningIcon" : "Image de l’icône \"En cours\"",
"OPTIONOKIcon" : "Image de l’icône \"OK\"",
"OPTIONCloseIcon" : "Image de l’icône \"Fermer\"",
"OPTIONDownIcon" : "Image de l’icône \"Agrandir\"",
"OPTIONUpIcon" : "Image de l’icône \"Rétrécir\"",
"OPTIONRedirectIcon" : "Image de l’icône \"Redirection\"",
"OPTIONDisambigIcon" : "Image de l’icône \"Homonymie\"",
// -------------------- Descriptions des textes --------------------
"OPTIONLinkText" : "Intitulé du lien \"Évaluer\"",
"OPTIONLinkTitle" : "Infobulle du lien \"Évaluer\"",
"OPTIONSpecialpageText" : "Intitulé du lien vers la page spéciale",
"OPTIONSpecialpageTip" : "Infobulle du lien vers la page spéciale",
"OPTIONCat" : "Label de la catégorie sélectionnée",
"OPTIONPortal" : "Label de la liste des thèmes d’évaluation",
"OPTIONSort" : "Label des options de tri",
"OPTIONActions" : "Label des boutons d’action",
"OPTIONEvalResume" : "Résumé de modification lors de la mise à jour de l’évaluation",
"OPTIONStubResume" : "Résumé de modification lors de la mise à jour du bandeau d’ébauche",
"OPTIONSaveParamsResume" : "Résumé de modification lors de la sauvegarde des paramètres]]",
"OPTIONGoListText" : "Intitulé du bouton \"Vérifier l’évaluation\"",
"OPTIONGoListTitle" : "Infobulle du bouton \"Vérifier l’évaluation\"",
"OPTIONSubCatTitle" : "Infobulle de la case pour inclure ou non les sous-catégories",
"OPTIONGoSortText" : "Intitulé du bouton \"Trier\"",
"OPTIONGoSortTitle" : "Intitulé du bouton \"Trier\"",
"OPTIONSortTitle" : "Intitulé de l’option de tri \"Pages\"",
"OPTIONSortTitleTip" : "Infobulle de l’option de tri \"Pages\"",
"OPTIONSortDS" : "Infobulle de l’option de tri \"Defaultsort\"",
"OPTIONSortDSTip" : "Infobulle de l’option de tri \"Defaultsort\"",
"OPTIONSortStub" : "Intitulé de l’option de tri \"Ébauches\"",
"OPTIONSortStubTip" : "Infobulle de l’option de tri \"Ébauches\"",
"OPTIONSortAVT" : "Intitulé de l’option de tri \"Avancement\"",
"OPTIONSortAVTTip" : "Infobulle de l’option de tri \"Avancement\"",
"OPTIONSortIMP" : "Intitulé de l’option de tri \"Importance\"",
"OPTIONSortIMPTip" : "Infobulle de l’option de tri \"Importance\"",
"OPTIONSortUPTip" : "Modèle pour l’infobulle des options de tri (tri croissant)",
"OPTIONSortDOWNTip" : "Modèle pour l’infobulle des options de tri (tri décroissant)",
"OPTIONSortUPArrow" : "Modèle pour le texte des options de tri (tri croissant)",
"OPTIONSortDOWNArrow" : "Modèle pour le texte des options de tri (tri décroissant)",
"OPTIONGoChangeText" : "Intitulé du bouton \"Valider\" (options principales)",
"OPTIONGoChangeTitle" : "Infobulle du bouton \"Valider\" (options principales)",
"OPTIONGoCancelText" : "Intitulé du bouton \"Annuler\" (options principales)",
"OPTIONGoCancelTitle" : "Infobulle du bouton \"Annuler\" (options principales)",
"OPTIONGoOptionsText" : "Intitulé du bouton \"Options\"",
"OPTIONGoOptionsTitle" : "Infobulle du bouton \"Options\"",
"OPTIONGoCloseTitle" : "Infobulle du bouton pour fermer le tableau",
"OPTIONTH0text" : "Intitulé de la colonne \"Page\"",
"OPTIONTH1text" : "Intitulé de la colonne \"Bandeau d’ébauche\"",
"OPTIONTH2text" : "Intitulé de la colonne \"Avancement\"",
"OPTIONTH3text" : "Intitulé de la colonne \"Importances\"",
"OPTIONTH4text" : "Intitulé de la colonne \"Actions\"",
"OPTIONTalkText" : "Intitulé des liens vers les pages de discussion",
"OPTIONPreviewText" : "Modèle d’infobulle du bouton pour les liens de pages",
"OPTIONRedirectText" : "Infobulle de l’icône \"Redirection\"",
"OPTIONDisambigTitle" : "Infobulle de l’icône \"Homonymie\"",
"OPTIONPreviewDown" : "Infobulle du bouton pour agrandir la prévisualisation",
"OPTIONPreviewUp" : "Infobulle du bouton pour rétrécir la prévisualisation",
"OPTIONPreviewClose" : "Infobulle du bouton pour fermer la prévisualisation",
"OPTIONDeleteSTUBText" : "Intitulé du bouton pour supprimer un bandeau d’ébauche",
"OPTIONDeleteSTUBTitle" : "Infobulle du bouton pour supprimer un bandeau d’ébauche",
"OPTIONAddSTUBText" : "Intitulé du bouton pour ajouter un bandeau d’ébauche",
"OPTIONAddSTUBTitle" : "Infobulle du bouton pour ajouter un bandeau d’ébauche",
"OPTIONDeleteIMPText" : "Intitulé du bouton pour supprimer une évaluation d’importance",
"OPTIONDeleteIMPTitle" : "Infobulle du bouton pour supprimer une évaluation d’importance",
"OPTIONAddIMPText" : "Intitulé du bouton pour ajouter une évaluation d’importance",
"OPTIONAddIMPTitle" : "Infobulle du bouton pour ajouter une évaluation d’importance",
"OPTIONGoChangeOneText" : "Intitulé du bouton \"Valider\" (ligne)",
"OPTIONGoChangeOneTitle" : "Infobulle du bouton \"Valider\" (ligne)",
"OPTIONGoCancelOneText" : "Intitulé du bouton \"Annuler\" (ligne)",
"OPTIONGoCancelOneTitle" : "Infobulle du bouton \"Annuler\" (ligne)",
"OPTIONNoEdition" : "Message par défaut lorsque l’édition n’est pas permise",
"OPTIONWarning" : "Message d’avertissement",
"OPTIONAlertMsgThemes" : "Message lors du listage des thèmes d’ébauche et d’évaluation",
"OPTIONAlertMsgPages" : "Message lors du listage des pages",
"OPTIONAlertMsgParams" : "Message lors de la recherche des paramètres d’ébauche et d’évaluation d’une page",
"OPTIONAlertMsgSort" : "Message lors du tri des lignes",
"OPTIONAlertMsgSaveParams" : "Message lors de la sauvegarde des options personnalisées",
"OPTIONAlertMsgPreview" : "Message lors du chargement de la prévisualisation d’une page",
"OPTIONOptionValidate" : "Intitulé du bouton \"Valider les changements\"",
"OPTIONOptionValidateTip" : "Infobulle du bouton \"Valider les changements\"",
"OPTIONDefButtonText" : "Intitulé du bouton pour rétablir une option par défaut",
"OPTIONDefButtonTitle" : "Infobulle du bouton pour rétablir une option par défaut",
"OPTIONOptionModified" : "Infobulle expliquant d’un paramètre est différent du paramètre par défaut",
"OPTIONSpecialpageName" : "Titre de la page spéciale",
"OPTIONSpecialpageNameH" : "Modèle du titre de l’onglet du navigateur",
"OPTIONOPTIONparams" : "Intitulé du bouton \"Paramètres\"",
"OPTIONOPTIONtexts" : "Intitulé du bouton \"Textes\"",
"OPTIONOPTIONmoreparams" : "Intitulé du bouton \"Paramétrage manuel supplémentaire\"",
},
params : {
// ------------------------------- Paramètres modifiables -------------------------------
"AllowEdition" : true,
"AutoLaunchList" : false,
"AutoLaunchPreview" : false,
"PreloadPreview" : false,
"AddWarning" : false,
"TH1width" : 200,
"TH2width" : 150,
"TH3width" : 300,
"TH4width" : 100,
"OptionsHeight" : 400,
"PreviewHeight" : 250,
"PreviewHeightStep" : 50,
"CatInputWidth" : 200,
"MainEvalThemeWidth" : 200,
"EvalThemeWidth" : 150,
"StubThemeWidth" : 100,
"OptionUlColumnWidth" : 705,
"OptionStringWidth" : 400,
"OptionNumberWidth" : 50,
"MoreParamsRows" : 20,
"CategorySelectSize" : 4,
"CategorySuggestions" : 12,
"DefaultPortal" : "",
"DefaultSort" : "SortDS_UP",
"LinkPortletID" : "p-cactions",
"DocPage" : "m:User:OldBee/PortalEval.js/doc",
"DocURL" : "https://meta.wikimedia.org/wiki/User:OldBee/PortalEval.js/doc",
"ImageURL" : "//upload.wikimedia.org/wikipedia/commons/",
"RunningIcon" : "2/2a/Loading_Key.gif",
"OKIcon" : "thumb/f/fb/Yes_check.svg/24px-Yes_check.svg.png",
"CloseIcon" : "thumb/8/80/Icon_no.svg/24px-Icon_no.svg.png",
"DownIcon" : "thumb/f/f3/HSR_1996_II_3.4f.svg/16px-HSR_1996_II_3.4f.svg.png",
"UpIcon" : "thumb/1/1a/HSR_1996_II_3.4i.svg/16px-HSR_1996_II_3.4i.svg.png",
"RedirectIcon" : "thumb/7/71/Symbol_redirect_arrow_with_gradient.svg/12px-Symbol_redirect_arrow_with_gradient.svg.png",
"DisambigIcon" : "thumb/c/c3/Disambiguation.svg/12px-Disambiguation.svg.png",
// ############################### PARTIE NON PERSONNALISABLE ###############################
// ------------------------------- Paramètres non modifiables -------------------------------
"EditableParams" : [
"AllowEdition",
"AutoLaunchList",
"AutoLaunchPreview",
"PreloadPreview",
"AddWarning",
"TH1width",
"TH2width",
"TH3width",
"TH4width",
"OptionsHeight",
"PreviewHeight",
"PreviewHeightStep",
"CatInputWidth",
"MainEvalThemeWidth",
"EvalThemeWidth",
"StubThemeWidth",
"OptionUlColumnWidth",
"OptionStringWidth",
"OptionNumberWidth",
"MoreParamsRows",
"CategorySelectSize",
"CategorySuggestions",
"DefaultPortal",
"DefaultSort",
"LinkPortletID",
"DocPage",
"DocURL",
"ImageURL",
"RunningIcon",
"OKIcon",
"CloseIcon",
"DownIcon",
"UpIcon",
"RedirectIcon",
"DisambigIcon",
],
"Importance" : [
{ wiki : "maximum", text : "Maximum", color : "#FF00FF" },
{ wiki : "élevée", text : "Élevée", color : "#FF88FF" },
{ wiki : "moyenne", text : "Moyenne", color : "#FFCCFF" },
{ wiki : "faible", text : "Faible", color : "#FFEEFF" },
{ wiki : "?", text : "Inconnue", color : "#666666", textcolor:"white" }
],
"Avancement" : [
{ wiki : "AdQ", text : "Article de qualité", color : "#6699FF" },
{ wiki : "BA", text : "Bon article", color : "#66FF66" },
{ wiki : "A", text : "Avancé", color : "#66FFFF" },
{ wiki : "B", text : "Bien", color : "#FFFF66" },
{ wiki : "BD", text : "Bon début", color : "#FFAA66" },
{ wiki : "ébauche", text : "Ébauche", color : "#FF6666" },
{ wiki : "?", text : "Inconnu", color : "#666666", textcolor:"white" }
],
"EvalTemplate" : "Wikiprojet",
"EvalCategory" : "Wikiprojet",
"EvalCatPrefixes" : ["Wikiprojet ", "Wikiprojet:"],
"EvalThemes" : [],
"FakeEvalThemes" : ["Statistique"],
"ManuEvalThemes" : ["GNU/Linux"],
"EvalThemesOK" : false,
"StubTemplate" : "Ébauche",
"StubThemesPage" : "Module:Bandeau/Ébauche",
"StubThemes" : [],
"FakeStubThemes" : ["thème", /* "et", */ "exemple doc"],
"StubAdj" : [],
"StubAdjM" : [],
"StubAdjF" : [],
"StubThemesOK" : false,
"OptionsSubPage" : "PortalEvalparams",
"OptionsSubPageOK" : false,
"OptionsMoreParams" : "",
"OptionsPageTemplate" : "window.PortalEval_UserCustom = function(){\n$1\n}\n",
"OptionsPageCommentStart" : "/* Paramètrage supplémentaire du script PortalEval. */ try{ /* NE PAS MODIFIER CETTE LIGNE */\n",
"OptionsPageCommentEnd" : "\n/* Paramètrage supplémentaire du script PortalEval. */ }catch(e){ console.error(e.message); } /* NE PAS MODIFIER CETTE LIGNE */",
"PageList" : [],
"SubCatList" : [],
"StubEditsRunning" : [],
"EvalEditsRunning" : [],
"PreviewSaved" : {},
"APILimit" : ((mw.config.get("wgUserGroups").indexOf("bot")!==-1 || mw.config.get("wgUserGroups").indexOf("syspo")!==-1) ? 4999 : 499),
"ContenIDs" : ["globalWrapper","mw-wrapper","mw-page-base","mw-head-base","content","mw-navigation","footer","mw_header","mw_main","p-personal","mw-mf-viewport"],
"DivIDsToPreview" : ["contentSub", "mw-content-text", "catlinks"],
"Accents" : {
"A" : ["À","Â","Ä","Á"],
"C" : ["Ç"],
"E" : ["É","È","Ê","Ë"],
"I" : ["Î","Ï","Í"],
"O" : ["Ô","Ö","Ó"],
"U" : ["Ù","Û","Ü","Ú"],
"Y" : ["ÿ","Ÿ"],
"Ae" : ["Æ"],
"Oe" : ["Œ"],
},
"SortOptions" : ["SortDS","SortTitle","SortStub","SortAVT","SortIMP"],
"OptionSelectWidthPlus" : {"monobook":6,"vector":6,"modern":6,"cologneblue":6},
},
//</source><source lang=javascript>
// ------------------------------- Fonctions -------------------------------
functions : {
ucFirst : function(text){
return text.substr(0,1).toUpperCase() + text.substr(1,text.length);
},
lcFirst : function(text){
return text.substr(0,1).toLowerCase() + text.substr(1,text.length);
},
deleteAccents : function(text){
for(var letter in PortalEval.params.Accents){
var letters = PortalEval.params.Accents[letter];
for(var a=0,l=letters.length;a<l;a++){
var thisaccent = letters[a];
text = text.split(thisaccent).join(letter);
text = text.split(thisaccent.toLowerCase()).join(letter.toLowerCase());
}
}
return text;
},
disableThings : function(IDs, dis){
DIS = (dis ? "disabled" : false);
var tags = ["button","input","select","textarea"];
for(var a=0,l=IDs.length;a<l;a++){
var thisID = IDs[a];
var N = null;
if(typeof(thisID)==="string") N = document.getElementById(thisID);
else N = thisID;
try{
if(N.tagName && tags.indexOf(N.tagName.toLowerCase())!== -1) N.disabled = DIS;
}catch(e){
console.warn("PortalEval.functions.disableThings()\n\n"+e.message);
}
}
},
displayNodesById : function(IDs, display){
if(typeof(IDs)!=="object" && !IDs.length) return;
display = (display ? "" : "none");
for(var a=0,l=IDs.length;a<l;a++){
var thisNode = document.getElementById(IDs[a]);
if(thisNode) thisNode.style.display = display;
}
},
getFirstElementByName : function(node, tags, name){
for(var a=0,l=tags.length;a<l;a++){
var els = node.getElementsByTagName(tags[a]);
for(var n=0,nlen=els.length;n<nlen;n++){
var N = els[n];
if(N.name && (N.name == name || name=="*")) return N;
}
}
return null;
},
createLink : function(page, options){
var link = document.createElement("a");
link.href = (options && options.href ? options.href : mw.config.get("wgServer")+mw.config.get("wgArticlePath").split("$1").join(page));
link.title = (options && options.title ? options.title : page );
link.innerHTML = (options && options.text ? options.text : page );
if(options && options.class) link.className = options.class;
if(options && typeof(options.preview)=="number"){
link.title = PortalEval.texts.PreviewText.split("$1").join(link.title);
link.onclick = function(){ PortalEval.functions.previewPage(page, options.preview); return false; }
}
return link;
},
createInput : function(datas){
if(datas.type == 'textarea'){
var Input = document.createElement('textarea');
}else{
var Input = document.createElement('input');
Input.type = datas.type || 'text';
}
if(datas.name) Input.name = datas.name;
if(datas.value) Input.value = datas.value;
if(datas.title) Input.title = datas.title;
return Input;
},
getNamespaceInfoFromPage : function(Page, ToReturn){
if(!ToReturn || !Page) ToReturn = false;
var NamespaceNumber = 0;
var NamespaceName = "";
var PageName = Page;
var Found = false;
var AllNS = mw.config.get("wgFormattedNamespaces");
for(var NS in AllNS ){
if(Found) continue;
var ThisNamespaceName = AllNS[NS];
if(ThisNamespaceName==="") continue;
var Matches = Page.match(new RegExp("^"+ThisNamespaceName+":", "ig"));
if(Matches!=null && Matches.length == 1){
NamespaceNumber = parseInt(NS);
NamespaceName = ThisNamespaceName;
PageName = Page.replace(Matches[0], "");
Found = true;
}
}
if(ToReturn==="NamespaceName") return NamespaceName;
if(ToReturn==="PageName") return PageName;
return NamespaceNumber;
},
getTalkPage : function(page){
return mw.config.get("wgFormattedNamespaces")[(PortalEval.functions.getNamespaceInfoFromPage(page)+1)]+":"+page;
},
getMainPage : function(page){
var NS = PortalEval.functions.getNamespaceInfoFromPage(page);
if(NS % 2 == 0) return page;
return (NS==1 ? "" : mw.config.get("wgFormattedNamespaces")[(NS-1)]+":")+PortalEval.functions.getNamespaceInfoFromPage(page, "PageName");
},
getPages : function(catindex, portal, queryopt){
var CheckBox = document.getElementById("PortalEval_SubCats");
var subcat = ((CheckBox && CheckBox.checked) ? "|subcat" : "");
if(catindex === -1){
PortalEval.params.PreviewSaved = {};
catindex = 0;
PortalEval.params.PageList = [];
PortalEval.params.SubCatList = [];
var FirstCat = document.getElementById("PortalEval_Cat").value;
PortalEval.params.SubCatList.push( (mw.config.get("wgFormattedNamespaces")[14]+":"+FirstCat) );
}
if(!queryopt){
var cat = PortalEval.params.SubCatList[catindex];
if(!cat) return PortalEval.functions.getPageEval(portal);
var count = (catindex+1)+"/"+PortalEval.params.SubCatList.length;
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgPages.split("$count").join(count).split("$cat").join(cat), true);
queryopt = {action:'query',list:'categorymembers',
cmlimit : PortalEval.params.APILimit,
cmprop : 'title',
cmtitle : cat,
cmtype : 'page'+subcat
};
}
PortalEval.functions.disableThings([ "PortalEval_Cat", "PortalEval_OptionPortal", "PortalEval_OptionPortalInput", "PortalEval_SubCats","PortalEval_SortButton" ], true);
var api = new mw.Api();
api.get(queryopt).then(function(data){
if(data.query.categorymembers){
for(var a=0,l=data.query.categorymembers.length;a<l;a++){
var page = data.query.categorymembers[a];
var title = page.title;
var ns = page.ns;
if(ns=="14"){
if(PortalEval.params.SubCatList.indexOf(title)===-1) PortalEval.params.SubCatList.push(title);
}else{
title = PortalEval.functions.getMainPage(title);
PortalEval.params.PageList.push({
"title" : title,
"talktitle" : PortalEval.functions.getTalkPage(title)
});
}
}
}
if(data.continue && data.continue.cmcontinue){
queryopt.cmcontinue = data.continue.cmcontinue;
PortalEval.functions.getPages(catindex, portal, queryopt);
}else{
PortalEval.functions.getPages((catindex+1), portal);
}
});
},
getAllPagesInfos : function(info){
var pageinfos = [];
var pagedatas = PortalEval.params.PageList;
for(var a=0,l=pagedatas.length;a<l;a++){
pageinfos.push(pagedatas[a][info]);
}
return pageinfos;
},
getPageEval : function(portal, index){
if(!index) index = 0;
var page = PortalEval.params.PageList[index];
if(!page){
PortalEval.functions.alertControl();
var sortValue = document.getElementById("PortalEval_OptionSort").value;
if(sortValue !== "SortDS_UP") PortalEval.functions.sortPages(sortValue, portal);
PortalEval.functions.disableThings(["PortalEval_SortButton","PortalEval_OptionPortal","PortalEval_OptionPortalInput","PortalEval_SubCats"], false);
PortalEval.functions.disableThings(["PortalEval_Cat"], (PortalEval.functions.getLaunchCondition() != 2));
return;
}
if(PortalEval.params.PreloadPreview){
PortalEval.functions.preloadPage(page.title, index);
PortalEval.functions.preloadPage(page.talktitle, index);
}
PortalEval.functions.getPageStub(portal, index, function(portal, index, queryopt){
var page = PortalEval.params.PageList[index];
var title = page.title;
var talktitle = page.talktitle;
if(!queryopt){
queryopt = {action:'query',prop:['templates','info'],
tllimit : PortalEval.params.APILimit,
titles : talktitle,
tltemplates : mw.config.get("wgFormattedNamespaces")[10]+":"+PortalEval.params.EvalTemplate,
};
}
var api = new mw.Api();
api.get(queryopt).then(function(data){
var hasEval = false;
if(data.query.pages){
for(var id in data.query.pages){
var templates = data.query.pages[id].templates;
if(templates){
for(var a=0,l=templates.length;a<l;a++){
var template = templates[a].title;
if(template.indexOf(":"+PortalEval.params.EvalTemplate)===-1) continue;
hasEval = true;
}
}else{
if(id == -1) PortalEval.params.PageList[index]["talkmissing"] = 1;
}
}
}
if(hasEval){
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+ "?title="+encodeURIComponent(talktitle)+"&action=raw§ion=0";
$.ajax({url:URL, complete: function(Req){
PortalEval.functions.getEvalParams(Req.responseText, index, portal);
var add = PortalEval.functions.fillBoardLine(index, portal);
if(add) PortalEval.functions.getPageEval(portal, (index+1));
}});
}else{
var add = PortalEval.functions.fillBoardLine(index, portal);
if(add) PortalEval.functions.getPageEval(portal, (index+1));
}
});
});
},
getPageStub : function(portal, index, callback){
var page = PortalEval.params.PageList[index];
var title = page.title;
var count = (index+1)+"/"+PortalEval.params.PageList.length;
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgParams.split("$count").join(count).split("$page").join(title), true);
var queryopt = {action:'query',prop:['templates','info','links','pageprops'],
pllimit : 1,
tllimit : PortalEval.params.APILimit,
titles : title,
tltemplates : mw.config.get("wgFormattedNamespaces")[10]+":"+PortalEval.params.StubTemplate,
};
var api = new mw.Api();
api.get(queryopt).then(function(data){
var hasStub = false;
if(data.query.pages){
for(var id in data.query.pages){
var datas = data.query.pages[id];
var isRedirect = datas.redirect === "";
if(isRedirect){
var links = datas.links;
if(links){
for(var a=0,l=links.length;a<l;a++){
var realtitle = links[a].title;
var alltitles = PortalEval.functions.getAllPagesInfos("title");
if(alltitles.indexOf(realtitle)!=-1) return PortalEval.functions.getPageEval(portal, (index+1));
var realtalktitle = PortalEval.functions.getTalkPage(realtitle);
PortalEval.params.PageList[index].redirectfrom = title;
PortalEval.params.PageList[index].title = realtitle;
PortalEval.params.PageList[index].talktitle = realtalktitle;
return PortalEval.functions.getPageEval(portal, index);
}
}
}
var templates = datas.templates;
if(templates){
for(var a=0,l=templates.length;a<l;a++){
var template = templates[a].title;
if(template.indexOf(":"+PortalEval.params.StubTemplate)===-1) continue;
hasStub = true;
}
}
var pageprops = datas.pageprops;
if(pageprops && pageprops.disambiguation === "") PortalEval.params.PageList[index].disambig = true;
}
}
if(hasStub){
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+ "?title="+encodeURIComponent(title)+"&action=raw§ion=0";
$.ajax({url:URL, complete: function(Req){
PortalEval.functions.getStubParams(Req.responseText, index, portal);
if(typeof(callback) == "function") callback(portal, index);
}});
}else{
if(typeof(callback) == "function") callback(portal, index);
}
});
},
getStubParams : function(WT, index, portal){
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var matches = WT.match(Reg);
var Wikitext = "";
if(matches != null){
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
Wikitext += thismatch;
thismatch = thismatch.split("\n").join("");
thismatch = thismatch.split("{{").join("");
thismatch = thismatch.split("}}").join("");
thismatch = thismatch.split("|");
for(var av=0,avlen=thismatch.length;av<avlen;av++){
var thisparam = thismatch[av];
thisparam = thisparam.replace(/^[ ]*/g, "");
thisparam = thisparam.replace(/[ ]*$/g, "");
if(thisparam.indexOf(PortalEval.functions.ucFirst(PortalEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf(PortalEval.functions.lcFirst(PortalEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf("=") == -1){
var stubtheme = PortalEval.functions.ucFirst(thisparam);
if(!PortalEval.params.PageList[index]["stub"]) PortalEval.params.PageList[index]["stub"] = [];
if(PortalEval.params.PageList[index]["stub"].indexOf(stubtheme)==-1) PortalEval.params.PageList[index]["stub"].push(stubtheme);
if(typeof(PortalEval.params.StubThemes[stubtheme]) == "undefined"){
var adjDatas = PortalEval.functions.getAdjDatas(stubtheme);
if(adjDatas.type === null){
PortalEval.params.StubThemes[stubtheme] = { };
}
}
}
}
}
}
PortalEval.params.PageList[index].stubWT = Wikitext;
},
getEvalParams : function(WT, index, portal){
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
var matches = WT.match(Reg);
var Wikitext = "";
if(matches != null){
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
Wikitext += thismatch;
thismatch = thismatch.split("\n").join("");
thismatch = thismatch.split("{{").join("");
thismatch = thismatch.split("}}").join("");
thismatch = thismatch.split("||").join("|?|");
var implicitparams = [];
thismatch = thismatch.split("|");
for(var av=0,avlen=thismatch.length;av<avlen;av++){
var thisparam = thismatch[av];
if(thisparam === "") thisparam = "?";
thisparam = thisparam.replace(/^[ ]*/g, "");
thisparam = thisparam.replace(/[ ]*$/g, "");
if(thisparam.indexOf("=") == -1) implicitparams.push(thisparam);
if(thisparam.indexOf("avancement")!=-1){
var AVT = thisparam.replace(/.*=[ ]*/g, "").replace(/\\n/g, "").replace(/\W/g, "");
for(var avt=0,avtlen=PortalEval.params.Avancement.length;avt<avtlen;avt++){
var thisavt = PortalEval.params.Avancement[avt];
if(AVT == thisavt.wiki.replace(/\W/g, "")) PortalEval.params.PageList[index].evalAVT = avt;
}
}
}
for(var p=0,plen=implicitparams.length;p<plen;p++){
var thisimplicitparam = implicitparams[p];
for(var imp=0,implen=PortalEval.params.Importance.length;imp<implen;imp++){
var thisimp = PortalEval.params.Importance[imp];
if(thisimplicitparam.replace(/\W/g, "") == thisimp.wiki.replace(/\W/g, "")){
if(implicitparams[(p-1)].toLowerCase() == portal.toLowerCase()) PortalEval.params.PageList[index].evalIMP = imp;
if(!PortalEval.params.PageList[index].allIMP) PortalEval.params.PageList[index].allIMP = {};
PortalEval.params.PageList[index].allIMP[implicitparams[(p-1)]] = imp;
}
}
}
}
}
PortalEval.params.PageList[index].evalWT = Wikitext;
},
getStubThemes : function(){
if(Object.keys(PortalEval.params.StubThemes).length>0) return PortalEval.functions.checkThemes();
var stubthemepage = PortalEval.params.StubThemesPage;
PortalEval.functions.alertControl();
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgThemes, true);
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+"?title="+encodeURIComponent(stubthemepage)+"&action=raw";
$.ajax({url:URL, complete: function(Req){
var Wikitext = Req.responseText;
var commStart = "[==[";
var commEnd = "]==]";
var SplitedWikitext = Wikitext.split(commStart);
var TempWikitext = "";
for(var a=0,l=SplitedWikitext.length;a<l;a++){
var ThisSplit = SplitedWikitext[a];
if(ThisSplit.indexOf(commEnd)!==-1) TempWikitext += ThisSplit.split(commEnd)[1];
else TempWikitext += ThisSplit;
}
Wikitext = [];
TempWikitext = TempWikitext.split("\n");
for(var a=0,l=TempWikitext.length;a<l;a++){
Wikitext.push(TempWikitext[a].replace(/--[^"]*/g, ""));
}
Wikitext = Wikitext.join("\n");
var cleaned = function(txt){
txt = txt.replace(/= *"/g, ': "');
txt = txt.replace(/selon =/g, 'selon :');
txt = txt.replace(/ selonCommune/g, ' "selonCommune"');
txt = txt.replace(/estFeminin =/g, 'estFeminin :');
return txt;
}
var p = {};
var RegP1 = /p\["[^\}]*\}/g
var P1 = Wikitext.match(RegP1);
if(P1 !== null){
for(var a=0,l=P1.length;a<l;a++){
var ThisP1 = P1[a];
Wikitext = Wikitext.replace(ThisP1, "");
ThisP1 = cleaned(ThisP1);
try{ eval(ThisP1); }catch(e){ console.warn("P1["+a+"] FAILED :\n"+e.message+"\n----------\n"+ThisP1+"\n----------"); };
}
}
var FakeStubThemes = PortalEval.params.FakeStubThemes;
for(var a=0,l=FakeStubThemes.length;a<l;a++){
var faketheme = FakeStubThemes[a];
if(typeof(p[faketheme]) !== "undefined") delete p[faketheme];
}
var allP = Object.keys(p);
var a = {};
var RegA1 = /a\["[^\}]*\}/g
var A1 = Wikitext.match(RegA1);
if(A1 !== null){
for(var i=0,l=A1.length;i<l;i++){
var ThisA1 = A1[i];
Wikitext = Wikitext.replace(ThisA1, "");
ThisA1 = cleaned(ThisA1);
try{ eval(ThisA1); }catch(e){ console.warn("A1["+i+"] FAILED :\n"+e.message+"\n----------\n"+ThisA1+"\n----------"); };
}
}
var adjM = Object.keys(a);
Wikitext = Wikitext + '\n';
var alias = {};
var RegP2 = /p\["[^\]]*\][^\]]*\]/g
var P2 = Wikitext.match(RegP2);
if(P2 !== null){
for(var a=0,l=P2.length;a<l;a++){
var ThisP2 = P2[a]+"\n";
ThisP2 = ThisP2.replace(/= *p\[/g, '= ');
ThisP2 = ThisP2.split(']\n').join('\n');
ThisP2 = ThisP2.split('p[').join('alias[');
try{ eval(ThisP2); }catch(e){ console.warn("P2["+a+"] FAILED :\n"+e.message+"\n----------\n"+ThisP2+"\n----------"); };
}
}
var adjF = [];
var adj = [];
for(var ad=0,l=adjM.length;ad<l;ad++){
var thisF = adjM[ad];
var lastOne = thisF.substr((thisF.length-1), 1);
var lastTwo = thisF.substr((thisF.length-2), 2);
if(lastTwo == "en"){
thisF = thisF + "ne";
}else if(lastOne != "e" && lastOne != ")"){
thisF = thisF + "e";
}else if(lastOne == ")"){
var parenth = thisF.substring(thisF.indexOf(" ("));
var befparenth = thisF.split(parenth).join("");
var lastOneB = befparenth.substr((befparenth.length-1), 1);
var lastTwoB = befparenth.substr((befparenth.length-2), 2);
if(lastTwoB == "en"){
thisF = befparenth + "ne" + parenth;
}else if(lastOneB != "e"){
thisF = befparenth + "e" + parenth;
}
}
adjF[ad] = thisF;
}
for(var th in p){
var fem = p[th].feminin;
if(fem) alias[fem] = th;
}
for(var al in alias){
var target = alias[al];
if(adjM.indexOf(target)!==-1) adjM.push(al);
if(adjF.indexOf(target)!==-1) adjF.push(al);
if(adj.indexOf(target)!==-1) adj.push(al);
if(allP.indexOf(target)!==-1 && typeof(p[al])==-1) p[al] = p[target];
}
PortalEval.params.StubAdjM = adjM.sort();
PortalEval.params.StubAdjF = adjF.sort();
PortalEval.params.StubAdj = adj.concat(adjM, adjF).sort();
allP = Object.keys(p);
for(var i=0,l=allP.length;i<l;i++){ allP[i] = PortalEval.functions.ucFirst(allP[i]); }
allP.sort();
for(var i=0,l=allP.length;i<l;i++){
var key = allP[i]
var P = p[key] || p[PortalEval.functions.lcFirst(key)];
PortalEval.params.StubThemes[key] = P;
}
PortalEval.params.StubThemesOK = true;
PortalEval.functions.checkThemes();
}});
},
getEvalThemes : function(queryopt){
if(!queryopt){
if(PortalEval.params.EvalThemes.length>0) return PortalEval.functions.checkThemes();
queryopt = {action :'query',list:'categorymembers',
cmlimit : PortalEval.params.APILimit,
cmtitle : mw.config.get("wgFormattedNamespaces")[14]+":"+PortalEval.params.EvalCategory,
cmtype : 'subcat'
};
}
PortalEval.functions.alertControl();
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgThemes, true);
var api = new mw.Api();
api.get(queryopt).then(function(data){
if(data.query.categorymembers){
for(var a=0,l=data.query.categorymembers.length;a<l;a++){
var page = data.query.categorymembers[a];
var title = page.title
for(var p=0,plen=PortalEval.params.EvalCatPrefixes.length;p<plen;p++){
var EvalCatPrefix = PortalEval.params.EvalCatPrefixes[p];
title = title.split(mw.config.get("wgFormattedNamespaces")[14]+":"+EvalCatPrefix).join("");
}
title = PortalEval.functions.ucFirst(title);
if(title.indexOf("/")!==-1 && PortalEval.params.ManuEvalThemes.indexOf(title) === -1) continue;
if(PortalEval.params.FakeEvalThemes.indexOf(title)!==-1) continue;
if(PortalEval.params.EvalThemes.indexOf(title)!==-1) continue;
PortalEval.params.EvalThemes.push(title);
}
}
if(data.continue && data.continue.cmcontinue){
queryopt.cmcontinue = data.continue.cmcontinue;
PortalEval.functions.getEvalThemes(queryopt);
}else{
PortalEval.params.EvalThemes.sort();
PortalEval.params.EvalThemesOK = true;
PortalEval.functions.checkThemes();
}
});
},
createThemeSelect : function(Select, defaultoption, addemptyoption){
if(!Select){
Select = document.createElement('select');
Select.style.width = PortalEval.params.EvalThemeWidth+"px";
}else{
while(Select.firstChild) Select.removeChild(Select.firstChild);
}
var Themes = PortalEval.functions.sortTextList(PortalEval.params.EvalThemes);
if(addemptyoption) Themes.unshift("");
for(var a=0,l=Themes.length;a<l;a++){
var title = Themes[a];
var opt = document.createElement('option');
opt.innerHTML = title;
opt.value = title;
if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
Select.appendChild(opt);
}
return Select;
},
checkThemes : function(){
PortalEval.functions.disableThings(["GlobalOptionsInput"], (!(PortalEval.params.EvalThemesOK && PortalEval.params.OptionsSubPageOK)));
if(PortalEval.params.StubThemesOK && PortalEval.params.EvalThemesOK){
var PortalListInput = document.getElementById("PortalEval_OptionPortalInput");
PortalEval.functions.disableThings([ PortalListInput ], false);
var PortalSelect = document.getElementById("PortalEval_OptionPortal");
if(PortalSelect){
PortalEval.functions.createThemeSelect(PortalSelect, PortalEval.params.DefaultPortal);
if(PortalEval.params.AutoLaunchList) PortalEval.functions.getPages(-1, PortalSelect.value);
else PortalEval.functions.alertControl();
}
}
},
updateOptions : function(){
var F = document.getElementById("PortalEvalOptionsFS");
if(!F) return;
var NewParamText = [];
var MoreParams = ""
var ULs = F.getElementsByTagName('ul');
for(var a=0,l=ULs.length;a<l;a++){
var UL = ULs[a];
if(!$(UL).hasClass("optionsUL") || !UL.id) continue;
var type = UL.id.split("OPTIONUL").join("");
var Lis = UL.getElementsByTagName('li');
for(var i=0,ilen=Lis.length;i<ilen;i++){
var LI = Lis[i];
var More = PortalEval.functions.getFirstElementByName(LI, ["textarea"], "moreparams");
if(More) MoreParams = More.value;
else{
var Type = PortalEval.functions.getFirstElementByName(LI, ["input"], "type");
var Name = PortalEval.functions.getFirstElementByName(LI, ["input"], "name");
var DefaultNode = PortalEval.functions.getFirstElementByName(LI, ["input",], "default");
var ActualNode = PortalEval.functions.getFirstElementByName(LI, ["textarea","select","input"], "actual");
Type = Type.value;
Name = Name.value;
var Actual = (Type=="boolean" ? ActualNode.checked : ActualNode.value);
var Default = (Type=="boolean" ? (DefaultNode.value == "true") : DefaultNode.value);
Actual = (Type=="string" ? '"'+Actual.replace(/"/g, '\\"')+'"' : Actual);
Default = (Type=="string" ? '"'+Default.replace(/"/g, '\\"')+'"' : Default);
Actual = (Type=="number" ? parseInt(Actual) : Actual);
Default = (Type=="number" ? parseInt(Default) : Default);
if(Actual === Default) continue;
Actual = (Type=="string" ? Actual.split("\n").join("\\n\"\n + \"") : Actual);
NewParamText.push(" PortalEval.functions.customize('"+type+"','"+Name+"',"+Actual+");");
}
}
}
NewParamText = "\n"+NewParamText.join("\n")+'\n\n'+PortalEval.params.OptionsPageCommentStart+MoreParams+PortalEval.params.OptionsPageCommentEnd;
NewParamText = PortalEval.params.OptionsPageTemplate.split("$1").join(NewParamText);
// return alert(NewParamText);
PortalEval.functions.saveOptions(NewParamText, MoreParams);
},
saveOptions : function(NewParamText, MoreParams){
var title = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js';
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgSaveParams.split("$page").join(title), true);
$.ajax({
url: mw.util.wikiScript('api'),
data: {action:'query',meta:'tokens',format:'json',type:'csrf'},
dataType: 'json'
}).then(function(data) {
$.ajax({
url: mw.util.wikiScript('api'),
method: 'POST',
data: {
action: 'edit',
title: title,
text: NewParamText,
summary: PortalEval.texts.SaveParamsResume.split("$docpage").join(PortalEval.params.DocPage),
basetimestamp: "now",
format: 'json',
token: data.query.tokens.csrftoken
},
dataType: 'json',
success: function(data){
var DEFAULTparams = PortalEval.params.DEFAULTparams;
for(var dp in DEFAULTparams){ PortalEval.params[dp] = DEFAULTparams[dp]; }
var DEFAULTtexts = PortalEval.params.DEFAULTtexts;
for(var dt in DEFAULTtexts){ PortalEval.texts[dt] = DEFAULTtexts[dt]; }
try{
eval(NewParamText);
window.PortalEval_UserCustom();
}catch(e){ console.error(e.message); }
PortalEval.params.OptionsMoreParams = MoreParams;
PortalEval.functions.alertControl();
PortalEval.functions.openOptionsForm();
PortalEval.functions.openOptionsForm();
}
});
});
},
customize : function(type, optname, optvalue){
if(!type || !optname || typeof(optvalue)==="undefined") return;
var Default = PortalEval.params[("DEFAULT"+type)];
if(typeof(Default)!=="object") return;
Default = Default[optname];
if(typeof(Default)==="undefined") return;
PortalEval[type][optname] = optvalue;
},
createParamsUL : function(){
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.style.overflowY = "scroll";
Div.id = "OPTIONparams";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
UL.id = "OPTIONULparams";
UL.className = "optionsUL";
var ColWidth = PortalEval.params.OptionUlColumnWidth;
UL.setAttribute("style", "-webkit-columns:"+ColWidth+"px; -moz-columns:"+ColWidth+"; columns:"+ColWidth+"px;");
UL.style.marginRight = "1em";
Div.appendChild(UL)
var ActualParams = PortalEval.params;
var EditableParams = PortalEval.params.EditableParams;
var DEFAULTparams = PortalEval.params.DEFAULTparams;
for(var a=0,l=EditableParams.length;a<l;a++){
var paramname = EditableParams[a];
var modified = false;
var LI = document.createElement('li');
var defaultparam = DEFAULTparams[paramname];
var actualparam = ActualParams[paramname];
var HiddenName = PortalEval.functions.createInput({type:'hidden',name:"name",value:paramname});
LI.appendChild(HiddenName);
var HiddenType = PortalEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultparam)});
LI.appendChild(HiddenType);
if(actualparam !== defaultparam) modified = true;
var DefaultHidden = PortalEval.functions.createInput({type:'hidden',name:"default",value:defaultparam});
LI.appendChild(DefaultHidden);
var DefaultInput = PortalEval.functions.createInput({type:'button',name:"defaultB",value:PortalEval.texts.DefButtonText,
title:PortalEval.texts.DefButtonTitle.split("$1").join(defaultparam)});
LI.appendChild(DefaultInput);
if(typeof(defaultparam)==="boolean"){
DefaultInput.onclick = function(){ this.nextSibling.checked = ( this.previousSibling.value =="true" ? "checked" : false ); }
var ActualInput = PortalEval.functions.createInput({type:'checkbox',name:"actual",value:actualparam});
if(actualparam) ActualInput.checked = "checked";
}else if(typeof(defaultparam)!=="object"){
DefaultInput.onclick = function(){ this.nextSibling.value = this.previousSibling.value; }
if(paramname == "DefaultPortal" || paramname == "DefaultSort"){
var ActualInput;
if(paramname == "DefaultSort") ActualInput = PortalEval.functions.createSortSelect(PortalEval.params.DefaultSort);
if(paramname == "DefaultPortal") ActualInput = PortalEval.functions.createThemeSelect(null, actualparam, (actualparam === ""));
ActualInput.name = "actual";
var MoreWidth = PortalEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))];
ActualInput.style.width = (PortalEval.params.OptionStringWidth+(MoreWidth ? MoreWidth : 0))+"px";
}else{
var ActualInput = PortalEval.functions.createInput({type:'text',name:"actual",value:actualparam});
ActualInput.style.width = PortalEval.params[("Option"+( typeof(defaultparam) === "number" ? "Number" : "String" )+"Width")]+"px";
}
}
LI.appendChild(ActualInput);
var Label = document.createElement('label');
Label.innerHTML = PortalEval.texts[("OPTION"+paramname)] || ("OPTION"+paramname);
if(modified){
Label.style.color = "red";
Label.title = PortalEval.texts.OptionModified;
}
Label.setAttribute('for', paramname);
LI.appendChild(document.createTextNode(" : "));
LI.appendChild(Label);
UL.appendChild(LI);
}
return Div;
},
createTextsUL : function(){
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.style.overflowY = "scroll";
Div.id = "OPTIONtexts";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
UL.id = "OPTIONULtexts";
var ColWidth = PortalEval.params.OptionUlColumnWidth;
UL.setAttribute("style", "-webkit-columns:"+ColWidth+"px; -moz-columns:"+ColWidth+"; columns:"+ColWidth+"px;");
UL.style.marginRight = "1em";
UL.className = "optionsUL";
Div.appendChild(UL);
var DEFAULTtexts = PortalEval.params.DEFAULTtexts;
var ActualTexts = PortalEval.texts;
for(var textname in DEFAULTtexts){
var modified = false;
var defaulttext = DEFAULTtexts[textname];
var actualtext = ActualTexts[textname];
var LI = document.createElement('li');
var HiddenName = PortalEval.functions.createInput({type:'hidden',name:"name",value:textname});
LI.appendChild(HiddenName);
var HiddenType = PortalEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaulttext)});
LI.appendChild(HiddenType);
if(typeof(defaulttext)!="object"){
if(actualtext !== defaulttext) modified = true;
var DefaultHidden = PortalEval.functions.createInput({type:'hidden',name:"default",value:defaulttext});
LI.appendChild(DefaultHidden);
var ActualInput = PortalEval.functions.createInput({type:'textarea',name:"actual",value:actualtext,
title : (PortalEval.texts[("OPTION"+textname)] || PortalEval.texts[textname] || textname)});
ActualInput.setAttribute('rows', 1);
if(modified) ActualInput.style.color = 'red';
LI.appendChild(ActualInput);
}
UL.appendChild(LI);
}
return Div;
},
createMoreParamsUL : function(){
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.style.overflowY = "scroll";
Div.id = "OPTIONmoreparams";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
UL.id = "OPTIONULmoreparams";
UL.style.marginRight = "1em";
UL.className = "optionsUL";
Div.appendChild(UL);
var OptionsMoreParams = (PortalEval.params.OptionsMoreParams || "");
var MoreLI = document.createElement('li');
MoreLI.style.marginTop = "1em";
MoreLI.style.paddingBottom = "1em";
MoreLI.style.paddingLeft = "2px";
MoreLI.style.paddingRight = "2px";
var Textarea = PortalEval.functions.createInput({type:"textarea",name:'moreparams',value:OptionsMoreParams});
Textarea.setAttribute('rows', PortalEval.params.MoreParamsRows);
if(OptionsMoreParams){
Textarea.style.color = "red";
Textarea.title = PortalEval.texts.OptionModified;
}
MoreLI.appendChild(Textarea);
UL.appendChild(MoreLI);
return Div;
},
openOptionsForm : function(){
var TROptions = document.getElementById("PortalEvalOptionsTR");
var OptionsDiv = document.getElementById("PortalEvalOptionsFS");
if(!TROptions || !OptionsDiv) return;
if(TROptions.style.display != "none"){
TROptions.style.display = "none";
while(OptionsDiv.firstChild){ OptionsDiv.removeChild(OptionsDiv.firstChild); }
}else{
var Legend = document.createElement('legend');
var OKInput = PortalEval.functions.createInput({type:'button',value:PortalEval.texts.OptionValidate,title:PortalEval.texts.OptionValidateTip});
OKInput.onclick = function(){
PortalEval.functions.updateOptions();
}
Legend.appendChild(OKInput);
OptionsDiv.appendChild(Legend);
var P = OptionsDiv.appendChild(document.createElement('p'));
P.style.textAlign = "center";
OptionsDiv.appendChild(PortalEval.functions.createParamsUL());
OptionsDiv.appendChild(PortalEval.functions.createTextsUL());
OptionsDiv.appendChild(PortalEval.functions.createMoreParamsUL());
var ULs = OptionsDiv.getElementsByTagName('div');
var ulcount = 0;
for(var a=0,l=ULs.length;a<l;a++){
var thisUL = ULs[a];
if(!$(thisUL).hasClass("optionsDiv") || !thisUL.id) continue;
var ID = thisUL.id;
var Input = PortalEval.functions.createInput({type:'button',name:ID,value:(PortalEval.texts[ID] || ID)});
Input.onclick = function(){
PortalEval.functions.showThisUL(this);
}
if(a>0) Input.style.marginLeft = "0.5em";
if(ulcount !== 0) thisUL.style.display = "none";
else Input.style.textDecoration = "underline";
P.appendChild(Input);
ulcount++;
}
TROptions.style.display = "";
}
},
showThisUL : function(I){
var P = I.parentNode;
var F = document.getElementById("PortalEvalOptionsFS");
if(!P || !F) return;
var ELID = I.name;
var ELs = F.getElementsByTagName('div');
for(var a=0,l=ELs.length;a<l;a++){
var thisEL = ELs[a];
if(!$(thisEL).hasClass("optionsDiv") || !thisEL.id) continue;
if(thisEL.id == ELID) thisEL.style.display = "";
else thisEL.style.display = "none";
}
var Inputs = P.getElementsByTagName('input');
for(var a=0,l=Inputs.length;a<l;a++){
var Input = Inputs[a];
if(I == Input) Input.style.textDecoration = "underline";
else Input.style.textDecoration = "";
}
},
createCategorySelect : function(InputText){
var CategorySelect = document.createElement('select');
CategorySelect.id = "PortalEval_CatSelect";
CategorySelect.style.display = "none";
InputText.parentNode.insertBefore(CategorySelect, InputText.nextSibling);
var Cat = InputText.value;
if(Cat !== "") PortalEval.functions.getSelectedPrefixCats(Cat);
},
setCategorySelectPosition : function(){
var InputText = document.getElementById("PortalEval_Cat");
var CategorySelect = document.getElementById("PortalEval_CatSelect");
var Options = CategorySelect.getElementsByTagName('option');
var Taille = PortalEval.params.CategorySelectSize;
if(Options.length < Taille) Taille = Options.length;
var H = (Taille * 20);
CategorySelect.size = Taille;
CategorySelect.style.align = "left";
CategorySelect.style.Zindex = 5;
CategorySelect.style.position = "relative";
CategorySelect.style.width = InputText.offsetWidth + "px" ;
CategorySelect.style.height = H + "px" ;
CategorySelect.style.top = "-20px" ;
CategorySelect.style.marginTop = "-" + H + "px" ;
CategorySelect.style.marginRight = -CategorySelect.offsetWidth + "px";
CategorySelect.style.marginLeft = -InputText.offsetWidth + "px";
},
onSelectClick : function(option){
var NewCat = option.value;
var CatInput = document.getElementById("PortalEval_Cat");
CatInput.value = NewCat;
option.parentNode.style.display = "none";
PortalEval.functions.getSelectedPrefixCats(NewCat);
PortalEval.functions.getSelectedCatInfos(NewCat);
PortalEval.functions.getSelectedCatParents(NewCat);
PortalEval.functions.getSelectedCatDaughters(NewCat);
CatInput.focus();
},
checkSelectedCat : function(){
var CatInput = document.getElementById("PortalEval_Cat");
if(!CatInput) return;
var Cat = CatInput.value;
setTimeout(function(){
PortalEval.functions.getSelectedPrefixCats(Cat);
PortalEval.functions.getSelectedCatInfos(Cat);
PortalEval.functions.getSelectedCatParents(Cat);
PortalEval.functions.getSelectedCatDaughters(Cat);
},1000);
},
getSelectedPrefixCats(Cat){
var CatInput = document.getElementById("PortalEval_Cat");
var CatSelect = document.getElementById("PortalEval_CatSelect");
if(CatInput.value != Cat) return;
// https://fr.wikipedia.org/w/api.php?action=query&aclimit=20&list=allcategories&acprefix=Colo
var datas = {
action : 'query',
list : 'allcategories',
acprefix : Cat,
aclimit : PortalEval.params.CategorySuggestions,
format : 'json'
};
$.ajax({
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value.indexOf(Cat)!==0) return;
var categories = data.query.allcategories;
if(categories.length == 0) return CatSelect.style.display = "none";
while(CatSelect.firstChild){ CatSelect.removeChild(CatSelect.firstChild); }
var titles = [];
for(var a=0,l=categories.length;a<l;a++){
var catdata = categories[a];
var category = catdata[(Object.keys(catdata)[0])];
titles.push(category);
var option = document.createElement('option');
option.value = category;
option.innerHTML = category;
option.onclick = function(){
PortalEval.functions.onSelectClick(this);
}
CatSelect.insertBefore(option, CatSelect.firstChild);
if(a == 0) option.selected = "selected";
}
if(categories.length > 0) CatSelect.style.display = "inline";
if(titles[0] == Cat ) CatSelect.style.display = "none";
PortalEval.functions.setCategorySelectPosition();
});
},
getSelectedCatInfos(Cat){
var CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
var CatInfosDiv = document.getElementById("CatInfosDiv");
if(!CatInfosDiv) return;
CatInfosDiv.style.visibility = "hidden";
var datas = {
action:'query',
prop:'categoryinfo',
titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
format:'json'
};
$.ajax({
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
var missing = page.missing === "";
var Pinfos = document.getElementById("Pinfos");
var LIpages = document.getElementById("LIpages");
var LIsubcats = document.getElementById("LIsubcats");
LIpages.style.visibility = "hidden";
LIsubcats.style.visibility = "hidden";
if(missing){
var CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
$(Pinfos).addClass("nocat");
Pinfos.innerHTML = PortalEval.texts.CatExistsNo.split("$cat").join(Cat);
}else{
$(Pinfos).removeClass("nocat");
var categoryinfo = page.categoryinfo;
if(categoryinfo){
var pages = categoryinfo.pages;
var subcats = categoryinfo.subcats;
Pinfos.innerHTML = PortalEval.texts.CatExistsYes.split("$cat").join(Cat);
if(pages){
LIpages.innerHTML = PortalEval.texts.CatPages.split("$1").join(pages);
LIpages.style.visibility = "visible";
}
if(subcats){
LIsubcats.innerHTML = PortalEval.texts.CatCats.split("$1").join(subcats);
LIsubcats.style.visibility = "visible";
}
}
}
CatInfosDiv.style.visibility = "visible";
});
},
getSelectedCatParents(Cat, ParentList, clcontinue){
var CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
if(!ParentList){
ParentList = [];
var CatParentsDiv = document.getElementById("CatParentsDiv");
CatParentsDiv.style.visibility= "hidden";
while(CatParentsDiv.firstChild){ CatParentsDiv.removeChild(CatParentsDiv.firstChild); }
}
var datas = {
action:'query',
prop:'categories',
clprop:'hidden',
cllimit:PortalEval.params.APILimit,
titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
format:'json'
};
if(clcontinue) datas.clcontinue = clcontinue;
$.ajax({
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
var categories = page.categories;
if(!categories) return;
for(var a=0,l=categories.length;a<l;a++){
ParentList.push([categories[a].title,(categories[a].hidden===""?true:false)]);
}
var cont = data.continue;
if(cont){
PortalEval.functions.getSelectedCatParents(Cat, ParentList, cont.clcontinue)
}else{
var UL = document.createElement('ul');
CatParentsDiv.appendChild(UL);
for(var a=0,l=ParentList.length;a<l;a++){
var page = ParentList[a][0];
var title = PortalEval.functions.getNamespaceInfoFromPage(page, "PageName");
var hidden = ParentList[a][1];
var LI = document.createElement('li');
var link = PortalEval.functions.createLink(page,{text:title});
var span = document.createElement('span');
if(hidden){
span = document.createElement('abbr');
span.style.color = "DarkGray";
span.title = PortalEval.texts.HiddenCat;
}
$(span).addClass("CategoryTreeToggle");
span.appendChild(document.createTextNode("►"));
LI.appendChild(span);
LI.appendChild(document.createTextNode(" "));
LI.appendChild(link);
UL.appendChild(LI);
}
PortalEval.functions.addSelectCatOnclickTolinks(UL);
CatParentsDiv.style.visibility= "visible";
}
});
},
getSelectedCatDaughters(Cat){
var CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
// "//fr.wikipedia.org/w/api.php?format=json&action=categorytree&category=Colombie";
var CatDaughtersDiv = document.getElementById("CatDaughtersDiv");
CatDaughtersDiv.style.visibility= "hidden";
$.ajax({
url: mw.util.wikiScript('api'),
data: {
action:'categorytree',
options:{showcount:1},
category:Cat,
format:'json'
},
dataType: 'json'
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
var HTML = data.categorytree["*"];
CatDaughtersDiv.innerHTML = HTML;
PortalEval.functions.addSelectCatOnclickTolinks(CatDaughtersDiv);
CatDaughtersDiv.style.visibility= "visible";
});
},
addSelectCatOnclickTolinks(node){
var alllinks = node.getElementsByTagName('a');
for(var a=0,l=alllinks.length;a<l;a++){
var link = alllinks[a];
link.onclick = function(){
var cat = this.innerHTML;
var Input = document.getElementById("PortalEval_Cat");
if(Input){
Input.value = cat;
PortalEval.functions.checkSelectedCat();
}
return false;
}
}
},
prepareSpecialpage : function(){
var Title = document.getElementsByTagName('title')[0];
var TitleH = document.getElementsByTagName('h1')[0];
var Content = document.getElementById('mw-content-text');
if(!Title || !TitleH || !Content) return;
Title.innerHTML = PortalEval.texts.SpecialpageNameH.split("$1").join(PortalEval.texts.SpecialpageName);
TitleH.innerHTML = PortalEval.texts.SpecialpageName;
while(Content.firstChild){ Content.removeChild(Content.firstChild); }
PortalEval.functions.createSpecialpageBoard(Content);
},
createSpecialpageBoard : function(contentNode){
var PortalEvalBoard = document.createElement('div');
PortalEvalBoard.id = "PortalEvalBoard";
contentNode.appendChild(PortalEvalBoard);
var PortalEvalBoardHead = document.createElement('fieldset');
PortalEvalBoardHead.id = "PortalEvalBoardHead";
PortalEvalBoard.appendChild(PortalEvalBoardHead);
var MainOptions = PortalEval.functions.createMainOptions();
for(var a=0,l=MainOptions.length;a<l;a++) PortalEvalBoardHead.appendChild(MainOptions[a]);
var BoardListDiv = PortalEval.functions.createBoardListDiv();
BoardListDiv.style.display = "none";
PortalEvalBoard.appendChild(BoardListDiv);
var OptionsInput = document.getElementById("GlobalOptionsInput");
var GoInput = document.getElementById("PortalEval_OptionPortalInput");
var ControlSpan = document.createElement('span');
ControlSpan.innerHTML = "<span id='PortalEvalBoardControlRunning'> </span><span id='PortalEvalBoardControlTR'><span id='PortalEvalBoardControl'> </span></span>";
GoInput.parentNode.appendChild(ControlSpan);
var OptionDiv = document.createElement('div');
OptionDiv.style.display = "none";
OptionDiv.id = "PortalEvalOptionsTR";
OptionsInput.parentNode.appendChild(OptionDiv);
var OptionFS = document.createElement('fieldset');
OptionFS.id = "PortalEvalOptionsFS";
OptionDiv.appendChild(OptionFS);
GoInput.parentNode.appendChild(OptionDiv);
var ValidateInput = document.getElementById("GlobalChangeInput");
var SortFS = document.getElementById("fieldsetSort");
while(SortFS.firstChild){
var node = SortFS.removeChild(SortFS.firstChild);
if(node.tagName && node.tagName.toLowerCase() != "legend") ValidateInput.parentNode.insertBefore(node, ValidateInput);
}
SortFS.parentNode.removeChild(SortFS);
var TDCat = document.createElement('td');
var CatFS = document.getElementById("fieldsetCat");
var CatSelect = document.getElementById("PortalEval_Cat");
CatSelect.onkeyup = PortalEval.functions.checkSelectedCat;
var CatInput = document.getElementById("PortalEval_SubCats");
var nodes = [CatSelect, CatInput];
for(var a=0,l=nodes.length;a<l;a++){
var node = nodes[a];
node.parentNode.removeChild(node);
var Form = document.createElement('form');
Form.onsubmit = function(){ return false; };
Form.appendChild(node);
if(a==1){
var Label = document.createElement('label');
Label.setAttribute('for', 'subcats');
Label.innerHTML = PortalEval.texts.SubCatTitle;
Form.appendChild(document.createTextNode(' '));
Form.appendChild(Label);
}
TDCat.appendChild(Form);
}
TDCat.style.width = (parseInt(CatSelect.style.width.split("px").join(""))+100)+"px";
var Table = document.createElement('table');
Table.style.width = "100%";
var TR1 = document.createElement('tr');
var TR2 = document.createElement('tr');
var TDInfos = document.createElement('td');
var TDFamily = document.createElement('td');
TDFamily.setAttribute('rowspan', 2);
TR1.appendChild(TDCat);
TR1.appendChild(TDFamily);
TR2.appendChild(TDInfos);
var FamilyTable = document.createElement('table')
var FamilyTR = document.createElement('tr');
TDFamily.appendChild(FamilyTable);
FamilyTable.appendChild(FamilyTR);
var TDParents = document.createElement('td');
var TDDaughters = document.createElement('td');
FamilyTR.appendChild(TDParents);
FamilyTR.appendChild(TDDaughters);
Table.appendChild(TR1);
Table.appendChild(TR2);
CatFS.appendChild(Table);
var DivInfos = TDInfos.appendChild(document.createElement('div'));
DivInfos.id = "CatInfosDiv";
var Pinfos = DivInfos.appendChild(document.createElement('p'));
Pinfos.id = "Pinfos";
var ULinfos = DivInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "LIpages";
var LIsubcats = ULinfos.appendChild(document.createElement('li'));
LIsubcats.id = "LIsubcats";
var Pparents = TDParents.appendChild(document.createElement('p'))
Pparents.style.textAlign = "center";
Pparents.innerHTML = PortalEval.texts.CatParents;
var DivParents = TDParents.appendChild(document.createElement('div'));
DivParents.id = "CatParentsDiv";
var Pdaughters = TDDaughters.appendChild(document.createElement('p'))
Pdaughters.style.textAlign = "center";
Pdaughters.innerHTML = PortalEval.texts.CatDaughters;
var DivDaughters = TDDaughters.appendChild(document.createElement('div'));
DivDaughters.id = "CatDaughtersDiv";
FamilyTable.style.width = "100%";
TDParents.style.width = "50%";
TDDaughters.style.width = "50%";
TDParents.setAttribute('valign',"top");
TDDaughters.setAttribute('valign',"top");
DivParents.style.height = "150px";
DivDaughters.style.height = "150px";
DivInfos.style.height= "80px";
DivParents.style.overflowY = "scroll";
DivDaughters.style.overflowY = "scroll";
DivParents.style.visibility = "hidden";
DivDaughters.style.visibility = "hidden";
DivInfos.style.visibility = "hidden";
PortalEval.functions.createCategorySelect(CatSelect);
PortalEval.functions.checkSelectedCat();
PortalEval.functions.getEvalThemes();
PortalEval.functions.getStubThemes();
PortalEval.functions.getUserSubPage();
},
createCategoryBoard : function(){
var board = document.getElementById("PortalEvalBoard");
if(board){
board.style.display = "";
return PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, false);
}
PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, false);
board = document.createElement("div");
board.id = "PortalEvalBoard";
board.style.backgroundColor = "white";
document.body.appendChild(board);
var boardHead = document.createElement("div");
boardHead.id = "PortalEvalBoardHead";
var HeadTable = document.createElement("table");
HeadTable.width = "100%";
if(PortalEval.params.AddWarning){
var Caption = document.createElement("caption");
$(Caption).addClass("error");
Caption.innerHTML = PortalEval.texts.Warning;
HeadTable.appendChild(Caption);
}
var HeadTR = document.createElement("tr");
var TDRunning = document.createElement("td"); // Icone Running
TDRunning.id = "PortalEvalBoardControlRunning";
TDRunning.width = "30px";
HeadTR.appendChild(TDRunning);
var TDMainHead = document.createElement("td");
TDMainHead.id = "PortalEvalMainOptionsFS";
TDMainHead.style.textAlign = "center";
TDMainHead.style.whiteSpace = "nowrap";
var Center = document.createElement('center');
TDMainHead.appendChild(Center);
var MainOptions = PortalEval.functions.createMainOptions();
for(var a=0,l=MainOptions.length;a<l;a++) Center.appendChild(MainOptions[a]);
var TDButtons = document.createElement("td"); // Bouton Fermer
TDButtons.width = "30px";
TDButtons.style.textAlign = "right";
TDButtons.valign = "top";
var CloseButton = document.createElement("a");
CloseButton.href = "javascript:PortalEval.functions.removeBoard()";
CloseButton.title = PortalEval.texts.GoCloseTitle;
var CloseButtonImage = document.createElement("img");
CloseButtonImage.width = 24;
CloseButtonImage.height = 24;
CloseButtonImage.src = PortalEval.params.ImageURL + PortalEval.params.CloseIcon;
CloseButton.appendChild(CloseButtonImage);
TDButtons.appendChild(CloseButton);
HeadTR.appendChild(TDMainHead);
HeadTR.appendChild(TDButtons);
HeadTable.appendChild(HeadTR);
var TRControl = document.createElement("tr");
TRControl.id = "PortalEvalBoardControlTR";
var TDControl = document.createElement("td");
TDControl.setAttribute("colspan", "3");
var ControlSpan = document.createElement('span');
ControlSpan.style.whiteSpace = "nowrap";
ControlSpan.id = "PortalEvalBoardControl";
TDControl.appendChild(ControlSpan);
TRControl.appendChild(TDControl);
HeadTable.appendChild(TRControl);
var TROptions = document.createElement("tr");
TROptions.id = "PortalEvalOptionsTR";
TROptions.style.display = "none";
var TDOptions = document.createElement("td");
TDOptions.setAttribute("colspan", "3");
var OptionsDiv = document.createElement('div');
OptionsDiv.style.margin = "0 1em 0 1em";
var OptionsFieldset = document.createElement('fieldset');
OptionsFieldset.id = "PortalEvalOptionsFS";
OptionsDiv.appendChild(OptionsFieldset);
TDOptions.appendChild(OptionsDiv);
TROptions.appendChild(TDOptions);
HeadTable.appendChild(TROptions);
boardHead.appendChild(HeadTable);
board.appendChild(boardHead);
board.appendChild(PortalEval.functions.createBoardListDiv());
PortalEval.functions.getEvalThemes();
PortalEval.functions.getStubThemes();
PortalEval.functions.getUserSubPage();
},
alertControl : function(text, running){
var control = document.getElementById("PortalEvalBoardControl");
var controlTR = document.getElementById("PortalEvalBoardControlTR");
var controlRunning = document.getElementById("PortalEvalBoardControlRunning");
if(!control || !controlTR || !controlRunning) return;
if(!text){
controlRunning.innerHTML = '<img width="24" height="24" src="'+PortalEval.params.ImageURL + PortalEval.params.OKIcon+'" />';
control.innerHTML = '';
controlTR.style.display = 'none';
}else{
controlRunning.innerHTML = (running ? ('<img width="24" height="24" src="'+PortalEval.params.ImageURL + PortalEval.params.RunningIcon+'" />' + " ") : "")
control.innerHTML = text;
controlTR.style.display = '';
}
},
createMainOptions : function(){
var CatLI = document.createElement('fieldset'); // Catégorie
CatLI.id = "fieldsetCat";
var CatLabel = document.createElement('legend');
CatLabel.innerHTML = PortalEval.texts.Cat;
var Cond = PortalEval.functions.getLaunchCondition();
var CatTitle = "";
var wgTitle = mw.config.get("wgTitle");
if(Cond == 1) CatTitle = wgTitle;
else if(Cond == 2 && wgTitle.indexOf("PortalEval/")!=-1) CatTitle = wgTitle.split("PortalEval/")[1];
var PortalCat = PortalEval.functions.createInput({type:"text",value:CatTitle,name:'cat'});
PortalCat.id = "PortalEval_Cat";
PortalCat.style.width = PortalEval.params.CatInputWidth+"px";
PortalEval.functions.disableThings([ PortalCat ], (Cond != 2) );
var PortalListCubCat = PortalEval.functions.createInput({type:"checkbox",title:PortalEval.texts.SubCatTitle,name:'subcats'});
PortalListCubCat.id = "PortalEval_SubCats";
CatLI.appendChild(CatLabel);
CatLI.appendChild(PortalCat);
CatLI.appendChild(PortalListCubCat);
var EvalLI = document.createElement('fieldset'); // Évaluations
EvalLI.id = "fieldsetEval";
var PortalLabel = document.createElement('legend');
PortalLabel.innerHTML = PortalEval.texts.Portal
var PortalSelect = document.createElement('select');
PortalSelect.id = "PortalEval_OptionPortal";
PortalSelect.name = "PortalEval_OptionPortal";
PortalSelect.style.width = PortalEval.params.MainEvalThemeWidth+"px";
EvalLI.appendChild(PortalLabel);
EvalLI.appendChild(PortalSelect);
var SortLI = document.createElement('fieldset'); // Tri
SortLI.id = "fieldsetSort";
var SortLabel = document.createElement('legend');
SortLabel.innerHTML = PortalEval.texts.Sort;
var SortHidden = PortalEval.functions.createInput({type:"hidden"});
SortHidden.id = "PortalEval_SortHidden";
var SortSelect = PortalEval.functions.createSortSelect(PortalEval.params.DefaultSort, SortHidden);
SortSelect.id = "PortalEval_OptionSort";
SortSelect.name = "PortalEval_OptionSort";
var SortListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoSortText,title:PortalEval.texts.GoSortTitle});
SortListInput.id = "PortalEval_SortButton";
SortListInput.onclick = function(){
var Portal_Select = document.getElementById("PortalEval_OptionPortal");
var Sort_Select = document.getElementById("PortalEval_OptionSort");
var Sort_Hidden = document.getElementById("PortalEval_SortHidden");
Sort_Hidden.value = Sort_Select.value;
PortalEval.functions.disableThings([ this ], true);
PortalEval.functions.sortPages(Sort_Select.value, Portal_Select.value);
}
SortLI.appendChild(SortLabel);
SortLI.appendChild(SortHidden);
SortLI.appendChild(SortSelect);
SortLI.appendChild(SortListInput);
var ActionsLI = document.createElement('fieldset'); // Actions
ActionsLI.id = "fieldsetActions";
var ActionsLabel = document.createElement('legend');
ActionsLabel.innerHTML = PortalEval.texts.Actions;
var PortalListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoListText,title:PortalEval.texts.GoListTitle});
PortalListInput.id = "PortalEval_OptionPortalInput";
PortalListInput.onclick = function(){
PortalEval.functions.clearBoard();
var Select = document.getElementById("PortalEval_OptionPortal");
PortalEval.functions.getPages(-1, Select.value);
}
var GlobalChangeInput = PortalEval.functions.createInput({type:"button",name:"Change",value:PortalEval.texts.GoChangeText,title:PortalEval.texts.GoChangeTitle.split("$1").join("")});
GlobalChangeInput.id = "GlobalChangeInput";
GlobalChangeInput.onclick = function(){
var CancelInput = document.getElementById("GlobalCancelInput");
PortalEval.functions.disableThings([ CancelInput, this ], true);
var boardList = document.getElementById("PortalEvalBoardList");
var TRs = boardList.getElementsByTagName("tr");
for(var a=1,l=TRs.length;a<l;a++){
PortalEval.functions.processThatLineChanges((a-1));
}
}
if(!PortalEval.params.AllowEdition) GlobalChangeInput.style.fontStyle = "italic";
var GlobalCancelInput = PortalEval.functions.createInput({type:"button",name:"Change",value:PortalEval.texts.GoCancelText,title:PortalEval.texts.GoCancelTitle.split("$1").join("")});
GlobalCancelInput.id = "GlobalCancelInput";
GlobalCancelInput.onclick = function(){
PortalEval.functions.cancelAllChanges();
}
var PortalListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoListText,title:PortalEval.texts.GoListTitle});
PortalListInput.id = "PortalEval_OptionPortalInput";
PortalListInput.onclick = function(){
PortalEval.functions.clearBoard();
var Select = document.getElementById("PortalEval_OptionPortal");
PortalEval.functions.getPages(-1, Select.value);
}
var ParamsInput = PortalEval.functions.createInput({type:"button",name:"Change",value:PortalEval.texts.GoOptionsText,title:PortalEval.texts.GoOptionsTitle});
ParamsInput.id = "GlobalOptionsInput";
PortalEval.functions.disableThings([ ParamsInput ], !PortalEval.params.OptionsSubPageOK);
ParamsInput.onclick = function(){
PortalEval.functions.openOptionsForm();
}
ActionsLI.appendChild(ActionsLabel);
ActionsLI.appendChild(PortalListInput);
ActionsLI.appendChild(GlobalChangeInput);
ActionsLI.appendChild(GlobalCancelInput);
ActionsLI.appendChild(ParamsInput);
PortalEval.functions.disableThings([ PortalListInput, GlobalChangeInput, GlobalCancelInput ], true);
return [ CatLI, EvalLI, SortLI, ActionsLI ];
},
createBoardListDiv : function(){
var boardListDiv = document.createElement("div");
boardListDiv.id = "PortalEvalBoardListDiv";
var boardList = document.createElement("table");
boardList.className = "evaltable wikitable centre";
boardList.width = "100%";
boardList.id = "PortalEvalBoardList";
boardList.style.marginTop = "0";
var TR1 = document.createElement("tr");
boardList.appendChild(TR1);
for(var a=0,l=5;a<l;a++){
var TH = document.createElement("th");
TH.innerHTML = PortalEval.texts[("TH"+a+"text")];
if(a !=0) TH.width = PortalEval.params[("TH"+a+"width")]+"px";
TR1.appendChild(TH);
}
boardListDiv.appendChild(boardList);
return boardListDiv;
},
removeBoard : function(){
var board = document.getElementById("PortalEvalBoard");
if(board) board.style.display = "none";
PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, true);
},
clearBoard : function(){
var boardList = document.getElementById("PortalEvalBoardList");
if(boardList){
while(boardList.getElementsByTagName("tr").length > 1){
boardList.getElementsByTagName("tr")[1].parentNode.removeChild(boardList.getElementsByTagName("tr")[1]);
if(boardList.getElementsByTagName("tr").length < 2) break;
}
};
},
fillBoardLine : function(index, portal){
var BoardListDiv = document.getElementById("PortalEvalBoardListDiv");
var BoardList = document.getElementById("PortalEvalBoardList");
if(!BoardList || !BoardListDiv) return false;
BoardListDiv.style.display = "";
var Target = BoardList.getElementsByTagName("tr")[0].parentNode;
var TR = document.createElement('tr');
Target.appendChild(TR);
var pagedatas = PortalEval.params.PageList[index];
var title = pagedatas.title;
var talktitle = pagedatas.talktitle;
var talkmissing = pagedatas.talkmissing;
var redirectfrom = pagedatas.redirectfrom;
var disambig = pagedatas.disambig;
var stub = pagedatas.stub;
var evalWT = pagedatas.evalWT;
var evalAVT = pagedatas.evalAVT;
var evalIMP = pagedatas.evalIMP;
var allIMP = pagedatas.allIMP;
TR.id = "IDtr_"+index;
var classes = [];
if(stub) classes.push("stub");
if(typeof(evalAVT)=="number") classes.push("AVT_"+evalAVT);
if(typeof(evalIMP)=="number") classes.push("IMP_"+evalIMP);
TR.className = classes.join(" ");
var TD1 = document.createElement("td"); // "Page"
TD1.className = "TD1";
var PageLink = PortalEval.functions.createLink((redirectfrom ? redirectfrom : title), {preview:index, class:(redirectfrom ? "mw-redirect" : "")});
var TalkPageLink = PortalEval.functions.createLink(talktitle, {text:PortalEval.texts.TalkText, preview:index, class:(talkmissing ? "new" : "")});
TD1.appendChild(PageLink);
TD1.appendChild(document.createTextNode(" ("));
TD1.appendChild(TalkPageLink);
TD1.appendChild(document.createTextNode(")"));
if(disambig){
var Dspan = document.createElement('abbr');
Dspan.innerHTML = '<img width="12" src="'+PortalEval.params.ImageURL + PortalEval.params.DisambigIcon+'" />';
Dspan.title = PortalEval.texts.DisambigTitle;
TD1.appendChild(document.createTextNode(" — "));
TD1.appendChild(Dspan);
}
if(redirectfrom){
var Rspan = document.createElement('abbr');
var Ricon = '<img width="12" src="'+PortalEval.params.ImageURL + PortalEval.params.RedirectIcon+'" />';
Rspan.innerHTML = Ricon;
Rspan.title = PortalEval.texts.RedirectText.split("$page").join(title);
TD1.appendChild(document.createTextNode(" — "));
TD1.appendChild(Rspan);
}
var TD2 = document.createElement("td"); // "Bandeau d'ébauche"
TD2.className = "TD2";
TD2.style.textAlign = "right";
if(stub){
for(var a=0,l=stub.length;a<l;a++){
TD2.appendChild(PortalEval.functions.createStubSelect(index, a));
}
}
var AddStubForm = document.createElement('form');
if(stub && stub.length > 5) AddStubForm.style.display = "none";
AddStubForm.id = "STUBadd_"+index;
var AddStubInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.AddSTUBText,title:PortalEval.texts.AddSTUBTitle});
AddStubInput.onclick = function(){
PortalEval.functions.addOneStubForm(index);
}
AddStubForm.appendChild(AddStubInput);
TD2.appendChild(AddStubForm);
var TD3 = document.createElement("td"); // "Avancement"
TD3.className = "TD3";
TD3.style.textAlign = "center";
if(typeof(evalAVT)=="number"){
TD3.appendChild(PortalEval.functions.createAVTSelect(evalAVT, index));
var col = PortalEval.params.Avancement[evalAVT].color;
var textcolor = PortalEval.params.Avancement[evalAVT].textcolor;
TD3.style.backgroundColor = col;
if(textcolor) TD3.style.color = textcolor;
if( (stub && evalAVT != 5) || (!stub && evalAVT == 5) ){
TD2.style.border = "2px solid red";
TD3.style.border = "2px solid red";
}
}else TD3.appendChild(PortalEval.functions.createAVTSelect(-1, index, true));
var TD4 = document.createElement("td"); // "Importances"
TD4.className = "TD4";
TD4.style.textAlign = "right";
if(typeof(evalIMP)=="number"){
TD4.appendChild(PortalEval.functions.createIMPSelect(evalIMP, portal, index, 0));
var col = PortalEval.params.Importance[evalIMP].color;
var textcolor = PortalEval.params.Importance[evalIMP].textcolor;
TD4.style.backgroundColor = col;
if(textcolor) TD4.style.color = textcolor;
}
if(allIMP){
var count = 1;
for(var port in allIMP){
if(port == portal) continue;
var thisimp = allIMP[port];
TD4.appendChild(PortalEval.functions.createIMPSelect(thisimp, port, index, count));
count++
}
}
var AddIMPForm = document.createElement('form');
AddIMPForm.id = "IMPadd_"+index;
var AddIMPInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.AddIMPText,title:PortalEval.texts.AddIMPTitle});
AddIMPInput.onclick = function(){
PortalEval.functions.addOneIMPForm(index);
}
AddIMPForm.appendChild(AddIMPInput);
TD4.appendChild(AddIMPForm);
var TD5 = document.createElement("td"); // "Actions"
TD5.className = "TD6";
TD5.style.textAlign = "center";
var ChangeInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoChangeOneText,title:PortalEval.texts.GoChangeOneTitle});
ChangeInput.id = "change_"+index;
if(!PortalEval.params.AllowEdition) ChangeInput.style.fontStyle = "italic";
ChangeInput.onclick = function(){
PortalEval.functions.processThatLineChanges(index);
}
TD5.appendChild(ChangeInput);
TD5.appendChild(document.createElement("br"));
var CancelInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoCancelOneText,title:PortalEval.texts.GoCancelOneTitle});
CancelInput.id = "cancel_"+index;
CancelInput.onclick = function(){
PortalEval.functions.updateThatLine(index, pagedatas, true);
}
TD5.appendChild(CancelInput);
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
TR.appendChild(TD1);
TR.appendChild(TD2);
TR.appendChild(TD3);
TR.appendChild(TD4);
TR.appendChild(TD5);
if(PortalEval.params.AutoLaunchPreview) PortalEval.functions.previewPage(title, index);
return TR;
},
updateAdjSelect : function(type, index, count, def){ // type = "", "M", "F"
var Hidden = document.getElementById("adjHidden_"+count+"_"+index);
if(!Hidden){
form = document.createElement("span");
form.id = "AdjForm_"+count+"_"+index;
Hidden = PortalEval.functions.createInput({type:"hidden"});
Hidden.id = "adjHidden_"+count+"_"+index;
form.appendChild(Hidden);
var HiddenType = PortalEval.functions.createInput({type:"hidden",value:type});
HiddenType.id = "TypeadjHidden_"+count+"_"+index;
form.appendChild(HiddenType);
var Select = document.createElement("select");
Select.id = "adjSelect_"+count+"_"+index;
Select.name = "adjHidden_"+count+"_"+index;
Select.className = "adj";
Select.style.width = PortalEval.params.StubThemeWidth+"px";
form.appendChild(Select);
Select.onchange = function(){
var Select = this;
var val = Select.value;
var defval = document.getElementById(Select.name).value;
if(val == defval) $(Select).removeClass("Modified");
else $(Select).addClass("Modified");
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
}
}else{
var Select = Hidden.parentNode.getElementsByTagName('select')[0];
while(Select.firstChild){ Select.removeChild(Select.firstChild); }
}
var opt = document.createElement('option');
opt.innerHTML = "";
opt.value = -1;
Select.appendChild(opt);
$(Select).removeClass("M");
$(Select).removeClass("F");
if(type !== null){
$(Select).addClass(type);
var list = PortalEval.params[("StubAdj"+type)];
for(var a=0,l=list.length;a<l;a++){
var thisadj = list[a];
var opt = document.createElement('option');
opt.innerHTML = thisadj;
opt.value = a;
if(thisadj == def){
opt.selected = "selected";
Hidden.value = opt.value;
}
Select.appendChild(opt);
}
}
return form;
},
getStubAdjType : function(STUBtheme){
var type = null;
var theme = PortalEval.params.StubThemes[STUBtheme];
if(!theme) return null;
var catpattern = theme.categ;
if(catpattern){
if(catpattern.indexOf("<adj>")!=-1) type = "M";
if(catpattern.indexOf("<adjF>")!=-1) type = "F";
}
return type;
},
getAdjDatas : function(STUBtheme){
var adjDatas = {type:null, adj:"", strippedtheme:STUBtheme};
var adjTypes = ["M", "F"];
for(var t=0,tlen=adjTypes.length;t<tlen;t++){
var thistype = adjTypes[t];
var adjList = PortalEval.params[("StubAdj"+thistype)];
for(var a=0,l=adjList.length;a<l;a++){
var thisadj = adjList[a];
if(STUBtheme.indexOf(" "+thisadj) != -1){
var catpattern = STUBtheme.split(" "+thisadj).join(" <adj"+(thistype=="F"?"F":"")+">");
var strippedtheme = STUBtheme.split(" "+thisadj).join("");
var realtheme1 = PortalEval.params.StubThemes[PortalEval.functions.lcFirst(strippedtheme)];
var realtheme2 = PortalEval.params.StubThemes[PortalEval.functions.ucFirst(strippedtheme)];
if(typeof(realtheme1) != "undefined"){
adjDatas.type = thistype;
adjDatas.adj = thisadj;
adjDatas.strippedtheme = PortalEval.functions.lcFirst(strippedtheme);
if(!realtheme1.categ) PortalEval.params.StubThemes[PortalEval.functions.lcFirst(strippedtheme)].categ = catpattern;
}else if(typeof(realtheme2) != "undefined"){
adjDatas.type = thistype;
adjDatas.adj = thisadj;
adjDatas.strippedtheme = PortalEval.functions.ucFirst(strippedtheme);
if(!realtheme2.categ) PortalEval.params.StubThemes[PortalEval.functions.ucFirst(strippedtheme)].categ = catpattern;
}
}
}
}
return adjDatas;
},
createStubSelect : function(index, count){
var thisstub = PortalEval.params.PageList[index].stub[count];
var STUBthemeDatas = PortalEval.functions.getAdjDatas(thisstub);
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.id = "STUBform_"+count+"_"+index;
form.className = "Stub";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
Hidden.id = "Ébauche_"+count+"_"+index;
form.appendChild(Hidden);
var Select = document.createElement("select");
Select.name = "Ébauche_"+count+"_"+index;
Select.style.width = PortalEval.params.StubThemeWidth+"px";
Select.onchange = function(){
PortalEval.functions.checkStubFormChanged(this, count, index);
}
form.appendChild(Select);
var allthemes = PortalEval.functions.sortTextList(Object.keys(PortalEval.params.StubThemes));
for(var a=0,l=allthemes.length;a<l;a++){
var thistheme = allthemes[a];
var themedatas = PortalEval.params.StubThemes[thistheme];
var opt = document.createElement('option');
opt.innerHTML = thistheme;
opt.value = thistheme;
if(thistheme == STUBthemeDatas.strippedtheme){
opt.selected = "selected";
Hidden.value = opt.value;
}
Select.appendChild(opt);
}
var type = ( STUBthemeDatas.type || PortalEval.functions.getStubAdjType(STUBthemeDatas.strippedtheme));
form.appendChild(PortalEval.functions.updateAdjSelect(type, index, count, STUBthemeDatas.adj));
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteSTUBText,title:PortalEval.texts.DeleteSTUBTitle});
suplink.onclick = function(){
var F = this.parentNode;
thisSelect = F.getElementsByTagName("select")[0];
F.style.display = "none";
$(F).addClass("Removed");
PortalEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
}
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
return form;
},
getSelectCountValue : function(TD, index, classname, prefix){
var count = 0;
var OK = false;
var counts = [];
var AllForms = TD.getElementsByTagName('form');
for(var a=0,l=AllForms.length;a<l;a++){
if( $(AllForms[a]).hasClass(classname) ){
var ID = AllForms[a].id;
ID = ID.split(prefix+"_").join("");
ID = parseInt(ID.split("_"+index).join(""));
counts.push(ID);
}
}
while(!OK){
if(counts.indexOf(count)===-1){
OK = true;
break;
}
count++;
}
return count;
},
addOneStubForm : function(index){
var AddStubForm = document.getElementById("STUBadd_"+index);
var TD = AddStubForm.parentNode;
var count = PortalEval.functions.getSelectCountValue(TD, index, "Stub", "STUBform");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.id = "STUBform_"+count+"_"+index;
form.className = "Stub Modified Added";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden",value:"."});
Hidden.id = "Ébauche NEW_"+count+"_"+index;
form.appendChild(Hidden);
var Select = document.createElement("select");
Select.name = "Ébauche NEW_"+count+"_"+index;
$(Select).addClass("Modified");
Select.style.width = PortalEval.params.StubThemeWidth+"px";
var allthemes = PortalEval.functions.sortTextList(Object.keys(PortalEval.params.StubThemes));
for(var a=0,l=allthemes.length;a<l;a++){
var thistheme = allthemes[a];
var opt = document.createElement('option');
opt.innerHTML = thistheme;
opt.value = thistheme;
if(a == 0) opt.selected = "selected";
Select.appendChild(opt);
allthemes.push(thistheme);
}
Select.onchange = function(){
PortalEval.functions.checkStubFormChanged(this, count, index);
}
form.appendChild(Select);
form.appendChild(PortalEval.functions.updateAdjSelect(null, index, count, ""));
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteSTUBText,title:PortalEval.texts.DeleteSTUBTitle});
suplink.onclick = function(){
var F = this.parentNode;
F.parentNode.removeChild(F);
PortalEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
}
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
AddStubForm.parentNode.insertBefore(form, AddStubForm);
PortalEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
Select.focus();
},
checkStubFormChanged : function(Select, count, index){
var val = Select.value;
var defval = document.getElementById(Select.name).value;
var adjSelect = document.getElementById("adjSelect_"+count+"_"+index);
var adjHidden = document.getElementById("adjHidden_"+count+"_"+index);
var Oldtype = null;
var def = -1;
if($(adjSelect).hasClass("M")) Oldtype = "M";
if($(adjSelect).hasClass("F")) Oldtype = "F";
var NewType = PortalEval.functions.getStubAdjType(val);
if(NewType!=null){
var paramAdj = PortalEval.params[("StubAdj"+NewType)];
if(Oldtype != null) def = paramAdj[adjSelect.value];
else def = paramAdj[adjHidden.value];
}
if(val == defval && !$(Select.parentNode).hasClass("Added")) $(Select).removeClass("Modified");
else $(Select).addClass("Modified");
PortalEval.functions.updateAdjSelect(NewType, index, count, def);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
},
checkStubFormNumbers : function(index){
var AddStubForm = document.getElementById("STUBadd_"+index);
var TD = AddStubForm.parentNode;
var count = 0;
var AllForms = TD.getElementsByTagName('form');
for(var a=0,l=AllForms.length;a<l;a++){
if( $(AllForms[a]).hasClass("Stub") && !$(AllForms[a]).hasClass("Removed") ) count++
}
if(count>5) AddStubForm.style.display = "none";
else AddStubForm.style.display = "";
},
setChangeCancelOneSTUBInputDisabled : function(Select, count, index){
var Form = Select.parentNode;
while(Form.tagName.toLowerCase() != "form") Form = Form.parentNode;
var Selects = Form.getElementsByTagName('select');
$(Form).removeClass("Modified");
for(var a=0,l=Selects.length;a<l;a++){
if($(Selects[a]).hasClass("Modified") || $(Form).hasClass("Removed")) $(Form).addClass("Modified");
}
PortalEval.functions.setChangeCancelOneInputDisabled(index);
},
createIMPSelect : function(evalIMP, portal, index, count){
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.id = "IMPform_"+count+"_"+index;
form.style.whiteSpace = "nowrap";
form.className = "Eval";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
Hidden.id = "IMP_"+count+"_"+index;
form.appendChild(Hidden);
var Label = document.createElement('label');
Label.setAttribute("for", "Importance "+portal);
Label.innerHTML = portal;
if(count==0){
Label.style.fontWeight = "bold";
Label.className = "portal";
}
form.appendChild(Label);
form.appendChild(document.createTextNode(" : "));
var Select = document.createElement("select");
Select.name = "Importance "+portal;
for(var a=0,l=PortalEval.params.Importance.length;a<l;a++){
var thisimp = PortalEval.params.Importance[a];
var opt = document.createElement('option');
opt.innerHTML = thisimp.text;
opt.value = a;
opt.style.backgroundColor = thisimp.color;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
if(a == evalIMP){
opt.selected = "selected";
Hidden.value = opt.value;
}
Select.appendChild(opt);
}
Select.onchange = function(){
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
form.appendChild(Select);
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteIMPText,title:PortalEval.texts.DeleteIMPTitle});
suplink.onclick = function(){
var F = this.parentNode;
thisSelect = F.getElementsByTagName("select")[0];
PortalEval.functions.disableThings([ thisSelect ], true);
F.style.display = "none";
$(F).addClass("Removed");
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
return form;
},
setChangeCancelOneIMPInputDisabled : function(Select, count, index) {
var val = (Select.tagName.toLowerCase == "select" ? Select.value : false);
var defval = document.getElementById("IMP_"+count+"_"+index).value;
var F = Select.parentNode;
if(val == defval) $(F).removeClass("Modified");
else $(F).addClass("Modified");
PortalEval.functions.setChangeCancelOneInputDisabled(index);
},
setChangeCancelOneInputDisabled : function(index) {
var TR = document.getElementById("IDtr_"+index);
var ChangeInput = document.getElementById("change_"+index);
var CancelInput = document.getElementById("cancel_"+index);
var forms = TR.getElementsByTagName("form");
var dis = "disabled";
for(var a=0,l=forms.length;a<l;a++){
if($(forms[a]).hasClass("Modified")) dis = false;
}
if(dis) $(TR).removeClass("Modified");
else $(TR).addClass("Modified");
PortalEval.functions.disableThings([ CancelInput, ChangeInput ], dis);
PortalEval.functions.setChangeCancelInputDisabled();
},
createAVTSelect : function(evalAVT, index, empty){
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
Hidden.id = "AVT_"+index;
form.appendChild(Hidden);
var Select = document.createElement("select");
Select.name = "Avancement";
if(empty){
var emptyopt = document.createElement('option');
emptyopt.innerHTML = "";
emptyopt.value = "???";
Select.appendChild(emptyopt);
Hidden.value = "???";
}
for(var a=0,l=PortalEval.params.Avancement.length;a<l;a++){
var thisavt = PortalEval.params.Avancement[a];
var opt = document.createElement('option');
opt.innerHTML = thisavt.text;
opt.value = a;
opt.style.backgroundColor = thisavt.color;
if(thisavt.textcolor) opt.style.color = thisavt.textcolor;
if(a == evalAVT){
opt.selected = "selected";
Hidden.value = a;
}
Select.appendChild(opt);
}
Select.onchange = function(){
var val = this.value;
var defval = document.getElementById("AVT_"+index).value;
var F = Select.parentNode;
if(val == defval) $(F).removeClass("Modified");
else $(F).addClass("Modified");
PortalEval.functions.setChangeCancelOneInputDisabled(index);
}
form.appendChild(Select);
return form;
},
setChangeCancelInputDisabled : function() {
var BoardList = document.getElementById("PortalEvalBoardList");
var ChangeInput = document.getElementById("GlobalChangeInput");
var CancelInput = document.getElementById("GlobalCancelInput");
var ListInput = document.getElementById("PortalEval_OptionPortalInput");
if(!BoardList || !ChangeInput || !CancelInput || !ListInput) return;
var ChangeNumber = 0;
var TRs = BoardList.getElementsByTagName('tr');
for(var a=0,l=TRs.length;a<l;a++){
if($(TRs[a]).hasClass("Modified")) ChangeNumber++
}
if(ChangeNumber > 0){
ChangeInput.title = PortalEval.texts.GoChangeTitle.split("$1").join(ChangeNumber+" ");
CancelInput.title = PortalEval.texts.GoCancelTitle.split("$1").join(ChangeNumber+" ");
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], false);
PortalEval.functions.disableThings([ ListInput ], true);
}else{
ChangeInput.title = PortalEval.texts.GoChangeTitle.split("$1").join("");
CancelInput.title = PortalEval.texts.GoCancelTitle.split("$1").join("");
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
PortalEval.functions.disableThings([ ListInput ], false);
}
},
cancelAllChanges : function(){
var BoardList = document.getElementById("PortalEvalBoardList");
if(!BoardList) return;
var TRs = BoardList.getElementsByTagName('tr');
for(var a=0,l=TRs.length;a<l;a++){
var TR = TRs[a];
if(!TR.id) continue;
var index = parseInt(TR.id.replace(/[^0-9]/g, ""));
if(!$(TR).hasClass('Modified')) continue;
PortalEval.functions.updateThatLine(index, PortalEval.params.PageList[index], true);
}
},
addOneIMPForm : function(index){
var AddIMPForm = document.getElementById("IMPadd_"+index);
var TD = AddIMPForm.parentNode;
var count = PortalEval.functions.getSelectCountValue(TD, index, "Eval", "IMPform");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.id = "IMPform_"+count+"_"+index;
form.className = "Eval Modified Added";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden",value:"."});
form.appendChild(Hidden);
Hidden.id = "IMP_"+count+"_"+index;
var ThemeSelect = PortalEval.functions.createThemeSelect();
ThemeSelect.name = "portal";
form.appendChild(ThemeSelect);
form.appendChild(document.createTextNode(" : "));
var Select = document.createElement("select");
Select.name = "Importance NEW";
for(var a=0,l=PortalEval.params.Importance.length;a<l;a++){
var thisimp = PortalEval.params.Importance[a];
var opt = document.createElement('option');
opt.innerHTML = thisimp.text;
opt.value = a;
opt.style.backgroundColor = thisimp.color;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
if(a == (PortalEval.params.Importance.length-1)) opt.selected = "selected";
Select.appendChild(opt);
}
Select.onchange = function(){
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
form.appendChild(Select);
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteIMPText,title:PortalEval.texts.DeleteIMPTitle});
suplink.onclick = function(){
var F = this.parentNode;
F.parentNode.removeChild(F);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
}
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
AddIMPForm.parentNode.insertBefore(form, AddIMPForm);
PortalEval.functions.setChangeCancelOneIMPInputDisabled(Select, count, index);
ThemeSelect.focus();
},
createSortSelect : function(DefaultSort, SortHidden){
var SortSelect = document.createElement('select');
var SortOptions = PortalEval.params.SortOptions;
var SortTypes = ["UP","DOWN"];
for(var a=0,l=SortOptions.length;a<l;a++){
var SortOption = SortOptions[a];
for(var t=0,tlen=SortTypes.length;t<tlen;t++){
var SortType = SortTypes[t];
var SortValue = SortOption+"_"+SortType;
var opt = document.createElement('option');
opt.innerHTML = PortalEval.texts[("Sort"+SortType+"Arrow")].split("$1").join(PortalEval.texts[SortOption]);
opt.title = PortalEval.texts[("Sort"+SortType+"Tip")].split("$1").join(PortalEval.texts[(SortOption+"Tip")]);
opt.value = SortValue;
SortSelect.appendChild(opt);
if((a==0 && t==0) || SortValue==DefaultSort){
opt.selected = "selected";
if(SortHidden) SortHidden.value = opt.value;
}
}
}
return SortSelect;
},
sortTextList : function(textlist) {
return textlist.sort(function(a,b){ var A = [PortalEval.functions.deleteAccents(b.toLowerCase()),PortalEval.functions.deleteAccents(a.toLowerCase())].sort(); return ( A[1] == PortalEval.functions.deleteAccents(a.toLowerCase()) ? 1 : -1 ); });
},
sortPages : function(selectvalue, portal) {
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgSort);
var getsortFunc = {
SortDS : function(a,b){ var A = [b[1],a[1]].sort(); return ( A[0] == a[1] ? 1 : -1 ); },
SortTitle : function(a,b){ var A = [b[1],a[1]].sort(); return ( A[0] == a[1] ? 1 : -1 ); },
SortStub : function(a,b){ return (b[1] - a[1]); },
SortAVT : function(a,b){ return (a[1] - b[1]); },
SortIMP : function(a,b){ return (a[1] - b[1]); }
};
var getsortParam = {
SortDS : function(p, a){ return a; },
SortTitle : function(p){ return PortalEval.functions.deleteAccents(p.title); },
SortStub : function(p){ return (p.stub && p.stub.length > 0 ? p.stub.length : 0); },
SortAVT : function(p){ return (typeof(p.evalAVT)=="number" ? p.evalAVT : 99 ); },
SortIMP : function(p, a, portal) { return (p.allIMP && typeof(p.allIMP[portal])=="number" ? p.allIMP[portal] : 99); }
};
var down = selectvalue.indexOf("_DOWN")!==-1;
var type = selectvalue.replace(/_.*/g, "");
var func = getsortFunc[type];
var NewPageList = [];
var PageList = PortalEval.params.PageList;
for(var a=0, l=PageList.length;a<l;a++){
NewPageList.push([ a, getsortParam[type](PageList[a], a, portal) ]);
}
NewPageList = NewPageList.sort(func);
for(var a=0, l=NewPageList.length;a<l;a++){
var index = NewPageList[a][0];
var TR = document.getElementById("IDtr_"+index);
if(!TR) continue;
var target = TR.parentNode;
target.removeChild(TR);
if(down) target.appendChild(TR);
else target.insertBefore(TR, target.firstChild.nextSibling);
}
PortalEval.functions.alertControl();
},
processThatLineChanges : function(index){
PortalEval.functions.closePreview(index);
var TR = document.getElementById("IDtr_"+index);
if(!($(TR).hasClass("Modified"))) return;
var OldParams = PortalEval.params.PageList[index];
var NewParams = {
title : OldParams.title,
talktitle : OldParams.talktitle,
talkmissing : OldParams.talkmissing,
allIMP : {}
};
var ChangeInput = document.getElementById("change_"+index);
var CancelInput = document.getElementById("cancel_"+index);
if(PortalEval.params.AllowEdition) PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
var talkpageedit = false, pageedit = false;
var Forms = TR.getElementsByTagName('form');
for(var a=0,l=Forms.length;a<l;a++){
var thisForm = Forms[a];
if($(thisForm).hasClass("Removed")){
if($(thisForm).hasClass("Stub")) pageedit = true;
if($(thisForm).hasClass("Eval")) talkpageedit = true;
continue;
}
var Label = thisForm.getElementsByTagName("label")[0];
var Inputs = thisForm.getElementsByTagName("input");
for(var i=0,ilen=Inputs.length;i<ilen;i++){
var ThisInput = Inputs[i];
if(PortalEval.params.AllowEdition && ["button","text"].indexOf(ThisInput)!=-1) PortalEval.functions.disableThings([ ThisInput ], true);
}
var Selects = thisForm.getElementsByTagName("select");
if(PortalEval.params.AllowEdition) PortalEval.functions.disableThings( Selects, true);
for(var s=0,slen=Selects.length;s<slen;s++){
var ThisSelect = Selects[s];
var SelectValue = ThisSelect.value;
var SelectName = ThisSelect.name;
if(SelectName == "Avancement"){
if($(thisForm).hasClass("Modified")) talkpageedit = true;
NewParams.evalAVT = parseInt(SelectValue);
}else if(SelectName == "Importance NEW"){
var ThemeSelect = Selects[(s-1)];
var thisportal = ThemeSelect.value;
if(thisportal != ""){
talkpageedit = true;
NewParams.allIMP[thisportal] = parseInt(SelectValue);
var PortalSelect = document.getElementById("PortalEval_OptionPortal");
if(PortalSelect && PortalSelect.value == thisportal) NewParams.evalIMP = parseInt(SelectValue);
}
}else if(SelectName.indexOf("Importance")==0){
if($(thisForm).hasClass("Modified")) talkpageedit = true;
if($(Label).hasClass("portal")) NewParams.evalIMP = parseInt(SelectValue);
NewParams.allIMP[Label.innerHTML] = parseInt(SelectValue);
}else if(SelectName.indexOf("Ébauche")==0){
if($(thisForm).hasClass("Modified")){
pageedit = true;
if(!NewParams.stub) NewParams.stub = [];
}
var StubTheme = ThisSelect.value;
if(StubTheme != ""){
StubThemeParams = PortalEval.params.StubThemes[StubTheme];
var catPattern = StubThemeParams.categ;
if(catPattern){
catPattern = PortalEval.functions.ucFirst(catPattern);
var AdjSelect = document.getElementById(SelectName.split("Ébauche").join("adjSelect").split(" NEW").join(""));
var type = null;
if($(AdjSelect).hasClass("M")) type = "M";
if($(AdjSelect).hasClass("F")) type = "F";
var adjID = AdjSelect.value;
if(type && adjID != "-1"){
var adj = PortalEval.params[("StubAdj"+type)][adjID];
if(adj){
type = type.replace(/M/, "");
StubTheme = catPattern.split("<adj"+type+">").join(adj);
}
}
}
if(!NewParams.stub) NewParams.stub = [];
NewParams.stub.push(StubTheme);
}
}
}
}
if(PortalEval.params.AllowEdition && (talkpageedit || pageedit)){
var TD1 = TR.getElementsByTagName('td')[0];
var IMG = document.createElement('img');
IMG.width = 14;
IMG.height = 14;
IMG.src = PortalEval.params.ImageURL + PortalEval.params.RunningIcon;
TD1.insertBefore(document.createTextNode(" "), TD1.firstChild);
TD1.insertBefore(IMG, TD1.firstChild);
}
if(talkpageedit){
NewParams.talkmissing = 0;
var NewEvalWikitext = "{{"+PortalEval.params.EvalTemplate+"\n";
for(var imp in NewParams.allIMP){
NewEvalWikitext += "|"+imp+"|"+PortalEval.params.Importance[NewParams.allIMP[imp]].wiki+"\n"
}
NewEvalWikitext += "|avancement="+PortalEval.params.Avancement[NewParams.evalAVT].wiki+"\n"
var OldEvalWikitext = OldParams.evalWT;
if(OldEvalWikitext){
OldEvalWikitext = OldEvalWikitext.split("\n").join("");
OldEvalWikitext = OldEvalWikitext.split("|");
for(var a=1,l=OldEvalWikitext.length;a<l;a++){
var thisparam = OldEvalWikitext[a].split("}}").join("");
if(thisparam.indexOf("=")===-1) continue;
if(thisparam.indexOf("avancement")!==-1) continue;
NewEvalWikitext += "|"+thisparam+"\n";
}
}
NewEvalWikitext += "}}";
NewParams.evalWT = NewEvalWikitext;
if(PortalEval.params.AllowEdition){
PortalEval.functions.updatePage(index, OldParams, NewParams, false);
}else{
var OldEvalWikitext = ( OldParams.evalWT ? OldParams.evalWT : "");
alert(PortalEval.texts.NoEdition.split("$1").join(OldEvalWikitext).split("$2").join(NewEvalWikitext));
}
}
if(pageedit){
var NewStubWikitext = "";
if(NewParams.stub && NewParams.stub.length > 0 ){
NewStubWikitext = "{{"+PortalEval.params.StubTemplate;
NewStubWikitext += "|"+NewParams.stub.join("|");
var OldStubWikitext = OldParams.stubWT;
if(OldStubWikitext){
OldStubWikitext = OldStubWikitext.split("\n").join("");
OldStubWikitext = OldStubWikitext.split("|");
for(var a=1,l=OldStubWikitext.length;a<l;a++){
var thisparam = OldStubWikitext[a].split("}}").join("");
if(thisparam.indexOf("{{")!==-1) continue;
if(thisparam.indexOf("=")===-1) continue;
NewStubWikitext += "|"+thisparam;
}
}
NewStubWikitext += "}}";
}
NewParams.stubWT = NewStubWikitext;
if(PortalEval.params.AllowEdition){
PortalEval.functions.updatePage(index, OldParams, NewParams, true);
}else{
var OldStubWikitext = ( OldParams.stubWT ? OldParams.stubWT : "");
alert(PortalEval.texts.NoEdition.split("$1").join(OldStubWikitext).split("$2").join(NewStubWikitext));
}
}
},
updatePage : function(index, OldParams, NewParams, main){
if(main) PortalEval.params.StubEditsRunning[index] = true;
else PortalEval.params.EvalEditsRunning[index] = true;
var page = (main ? NewParams.title : NewParams.talktitle);
$.ajax({
url: mw.util.wikiScript('api'),
data: {
action:'query',prop:'revisions',
rvlimit : 1,
rvprop: 'timestamp|content',
titles: page,
rvsection: 0,
format: 'json',
},
success: function(data) {
var timestamp = ( (!main && OldParams.talkmissing) ? 'now' : data.query.pages[Object.keys(data.query.pages)[0]].revisions[0].timestamp );
var func = (main ? "updateMainPage" : "updateTalkpage");
var NewWikitext = PortalEval.functions[func](OldParams, NewParams, data);
var summary = PortalEval.texts[(main ? "StubResume" : "EvalResume")];
var template = NewParams[(main ? "stubWT" : "evalWT")].split("\n").join("");
$.ajax({
url: mw.util.wikiScript('api'),
data: {action:'query',meta:'tokens',format:'json',type:'csrf'
},
dataType: 'json'
}).then(function(data) {
$.ajax({
url: mw.util.wikiScript('api'),
method: 'POST',
data: {
action: 'edit',
title: page,
text: NewWikitext,
summary: summary.split("$docpage").join(PortalEval.params.DocPage).split("$template").join(template),
basetimestamp: timestamp,
section: 0,
format: 'json',
token: data.query.tokens.csrftoken
},
dataType: 'json',
success: function(data){
if(main) PortalEval.params.StubEditsRunning[index] = false;
else PortalEval.params.EvalEditsRunning[index] = false;
if(!PortalEval.params.StubEditsRunning[index] && !PortalEval.params.EvalEditsRunning[index]){
PortalEval.functions.updateThatLine(index, NewParams);
}
}
});
});
}
});
},
updateMainPage : function(OldParams, NewParams, data){
var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
var NewWikitext = "";
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var matches = OldWikitext.match(Reg);
if(matches == null) NewWikitext = NewParams.stubWT + "\n" + OldWikitext;
else{
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
if(a!==0){
NewWikitext = OldWikitext.replace(thismatch, "");
}else{
NewWikitext = OldWikitext.replace(thismatch, NewParams.stubWT);
}
}
}
NewWikitext = NewWikitext.replace(/^\\n/g, "").replace(/\\n\\n\\n/g, "\n\n");
return NewWikitext;
},
updateTalkpage : function(OldParams, NewParams, data){
var NewWikitext = "";
if(OldParams.talkmissing){
NewWikitext = NewParams.evalWT;
}else{
var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
var matches = OldWikitext.match(Reg);
if(matches == null) NewWikitext = NewParams.evalWT + "\n" + OldWikitext;
else{
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
if(a!==0){
NewWikitext = OldWikitext.replace(thismatch, "");
}else{
NewWikitext = OldWikitext.replace(thismatch, NewParams.evalWT);
}
}
}
NewWikitext = NewWikitext.replace(/^\\n/g, "").replace(/\\n\\n\\n/g, "\n\n");
}
return NewWikitext;
},
updateThatLine : function(index, NewParams, KeepPreview){
PortalEval.params.PageList[index] = NewParams;
if(!KeepPreview){
delete PortalEval.params.PreviewSaved[NewParams.title];
delete PortalEval.params.PreviewSaved[NewParams.talktitle];
}
var portal = document.getElementById("PortalEval_OptionPortal").value;
var OldTR = document.getElementById("IDtr_"+index);
while(OldTR.firstChild){ OldTR.removeChild(OldTR.firstChild); }
var target = OldTR.parentNode;
var NewTR = PortalEval.functions.fillBoardLine(index, portal);
target.insertBefore(NewTR, OldTR);
target.removeChild(OldTR);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
},
preloadPage : function(title, index, callback){
var previewDiv = document.createElement('div');
previewDiv.id = "previewDiv_"+index;
previewDiv.style.maxHeight = PortalEval.params.PreviewHeight + "px";
previewDiv.style.width = "100%";
previewDiv.style.overflowY = "scroll";
previewDiv.style.borderTop = "1px dashed #a2a9b1";
var URL = mw.config.get('wgServer')+mw.config.get('wgArticlePath').split("$1").join(encodeURIComponent(title));
$.ajax({url:URL, complete: function(Req){
var TEMP = document.createElement("div");
TEMP.style.display = "none";
TEMP.innerHTML = Req.responseText;
document.body.appendChild(TEMP);
var Divs = TEMP.getElementsByTagName('div');
var IDs = PortalEval.params.DivIDsToPreview;
for(var a=0,l=Divs.length;a<l;a++){
var thisDiv = Divs[a];
if(!thisDiv) continue;
if(thisDiv.id && IDs.indexOf(thisDiv.id) !==-1) previewDiv.appendChild(thisDiv);
}
TEMP.parentNode.removeChild(TEMP);
PortalEval.functions.enhancePreview(previewDiv);
PortalEval.params.PreviewSaved[title] = previewDiv;
if(typeof(callback)==="function") callback(title, index);
}});
},
previewPage : function(title, index){
var TR = document.getElementById("IDtr_"+index);
var TD1 = TR.getElementsByTagName('td')[0];
var previewDiv = document.getElementById("previewDiv_"+index);
if(!previewDiv){
previewDiv = document.createElement('div');
previewDiv.id = "previewDiv_"+index;
previewDiv.style.maxHeight = PortalEval.params.PreviewHeight + "px";
previewDiv.style.width = "100%";
previewDiv.style.overflowY = "scroll";
previewDiv.style.borderTop = "1px dashed #a2a9b1";
TD1.appendChild(previewDiv);
var closespan = document.createElement('span');
closespan.style.float = "right";
closespan.id = "closespan_"+index;
TD1.insertBefore(closespan, TD1.firstChild);
var downlink = document.createElement('a');
downlink.title = PortalEval.texts.PreviewDown;
downlink.innerHTML = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.DownIcon+'" />';
downlink.href = "javascript:;";
downlink.onclick = function(){ PortalEval.functions.updownPreview(PortalEval.params.PreviewHeightStep, previewDiv); return false; }
var uplink = document.createElement('a');
uplink.title = PortalEval.texts.PreviewUp;
uplink.innerHTML = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.UpIcon+'" />';
uplink.href = "javascript:;";
uplink.onclick = function(){ PortalEval.functions.updownPreview(-PortalEval.params.PreviewHeightStep, previewDiv); return false; }
closespan.appendChild(downlink);
closespan.appendChild(uplink);
closespan.appendChild(document.createTextNode(" "));
var closelink = document.createElement('a');
closelink.title = PortalEval.texts.PreviewClose;
closelink.innerHTML = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.CloseIcon+'" />';
closelink.href = "javascript:;";
closelink.onclick = function(){ PortalEval.functions.closePreview(index); return false; }
closespan.appendChild(closelink);
}
if(PortalEval.params.PreviewSaved[title]){
var SavedpreviewDiv = PortalEval.params.PreviewSaved[title];
previewDiv.parentNode.insertBefore(SavedpreviewDiv, previewDiv);
previewDiv.parentNode.removeChild(previewDiv);
}else{
var RunningIcon = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.RunningIcon+'" />';
previewDiv.innerHTML = PortalEval.texts.AlertMsgPreview.split("$running").join(RunningIcon);
PortalEval.functions.preloadPage(title, index, PortalEval.functions.previewPage);
}
},
enhancePreview : function(previewDiv){ // See MediaWiki:Commons.js
/*
try{ mw.hook( 'wikipage.content' ).fire( previewDiv ); }catch(e){ console.warn("enhancePreview()\n mw.hook()\n------\n"+e.message); }
try{ window.Palette([ previewDiv ]); }catch(e){ console.warn("enhancePreview()\n Palette()\n------\n"+e.message); }
try{ window.BoiteDeroulante([ previewDiv ]); }catch(e){ console.warn("enhancePreview()\n BoiteDeroulante()\n------\n"+e.message); }
try{ window.GeoBox_Init([ previewDiv ]); }catch(e){ console.warn("enhancePreview()\n GeoBox_Init()\n------\n"+e.message); }
*/
},
updownPreview(val, previewDiv){
var oldval = parseInt(previewDiv.style.maxHeight.split("px").join(""));
var newval = (oldval+val);
if(newval<0) newval = 0;
previewDiv.style.maxHeight = newval + "px";
},
closePreview : function(index, link){
var previewDiv = document.getElementById("previewDiv_"+index);
if(previewDiv) previewDiv.parentNode.removeChild(previewDiv);
var link = document.getElementById("closespan_"+index);
if(link) link.parentNode.removeChild(link);
},
getUserSubPage : function() {
if(PortalEval.params.OptionsSubPageOK) return;
var Page = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js';
$.ajax({
url: mw.util.wikiScript('api'),
data: {
action: 'query',prop:'revisions',
rvlimit : 1,
rvprop: 'ids',
titles: Page,
format: 'json',
},
success: function(data) {
var revisions = data.query.pages[Object.keys(data.query.pages)[0]].revisions;
if(!revisions){
PortalEval.params.OptionsSubPageOK = true;
PortalEval.functions.disableThings([ "GlobalOptionsInput" ], (!(PortalEval.params.EvalThemesOK && PortalEval.params.OptionsSubPageOK)));
}else{
var oldid = revisions[0].revid;
PortalEval.functions.getUserParams(Page, oldid);
}
}
});
},
getUserParams : function(Page, oldid) {
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+Page+'&action=raw&oldid='+oldid;
$.ajax({url:URL, complete: function(Req){
var Text = Req.responseText;
var CommentStart = PortalEval.params.OptionsPageCommentStart;
var CommentEnd = PortalEval.params.OptionsPageCommentEnd;
var More = (Text.indexOf(CommentStart) != -1 && Text.indexOf(CommentEnd) != -1);
if(More){
var MoreParams = Text.split(CommentStart)[1];
if(MoreParams.indexOf(CommentEnd) != -1){
MoreParams = MoreParams.split(CommentEnd)[0];
MoreParams = MoreParams.replace(/^\n/g, "");
MoreParams = MoreParams.replace(/\n$/g, "");
PortalEval.params.OptionsMoreParams = MoreParams;
}
}
PortalEval.params.OptionsSubPageOK = true;
PortalEval.functions.disableThings([ "GlobalOptionsInput" ], false);
}});
},
setDefaultParams : function() {
PortalEval.params.DEFAULTparams = {};
var EditableParams = PortalEval.params.EditableParams;
for(var a=0,l=EditableParams.length;a<l;a++){
var paramname = EditableParams[a];
PortalEval.params.DEFAULTparams[paramname] = PortalEval.params[paramname];
}
PortalEval.params.DEFAULTtexts = {};
var Texts = PortalEval.texts;
for(var textname in Texts){
PortalEval.params.DEFAULTtexts[textname] = Texts[textname];
}
},
getCustomParams : function() {
var customFunc = ["Lang", "Site", "User"];
for(var a=0,l=customFunc.length;a<l;a++){
var funcName = "PortalEval_"+customFunc[a]+"Custom";
if(typeof(window[funcName])==="function") try{ window[funcName](); }catch(e){ console.warn(funcName+"()\n------\n"+e.message); }
}
},
addlink : function() {
var portlet = document.getElementById(PortalEval.params.LinkPortletID);
if(!portlet)return;
var tabs = portlet.getElementsByTagName('li')[0];
var newli = document.createElement('li');
newli.id = 'ca-eval';
tabs.parentNode.appendChild(newli);
var link = PortalEval.functions.createLink(null, {
text : PortalEval.texts.LinkText,
title : PortalEval.texts.LinkTitle,
href : "javascript:PortalEval.functions.createCategoryBoard();"
});
link.id = 'ca-eval-category';
newli.appendChild(link);
var Slink = PortalEval.functions.createLink("Special:PortalEval/"+mw.config.get('wgTitle'), {
text : PortalEval.texts.SpecialpageText,
title : PortalEval.texts.SpecialpageTip,
});
Slink.id = 'ca-eval-special';
newli.appendChild(Slink);
},
addlinktoSpecialpage(){
var Content = document.getElementById('mw-content-text');
var Divs = Content.getElementsByTagName('div');
var divcount = 0;
for(var a=0,l=Divs.length;a<l;a++){
var Div = Divs[a];
if(!$(Div).hasClass("mw-specialpages-list")) continue;
divcount++
if(divcount != 10) continue;
var UL = Div.getElementsByTagName('ul')[0];
if(!UL) continue;
var LI = document.createElement('li');
UL.appendChild(LI);
LI.appendChild(PortalEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[-1]+":PortalEval",{text:PortalEval.texts.SpecialpageName}));
}
},
launch : function() {
var custom = mw.config.get('wgServer')+mw.config.get('wgScript') + '?title='
+ mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js'
+ '&action=raw&ctype=text/javascript';
$.when.apply( null, $.map([ custom ], function ( url ) {
return $.ajax({ url: url, dataType: 'script', cache: true });
})).done(function(){
PortalEval.functions.setDefaultParams();
PortalEval.functions.getCustomParams();
var LaunchThis = PortalEval.functions.getLaunchCondition();
if(LaunchThis === 1) PortalEval.functions.addlink();
if(LaunchThis === 2) PortalEval.functions.prepareSpecialpage();
if(LaunchThis === 3) PortalEval.functions.addlinktoSpecialpage();
});
},
getLaunchCondition : function() {
if(mw.config.get('wgServer') !== '//fr.wikipedia.org') return false;
if(mw.config.get('wgNamespaceNumber')==14 && ["edit","submit"].indexOf(mw.config.get('wgAction')) === -1) return 1;
var Title = mw.config.get('wgTitle');
if(mw.config.get('wgNamespaceNumber')==-1 && (Title == "PortalEval" || Title.indexOf("PortalEval/")!=-1)) return 2;
if(mw.config.get('wgCanonicalSpecialPageName')==="Specialpages") return 3;
return false;
}
}
}
if( PortalEval.functions.getLaunchCondition()){
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function(){
mw.loader.addStyleTag(""
+ "#p-cactions #ca-eval-category { padding-right:0.2em; }"
+ "#p-cactions #ca-eval-special { padding-left:0.2em; }"
+ "#PortalEvalOptionsFS .mw-redirect { green !important }"
+ "#PortalEvalOptionsFS li { list-style:none; }"
+ "#PortalEvalOptionsFS li:hover { background-color:#eaecf0; }"
+ "#PortalEvalMainOptionsFS { padding: 0;margin:0; }"
+ "#PortalEvalMainOptionsFS fieldset { display:inline;margin:0 1em 0.5em 1em;padding:0.2em;background-color:#f8f8f8; }"
+ "#PortalEvalMainOptionsFS legend { margin:0;padding:0; }"
+ "#PortalEvalMainOptionsFS fieldset:hover { background-color:#eaecf0; }"
+ "#PortalEvalBoard fieldset { border:1px solid #a2a9b1;}"
+ "#PortalEvalBoardList tr:hover td { background-color:#eaecf0; }"
+ "#PortalEvalBoard table.evaltable :not(.navbox .infobox_v2) th { background-color: #eaecf0;border:1px solid #a2a9b1; }"
+ "#PortalEvalBoard table.evaltable :not(.navbox .infobox_v2) td { background-color: #ffffff;border:1px solid #a2a9b1; }"
+ "#fieldsetActions #PortalEval_OptionSort, #fieldsetActions #GlobalChangeInput, #fieldsetActions #GlobalOptionsInput { margin-left:1em; }"
+ "#fieldsetCat form input[type=text] { margin-bottom:0.5em; }"
+ "#CatParentsDiv ul {list-style: none;margin-left: 0; }"
+ "#Pinfos b { color:#002bb8; }"
+ "#Pinfos.nocat b { color:red !important; }"
+ "#PortalEvalBoardControlRunning { margin-left:1em; }"
+ "#PortalEvalBoard abbr { text-decoration:none !important; }"
);
$(PortalEval.functions.launch);
});
}
//</source>