Jump to content

User:OldBee/MassEval.js: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
OldBee (talk | contribs)
No edit summary
OldBee (talk | contribs)
No edit summary
 
Line 1: Line 1:
// Ci-dessous le début du script. Seule la partie personnalisable est transcluse. [[{{fullurl:{{FULLPAGENAME}}|action=purge}} purger]]<noinclude>

// Documentation : [[m:User:OldBee/MassEval.js/doc]]

//<source lang=javascript>
//<source lang=javascript>
window.MassEval = {
/* ############################### PARTIE PERSONNALISABLE ############################### </source></noinclude>__TOC__


== Textes ==
// Documentation : [[m:User:OldBee/PortalEval.js/doc]]


=== Textes de l'interface ===
window.PortalEval = {

// ############################### PARTIE PERSONNALISABLE ###############################
// ------------------------------- Textes -------------------------------
<source lang=javascript> // ------------------------------- Textes ------------------------------- */
texts : {
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)",


// Liens en haut de page
"LinkText" : "Évaluer",
"LinkPageTitle" : "Vérifier l’évaluation de cette page",
"LinkCatTitle" : "Vérifier l’évaluation des articles de cette catégorie",
"LinkLinksTitle" : "Vérifier l’évaluation des liens de la page",
"LinkLinkshereTitle" : "Vérifier l’évaluation des pages pointant vers cette page",
"LinkTemplateTitle" : "Vérifier l’évaluation des pages incluant le modèle",
"LinkNewpagesTitle" : "Vérifier l’évaluation des nouvelles pages",
"LinkCreationsTitle" : "Vérifier l’évaluation des articles créés par l’utilisateur",
"LinkPrefixindexTitle" : "Vérifier l’évaluation des pages commençant par...",


// Page spéciale
"OPTIONparams" : "Paramètres",
"OPTIONtexts" : "Textes",
"SpecialpageName" : "Évaluation de masse",
"OPTIONmoreparams" : "Paramétrage manuel supplémentaire",
"SpecialpageNameH" : "$1 Wikipédia",
"contentSubTemplate" : "← $1",
// -------------------- Textes de description des textes et paramètres --------------------

// -------------------- Descriptions des paramètres --------------------
// Formulaires principaux
"OPTIONAddWarning" : "Afficher un avertissement en haut de page",
"Warning" : "Ce script en cours de maintenance. Son fonctionnement n’est pas garanti !",
"OPTIONAutoLaunchList" : "Lancer automatiquement le listage des page après l’apparition du tableau",
"Show" : "(+)",
"ShowTip" : "Afficher",
"Hide" : "(-)",
"HideTip" : "Masquer",

// Thème d'évaluation
"EvalTheme" : "Thème d’évaluation",
"Portal" : "Portail associé",
"UpdateTableEvalText" : "Màj",
"UpdateTableEvalTip" : "Mettre à jour le tableau",
"AVT" : "Avancement",
"IMP" : "Importance",
"ThemeCats" : "Catégories liées",
"TableEvalTotal" : "Total",

// Modes
"Modes" : "Mode",
"MainNamespace" : "- Articles -",
"TimeDateLabel" : "Horodatage",

// Informations sur la page ou l'utilisateur
"INFOmissing" : "Page inexistante ?",
"INFOpageid" : "Identifiant de la page",
"INFOns" : "Espace de noms",
"INFOtitle" : "Titre",
"INFOcontentmodel" : "Type de contenu",
"INFOpagelanguage" : "Language du contenu",
"INFOtouched" : "Dernière mise à jour",
"INFOlastrevid" : "Identifiant de la dernière version",
"INFOlength" : "Taille (octets)",
"INFOprotection" : "Protections",
"INFOwatched" : "Page suivie ?",
"INFOwatchers" : "Nombre de suiveurs",
"INFOvisitingwatchers" : "Nombre de suiveurs ayant visité la dernière révision",
"INFOsubjectid" : "Identifiant de la page principale",
"INFOtalkid" : "Identifiant de la page de discussion",
"INFOuserid" : "Identifiant de l’utilisateur",
"INFOname" : "Nom",
"INFOeditcount" : "Compteur d’éditions",
"INFOregistration" : "Date d’enregistrement",
"INFOgroups" : "Groupes",
"INFOgender" : "Genre",
"INFOgenderunknown" : "inconnu",
"INFOgenderfemale" : "féminin",
"INFOgendermale" : "masculin",
"TimeDateTemplate" : "le $j $m $a à $h:$min",

// Page
"pageMode" : "Page",
"PageLabel" : "Titre de la page",
"PageInfosLabel" : "Informations sur la page",
"pageExistsNo" : "La page $page n’existe pas.",
"pageExistsYes" : "La page $page existe",

// Catégorie
"catMode" : "Catégorie",
"SubCatTitle" : "Inclure les sous-catégories $count",
"CatDaughters" : "Catégorie filles",
"CatParents" : "Catégorie parentes",
"HiddenCat" : "Catégorie cachée",
"CatExistsNo" : "La catégorie $cat n’existe pas.",
"CatExistsYes" : "La catégorie $cat comprend :",
"CatPages" : "$1 page(s)",
"CatCats" : "$1 catégorie(s)",
"CatButtonClosed" : "►",
"CatButtonExpand" : "Développer",
"CatButtonOpened" : "▼",
"CatButtonHide" : "Réduire",
"CatInfos" : " → $1 $P, $2 $C",
"CatInfosNOP" : " → $2 $C",
"CatInfosNOC" : " → $1 $P",
"CatAllPagesCount" : "$1 $P",
"CatInfosPageTip" : "Pages",
"CatInfosCatTip" : "Catégories",
"CatInfosPageText" : "P",
"CatInfosCatText" : "C",
"SubCatDepthText" : "Niveau : ",
"SelectCat" : "Sélectionner la catégorie : $1",
"TooMuchSubCatsSel" : "La catégorie $1 n’est pas sélectionnable car elle contient trop de sous-catégories (plus de $limit)",
"TooMuchSubCatsExp" : "La catégorie $1 n’est pas expansible car elle contient trop de sous-catégories (plus de $limit)",
"CatDoesntExistSel" : "La catégorie $1 n’est pas sélectionnable car elle n’existe pas",

// Liens
"linksMode" : "Liens",
"LinksLabel" : "Titre de la page",
"LinksInfosLabel" : "Informations sur la page",
"linksExistsNo" : "La page $page n’existe pas.",
"linksExistsYes" : "La page $page comprend :",
"linksInfos" : "$1 lien(s)",

// Pages liées
"linkshereMode" : "Pages liées",
"LinkshereLabel" : "Titre de la page",
"LinkshereInfosLabel" : "Informations sur la page",
"linkshereExistsNo" : "La page $page n’existe pas.",
"linkshereExistsYes" : "La page $page a :",
"linkshereInfos" : "$1 page(s) liée(s)",

// Inclusions
"templateMode" : "Inclusions",
"TemplateLabel" : "Nom du modèle",
"TemplateInfosLabel" : "Informations sur le modèle",
"TemplateDocLabel" : "Documentation du modèle",
"templateExistsNo" : "Le modèle $page n’existe pas.",
"templateExistsYes" : "Le modèle $page est inclus dans :",
"templateInfos" : "$1 page(s)",

// Nouvelles pages
"newpagesMode" : "Nouvelles pages",
"newpagesInfosLabel" : "Liste des nouvelles pages",
"newpagesExistsYes" : "Il y a :",
"newpagesExistsNo" : "Il n’y a pas de nouvelles pages.",
"newpagesInfos" : "$1 nouvelle(s) page(s)",

// Créations
"creationsMode" : "Créations",
"UserLabel" : "Nom de l’utilisateur",
"UserInfosLabel" : "Informations sur l’utilisateur",
"creationsExistsNo" : "L’utilisateur $page n’existe pas.",
"creationsExistsYes" : "L’utilisateur $page a créé :",
"creationsInfos" : "$1 page(s)",

// Pages commençant par
"prefixesMode" : "Préfixe",
"PrefixLabel" : "Préfixe",
"prefixesInfosLabel" : "Liste des pages",
"prefixesExistsYes" : "Il y existe :",
"prefixesExistsNo" : "Il n’y a pas de pages commençant par \"$1\".",
"prefixesInfos" : "$1 page(s) commençant par \"$2\".",

// Filtrage
"Search" : "Options de filtrage",
"RangeViewerTip" : "Pages sélectionnées pour la vérification.\nCliquer pour toutes les sélectionner.",
"RangeSelectorTip" : "Faire glisser pour choisir quelles pages vérifier",
"RangeSelectorTempl" : "$from ↔ $to",
"STUB" : "Bandeau d’ébauche",
"YES" : "Oui",
"NO" : "Non",
"AVTOptNone" : "Aucun",
"IMPOptNone" : "Aucune",
"SearchAND" : "ET",
"SearchOR" : "OU",
"FilteredCount" : "$shown / $total",
"NotFilteredCount" : "Nombre de lignes affichées par rapport au total de lignes.\nCliquer pour tout afficher.",

// Actions
"Actions" : "Actions",
"GoListText" : "Vérifier l’évaluation",
"GoVerifOne" : "Vérifier l’évaluation de la page",
"GoVerifCat" : "Vérifier l’évaluation des pages de la catégorie",
"GoVerifLinks" : "Vérifier l’évaluation des pages en liens dans la page",
"GoVerifLinkshere" : "Vérifier l’évaluation des pages pointant vers cette page",
"GoVerifTemplate" : "Vérifier l’évaluation des pages incluant le modèle",
"GoVerifNewpages" : "Vérifier l’évaluation des nouvelles pages",
"GoVerifCreations" : "Vérifier l’évaluation des articles créés par l’utilisateur",
"GoVerifPrefixes" : "Vérifier l’évaluation des articles commançant par...",
"EmergencyStop" : "Arrêter d’urgence la requête en cours",
"GoAddEvalText" : "Ajouter une évaluation",
"GoAddOne" : "Ajouter une évaluation à la page",
"GoAddCat" : "Ajouter une évaluation aux pages de la catégorie ciblée.",
"GoAddLinks" : "Ajouter une évaluation aux pages en liens dans la page ciblée.",
"GoAddLinkshere" : "Ajouter une évaluation aux pages pointant vers la page ciblée.",
"GoAddTemplate" : "Ajouter une évaluation aux pages incluant le modèle ciblé.",
"GoAddNewpages" : "Ajouter une évaluation aux nouvelles pages.",
"GoAddCreations" : "Ajouter une évaluation aux articles créés par l’utilisateur ciblé.",
"GoAddPrefixes" : "Ajouter une évaluation aux articles commançant par...",
"GoAddCancelText" : "◄",
"GoAddCancelTip" : "Annuler l’ajout d’évaluation",
"GoChangeText" : "Valider",
"GoChangeTitle" : "Valider les $1changements d’évaluation de page",
"GoCancelText" : "Annuler",
"GoCancelTitle" : "Annuler les $1changements d’évaluation de page",
"GoOptionsText" : "Options",
"GoOptionsTitle" : "Modifier les options",
"GoDocText" : "Documentation",
"GoDocTitle" : "Ouvrir la page de documentation (nouvel onglet)",
"GoCloseTitle" : "Fermer",

// Tableau des pages
"PageListTable" : "Tableau des pages",
"SortTitleUP" : "Tri selon le titre de la page (alphabétique)",
"SortTitleDOWN" : "Tri selon le titre de la page (alphabétique inversé",
"SortStubUP" : "Tri selon le nombre de thèmes d’ébauche (croissant)",
"SortStubDOWN" : "Tri selon le nombre de thèmes d’ébauche (décroissant)",
"SortAVTUP" : "Tri selon l’avancement (du moins avancé au plus avancé)",
"SortAVTDOWN" : "Tri selon l’avancement (du plus avancé au moins avancé)",
"SortIMPUP" : "Tri selon l’importance dans le thème sélectionné (du moins important au plus important)",
"SortIMPDOWN" : "Tri selon l’importance dans le thème sélectionné (du plus important au moins important)",
"SortUPArrow" : "▲",
"SortDOWNArrow" : "▼",
"TH0text" : "Page",
"TH1text" : "Portails",
"TH2text" : "Bandeau d’ébauche",
"TH3text" : "Avancement",
"TH4text" : "Importances",
"TH5text" : "Actions",
"TalkText" : "D",
"PreviewText" : "$1 (prévisualiser)",
"RedirectText" : "Redirection vers la page : $page",
"DisambigTitle" : "Homonymie",
"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",
"GoHideOneText" : "Masquer",
"GoHideOneTitle" : "Masquer les informations sur cette page",
"GoShowOneText" : "Afficher",
"GoShowOneTitle" : "Afficher les informations sur cette page",
"bottomlinkstemplate" : "▲ $1 ▲",

// Édition
"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",
"EvalResume" : "[[$docpage|Mise à jour de l’évaluation]] : $template",
"StubResume" : "[[$docpage|Mise à jour du bandeau d’ébauche]] : $template",
"SaveParamsResume" : "[[$docpage|Sauvegarde des paramètres]]",

// Messages d'alerte
"AlertMsgNone" : "Pas de requête en cours",
"AlertMsgStopNeeded" : "Arrêt d’urgence demandé",
"AlertMsgStopDone" : "Arrêt d’urgence effectué",
"AlertMsgThemes" : "Listage des thèmes d’ébauche et d’évaluation",
"AlertMsgPages" : "$cat : Listage des pages ($count)",
"AlertMsgParams" : "$page : Recherche des paramètres d’ébauche et d’évaluation ($count)",
"AlertMsgSort" : "Tri des lignes",
"AlertMsgSaveParams" : "Sauvegarde des options personnalisées sur la page $page",
"AlertMsgPreview" : "$running Chargement de la prévisualisation",
"AlertMsgCatAnalys" : "Analyse des pages de la catégorie : $cat",
"AlertMsgLinks" : "Analyse des pages liées dans la page : $page",
"AlertMsgLinkshere" : "Analyse des pages pointant vers la page : $page",
"AlertMsgTemplate" : "Analyse des inclusions du modèle : $template",
"AlertMsgNewpages" : "Analyse des nouvelles pages",
"AlertMsgCreations" : "Analyse des pages créées par l’utilisateur : $user",
"AlertMsgPrefixes" : "Analyse des pages commençant par : $1",
"AlertMsgEvals" : "Analyse des évaluations du thème $theme",
"AlertMsgEdit" : "$page : Édition",
"AlertMsgFilterSTUB" : "Vous devez sélectionner au moins une option de bandeau d’ébauche !",
"AlertMsgFilterAVT" : "Vous devez sélectionner au moins une option de bandeau d’évaluation d’avancement !",
"AlertMsgFilterIMP" : "Vous devez sélectionner au moins une option de bandeau d’évaluation d’importance !",
"AlertMsgSizeUnit" : "Un champ de texte attend une valeur en unité de longueur valable ($units) !",
"AlertMsgColorInput" : "Un champ de texte attend un code couleur exprimé en hexadécimal de 3 ou 6 digits précédés d’un #",

// Menu d'options
"OptionValidate" : "Valider les changements",
"OptionValidateTip" : "Valider les changements d’options",
"OptionSubPageText" : "?",
"OptionSubPageTip" : "Ouvrir la sous-page de configuration : $page (nouvel onglet)",
"DefButtonText" : "RAZ",
"DefButtonTitle" : "Rétablir la valeur par défaut : $1",
"GlobDefButtonText" : "RAZ",
"GlobDefButtonTitle" : "Rétablir les valeurs par défaut : $1",
"params" : "Paramètres",
"styles" : "Styles CSS",
"texts" : "Textes",
"param" : "Paramètre personnalisable",
"readonlyparam" : "Paramètre non personnalisable",
"style" : "Style CSS",
"text" : "Texte",
"moreparams" : "Paramétrage manuel supplémentaire",
"TestMoreParamsText" : "Tester",
"TestMoreParamsTip" : "Tester le code ci-dessous",
"MoreParamsTestOK" : "Pas d’erreur javascript détectée",
"MoreParamsTestKO" : "Erreur javascript détectée : $1",
"OptionModified" : "Valeur différente de la valeur par défaut",
"SizeUnitTip" : "La valeur de ce champ doit impérativement être exprimée en unité de longueur valable ($units)",
"ColorInput" : "La valeur de ce champ doit être un code couleur exprimé en hexadécimal de 3 ou 6 digits précédés d’un #",

// Menu des données
"GoDatasText" : "Données",
"GoDatasTitle" : "Vérifier les données",
"evaldataUL" : "Thèmes d’évaluation",
"stubdataUL" : "Thèmes d’ébauche",
"divdataUL" : "Divers",
"RAZdataUL" : "Gestion localStorage",
"localStorageExpiryT" : "$h heures et $m mimutes",
"GoDatasRAZText" : "Effacer",
"GoDatasRAZTitle" : "Effacer les données (cela n’affectera pas la session en cours)",

// Divers
"Month01" :"janvier",
"Month02" :"février",
"Month03" :"mars",
"Month04" :"avril",
"Month05" :"mai",
"Month06" :"juin",
"Month07" :"juillet",
"Month08" :"août",
"Month09" :"septembre",
"Month10" :"octobre",
"Month11" :"novembre",
"Month12" :"décembre",


/* </source><noinclude>// -------------------- Textes de description des textes, styles et paramètres -------------------- </noinclude>

=== Descriptions des paramètres ===

<source lang=javascript> // -------------------- Descriptions des paramètres -------------------- */
"OPTIONAllowEdition" : "Permettre l’édition",
"OPTIONUseTopFormInNS0" : "Utiliser le formulaire réduit dans les articles et les pages de discussion",
"OPTIONAutoLaunchPreview" : "Lancer automatiquement la prévisualisation des pages à la création de la ligne 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",
"OPTIONPreloadPreview" : "Précharger la prévisualisation des pages",
"OPTIONAllowEdition" : "Permettre l’édition",
"OPTIONAddWarning" : "Afficher un avertissement en haut de page",
"OPTIONSearchForPortalTag" : "Vérifier la présence de bandeaux de portail",
"OPTIONTH1width" : "Largeur en pixels de la colonne \"Bandeau d’ébauche\"",
"OPTIONTH2width" : "Largeur en pixels de la colonne \"Avancement\"",
"OPTIONUseFancyInputs" : "Utiliser les cases à cocher fantaisie",
"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",
"OPTIONMoreParamsRows" : "Nombre de ligne du champ de texte pour le paramétrage manuel supplémentaire",
"OPTIONSuggestSelectSize" : "Taille de la liste de suggestion de catégories",
"OPTIONSuggestNumber" : "Nombre maximum de catégories suggérées",
"OPTIONKeyUpDelay" : "Délai en ms avant la prise en compte d’un changement dans un champ de texte",
"OPTIONMaxSubcatLevel" : "Niveau maximum pour la recherche dans les sous-catégories",
"OPTIONMaxSubCatAllowedSel" : "Maximum de sous-catégories qu’une catégorie peut contenir pour être sélectionnable",
"OPTIONMaxSubCatAllowedExp" : "Maximum de sous-catégories qu’une catégorie peut contenir pour être expansible",
"OPTIONDefaultPortal" : "Thème d’évaluation sélectionné par défaut",
"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\"",
"OPTIONLinkPortletID" : "Attribut id de l’élément où est ajouté le lien \"Évaluer\"",
"OPTIONDocPage" : "Titre de la page de documentation",
"OPTIONDocPage" : "Titre de la page de documentation",
"OPTIONDocURL" : "URL de la page de documentation",
"OPTIONDocURL" : "URL de la page de documentation",
"OPTIONImageURL" : "URL de base pour les images",
"OPTIONImageURL" : "URL de base pour les images",
"OPTIONRunningIcon" : "Image de l’icône \"En cours\"",
"OPTIONOKIcon" : "Image de l’icône \"OK\"",
"OPTIONOKIcon" : "Image de l’icône \"OK\"",
"OPTIONRunningIcon" : "Image de l’icône \"En cours\"",
"OPTIONWarningIcon" : "Image de l’icône \"Attention\"",
"OPTIONStopIcon" : "Image de l’icône \"Stop\"",
"OPTIONCloseIcon" : "Image de l’icône \"Fermer\"",
"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\"",
"OPTIONRedirectIcon" : "Image de l’icône \"Redirection\"",
"OPTIONDisambigIcon" : "Image de l’icône \"Homonymie\"",
"OPTIONDisambigIcon" : "Image de l’icône \"Homonymie\"",
"OPTIONHiddenCatIcon" : "Image de l’icône \"Catégorie cachée\"",
// -------------------- Descriptions des textes --------------------

"OPTIONLinkText" : "Intitulé du lien \"Évaluer\"",
/* </source>
"OPTIONLinkTitle" : "Infobulle du lien \"Évaluer\"",

"OPTIONSpecialpageText" : "Intitulé du lien vers la page spéciale",
=== Descriptions des styles ===
"OPTIONSpecialpageTip" : "Infobulle du lien vers la page spéciale",

"OPTIONCat" : "Label de la catégorie sélectionnée",
<source lang=javascript> // -------------------- Descriptions des styles -------------------- */
"OPTIONPortal" : "Label de la liste des thèmes d’évaluation",

"OPTIONSort" : "Label des options de tri",
//-- font-family
"OPTIONActions" : "Label des boutons d’action",
"OPTIONEvalResume" : "Résumé de modification lors de la mise à jour de l’évaluation",
"OPTIONMainff" : "Famille de la police (général)",

"OPTIONStubResume" : "Résumé de modification lors de la mise à jour du bandeau d’ébauche",
//-- font-size
"OPTIONSaveParamsResume" : "Résumé de modification lors de la sauvegarde des paramètres]]",
"OPTIONGoListText" : "Intitulé du bouton \"Vérifier l’évaluation\"",
"OPTIONMainfs" : "Taille de la police (général)",
"OPTIONGoListTitle" : "Infobulle du bouton \"Vérifier l’évaluation\"",
"OPTIONPrvwfs" : "Taille de la police dans la prévisualisation",
"OPTIONSubCatTitle" : "Infobulle de la case pour inclure ou non les sous-catégories",
"OPTIONTempDocfs" : "Taille de la police de la documentation du modèle",
"OPTIONGoSortText" : "Intitulé du bouton \"Trier\"",
"OPTIONPortListfs" : "Taille de la police de la liste des portails (lignes du tableau des pages)",
"OPTIONGoSortTitle" : "Intitulé du bouton \"Trier\"",
"OPTIONAlertfs" : "Taille de la police du bandeau de message",

"OPTIONSortTitle" : "Intitulé de l’option de tri \"Pages\"",
//-- height
"OPTIONSortTitleTip" : "Infobulle de l’option de tri \"Pages\"",
"OPTIONSortDS" : "Infobulle de l’option de tri \"Defaultsort\"",
"OPTIONPrvwhght" : "Hauteur de la fenêtre de prévisualisation",
"OPTIONSortDSTip" : "Infobulle de l’option de tri \"Defaultsort\"",
"OPTIONCatListhght" : "Hauteur des cadres déroulants des formulaires \"Modes\"",
"OPTIONSortStub" : "Intitulé de l’option de tri \"Ébauches\"",
"OPTIONOptImgPrevhght" : "Hauteur des images prévisualisées (menu des options)",

"OPTIONSortStubTip" : "Infobulle de l’option de tri \"Ébauches\"",
//-- width
"OPTIONSortAVT" : "Intitulé de l’option de tri \"Avancement\"",
"OPTIONEvalTableIcowidth" : "Largeur des images dans la table d’évaluations",
"OPTIONSortAVTTip" : "Infobulle de l’option de tri \"Avancement\"",
"OPTIONSortIMP" : "Intitulé de l’option de tri \"Importance\"",
"OPTIONRunIcowidth" : "Largeur de l’image \"En cours\"",
"OPTIONSortIMPTip" : "Infobulle de l’option de tri \"Importance\"",
"OPTIONPrevCloseIcowidth" : "Largeur de l’image \"Fermer\" (prévisualisation)",
"OPTIONRedirectIcowidth" : "Largeur de l’image \"Redirection\" (lignes du tableau)",
"OPTIONSortUPTip" : "Modèle pour l’infobulle des options de tri (tri croissant)",
"OPTIONDisambigIcowidth" : "Largeur de l’image \"Homonymie\" (lignes du tableau)",
"OPTIONSortDOWNTip" : "Modèle pour l’infobulle des options de tri (tri décroissant)",
"OPTIONHiddenCatIcowidth" : "Largeur de l’image \"Catégorie cachée\"",
"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)",
"OPTIONAlertIcowidth" : "Largeur de l’image du bandeau de message",
"OPTIONMainCloseIcowidth" : "Largeur de l’image \"Fermer\" (bandeau réduit du formulaire des articles)",
"OPTIONGoChangeText" : "Intitulé du bouton \"Valider\" (options principales)",
"OPTIONGoChangeTitle" : "Infobulle du bouton \"Valider\" (options principales)",
"OPTIONTH2width" : "Largeur de la colonne \"Portails\"",
"OPTIONGoCancelText" : "Intitulé du bouton \"Annuler\" (options principales)",
"OPTIONTH3width" : "Largeur de la colonne \"Bandeau d’ébauche\"",
"OPTIONGoCancelTitle" : "Infobulle du bouton \"Annuler\" (options principales)",
"OPTIONTH4width" : "Largeur de la colonne \"Avancement\"",
"OPTIONGoOptionsText" : "Intitulé du bouton \"Options\"",
"OPTIONTH5width" : "Largeur de la colonne \"Importances\"",
"OPTIONGoOptionsTitle" : "Infobulle du bouton \"Options\"",
"OPTIONTH6width" : "Largeur de la colonne \"Actions\"",
"OPTIONGoCloseTitle" : "Infobulle du bouton pour fermer le tableau",
"OPTIONModSelwidth" : "Largeur des options du sélecteur de modes",
"OPTIONTH0text" : "Intitulé de la colonne \"Page\"",
"OPTIONTimewidth" : "Largeur des champs de texte d’heure",
"OPTIONTH1text" : "Intitulé de la colonne \"Bandeau d’ébauche\"",
"OPTIONDatewidth" : "Largeur des champs de texte de date",
"OPTIONTH2text" : "Intitulé de la colonne \"Avancement\"",
"OPTIONOptcolwdth" : "Largeur minimum d’une colonne dans les options",
"OPTIONTH3text" : "Intitulé de la colonne \"Importances\"",
"OPTIONPIcolwdth" : "Largeur minimum d’une colonne dans les infos de page",
"OPTIONTH4text" : "Intitulé de la colonne \"Actions\"",
"OPTIONTempDocwidth" : "Largeur de la documentation du modèle",
"OPTIONTalkText" : "Intitulé des liens vers les pages de discussion",
"OPTIONOptStrwdth" : "Largeur des champs de texte dans les options (texte demandé)",
"OPTIONPreviewText" : "Modèle d’infobulle du bouton pour les liens de pages",
"OPTIONOptNbrwdth" : "Largeur des champs de texte dans les options (nombre demandé)",
"OPTIONRedirectText" : "Infobulle de l’icône \"Redirection\"",
"OPTIONOptStywdth" : "Largeur des champs de texte dans les options (styles)",
"OPTIONDisambigTitle" : "Infobulle de l’icône \"Homonymie\"",
"OPTIONSpeImpCatwdth" : "Largeur du champ de texte principaux (page spéciale)",
"OPTIONMainEvalTwidth" : "Largeur du champ de texte \"Thème d’évaluation\" (hors page spéciale)",
"OPTIONPreviewDown" : "Infobulle du bouton pour agrandir la prévisualisation",
"OPTIONPreviewUp" : "Infobulle du bouton pour rétrécir la prévisualisation",
"OPTIONStubTwidth" : "Largeur des listes déroulantes des thèmes d’ébauche (thème)",
"OPTIONPreviewClose" : "Infobulle du bouton pour fermer la prévisualisation",
"OPTIONStubAwidth" : "Largeur des listes déroulantes des thèmes d’ébauche (adjectif)",
"OPTIONAvtwidth" : "Largeur des listes déroulantes des avancements (colonne \"Avancement\")",
"OPTIONDeleteSTUBText" : "Intitulé du bouton pour supprimer un bandeau d’ébauche",
"OPTIONImpTwidth" : "Largeur des listes déroulantes des thèmes d’évaluation (colonne \"Importances\")",
"OPTIONDeleteSTUBTitle" : "Infobulle du bouton pour supprimer un bandeau d’ébauche",
"OPTIONAddSTUBText" : "Intitulé du bouton pour ajouter un bandeau d’ébauche",
"OPTIONImpwidth" : "Largeur des listes déroulantes des importance (colonne \"Importances\")",
"OPTIONAddSTUBTitle" : "Infobulle du bouton pour ajouter un bandeau d’ébauche",
"OPTIONEmStopwidth" : "Diamètre du bouton d’arrêt d’urgence",

"OPTIONDeleteIMPText" : "Intitulé du bouton pour supprimer une évaluation d’importance",
//-- border-radius
"OPTIONDeleteIMPTitle" : "Infobulle du bouton pour supprimer une évaluation d’importance",
"OPTIONAddIMPText" : "Intitulé du bouton pour ajouter une évaluation d’importance",
"OPTIONWrapperbdr" : "Arrondi du bandeau d’évaluation (hors page spéciale)",
"OPTIONAddIMPTitle" : "Infobulle du bouton pour ajouter une évaluation d’importance",
"OPTIONSmallFSbdr" : "Arrondi des formulaires de configuration (hors page spéciale)",
"OPTIONGoChangeOneText" : "Intitulé du bouton \"Valider\" (ligne)",
"OPTIONBigFSbdr" : "Arrondi des formulaires de configuration (page spéciale)",
"OPTIONGoChangeOneTitle" : "Infobulle du bouton \"Valider\" (ligne)",
"OPTIONEvalTbdr" : "Arrondi du tableau d’évaluation",
"OPTIONGoCancelOneText" : "Intitulé du bouton \"Annuler\" (ligne)",
"OPTIONModSelbdr" : "Arrondi des sélecteurs de mode",
"OPTIONGoCancelOneTitle" : "Infobulle du bouton \"Annuler\" (ligne)",
"OPTIONFilSelbdr" : "Arrondi des options de filtrage",
"OPTIONNoEdition" : "Message par défaut lorsque l’édition n’est pas permise",
"OPTIONFiltAbbrbdr" : "Arrondi de des afficheurs des options de filtrage",
"OPTIONWarning" : "Message d’avertissement",
"OPTIONLinesTbdr" : "Arrondi du tableau de vérification",
"OPTIONAlertMsgThemes" : "Message lors du listage des thèmes d’ébauche et d’évaluation",
"OPTIONSortbdr" : "Arrondi des liens de tri",
"OPTIONAlertMsgPages" : "Message lors du listage des pages",
"OPTIONAlertbdr" : "Arrondi du bandeau de message",
"OPTIONImpButbdr" : "Arrondi des boutons",
"OPTIONAlertMsgParams" : "Message lors de la recherche des paramètres d’ébauche et d’évaluation d’une page",
"OPTIONAlertMsgSort" : "Message lors du tri des lignes",
"OPTIONImpTexbdr" : "Arrondi des champs de texte",
"OPTIONAlertMsgSaveParams" : "Message lors de la sauvegarde des options personnalisées",
"OPTIONSelectbdr" : "Arrondi des listes déroulantes",
"OPTIONAlertMsgPreview" : "Message lors du chargement de la prévisualisation d’une page",
"OPTIONPILIbdr" : "Arrondi des lignes des infos de page",
"OPTIONOptLIbdr" : "Arrondi des lignes des options",
"OPTIONOptionValidate" : "Intitulé du bouton \"Valider les changements\"",
"OPTIONDTpickbdr" : "Arrondi des sélecteurs d'horaire et de date",
"OPTIONOptionValidateTip" : "Infobulle du bouton \"Valider les changements\"",

"OPTIONDefButtonText" : "Intitulé du bouton pour rétablir une option par défaut",
//-- border-style
"OPTIONDefButtonTitle" : "Infobulle du bouton pour rétablir une option par défaut",
"OPTIONMainbds" : "Style des bordures (général)",
"OPTIONOptionModified" : "Infobulle expliquant d’un paramètre est différent du paramètre par défaut",
"OPTIONSpecialpageName" : "Titre de la page spéciale",
"OPTIONWrapperbds" : "Style de la bordure du bandeau d’évaluation (hors page spéciale)",
"OPTIONInnerbds" : "Style des bordures intérieures des formulaires (page spéciale)",
"OPTIONSpecialpageNameH" : "Modèle du titre de l’onglet du navigateur",
"OPTIONOPTIONparams" : "Intitulé du bouton \"Paramètres\"",
"OPTIONFiltAbbrbds" : "Style de la bordure des afficheurs des options de filtrage",
"OPTIONOPTIONtexts" : "Intitulé du bouton \"Textes\"",
"OPTIONAlertbds" : "Style de la bordure du bandeau de message",
"OPTIONPrvwbds" : "Style de la bordure supérieure de la prévisualisation",
"OPTIONOPTIONmoreparams" : "Intitulé du bouton \"Paramétrage manuel supplémentaire\"",

//-- border-color
"OPTIONMainbdc" : "Couleur des bordures (général)",
"OPTIONWrapperbdc" : "Couleur de la bordure du bandeau d’évaluation (hors page spéciale)",
"OPTIONFiltAbbrMbdc" : "Couleur de la bordure des afficheurs des options de filtrage (actif)",
"OPTIONPILIbdc" : "Couleur de la bordure des infos de page",
"OPTIONHoverPILIbdc" : "Couleur de la bordure des infos de page (au survol)",
"OPTIONTHListbdc" : "Couleur de la bordure des en-têtes du tableau de vérification",
"OPTIONSortbdc" : "Couleur de la bordure des liens de tri",
"OPTIONLinesbdc" : "Couleur de la bordure des lignes du tableau de vérification",
"OPTIONAlertbdc" : "Couleur de la bordure du bandeau de message",
"OPTIONOptLIbdc" : "Couleur de la bordure des lignes des options",
"OPTIONHoverOptLIbdc" : "Couleur de la bordure des lignes des options (au survol)",
"OPTIONDTpickCSelbdc" : "Couleur de la bordure des éléments sélectionnés (sélecteurs d'horaire et de date)",

//-- background-color
"OPTIONMainbgc" : "Couleur d’arrière plan du bandeau d’évaluation (hors page spéciale)",
"OPTIONSmallFSbgc" : "Couleur d’arrière plan des formulaires de configuration (hors page spéciale)",
"OPTIONBigFSbgc" : "Couleur d’arrière plan des formulaires de configuration (page spéciale)",
"OPTIONModSelbgc" : "Couleur d’arrière plan des sélecteurs de modes",
"OPTIONHoverModSelbgc" : "Couleur d’arrière plan des sélecteurs de modes (au survol)",
"OPTIONModSelCurrbgc" : "Couleur d’arrière plan du sélecteur de modes activé",
"OPTIONHoverModSelCurrbgc" : "Couleur d’arrière plan du sélecteur de modes activé (au survol)",
"OPTIONPILIbgc" : "Couleur d’arrière plan des infos de page",
"OPTIONHoverPILIbgc" : "Couleur d’arrière plan des infos de page (au survol)",
"OPTIONFiltNSbgc" : "Couleur d’arrière plan du sélecteur de pages (partie non sélectionnée)",
"OPTIONFiltSbgc" : "Couleur d’arrière plan du sélecteur de pages (partie sélectionnée)",
"OPTIONFiltDISbgc" : "Couleur d’arrière plan du sélecteur de pages (désactivé)",
"OPTIONFiltAbbrbgc" : "Couleur d’arrière plan des afficheurs des options de filtrage (inactif)",
"OPTIONFiltAbbrMbgc" : "Couleur d’arrière plan des afficheurs des options de filtrage (actif)",
"OPTIONTHListbgc" : "Couleur d’arrière plan des en-têtes du tableau de vérification",
"OPTIONSortbgc" : "Couleur d’arrière plan des liens de tri",
"OPTIONLinesbgc" : "Couleur d’arrière plan des lignes du tableau de vérification",
"OPTIONHoverLinesbgc" : "Couleur d’arrière plan des lignes du tableau de vérification (au survol)",
"OPTIONPrvwbgc" : "Couleur d’arrière plan de la prévisualisation",
"OPTIONImpButbgc" : "Couleur d’arrière plan des boutons",
"OPTIONImpButDisbgc" : "Couleur d’arrière plan des boutons désactivés",
"OPTIONImpTexbgc" : "Couleur d’arrière plan des champs de texte et des listes déroulantes",
"OPTIONImpTexDisbgc" : "Couleur d’arrière plan des champs de texte et des listes déroulantes désactivés",
"OPTIONAlertbgc" : "Couleur d’arrière plan du bandeau de message",
"OPTIONOptLIbgc" : "Couleur d’arrière plan des lignes des options",
"OPTIONHoverOptLIbgc" : "Couleur d’arrière plan des lignes des options (au survol)",
"OPTIONOptLIMbgc" : "Couleur d’arrière plan des lignes des options modifiées",
"OPTIONHoverOptLIMbgc" : "Couleur d’arrière plan des lignes des options modifiées (au survol)",
"OPTIONDTpickbgc" : "Couleur d’arrière plan des sélecteurs d'horaire et de date",
"OPTIONDTpickCbgc" : "Couleur d’arrière plan de l’intérieur des sélecteurs d'horaire et de date",
"OPTIONDTpickCSelbgc" : "Couleur d’arrière plan des éléments sélectionnés (sélecteurs d'horaire et de date)",
"OPTIONHoverDTpickCbgc" : "Couleur d’arrière plan des éléments au survol (sélecteurs d'horaire et de date)",

//-- color
"OPTIONMaincol" : "Couleur du texte (général)",
"OPTIONLinkscol" : "Couleur des liens (général)",
"OPTIONSortcol" : "Couleur des liens de tri",
"OPTIONAlertcol" : "Couleur du texte du bandeau de message",
"OPTIONDTpickDiscol" : "Couleur du texte des éléments inactifs (sélecteurs d'horaire et de date)",
"OPTIONDTpickUnSelcol" : "Couleur du texte des éléments non sélectionnables (sélecteurs d'horaire et de date)",


/*</source>

=== Descriptions des textes ===

<source lang=javascript> // -------------------- Descriptions des textes -------------------- */

// Liens en haut de page
"OPTIONLinkText" : "Intitulé du lien \"Évaluer\"",
"OPTIONLinkCatTitle" : "Infobulle du lien \"Évaluer\" (catégories)",
"OPTIONLinkPageTitle" : "Infobulle du lien \"Évaluer\" (articles et pages de discussion)",
"OPTIONLinkLinksTitle" : "Infobulle du lien \"Évaluer\" (sous-page utilisateur)",
"OPTIONLinkLinkshereTitle" : "Infobulle du lien \"Évaluer\" (pages pointant vers cette page)",
"OPTIONLinkTemplateTitle" : "Infobulle du lien \"Évaluer\" (modèles)",
"OPTIONLinkNewpagesTitle" : "Infobulle du lien \"Évaluer\" (nouvelles pages)",
"OPTIONLinkCreationsTitle" : "Infobulle du lien \"Évaluer\" (créations de l’utilisateur)",
"OPTIONLinkPrefixindexTitle" : "Infobulle du lien \"Évaluer\" (préfixe)",

// Page spéciale
"OPTIONSpecialpageName" : "Titre de la page spéciale",
"OPTIONSpecialpageNameH" : "Modèle du titre de l’onglet du navigateur",
"OPTIONcontentSubTemplate" : "Modèle pour l’élément \"contentSub\"",

// Formulaires principaux
"OPTIONWarning" : "Message d’avertissement",
"OPTIONShow" : "Intitulé du lien \"Afficher\"",
"OPTIONShowTip" : "Infobulle du lien \"Afficher\"",
"OPTIONHide" : "Intitulé du lien \"Masquer\"",
"OPTIONHideTip" : "Infobulle du lien \"Masquer\"",

// Thème d'évaluation
"OPTIONEvalTheme" : "Label du formulaire \"Thèmes d’évaluation\"",
"OPTIONPortal" : "Label du sélecteur de portail",
"OPTIONTableEvalTotal" : "Texte \"Total\" dans le tableau d’évaluation",
"OPTIONIMP" : "Texte \"Importance\" dans le tableau d’évaluation",
"OPTIONAVT" : "Texte \"Avancement\" dans le tableau d’évaluation",
"OPTIONUpdateTableEvalText" : "Intitulé du bouton pour mettre à jour le tableau d’évaluation",
"OPTIONUpdateTableEvalTip" : "Infobulle du bouton pour mettre à jour le tableau d’évaluation",
"OPTIONThemeCats" : "Label du tableau des catégories liées",

// Modes
"OPTIONModes" : "Label du formulaire \"Mode\"",
"OPTIONMainNamespace" : "Nom de l’espace de noms principal",
"OPTIONTimeDateLabel" : "Label des sélecteurs de timestamp",

// Informations sur la page ou l'utilisateur,
"OPTIONINFOmissing" : "Page inexistante ?",
"OPTIONINFOpageid" : "Identifiant de la page",
"OPTIONINFOns" : "Espace de noms",
"OPTIONINFOtitle" : "Titre",
"OPTIONINFOcontentmodel" : "Type de contenu",
"OPTIONINFOpagelanguage" : "Language du contenu",
"OPTIONINFOtouched" : "Dernière mise à jour",
"OPTIONINFOlastrevid" : "Identifiant de la dernière version",
"OPTIONINFOlength" : "Taille (octets)",
"OPTIONINFOprotection" : "Protections",
"OPTIONINFOwatched" : "Page suivie ?",
"OPTIONINFOwatchers" : "Nombre de suiveurs",
"OPTIONINFOvisitingwatchers" : "Nombre de suiveurs ayant visité la dernière révision",
"OPTIONINFOsubjectid" : "Identifiant de la page principale",
"OPTIONINFOtalkid" : "Identifiant de la page de discussion",
"OPTIONINFOuserid" : "Identifiant de l’utilisateur",
"OPTIONINFOname" : "Nom",
"OPTIONINFOeditcount" : "Compteur d’éditions",
"OPTIONINFOregistration" : "Date d’enregistrement",
"OPTIONINFOgroups" : "Groupes",
"OPTIONINFOgender" : "Genre",
"OPTIONINFOgenderunknown" : "inconnu",
"OPTIONINFOgenderfemale" : "féminin",
"OPTIONINFOgendermale" : "masculin",
"OPTIONTimeDateTemplate" : "Modèle pour les timestamps",

// Page
"OPTIONpageMode" : "Label du formulaire \"Page\"",
"OPTIONPageLabel" : "Label du champ de texte \"page\"",
"OPTIONPageInfosLabel" : "Label de la liste des informations sur la page (mode page)",
"OPTIONpageExistsNo" : "Texte d’information pour une page inexistante",
"OPTIONpageExistsYes" : "Texte d’information pour une page existante",

// Catégorie
"OPTIONcatMode" : "Label du formulaire \"Catégorie\"",
"OPTIONSubCatTitle" : "Infobulle de la case pour inclure ou non les sous-catégories",
"OPTIONCatDaughters" : "Titre de la liste des catégorie filles",
"OPTIONCatParents" : "Titre de la liste des catégorie parentes",
"OPTIONHiddenCat" : "Infobulle pour une catégorie cachée",
"OPTIONCatExistsNo" : "Texte d’information pour une catégorie inexistante",
"OPTIONCatExistsYes" : "Texte d’information pour une catégorie existante",
"OPTIONCatPages" : "Ligne de décompte des pages",
"OPTIONCatCats" : "Ligne de décompte des sous-catégories",
"OPTIONSelectCat" : "Infobulle d’un lien de catégorie sélectionnable",
"OPTIONCatDoesntExistSel" : "Infobulle d’un lien de catégorie inexistante",
"OPTIONTooMuchSubCatsSel" : "Infobulle d’un lien de catégorie non sélectionnable",
"OPTIONTooMuchSubCatsExp" : "Infobulle d’un lien d’expansion de catégorie non sélectionnable",
"OPTIONCatButtonClosed" : "Texte de la puce des listes de catégories (fermée)",
"OPTIONCatButtonOpened" : "Texte de la puce des listes de catégories (ouverte)",
"OPTIONCatButtonExpand" : "Infobulle de la puce des listes de catégories (fermée)",
"OPTIONCatButtonHide" : "Infobulle de la puce des listes de catégories (ouverte)",
"OPTIONCatInfos" : "Modèle d’information des catégories",
"OPTIONCatInfosNOP" : "Modèle d’information des catégories (sous-catégories uniquement)",
"OPTIONCatInfosNOC" : "Modèle d’information des catégories (pages uniquement)",
"OPTIONCatAllPagesCount" : "Modèle d’information pour le nombre total de pages",
"OPTIONCatInfosPageTip" : "Tooltip \"Pages\"",
"OPTIONCatInfosCatTip" : "Tooltip \"Catégories\"",
"OPTIONCatInfosPageText" : "Texte \"Pages\"",
"OPTIONCatInfosCatText" : "Texte \"Catégories\"",
"OPTIONSubCatDepthText" : "Label du sélecteur de niveau de profondeur des catégories",

// Liens
"OPTIONlinksMode" : "Label du formulaire \"Liens\"",
"OPTIONLinksLabel" : "Label du champ de texte \"page\"",
"OPTIONLinksInfosLabel" : "Label de la liste des informations sur la page (mode liens)",
"OPTIONlinksExistsNo" : "Texte d’information pour une page inexistante (liens)",
"OPTIONlinksExistsYes" : "Texte d’information pour une page existante (liens)",
"OPTIONlinksInfos" : "Modèle pour le comptage des liens",

// Pages liées
"OPTIONlinkshereMode" : "Label du formulaire \"Pages liées\"",
"OPTIONLinkshereLabel" : "Label du champ de texte \"page\"",
"OPTIONLinkshereInfosLabel" : "Label de la liste des informations sur la page (mode pages liées)",
"OPTIONlinkshereExistsNo" : "Texte d’information pour une page inexistante (pages liées)",
"OPTIONlinkshereExistsYes" : "Texte d’information pour une page existante (pages liées)",
"OPTIONlinkshereInfos" : "Modèle pour le comptage des pages liées",

// Inclusions
"OPTIONtemplateMode" : "Label du formulaire \"Inclusions\"",
"OPTIONTemplateLabel" : "Label du champ de texte \"modèle\"",
"OPTIONTemplateInfosLabel" : "Label de la liste des informations sur le modèle",
"OPTIONTemplateDocLabel" : "Label de la documentation du modèle",
"OPTIONtemplateExistsNo" : "Texte d’information pour un modèle inexistant",
"OPTIONtemplateExistsYes" : "Texte d’information pour un modèle existant",
"OPTIONtemplateInfos" : "Modèle pour le comptage des inclusions",

// Nouvelles pages
"OPTIONnewpagesMode" : "Label du formulaire \"Nouvelles pages\"",
"OPTIONnewpagesInfosLabel" : "Label de la liste des nouvelles pages",
"OPTIONnewpagesExistsNo" : "Texte d’information lorsqu’il n’y a pas de nouvelles pages",
"OPTIONnewpagesExistsYes" : "Texte d’information lorsqu’il y a des nouvelles pages",
"OPTIONnewpagesInfos" : "$1 nouvelle(s) page(s)",

// Créations
"OPTIONcreationsMode" : "Label du formulaire \"Créations\"",
"OPTIONUserLabel" : "Label du champ de texte \"utilisateur\"",
"OPTIONUserInfosLabel" : "Label de la liste des informations sur l’utilisateur",
"OPTIONcreationsExistsNo" : "Texte d’information pour un utilisateur inexistant",
"OPTIONcreationsExistsYes" : "Texte d’information pour un utilisateur existant",
"OPTIONcreationsInfos" : "Modèle pour le comptage des créations d’articles",

// Préfixe
"OPTIONprefixesMode" : "Label du formulaire \"Préfixe\"",
"OPTIONPrefixLabel" : "Label du champ de texte \"Préfixe\"",
"OPTIONprefixesInfosLabel" : "Label de la liste des pages avec préfixe",
"OPTIONprefixesExistsYes" : "Texte d’information lorsqu’il y a des pages avec le préfixe",
"OPTIONprefixesExistsNo" : "Texte d’information lorsqu’il n’y a pas de pages avec le préfixe",
"OPTIONprefixesInfos" : "Modèle pour le comptage des pages avec préfixe",

// Filtrage
"OPTIONSearch" : "Label du formulaire \"Filtrage\"",
"OPTIONRangeViewerTip" : "Infobulle de l’afficheur du sélecteur de pages",
"OPTIONRangeSelectorTip" : "Infobulle du sélecteur de pages",
"OPTIONRangeSelectorTempl" : "Modèle du sélecteur de pages",
"OPTIONSTUB" : "Label du sélecteur de bandeau d’ébauche du formulaire de filtrage",
"OPTIONYES" : "Mot \"Oui\" pour les sélecteurs du formulaire de filtrage (bandeaux d’ébauche)",
"OPTIONNO" : "Mot \"Non\" pour les sélecteurs du formulaire de filtrage (bandeaux d’ébauche)",
"OPTIONAVTOptNone" : "Terme désignant l’absence d’évaluation d’avancement",
"OPTIONIMPOptNone" : "Terme désignant l’absence d’évaluation d’importance",
"OPTIONSearchAND" : "Mot \"et\" pour les sélecteurs du formulaire de filtrage",
"OPTIONSearchOR" : "Mot \"ou\" pour les sélecteurs du formulaire de filtrage",
"OPTIONNotFilteredCount" : "Infobulle du compteur de lignes non filtrées",
"OPTIONFilteredCount" : "Modèle du compteur de lignes non filtrées",

// Actions
"OPTIONActions" : "Label du formulaire \"Actions\"",
"OPTIONGoListText" : "Intitulé du bouton \"Vérifier l’évaluation\"",
"OPTIONGoVerifOne" : "Infobulle du bouton \"Vérifier l’évaluation\" (page)",
"OPTIONGoVerifCat" : "Infobulle du bouton \"Vérifier l’évaluation\" (pages de la catégorie)",
"OPTIONGoVerifLinks" : "Infobulle du bouton \"Vérifier l’évaluation\" (pages en lien)",
"OPTIONGoVerifLinkshere" : "Infobulle du bouton \"Vérifier l’évaluation\" (pages pointant vers la page",
"OPTIONGoVerifTemplate" : "Infobulle du bouton \"Vérifier l’évaluation\" (pages incluant le modèle",
"OPTIONGoVerifNewpages" : "Infobulle du bouton \"Vérifier l’évaluation\" (nouvelles pages",
"OPTIONGoVerifCreations" : "Infobulle du bouton \"Vérifier l’évaluation\" (articles créés par l’utilisateur",
"OPTIONGoVerifPrefixes" : "Infobulle du bouton \"Vérifier l’évaluation\" (préfixe)",
"OPTIONEmergencyStop" : "Infobulle du bouton d’arrêt d’urgence",
"OPTIONGoAddEvalText" : "Intitulé du bouton \"Ajouter une évaluation\"",
"OPTIONGoAddOne" : "Infobulle du bouton \"Ajouter une évaluation\" (page)",
"OPTIONGoAddCat" : "Infobulle du bouton \"Ajouter une évaluation\" (pages de la catégorie)",
"OPTIONGoAddLinks" : "Infobulle du bouton \"Ajouter une évaluation\" (pages en lien)",
"OPTIONGoAddLinkshere" : "Infobulle du bouton \"Ajouter une évaluation\" (pages pointant vers la page)",
"OPTIONGoAddTemplate" : "Infobulle du bouton \"Ajouter une évaluation\" (pages incluant le modèle)",
"OPTIONGoAddNewpages" : "Infobulle du bouton \"Ajouter une évaluation\" (nouvelles pages)",
"OPTIONGoAddCreations" : "Infobulle du bouton \"Ajouter une évaluation\" (articles créés par l’utilisateur)",
"OPTIONGoAddPrefixes" : "Infobulle du bouton \"Ajouter une évaluation\" (préfixe)",
"OPTIONGoAddCancelText" : "Intitulé du bouton \"Annuler l’ajout d’évaluation\"",
"OPTIONGoAddCancelTip" : "Infobulle du bouton \"Annuler l’ajout d’évaluation\"",
"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\"",
"OPTIONGoDocText" : "Intitulé du bouton \"Documentation\"",
"OPTIONGoDocTitle" : "Infobulle du bouton \"Documentation\"",
"OPTIONGoCloseTitle" : "Infobulle du bouton pour fermer le formulaire",

// Tableau des pages
"OPTIONPageListTable" : "Titre du tableau des pages",
"OPTIONTH0text" : "Intitulé de la colonne \"Page\"",
"OPTIONTH1text" : "Intitulé de la colonne \"Portails\"",
"OPTIONTH2text" : "Intitulé de la colonne \"Bandeau d’ébauche\"",
"OPTIONTH3text" : "Intitulé de la colonne \"Avancement\"",
"OPTIONTH4text" : "Intitulé de la colonne \"Importances\"",
"OPTIONTH5text" : "Intitulé de la colonne \"Actions\"",
"OPTIONSortTitleUP" : "Infobulle du lien pour le tri selon le titre de la page (alphabétique)",
"OPTIONSortTitleDOWN" : "Infobulle du lien pour le tri selon le titre de la page (alphabétique inversé",
"OPTIONSortStubUP" : "Infobulle du lien pour le tri selon le nombre de thèmes d’ébauche (croissant)",
"OPTIONSortStubDOWN" : "Infobulle du lien pour le tri selon le nombre de thèmes d’ébauche (décroissant)",
"OPTIONSortAVTUP" : "Infobulle du lien pour le tri selon l’avancement (du moins avancé au plus avancé)",
"OPTIONSortAVTDOWN" : "Infobulle du lien pour le tri selon l’avancement (du plus avancé au moins avancé)",
"OPTIONSortIMPUP" : "Infobulle du lien pour le tri selon l’importance dans le thème sélectionné (du moins important au plus important)",
"OPTIONSortIMPDOWN" : "Infobulle du lien pour le tri selon l’importance dans le thème sélectionné (du plus important au moins important)",
"OPTIONSortUPArrow" : "Intitulé du lien pour le tri (up)",
"OPTIONSortDOWNArrow" : "Intitulé du lien pour le tri (down)",
"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\"",
"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)",
"OPTIONGoHideOneText" : "Intitulé du bouton \"Masquer\"",
"OPTIONGoHideOneTitle" : "Infobulle du bouton \"Masquer\"",
"OPTIONGoShowOneText" : "Intitulé du bouton \"Afficher\"",
"OPTIONGoShowOneTitle" : "Infobulle du bouton \"Afficher\"",
"OPTIONbottomlinkstemplate" : "Modèle des liens du bas",

// Édition
"OPTIONNoEdition" : "Message par défaut lorsque l’édition n’est pas permise",
"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]]",

// Messages d'alerte
"OPTIONAlertMsgNone" : "Infobulle de l'icône \"OK\"",
"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",
"OPTIONAlertMsgCatAnalys" : "Message lors de l’analyse de la catégorie sélectionnée",
"OPTIONAlertMsgLinks" : "Message lors de l’analyse des pages liées dans l’article",
"OPTIONAlertMsgLinkshere" : "Message lors de l’analyse des pages pointant vers la page",
"OPTIONAlertMsgTemplate" : "Message lors de l’analyse des inclusions du modèle",
"OPTIONAlertMsgNewpages" : "Message lors de l’analyse des nouvelles pages",
"OPTIONAlertMsgCreations" : "Message lors de l’analyse des pages créées par l’utilisateur",
"OPTIONAlertMsgPrefixes" : "Message lors de l’analyse des pages commençant par un préfixe",
"OPTIONAlertMsgEvals" : "Message lors de l’analyse des évaluations du thème sélectionné",
"OPTIONAlertMsgEdit" : "Message lors d’une édition",
"OPTIONAlertMsgFilterSTUB" : "Message lorsqu’aucune option de bandeau d’ébauche n’est sélectionnée",
"OPTIONAlertMsgFilterAVT" : "Message lorsqu’aucune option de bandeau d’évaluation d’avancement n’est sélectionnée",
"OPTIONAlertMsgFilterIMP" : "Message lorsqu’aucune option de bandeau d’évaluation d’importance n’est sélectionnée",
"OPTIONAlertMsgSizeUnit" : "Message lorsqu’un champ de texte attendant une valeur en unité de longueur valable n’en contient pas",
"OPTIONAlertMsgColorInput" : "Message lorsqu’un champ de texte attendant un code couleur valide n’en contient pas",
"OPTIONAlertMsgStopNeeded" : "Message lorsqu’un arrêt d’urgence est demandé",
"OPTIONAlertMsgStopDone" : "Message lorsqu’un arrêt d’urgence est effectué",
"OPTIONOptionValidate" : "Intitulé du bouton \"Valider les changements\"",
"OPTIONOptionValidateTip" : "Infobulle du bouton \"Valider les changements\"",
"OPTIONOptionSubPageText" : "Intitulé du bouton pour ouvrir la sous-page de configuration",
"OPTIONOptionSubPageTip" : "Infobulle du bouton pour ouvrir la sous-page de configuration",
"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",

// Menu d'options
"OPTIONSizeUnitTip" : "Infobulle d’un champ de texte attendant une valeur en unité de longueur valable",
"OPTIONColorInput" : "Infobulle d’un champ de texte attendant un code couleur valable",
"OPTIONparams" : "Intitulé du bouton \"Paramètres\"",
"OPTIONstyles" : "Intitulé du bouton \"Styles CSS\"",
"OPTIONtexts" : "Intitulé du bouton \"Textes\"",
"OPTIONmoreparams" : "Intitulé du bouton \"Paramétrage manuel supplémentaire\"",
"OPTIONparam" : "Label d’un texte de description d’un paramètre personnalisable",
"OPTIONreadonlyparam" : "Label d’un texte de description d’un paramètre non personnalisable",
"OPTIONstyle" : "Label d’un texte de description d’un style CSS",
"OPTIONtext" : "Label d’un texte de description d’un texte",
"OPTIONGlobDefButtonText" : "Intitulé du bouton pour rétablir les valeurs par défaut de tout un onglet",
"OPTIONGlobDefButtonTitle" : "Infobulle du bouton pour rétablir les valeurs par défaut de tout un onglet",
"OPTIONTestMoreParamsText" : "Intitulé du bouton pour tester le paramétrage manuel supplémentaire",
"OPTIONTestMoreParamsTip" : "Infobulle du bouton pour tester le paramétrage manuel supplémentaire",
"OPTIONMoreParamsTestOK" : "Message lorsqu’aucune erreur javascript n’est détectée",
"OPTIONMoreParamsTestKO" : "Message lorsqu’une erreur javascript est détectée",

// Menu des données
"OPTIONGoDatasText" : "Intitulé de l’onglet \"Données\"",
"OPTIONGoDatasTitle" : "Infobulle de l’onglet \"Données\"",
"OPTIONGoDatasRAZText" : "Intitulé du bouton pour effacer les données",
"OPTIONGoDatasRAZTitle" : "Infobulle du bouton pour effacer les données",
"OPTIONlocalStorageExpiryT" : "Modèle pour le temps restant avant expiration",
"OPTIONevaldataUL" : "Intitulé de l’onglet \"Thèmes d’évaluation\" (menu des données)",
"OPTIONstubdataUL" : "Intitulé de l’onglet \"Thèmes d’ébauche\" (menu des données)",
"OPTIONdivdataUL" : "Intitulé de l’onglet \"Divers\" (menu des données)",
"OPTIONRAZdataUL" : "Intitulé de l’onglet \"Gestion localStorage\" (menu des données)",

// Divers
"OPTIONMonth01" : "Nom du mois de janvier",
"OPTIONMonth02" : "Nom du mois de février",
"OPTIONMonth03" : "Nom du mois de mars",
"OPTIONMonth04" : "Nom du mois d’avril",
"OPTIONMonth05" : "Nom du mois de mai",
"OPTIONMonth06" : "Nom du mois de juin",
"OPTIONMonth07" : "Nom du mois de juillet",
"OPTIONMonth08" : "Nom du mois d’août",
"OPTIONMonth09" : "Nom du mois de septembre",
"OPTIONMonth10" : "Nom du mois d’octobre",
"OPTIONMonth11" : "Nom du mois de novembre",
"OPTIONMonth12" : "Nom du mois de décembre",


/* </source>

=== Descriptions des données (paramètres non modifiables) ===

<source lang=javascript> // -------------------- Descriptions des données -------------------- */


"OPTIONEvalTemplate" : "Modèle pour l’évaluation",
"OPTIONEvalThemes" : "Liste des thèmes d’évaluation",
"OPTIONEvalThemesAliasesPage" : "Page à analyser pour les alias des thèmes d’évaluation",
"OPTIONEvalThemesAliases" : "Liste des alias des thèmes d’évaluation",
"OPTIONEvalCategory" : "Catégorie-mère des projets d’évaluation",
"OPTIONEvalCatPrefixes" : "Préfixes des projets d’évaluation",
"OPTIONEvalThemesDefaultCat" : "Préfixe par défaut pour les catégories d’évaluation",
"OPTIONEvalThemesUsusualCats" : "Page à analyser pour les catégories d’évaluation spéciales",
"OPTIONEvalThemesUnusualCatTemplate" : "Préfixe pour les catégories d’évaluation spéciales",
"OPTIONEvalCatsPrefixes" : "Préfixes pour la catégorie-mère des catégories d’évaluation",
"OPTIONEvalCatsCommonPrefix" : "Préfixes commun pour la catégorie-mère des catégories d’évaluation",
"OPTIONEvalThemesCat" : "Catégories d’évaluation",
"OPTIONMisplacedEvalThemes" : "Thème dont les catégories d’évaluation sont mal placées (pas dans une catégorie \"Wikiprojet\")",
"OPTIONPortalCatTemplate" : "Modèle pour les catégories de portails",
"OPTIONPortalList" : "Liste des portails",
"OPTIONAvancement" : "Données pour les évaluations d’avancement",
"OPTIONImportance" : "Données pour les évaluations d’importance",

"OPTIONStubTemplate" : "Modèle de bandeau d’ébauche",
"OPTIONStubThemesPage" : "Page à analyser pour récupérer les thèmes d’ébauche",
"OPTIONStubThemes" : "Liste des thèmes d’ébauche",
"OPTIONStubAdjM" : "Liste des adjectifs masculins associables aux thèmes d’ébauche",
"OPTIONStubAdjF" : "Liste des adjectifs féminins associables aux thèmes d’ébauche",
"OPTIONBeforeStubTemplatesCats" : "Catégories où sont listés des modèles à maintenir au-dessus du bandeau d’ébauche",
"OPTIONBeforeStubTemplates" : "Modèles à maintenir au-dessus du bandeau d’ébauche (avec les redirections)",

"OPTIONMissingTexts" : "Textes d’explication manquants",
"OPTIONUnusedTexts" : "Textes d’explication inutilisés",
"OPTIONModesMap" : "Données sur les modes de fonctionnement",
"OPTIONSortOptions" : "Types de tri possibles",
"OPTIONBorderStyles" : "Types de style de bordure possibles",
"OPTIONSizeUnits" : "Unités de mesures autorisées",
"OPTIONDivIDsToPreview" : "Identifiants des éléments d’une page à intégrer à la prévisualisation",
"OPTIONTalkSubPagesToAvoid" : "Sous-pages de discussion à ne jamais lister",
"OPTIONAccents" : "Lettres accentuées et composées à transformer pour le tri alphabétique",
"OPTIONFontFamilies" : "Familles de polices",
"OPTIONEvalCatAllpages" : "Modèle pour les catégories /Articles liés",
"OPTIONEvalCatStubpages" : "Modèle pour les catégories d’ébauche",
"OPTIONSpecialpageName" : "Titre de la page spéciale",
"OPTIONOptionsSubPage" : "Sous-page utilisateur de personnalisation",
"OPTIONTestPage" : "Sous-page utilisateur de test du mode \"article\"",
"OPTIONTimeCorrection" : "Décalage horaire",
"OPTIONAPILimit" : "Limite de requête API",
"OPTIONlocalStorageExpiry" : "Délai d’expiration du localStorage (en heures)",
"OPTIONChangesToMakeDelay" : "Délai en ms imposé entre deux éditions",

},
/*</source>

== Styles CSS ==

<source lang=javascript> // ------------------------------- Styles CSS modifiables ------------------------------- */
styles : {
//-- font-family
"Mainff" : "Arial",
//-- font-size
"Mainfs" : "100%",
"Prvwfs" : "85%",
"TempDocfs" : "85%",
"PortListfs" : "85%",
"Alertfs" : "175%",
//-- height
"Prvwhght" : "250px",
"CatListhght" : "175px",
"OptImgPrevhght" : "50px",
//-- width
"EvalTableIcowidth" : "14px",
"RunIcowidth" : "16px",
"PrevCloseIcowidth" : "16px",
"RedirectIcowidth" : "14px",
"DisambigIcowidth" : "12px",
"HiddenCatIcowidth" : "14px",
"AlertIcowidth" : "20px",
"MainCloseIcowidth" : "32px",
"TH2width" : "140px",
"TH3width" : "240px",
"TH4width" : "125px",
"TH5width" : "300px",
"TH6width" : "80px",
"ModSelwidth" : "12%",
"Timewidth" : "75px",
"Datewidth" : "100px",
"TempDocwidth" : "60%",
"PIcolwdth" : "600px",
"Optcolwdth" : "600px",
"OptStrwdth" : "350px",
"OptNbrwdth" : "50px",
"OptStywdth" : "195px",
"SpeImpCatwdth" : "250px",
"MainEvalTwidth" : "200px",
"StubTwidth" : "100px",
"StubAwidth" : "100px",
"Avtwidth" : "125px",
"ImpTwidth" : "150px",
"Impwidth" : "80px",
"EmStopwidth" : "16px",
//-- border-radius
"Wrapperbdr" : "1em",
"SmallFSbdr" : "0.5em",
"BigFSbdr" : "1em",
"EvalTbdr" : "0.5em",
"ModSelbdr" : "2em",
"PILIbdr" : "0.5em",
"FiltAbbrbdr" : "0.25em",
"FilSelbdr" : "0.5em",
"LinesTbdr" : "0.375em",
"Sortbdr" : "0.5em",
"Alertbdr" : "5px",
"ImpButbdr" : "0.375em",
"ImpTexbdr" : "0.375em",
"Selectbdr" : "0.375em",
"OptLIbdr" : "0.5em",
"DTpickbdr" : "10px",
//-- border-style
"Mainbds" : "solid",
"Wrapperbds" : "solid",
"Innerbds" : "dashed",
"FiltAbbrbds" : "solid",
"Alertbds" : "solid",
"Prvwbds" : "dashed",
//-- border-color
"Mainbdc" : "#a2a9b1",
"Wrapperbdc" : "#a2a9b1",
"PILIbdc" : "#dcdcdc",
"HoverPILIbdc" : "#a2a9b1",
"Sortbdc" : "#a2a9b1",
"THListbdc" : "#a2a9b1",
"Linesbdc" : "#a2a9b1",
"FiltAbbrMbdc" : "#8b0000",
"OptLIbdc" : "#dcdcdc",
"HoverOptLIbdc" : "#a2a9b1",
"Alertbdc" : "#a2a9b1",
"DTpickCSelbdc" : "#0095dd",
//-- background-color
"Mainbgc" : "#ffffff",
"SmallFSbgc" : "#f8f8f8",
"BigFSbgc" : "#f8fcff",
"ModSelbgc" : "#f8f8f8",
"HoverModSelbgc" : "#e0e0e0",
"ModSelCurrbgc" : "#eaf7e8",
"HoverModSelCurrbgc" : "#b2eaa9",
"FiltAbbrbgc" : "#f8f8f8",
"FiltNSbgc" : "#ff0000",
"FiltSbgc" : "#00ff00",
"FiltDISbgc" : "#dcdcdc",
"FiltAbbrMbgc" : "#ffd700",
"ImpButbgc" : "#f0f0f0",
"ImpButDisbgc" : "#c7c7c7",
"ImpTexbgc" : "#ffffff",
"ImpTexDisbgc" : "#f0f0f0",
"PILIbgc" : "#fafdff",
"HoverPILIbgc" : "#eaecf0",
"THListbgc" : "#d3d3d3",
"Sortbgc" : "#f8f8f8",
"Linesbgc" : "#f8f8f8",
"HoverLinesbgc" : "#eaecf0",
"Prvwbgc" : "#ffffff",
"OptLIbgc" : "#fafdff",
"HoverOptLIbgc" : "#eaecf0",
"OptLIMbgc" : "#ffffe0",
"HoverOptLIMbgc" : "#f0e68c",
"Alertbgc" : "#ffffff",
"DTpickbgc" : "#f8f8f8",
"DTpickCbgc" : "#ffffff",
"HoverDTpickCbgc" : "#c0e5f7",
"DTpickCSelbgc" : "#e5f2ff",
//-- color
"Maincol" : "#000000",
"Alertcol" : "#ff0000",
"Linkscol" : "#002bb8",
"Sortcol" : "#000000",
"DTpickDiscol" : "#cccccc",
"DTpickUnSelcol" : "#999999",


},
},
/*</source>

== Paramètres ==

<source lang=javascript> // ------------------------------- Paramètres modifiables ------------------------------- */
params : {
params : {
// ------------------------------- Paramètres modifiables -------------------------------
"AllowEdition" : true,
"AllowEdition" : true,
"AutoLaunchList" : false,
"UseTopFormInNS0" : true,
"AutoLaunchPreview" : false,
"AutoLaunchPreview" : false,
"PreloadPreview" : false,
"PreloadPreview" : false,
"AddWarning" : false,
"AddWarning" : false,
"TH1width" : 200,
"SearchForPortalTag" : true,
"TH2width" : 150,
"UseFancyInputs" : false,
"TH3width" : 300,
"SuggestSelectSize" : 4,
"TH4width" : 100,
"SuggestNumber" : 12,
"OptionsHeight" : 400,
"KeyUpDelay" : 500,
"PreviewHeight" : 250,
"MaxSubcatLevel" : 6,
"PreviewHeightStep" : 50,
"MaxSubCatAllowedSel" : 200,
"CatInputWidth" : 200,
"MaxSubCatAllowedExp" : 500,
"MainEvalThemeWidth" : 200,
"EvalThemeWidth" : 150,
"StubThemeWidth" : 100,
"OptionUlColumnWidth" : 705,
"OptionStringWidth" : 400,
"OptionNumberWidth" : 50,
"MoreParamsRows" : 20,
"MoreParamsRows" : 20,
"CategorySelectSize" : 4,
"CategorySuggestions" : 12,
"DefaultPortal" : "",
"DefaultPortal" : "",
"DefaultSort" : "SortDS_UP",
"LinkPortletID" : "p-cactions",
"LinkPortletID" : "p-cactions",
"DocPage" : "m:User:OldBee/PortalEval.js/doc",
"DocPage" : "m:User:OldBee/MassEval.js/doc/fr",
"DocURL" : "https://meta.wikimedia.org/wiki/User:OldBee/PortalEval.js/doc",
"DocURL" : "https://meta.wikimedia.org/wiki/User:OldBee/MassEval.js/doc/fr",
"ImageURL" : "//upload.wikimedia.org/wikipedia/commons/",
"ImageURL" : "//upload.wikimedia.org/wikipedia/commons/",
"RunningIcon" : "2/2a/Loading_Key.gif",
"RunningIcon" : "2/2a/Loading_Key.gif",
"OKIcon" : "thumb/f/fb/Yes_check.svg/24px-Yes_check.svg.png",
"OKIcon" : "thumb/f/fb/Yes_check.svg/32px-Yes_check.svg.png",
"CloseIcon" : "thumb/8/80/Icon_no.svg/24px-Icon_no.svg.png",
"CloseIcon" : "thumb/8/80/Icon_no.svg/32px-Icon_no.svg.png",
"DownIcon" : "thumb/f/f3/HSR_1996_II_3.4f.svg/16px-HSR_1996_II_3.4f.svg.png",
"RedirectIcon" : "thumb/7/71/Symbol_redirect_arrow_with_gradient.svg/32px-Symbol_redirect_arrow_with_gradient.svg.png",
"UpIcon" : "thumb/1/1a/HSR_1996_II_3.4i.svg/16px-HSR_1996_II_3.4i.svg.png",
"DisambigIcon" : "thumb/c/c3/Disambiguation.svg/32px-Disambiguation.svg.png",
"RedirectIcon" : "thumb/7/71/Symbol_redirect_arrow_with_gradient.svg/12px-Symbol_redirect_arrow_with_gradient.svg.png",
"HiddenCatIcon" : "thumb/1/1f/Tools.svg/32px-Tools.svg.png",
"DisambigIcon" : "thumb/c/c3/Disambiguation.svg/12px-Disambiguation.svg.png",
"WarningIcon" : "thumb/d/d6/Dialog-warning-custom.svg/32px-Dialog-warning-custom.svg.png",
"StopIcon" : "thumb/b/b8/Crystal_Project_Logout.png/32px-Crystal_Project_Logout.png",


//</source><noinclude><source lang="javascript">
// ############################### PARTIE NON PERSONNALISABLE ###############################
// ############################### PARTIE NON PERSONNALISABLE ###############################
// ------------------------------- Paramètres non modifiables -------------------------------
// ------------------------------- Paramètres non modifiables -------------------------------
"EditableParams" : [
"EditableParams" : [
"AllowEdition",
"AllowEdition",
"AutoLaunchList",
"UseTopFormInNS0",
"SearchForPortalTag",
"AutoLaunchPreview",
"AutoLaunchPreview",
"PreloadPreview",
"PreloadPreview",
"AddWarning",
"AddWarning",
"TH1width",
"UseFancyInputs",
"TH2width",
"SuggestSelectSize",
"TH3width",
"SuggestNumber",
"TH4width",
"KeyUpDelay",
"OptionsHeight",
"MaxSubcatLevel",
"PreviewHeight",
"MaxSubCatAllowedSel",
"PreviewHeightStep",
"MaxSubCatAllowedExp",
"CatInputWidth",
"MainEvalThemeWidth",
"EvalThemeWidth",
"StubThemeWidth",
"OptionUlColumnWidth",
"OptionStringWidth",
"OptionNumberWidth",
"MoreParamsRows",
"MoreParamsRows",
"CategorySelectSize",
"CategorySuggestions",
"DefaultPortal",
"DefaultPortal",
"DefaultSort",
"LinkPortletID",
"LinkPortletID",
"DocPage",
"DocPage",
"DocURL",
"DocURL",
"ImageURL",
"ImageURL",
"RunningIcon",
"OKIcon",
"OKIcon",
"RunningIcon",
"WarningIcon",
"StopIcon",
"CloseIcon",
"CloseIcon",
"DownIcon",
"UpIcon",
"RedirectIcon",
"RedirectIcon",
"DisambigIcon",
"DisambigIcon",
"HiddenCatIcon",
],
],
"SpecialpageName" : "MassEval",
"OptionsSubPage" : "/MassEvalparams.js",
"TestPage" : "/MassEvalTest",
"EditTag" : "",
"UserCanTag" : true, // droit MW "applychangetags"
"AddDeveloperLinks" : false,
"TimeCorrection" : 0,
"UserInfosOK" : false,
"MissingTexts" : [],
"UnusedTexts" : [],
"Importance" : [
"Importance" : [
{ wiki : "maximum", text : "Maximum", color : "#FF00FF" },
{ wiki : "maximum", text : "Maximum", color : "#FF00FF" },
Line 302: Line 1,100:
],
],
"Avancement" : [
"Avancement" : [
{ wiki : "AdQ", text : "Article de qualité", color : "#6699FF" },
{ wiki : "AdQ", text : "Article de qualité", color : "#6699FF" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/6/66/Fairytale_bookmark_gold.svg/14px-Fairytale_bookmark_gold.svg.png"},
{ wiki : "BA", text : "Bon article", color : "#66FF66" },
{ wiki : "BA", text : "Bon article", color : "#66FF66" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Fairytale_bookmark_silver.svg/14px-Fairytale_bookmark_silver.svg.png"},
{ wiki : "A", text : "Avancé", color : "#66FFFF" },
{ wiki : "A", text : "Avancé", color : "#66FFFF" },
{ wiki : "B", text : "Bien", color : "#FFFF66" },
{ wiki : "B", text : "Bien", color : "#FFFF66" },
{ wiki : "BD", text : "Bon début", color : "#FFAA66" },
{ wiki : "BD", text : "Bon début", color : "#FFAA66" },
{ wiki : "ébauche", text : "Ébauche", color : "#FF6666" },
{ wiki : "ébauche", text : "Ébauche", color : "#FF6666" },
{ wiki : "?", text : "Inconnu", color : "#666666", textcolor:"white" }
{ wiki : "homonymie", text : "Homonymie", color : "#66ff66" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Disambiguation.svg/14px-Disambiguation.svg.png" },
{ wiki : "?", text : "Inconnu", color : "#666666", textcolor:"white" }
],
],
"EvalTemplate" : "Wikiprojet",
"EvalTemplate" : "Wikiprojet",
"EvalTemplatNoCat" : "|nocat=1\n",
"EvalCategory" : "Wikiprojet",
"EvalCategory" : "Wikiprojet",
"EvalCatPrefixes" : ["Wikiprojet ", "Wikiprojet:"],
"EvalCatPrefixes" : ["Wikiprojet ", "Wikiprojet:"],
"EvalThemes" : [],
"EvalThemes" : [],
"FakeEvalThemes" : ["Statistique"],
"EvalThemesCat" : {},
"FakeEvalThemes" : ["Statistique", "sur le management"],
"ManuEvalThemes" : ["GNU/Linux"],
"ManuEvalThemes" : ["GNU/Linux"],
"MisplacedEvalThemes" : [ // ----------------------- Liste à réduire !
"Disney",
"Time Warner",
"Pologne",
"Cynophilie",
"Nintendo",
"Droits de l'homme",
"URSS",
"Ordre du Temple",
"criminologie",
"protestantisme",
"Bible",
"Origine et évolution du vivant",
"Aude",
"Képi blanc",
"Massif du Jura",
"Var",
"Alsace",
"Aube",
"Matériaux",
"Bicyclette",
"Parcs de loisirs",
"Hautes-Alpes",
"Brest",
"Hautes-Pyrénées",
"Abbeville",
"Sécurité civile et sapeurs-pompiers",
"Ligne Maginot",
"Baroque",
"Dauphiné",
"Anatomie",
"Bosnie-Herzégovine",
"horreur",
"Athéisme",
"Wiki Loves Earth",
"Christianisme évangélique",
"Pink Floyd",
"Tunisie",
"Eurovision",
"X-Files",
"Limoges",
"Kosovo",
"autisme",
"transidentité",
"Historiographie",
"Biologie marine",
"Firefly",
"Cher",
"Maghreb",
"Champagne-Ardenne",
"syndicalisme",
"numismatique",
"Terre du Milieu",
"Languedoc-Roussillon",
"écologie",
"équidés",
"Provence-Alpes-Côte d'Azur",
"Libye",
"Seine-Saint-Denis",
],

"EvalThemesUsusualCats" : "Modèle:Wikiprojet/catégorisation",
"EvalThemesDefaultCat" : "Article $1 d'",
"EvalThemesUnusualCatTemplate" : "$1 d'",
"EvalCatsPrefixes" : ["Évaluation des articles ","Évaluation d'article "],
"EvalCatsCommonPrefix" : "Évaluation d",
"EvalCatsMatches" : {"importance":{param:"Importance",id:"IMP"},"avancement":{param:"Avancement",id:"AVT"}},
"EvalThemesAliasesPage" : "Modèle:Wikiprojet/alias",
"EvalThemesAliases" : {},
"EvalTableRequests" : 0,
"EvalThemesOK" : false,
"EvalThemesOK" : false,
"PortalList" : [],
"PortalListOK" : false,
"PortalCatTemplate" : "Portail:$1/Articles liés",
"StubTemplate" : "Ébauche",
"StubTemplate" : "Ébauche",
"StubThemesPage" : "Module:Bandeau/Ébauche",
"StubThemesPage" : "Module:Bandeau/Ébauche",
"StubThemes" : [],
"StubThemes" : {},
"FakeStubThemes" : ["thème", /* "et", */ "exemple doc"],
"FakeStubThemes" : ["thème", /* "et", */ "exemple doc"],
"StubAdj" : [],
"StubAdjM" : [],
"StubAdjM" : [],
"StubAdjF" : [],
"StubAdjF" : [],
"StubThemesOK" : false,
"StubThemesOK" : false,
"OptionsSubPage" : "PortalEvalparams",
"EvalThemeStuffsOK" : false,
"OptionsStuffsOK" : false,
"AllStuffsOK" : false,
"EvalCatAllpages" : "Portail:$1/Articles liés",
"EvalCatStubpages" : "Wikipédia:ébauche $1",
"BeforeStubTemplatesReq" : 0,
"BeforeStubTemplatesCats" : [ "Modèle de titre", "Modèle de bandeau renvoyant vers des homonymes", "Modèle Unicode" ],
"BeforeStubTemplates" : [
"Article général",
"Page annexe",
"Av. J.-C.",
],
"OptionsSubPageOK" : false,
"OptionsSubPageOK" : false,
"OptionsMoreParams" : "",
"OptionsMoreParams" : "",
"OptionsPageTemplate" : "window.PortalEval_UserCustom = function(){\n$1\n}\n",
"OptionsPageTemplate" : "window.MassEval_UserCustom = function(){\n$1\n}\n",
"OptionsPageCommentStart" : "/* Paramètrage supplémentaire du script PortalEval. */ try{ /* NE PAS MODIFIER CETTE LIGNE */\n",
"OptionsPageCommentStart" : "/* Paramètrage supplémentaire du script MassEval. */ 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 */",
"OptionsPageCommentEnd" : "\n/* Paramètrage supplémentaire du script MassEval. */ }catch(e){ console.error(e.message); } /* NE PAS MODIFIER CETTE LIGNE */",
"CatSubPageCountOK" : false,
"PageTitleList" : [],
"PageList" : [],
"PageList" : [],
"SubCatList" : [],
"SubCatList" : [],
Line 336: Line 1,222:
"EvalEditsRunning" : [],
"EvalEditsRunning" : [],
"PreviewSaved" : {},
"PreviewSaved" : {},
"APILimit" : ((mw.config.get("wgUserGroups").indexOf("bot")!==-1 || mw.config.get("wgUserGroups").indexOf("syspo")!==-1) ? 4999 : 499),
"APILimit" : ((mw.config.get("wgUserGroups").indexOf("bot")!==-1 || mw.config.get("wgUserGroups").indexOf("syspo")!==-1) ? 5000 : 500),
"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"],
"DivIDsToPreview" : ["contentSub", "mw-content-text", "catlinks"],
"Accents" : {
"Accents" : {
Line 350: Line 1,235:
"Oe" : ["Œ"],
"Oe" : ["Œ"],
},
},
"SortOptions" : ["SortDS","SortTitle","SortStub","SortAVT","SortIMP"],
"SortOptions" : ["SortTitle","SortPortal","SortStub","SortAVT","SortIMP"],
"OptionSelectWidthPlus" : {"monobook":6,"vector":6,"modern":6,"cologneblue":6},
"OptionSelectWidthPlus" : {"monobook":6,"vector":6,"modern":6,"cologneblue":6},
"BorderStyles" : ["dotted","dashed","solid","double","groove","ridge","inset","outset"],
"SizeUnits" : ["%","em","cn","in","px","pt","pc"],
"CatListRunning" : false,
"SuggestTimeout" : false,
"SuggestRunning" : {},
"SpecialOptionLinkOK" : false,
"LaunchCondition" : false,
"CurrentCatOnSpecialpage" : false,
"SubCatCount" : {catlist:[],pagelist:[]},
"SubCatCountReq" : 0,


"TalkSubPagesToAvoid" : [ "/Suppression",
"/Neutralité",
"/Droit d'auteur",
"/Article de qualité",
"/Bon article",
"/Lumière sur",
"/À faire",
"/Archive",
"/archive"
],
"CurrentHeights" : {},
"ChangesToMake" : [],
"ChangesToMakeDelay" : 50,
"CurrentMaxSubcatLevel" : 1,
"DisplayedOptionsUL" : 0,
"ColorPickers" : {},
"ActualStyleTag" : false,
"BeforeStubTemplatesOK" : false,
"DatasStuffsOK" : false,
"localStorageItems" : [],
"localStorageTimestamps" : {},
"localStorageExpiry" : 24,
"DisplayedDatasUL" : 0,
"ModesMap" : {
"page" : {id:"fieldsetPage", veriftitle:"GoVerifOne", addtitle:"GoAddOne", updatefunc:"checkSelectedPage", listfunc:"getOnePageStatus" },
"cat" : {id:"fieldsetCat", veriftitle:"GoVerifCat", addtitle:"GoAddCat", updatefunc:"checkSelectedCat", listfunc:"getCategoryStatus" },
"links" : {id:"fieldsetLinks", veriftitle:"GoVerifLinks", addtitle:"GoAddLinks", updatefunc:"checkSelectedLinks", listfunc:"getLinksStatus" },
"linkshere" : {id:"fieldsetLinkshere",veriftitle:"GoVerifLinkshere", addtitle:"GoAddLinkshere", updatefunc:"checkSelectedLinkshere", listfunc:"getLinkshereStatus" },
"template" : {id:"fieldsetTemplate", veriftitle:"GoVerifTemplate", addtitle:"GoAddTemplate", updatefunc:"checkSelectedTemplate", listfunc:"getTemplateStatus" },
"newpages" : {id:"fieldsetNewpages", veriftitle:"GoVerifNewpages", addtitle:"GoAddNewpages", updatefunc:"checkSelectedNewpages", listfunc:"getNewpagesStatus" },
"creations" : {id:"fieldsetCreations",veriftitle:"GoVerifCreations", addtitle:"GoAddCreations", updatefunc:"checkSelectedCreations", listfunc:"getCreationsStatus" },
"prefixes" : {id:"fieldsetPrefixes", veriftitle:"GoVerifPrefixes", addtitle:"GoAddPrefixes", updatefunc:"checkSelectedPrefixes", listfunc:"getPrefixesStatus" }
},
"CurrentMode" : null,
"PageLinksList" : [],
"PageLinkshereList" : [],
"PageTemplateList" : [],
"TemplateDocPage" : "/Documentation",
"FontFamilies" : {
"sans-serif" : ["Arial","Bahnschrift","Calibri","Candara","Corbel","Ebrima","Franklin Gothic","Gadugi","Geneva","Helvetica","Lucida Grande","Lucida Sans","Lucida Sans Unicode","Malgun Gothic","Microsoft Yi Baiti","MS PGothic","Tahoma","Trebuchet MS","Verdana"],
"serif" : ["Antiqua","Book Antiqua","Cambria","Constantia","Garamond","Georgia","Mongolian Baiti","Palatino","Palatino Linotype","PMingLiU-ExtB","SimSun","Sylfaen","Times New Roman"],
"monospace" : ["Andale Mono","Consolas","Courier","Courier New","Lucida Console","Lucida Sans Typewriter","MS Gothic","Monaco"],
"cursive" : ["Comic Sans MS","Comic Sans","Gabriola","Lucida Handwriting","Lucida Caligraphy","MV Boli","Segoe Script",],
"fantasy" : ["Arial Black","Blackletter","Charcoal","Fraktur","Gadget","Impact"]
},
},
},
// =============================== Fonctions -------------------------------
//</source><source lang=javascript>
// ------------------------------- Fonctions -------------------------------
// ------------------------------- Fonctions génériques -------------------------------
functions : {
functions : {
generateID : function(){
return "AutoID"+Math.floor(Math.random() * 1000000000);
},
ucFirst : function(text){
ucFirst : function(text){
return text.substr(0,1).toUpperCase() + text.substr(1,text.length);
return text.substr(0,1).toUpperCase() + text.substr(1,text.length);
Line 363: Line 1,308:
},
},
deleteAccents : function(text){
deleteAccents : function(text){
for(var letter in PortalEval.params.Accents){
for(var letter in MassEval.params.Accents){
var letters = PortalEval.params.Accents[letter];
var letters = MassEval.params.Accents[letter];
for(var a=0,l=letters.length;a<l;a++){
for(var a=0,l=letters.length;a<l;a++){
var thisaccent = letters[a];
var thisaccent = letters[a];
Line 372: Line 1,317:
}
}
return text;
return text;
},
formatNumber : function(number){
number = number.toString();
var parts = [];
while(number.length>3){
var lastthree = number.substr((number.length-3),number.length);
parts.splice(0,0,lastthree);
number = number.substr(0,(number.length-3));
}
parts.splice(0,0,number);
return parts.join(" ");
},
addZero : function(num){
var Text = num.toString();
if(Text.length == 1) Text = "0"+Text;
return Text;
},
},
disableThings : function(IDs, dis){
disableThings : function(IDs, dis){
Line 381: Line 1,342:
if(typeof(thisID)==="string") N = document.getElementById(thisID);
if(typeof(thisID)==="string") N = document.getElementById(thisID);
else N = thisID;
else N = thisID;
if(N && N.tagName && tags.indexOf(N.tagName.toLowerCase()) !== -1){
try{
if(N.tagName && tags.indexOf(N.tagName.toLowerCase())!== -1) N.disabled = DIS;
N.disabled = DIS;
}catch(e){
}else
if(N && N.tagName){
console.warn("PortalEval.functions.disableThings()\n\n"+e.message);
for(var t=0,tlen=tags.length;t<tlen;t++){
MassEval.functions.disableThings(N.getElementsByTagName(tags[t]), dis);
}
}
}
}
}
},
},
displayNodesById : function(IDs, display){
displayNodes : function(IDs, display){
if(typeof(IDs)!=="object" && !IDs.length) return;
if(typeof(IDs)!=="object" && !IDs.length) return;
display = (display ? "" : "none");
display = (display ? "" : "none");
for(var a=0,l=IDs.length;a<l;a++){
for(var a=0,l=IDs.length;a<l;a++){
var thisNode = document.getElementById(IDs[a]);
var thisNode = IDs[a];
if(typeof(thisNode)=="string") thisNode = document.getElementById(IDs[a]);
if(thisNode) thisNode.style.display = display;
if(thisNode) thisNode.style.display = display;
}
}
Line 404: Line 1,369:
}
}
}
}
//console.log("item not found : tags = "+tags.join(", ")+" | name = "+name);
return null;
return null;
},
},
createLink : function(page, options){
createLink : function(page, options){
var link = document.createElement("a");
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.href = (options && options.href ? options.href : mw.util.getUrl(page));
link.title = (options && options.title ? options.title : page );
link.title = (options && options.title ? options.title : page );
link.innerHTML = (options && options.text ? options.text : page );
link.innerHTML = ((options && typeof(options.text)==="string") ? options.text : page );
if(options && options.class) link.className = options.class;
if(options && options.class) link.className = options.class;
if(options && typeof(options.preview)=="number"){
if(options && typeof(options.preview)=="number"){
link.title = PortalEval.texts.PreviewText.split("$1").join(link.title);
link.title = MassEval.texts.PreviewText.split("$1").join(link.title);
link.onclick = function(){ PortalEval.functions.previewPage(page, options.preview); return false; }
link.onclick = function(){ MassEval.functions.previewPage(page, options.preview); return false; };
}
}
return link;
return link;
},
neutralizeLinks : function(node){
var links = node.getElementsByTagName("a");
for(var a=0,l=links.length;a<l;a++){
if(links[a].href.indexOf("#")===-1 && links[a].href.indexOf("javascript:")===-1) links[a].onclick = function(){ return false; }
}
},
},
createInput : function(datas){
createInput : function(datas){
if(datas.type == 'textarea'){
var Input = document.createElement('textarea');
var Input = document.createElement('textarea');
if(datas.type != 'textarea'){
Input = document.createElement('input');
}else{
var Input = document.createElement('input');
Input.type = datas.type || 'text';
Input.type = datas.type || 'text';
}
}
if(datas.name) Input.name = datas.name;
if(typeof(datas.name)!=="undefined") Input.name = datas.name;
if(datas.value) Input.value = datas.value;
if(typeof(datas.value)!=="undefined") Input.value = datas.value;
if(datas.title) Input.title = datas.title;
if(typeof(datas.title)!=="undefined") Input.title = datas.title;
if(typeof(datas.id)!=="undefined") Input.id = datas.id;
return Input;
return Input;
},
createSelect : function(options, selectedoption, sname){
var Select = document.createElement('select');
for(var val in options){
var opt = Select.appendChild(document.createElement('option'));
opt.value = val;
opt.innerHTML = options[val];
if(val == selectedoption) opt.selected = "selected";
}
if(sname) Select.name = sname;
return Select;
},
createTimeSelector : function(updatefunc){
var Today = new Date();
var ThisMinute = Today.getMinutes();
var ThisHour = Today.getHours();
var ThisDay = Today.getDate();
var ThisMonth = Today.getMonth();
var ThisYear = parseInt(Today.getFullYear());
var FS = document.createElement("fieldset");
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
var Label = FS.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.TimeDateLabel;
var Form = FS.appendChild(document.createElement('form'));
Form.onsubmit = function(){ return false; };
var TimeValue = MassEval.functions.addZero(ThisHour)+":"+MassEval.functions.addZero(ThisMinute);
var TimeInput = Form.appendChild(MassEval.functions.createInput({type:"text",name:"time",value:TimeValue}));
$(TimeInput).addClass('timeinput');
$(TimeInput).clockpicker({
autoclose : true,
align : 'right',
afterDone : function(){ if(typeof(updatefunc)==="function") updatefunc(); }
});
var DateInput = Form.appendChild(MassEval.functions.createInput({type:"text",name:'date'}));
$(DateInput).addClass('dateinput');
DateInput.setAttribute("data-toggle","datepicker");
var DatePickerContainer = Form.appendChild(document.createElement('div'));
var TimeSelector = $(DateInput).datepicker({
container : DatePickerContainer,
language : 'fr-FR',
endDate : Today,
autoPick : true,
autoHide : true
});
if(typeof(updatefunc)==="function"){
TimeInput.onkeyup = updatefunc;
DateInput.onkeyup = updatefunc;
$(DateInput).on('pick.datepicker', function (e) {
if (e.date < new Date()) {
e.preventDefault(); // Prevent to pick the date
}
DateInput.value = $(DateInput).datepicker('getDate', true);
updatefunc();
});
}
$(Form).addClass("TimeSelector");
return FS;
},
getTimeSelectorValue : function(FormID){
var TS = "y-m-dTh:min:00Z";
var Form = document.getElementById(FormID);
if(!Form) return "";
var thisTime = MassEval.functions.getFirstElementByName(Form, ["input"], "time").value;
var H = parseInt(thisTime.split(":")[0]);
var M = parseInt(thisTime.split(":")[1]);
var DateSelector = MassEval.functions.getFirstElementByName(Form, ["input"], "date");
var thisDate = $(DateSelector).datepicker('parseDate', DateSelector.value);
var Time = thisDate.getTime();
Time = new Date(Time + (((H*60)+M-MassEval.params.TimeCorrection)*60*1000));
var Minute = Time.getMinutes();
var Hour = Time.getHours()
var Day = Time.getDate();
var Month = Time.getMonth();
var Year = Time.getFullYear();
TS = TS.split("min").join(MassEval.functions.addZero(Minute));
TS = TS.split("h").join(MassEval.functions.addZero(Hour));
TS = TS.split("d").join(MassEval.functions.addZero(Day));
TS = TS.split("m").join(MassEval.functions.addZero(Month+1));
TS = TS.split("y").join(Year);
return TS;
},
createNamespaceSelect : function(DefaultNS){
if(!DefaultNS) DefaultNS = "0";
var NSobject = JSON.parse(JSON.stringify(mw.config.get("wgFormattedNamespaces")));
NSobject["0"] = MassEval.texts.MainNamespace;
delete NSobject["-1"];
delete NSobject["-2"];
return MassEval.functions.createSelect(NSobject, DefaultNS);
},
},
getNamespaceInfoFromPage : function(Page, ToReturn){
getNamespaceInfoFromPage : function(Page, ToReturn){
Line 442: Line 1,502:
if(ThisNamespaceName==="") continue;
if(ThisNamespaceName==="") continue;
var Matches = Page.match(new RegExp("^"+ThisNamespaceName+":", "ig"));
var Matches = Page.match(new RegExp("^"+ThisNamespaceName+":", "ig"));
if(Matches!=null && Matches.length == 1){
if(Matches!==null && Matches.length == 1){
NamespaceNumber = parseInt(NS);
NamespaceNumber = parseInt(NS);
NamespaceName = ThisNamespaceName;
NamespaceName = ThisNamespaceName;
Line 454: Line 1,514:
},
},
getTalkPage : function(page){
getTalkPage : function(page){
return mw.config.get("wgFormattedNamespaces")[(PortalEval.functions.getNamespaceInfoFromPage(page)+1)]+":"+page;
return mw.config.get("wgFormattedNamespaces")[(MassEval.functions.getNamespaceInfoFromPage(page)+1)]+":"+MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
},
},
getMainPage : function(page){
getMainPage : function(page){
var NS = PortalEval.functions.getNamespaceInfoFromPage(page);
var NS = MassEval.functions.getNamespaceInfoFromPage(page);
if(NS % 2 == 0) return page;
if(NS % 2 == 0) return page;
return (NS==1 ? "" : mw.config.get("wgFormattedNamespaces")[(NS-1)]+":")+PortalEval.functions.getNamespaceInfoFromPage(page, "PageName");
return (NS==1 ? "" : mw.config.get("wgFormattedNamespaces")[(NS-1)]+":")+MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
},
},
getPages : function(catindex, portal, queryopt){
sortTextList : function(textlist) {
var CheckBox = document.getElementById("PortalEval_SubCats");
var NA = MassEval.functions.deleteAccents;
return textlist.sort(function(a,b){ var A = [NA(b.toLowerCase()),NA(a.toLowerCase())].sort(); return ( A[1] == NA(a.toLowerCase()) ? 1 : -1 ); });
var subcat = ((CheckBox && CheckBox.checked) ? "|subcat" : "");
},
if(catindex === -1){
compareObjects : function(object1, object2){
PortalEval.params.PreviewSaved = {};
if( typeof(object1)==="undefined" || typeof(object2)==="undefined") return false;
catindex = 0;
if( typeof(object1)!=="object" || typeof(object2)!=="object") return (object1 === object2);
PortalEval.params.PageList = [];
for(var id1 in object1){
PortalEval.params.SubCatList = [];
if( MassEval.functions.compareObjects(object1[id1], object2[id1]) === false ) return false;
var FirstCat = document.getElementById("PortalEval_Cat").value;
PortalEval.params.SubCatList.push( (mw.config.get("wgFormattedNamespaces")[14]+":"+FirstCat) );
}
}
if(!queryopt){
for(var id2 in object2){
if( MassEval.functions.compareObjects(object2[id2], object1[id2]) === false ) return false;
var cat = PortalEval.params.SubCatList[catindex];
}
if(!cat) return PortalEval.functions.getPageEval(portal);
return true;
var count = (catindex+1)+"/"+PortalEval.params.SubCatList.length;
},
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgPages.split("$count").join(count).split("$cat").join(cat), true);
makeGroupsFromArray : function(arr, grouplength, modfunc){
queryopt = {action:'query',list:'categorymembers',
if(typeof(arr)!="object") return false;
cmlimit : PortalEval.params.APILimit,
if(typeof(grouplength)!="number") return false;
cmprop : 'title',
var ARR = JSON.parse(JSON.stringify( arr ));
cmtitle : cat,
var groupedarray = [];
cmtype : 'page'+subcat
while(ARR.length > 0){
var group = [];
for(var x=0,xlen=grouplength;x<xlen;x++){
var item = ARR.shift();
if(typeof(item)==="undefined") continue;
if(typeof(modfunc)==="function") item = modfunc(item);
group.push(item);
}
groupedarray.push(group);
delete group;
if(ARR.length === 0) break;
}
return groupedarray;
},
setSynchronizedResizeV : function(ElmsIDs, delay){
var Elms = [];
for(var a=0,l=ElmsIDs.length;a<l;a++){
var currentElement = document.getElementById(ElmsIDs[a]);
if(!currentElement) continue;
Elms.push(currentElement);
currentElement.style.resize = "vertical";
var currentHeight = $(currentElement).height();
MassEval.params.CurrentHeights[currentElement.id] = currentHeight;
}
var ResizeFunc = function(){
var NewHeight = null;
for(var a=0,l=Elms.length;a<l;a++){
var El = Elms[a];
if(El.style.display == "none" || El.style.visibility == "hidden") continue;
var ElHeight = $(El).height();
var oldHeight = MassEval.params.CurrentHeights[El.id];
if(ElHeight !== oldHeight) NewHeight = ElHeight;
}
if(NewHeight === null || NewHeight === 0) return;
for(var a=0,l=Elms.length;a<l;a++){
var El = Elms[a];
El.style.height = NewHeight+"px";
MassEval.params.CurrentHeights[El.id] = NewHeight;
}
};
setInterval(ResizeFunc, (delay ? delay : 50));
},
fontTest : function(fontName){
var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
var text = "abcdefghijklmnopqrstuvwxyz0123456789";
context.font = "72px monospace";
var baselineSize = context.measureText(text).width;
context.font = "72px '" + fontName + "', monospace";
var newSize = context.measureText(text).width;
canvas = null;
return (newSize != baselineSize);
},
// ------------------------------- Fonctions localStorage -------------------------------
localStorage : {
getItem : function(itemname){
if(MassEval.params.localStorageItems.indexOf(itemname)===-1) MassEval.params.localStorageItems.push(itemname);
var TS = localStorage.getItem(itemname+"_TS");
if(!TS) return false
TS = parseInt(TS);
var now = new Date().getTime();
if( (now - TS) > (MassEval.params.localStorageExpiry*60*60*1000) ){
localStorage.removeItem(itemname);
localStorage.removeItem(itemname+"_TS");
return false;
}else{
MassEval.params.localStorageTimestamps[(itemname+"_TS")] = now;
return localStorage.getItem(itemname);
}
},
setItem : function(itemname, itemvalue){
if(MassEval.params.localStorageItems.indexOf(itemname)===-1) MassEval.params.localStorageItems.push(itemname);
var now = new Date().getTime();
MassEval.params.localStorageTimestamps[(itemname+"_TS")] = now;
localStorage.setItem((itemname+"_TS"), now);
return localStorage.setItem(itemname, itemvalue);
}
},
// ------------------------------- Fonctions API -------------------------------
getAPIUsercontribs : function(Q){
if(!Q || !Q.user) return console.error('Manque paramètre "user" pour MassEval.functions.getAPIUsercontribs');
if(!Q || !Q.timestamp) return console.error('Manque paramètre "timestamp" pour MassEval.functions.getAPIUsercontribs');
if(!Q.datas){
Q.datas = {format:'json',action:'query',list:'usercontribs',
uclimit : MassEval.params.APILimit,
ucshow : 'new',
ucprop : 'title',
ucnamespace : 0,
ucstart : 'now',
ucend : Q.timestamp,
ucuser : Q.user
};
};
}
}
$.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
PortalEval.functions.disableThings([ "PortalEval_Cat", "PortalEval_OptionPortal", "PortalEval_OptionPortalInput", "PortalEval_SubCats","PortalEval_SortButton" ], true);
var api = new mw.Api();
}).then(function(data) {
if(!Q.result) Q.result = [];
api.get(queryopt).then(function(data){
if(data.query.categorymembers){
var query = data.query;
for(var a=0,l=data.query.categorymembers.length;a<l;a++){
if(query){
var page = data.query.categorymembers[a];
var usercontribs = query.usercontribs;
var title = page.title;
for(var a=0,l=usercontribs.length;a<l;a++){
var ns = page.ns;
var pageinfo = usercontribs[a];
if(ns=="14"){
var title = pageinfo.title;
if(PortalEval.params.SubCatList.indexOf(title)===-1) PortalEval.params.SubCatList.push(title);
if(Q.result.indexOf(title) ===-1) Q.result.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){
var cont = data.continue;
if(cont){
queryopt.cmcontinue = data.continue.cmcontinue;
PortalEval.functions.getPages(catindex, portal, queryopt);
Q.datas.uccontinue = cont.uccontinue;
MassEval.functions.getAPIUsercontribs(Q);
}else{
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
PortalEval.functions.getPages((catindex+1), portal);
}
}
});
});
},
},
getAllPagesInfos : function(info){
getAPIRecentchanges : function(Q){
if(!Q || !Q.timestamp) return console.error('Manque paramètre "timestamp" pour MassEval.functions.getAPIRecentchanges');
var pageinfos = [];
if(!Q.datas){
var pagedatas = PortalEval.params.PageList;
Q.datas = {format:'json',action:'query',generator:'recentchanges',
for(var a=0,l=pagedatas.length;a<l;a++){
grclimit : MassEval.params.APILimit,
pageinfos.push(pagedatas[a][info]);
grcshow : '!redirect',
grcprop : 'title',
grctype : 'new',
grcnamespace : 0,
prop : 'info',
grcstart : 'now',
grcend : Q.timestamp
};
}
}
$.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
return pageinfos;
}).then(function(data) {
if(!Q.result) Q.result = [];
var query = data.query;
if(query){
var pages = query.pages;
for(var id in pages){
var pageinfo = pages[id];
var title = pageinfo.title;
var timestamp = pageinfo.touched;
var missing = (pageinfo.missing === "");
if(!missing) Q.result.push({title:title, timestamp:timestamp});
}
}
var cont = data.continue;
if(cont){
Q.datas.grccontinue = cont.grccontinue;
MassEval.functions.getAPIRecentchanges(Q);
}else{
Q.result.sort(function(a,b){
var S = [a.timestamp, b.timestamp].sort();
return ( S[0] == a.timestamp ? 1 : -1);
});
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
},
getPageEval : function(portal, index){
getAPIEmbeddedin : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPIEmbeddedin');
if(!index) index = 0;
if(!Q.datas){
var page = PortalEval.params.PageList[index];
Q.datas = {format:'json',action:'query',list:'embeddedin',
if(!page){
eilimit : MassEval.params.APILimit,
PortalEval.functions.alertControl();
eititle : Q.title
var sortValue = document.getElementById("PortalEval_OptionSort").value;
};
if(sortValue !== "SortDS_UP") PortalEval.functions.sortPages(sortValue, portal);
if(Q.einamespace) Q.datas.einamespace = Q.einamespace;
PortalEval.functions.disableThings(["PortalEval_SortButton","PortalEval_OptionPortal","PortalEval_OptionPortalInput","PortalEval_SubCats"], false);
PortalEval.functions.disableThings(["PortalEval_Cat"], (PortalEval.functions.getLaunchCondition() != 2));
return;
}
}
$.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
if(PortalEval.params.PreloadPreview){
}).then(function(data) {
PortalEval.functions.preloadPage(page.title, index);
if(!Q.result) Q.result = [];
PortalEval.functions.preloadPage(page.talktitle, index);
var query = data.query;
}
if(query){
PortalEval.functions.getPageStub(portal, index, function(portal, index, queryopt){
var page = PortalEval.params.PageList[index];
var embeddedin = query.embeddedin;
var title = page.title;
for(var pageinfo in embeddedin){
var talktitle = page.talktitle;
var title = embeddedin[pageinfo].title;
if(Q.result.indexOf(title) === -1) Q.result.push(title);
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();
var cont = data.continue;
api.get(queryopt).then(function(data){
if(cont){
var hasEval = false;
Q.datas.eicontinue = cont.eicontinue;
if(data.query.pages){
MassEval.functions.getAPIEmbeddedin(Q);
for(var id in data.query.pages){
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
var templates = data.query.pages[id].templates;
if(templates){
}
});
for(var a=0,l=templates.length;a<l;a++){
},
var template = templates[a].title;
getAPILinkshere : function(Q){
if(template.indexOf(":"+PortalEval.params.EvalTemplate)===-1) continue;
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPILinkshere');
hasEval = true;
if(!Q.datas){
Q.datas = {format:'json',action:'query',prop:'linkshere',
lhprop : (Q.lhprop ? Q.lhprop : 'pageid|title|redirect'),
lhlimit : MassEval.params.APILimit,
titles : Q.title
};
if(Q.lhshow) Q.datas.lhshow = Q.lhshow;
if(Q.lhnamespace) Q.datas.lhnamespace = Q.lhnamespace;
}
$.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
}).then(function(data) {
if(!Q.result) Q.result = {};
var query = data.query;
if(query){
var pages = query.pages;
for(var id in pages){
var pageinfo = pages[id];
var title = pageinfo.title;
if(!Q.result[title]) Q.result[title] = pageinfo;
else{
var linkshere = pageinfo.linkshere;
if(linkshere){
if(!Q.result[title].linkshere) Q.result[title].linkshere = linkshere;
else{
for(var a=0,l=linkshere.length;a<l;a++){
Q.result[title].linkshere.push(linkshere[a]);
}
}
}
}else{
if(id == -1) PortalEval.params.PageList[index]["talkmissing"] = 1;
}
}
}
}
}
}
if(hasEval){
}
var cont = data.continue;
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+ "?title="+encodeURIComponent(talktitle)+"&action=raw&section=0";
$.ajax({url:URL, complete: function(Req){
if(cont){
Q.datas.lhcontinue = cont.lhcontinue;
PortalEval.functions.getEvalParams(Req.responseText, index, portal);
var add = PortalEval.functions.fillBoardLine(index, portal);
MassEval.functions.getAPILinkshere(Q);
}else{
if(add) PortalEval.functions.getPageEval(portal, (index+1));
}});
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
getAPILinks : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPILinks');
if(!Q.datas) Q.datas = {format:'json',action:'query',generator:'links',gpllimit:MassEval.params.APILimit,gplnamespace:'0|1',titles:Q.title,prop:'info'};
$.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
}).then(function(data){
if(!Q.result) Q.result = [];
var query = data.query;
if(query){
var pages = query.pages;
if(pages){
for(var id in pages){
var pageinfo = pages[id];
var ns = pageinfo.ns;
if(pageinfo.missing !== "" && [0,1].indexOf(ns)!==-1){
var title = pageinfo.title;
Q.result.push(title);
}
}
}
}
var cont = data.continue;
if(cont){
Q.datas.gplcontinue = cont.gplcontinue;
MassEval.functions.getAPILinks(Q);
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
getAPICategoryinfo : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategoryinfo');
var datas = {format:'json',action:'query',prop:'categoryinfo',titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Q.title};
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data){
var result = {};
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
var missing = (page.missing === "");
if(missing) result.missing = true;
var categoryinfo = page.categoryinfo;
if(categoryinfo){
result.pages = categoryinfo.pages;
result.subcats = categoryinfo.subcats;
result.files = categoryinfo.files;
result.size = categoryinfo.size;
}
Q.result = result;
if(typeof(Q.callback) == "function") Q.callback(Q);
});
},
getAPICategories : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategories');
if(!Q.datas){
Q.datas = {format:'json',action:'query',prop:'categories',
clprop:'hidden|sortkey',
cllimit:MassEval.params.APILimit,
titles:Q.title
};
}
$.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
}).then(function(data) {
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
var categories = page.categories;
if(categories){
if(!Q.result) Q.result = {};
for(var a=0,l=categories.length;a<l;a++){
var category = categories[a];
Q.result[category.title] = category;
}
var cont = data.continue;
if(cont){
Q.datas.clcontinue = cont.clcontinue;
MassEval.functions.getAPICategories(Q);
}else{
}else{
var add = PortalEval.functions.fillBoardLine(index, portal);
if(typeof(Q.callback) == "function") Q.callback(Q);
if(add) PortalEval.functions.getPageEval(portal, (index+1));
}
}
});
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
});
},
},
getPageStub : function(portal, index, callback){
getAPICategorymembers : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategorymembers');
var page = PortalEval.params.PageList[index];
var title = page.title;
if(!Q.datas){
Q.datas = {format:'json',action:'query',list:'categorymembers',
var count = (index+1)+"/"+PortalEval.params.PageList.length;
cmprop : Q.cmprop || 'ids|title|type|sortkey|timestamp',
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgParams.split("$count").join(count).split("$page").join(title), true);
cmlimit : MassEval.params.APILimit,
var queryopt = {action:'query',prop:['templates','info','links','pageprops'],
pllimit : 1,
cmtitle : Q.title,
tllimit : PortalEval.params.APILimit,
cmsort : (Q.cmsort ? Q.cmsort : 'sortkey'),
titles : title,
cmdir : (Q.cmdir ? Q.cmdir : 'asc'),
cmtype : Q.cmtype || 'page|subcat|file',
tltemplates : mw.config.get("wgFormattedNamespaces")[10]+":"+PortalEval.params.StubTemplate,
};
};
var api = new mw.Api();
}
api.get(queryopt).then(function(data){
$.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
var hasStub = false;
if(data.query.pages){
}).then(function(data) {
for(var id in data.query.pages){
var query = data.query;
if(!query) return;
var datas = data.query.pages[id];
var isRedirect = datas.redirect === "";
var categorymembers = query.categorymembers;
if(categorymembers && categorymembers.length > 0){
if(isRedirect){
var links = datas.links;
if(!Q.result) Q.result = {};
if(links){
for(var a=0,l=categorymembers.length;a<l;a++){
for(var a=0,l=links.length;a<l;a++){
var page = categorymembers[a];
var realtitle = links[a].title;
Q.result[page.title] = page;
}
var alltitles = PortalEval.functions.getAllPagesInfos("title");
var cont = data.continue;
if(alltitles.indexOf(realtitle)!=-1) return PortalEval.functions.getPageEval(portal, (index+1));
if(cont){
var realtalktitle = PortalEval.functions.getTalkPage(realtitle);
PortalEval.params.PageList[index].redirectfrom = title;
Q.datas.cmcontinue = cont.cmcontinue;
PortalEval.params.PageList[index].title = realtitle;
MassEval.functions.getAPICategorymembers(Q);
}else{
PortalEval.params.PageList[index].talktitle = realtalktitle;
if(typeof(Q.callback) == "function") Q.callback(Q);
return PortalEval.functions.getPageEval(portal, index);
}
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
getAPICategorymembersGenerator : function(Q){
if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategorymembersGenerator');
if(!Q || !Q.prop) return console.error('Manque paramètre "prop" pour MassEval.functions.getAPICategorymembersGenerator '+Q.title);
if(!Q.datas){
Q.datas = {format:'json',action:'query',generator:'categorymembers',
gcmprop : Q.gcmprop || 'ids|title|type|sortkey|timestamp',
gcmlimit : MassEval.params.APILimit,
gcmtitle : Q.title,
gcmsort : (Q.gcmsort ? Q.gcmsort : 'sortkey'),
gcmdir : (Q.gcmdir ? Q.gcmdir : 'asc'),
gcmtype : Q.gcmtype || 'page|subcat|file',
prop : Q.prop
};
}
$.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
}).then(function(data) {
var query = data.query;
if(!query) return;
if(!Q.result) Q.result = {};
var pages = query.pages;
for(var id in pages){
var pageinfo = pages[id];
var index = pageinfo.title;
if(Q.result[index]){
for(var info in pageinfo){
var thisinfo = pageinfo[info];
if(typeof(thisinfo)!=="object"){
if(typeof(Q.result[index][info])==="undefined") Q.result[index][info] = thisinfo;
}else{
if(typeof(Q.result[index][info])!=="object") Q.result[index][info] = thisinfo;
else{
for(var i=0,ilen=thisinfo.length;i<ilen;i++){
Q.result[index][info].push(thisinfo[i]);
}
}
}
}
}
}
}
var templates = datas.templates;
}else{
if(templates){
Q.result[index] = pageinfo;
}
for(var a=0,l=templates.length;a<l;a++){
}
var template = templates[a].title;
if(template.indexOf(":"+PortalEval.params.StubTemplate)===-1) continue;
var cont = data.continue;
hasStub = true;
if(cont){
for(var contname in cont){
if(contname === "continue") continue;
Q.datas[contname] = cont[contname];
}
MassEval.functions.getAPICategorymembersGenerator(Q);
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
getAPIAllcategories : function(Q){
if(!Q.datas){
Q.datas = {format:'json',action:'query',generator:'allcategories',
gaclimit : MassEval.params.APILimit,
};
}
if(Q.gacprop) Q.datas.gacprop = Q.gacprop;
if(Q.gacfrom) Q.datas.gacfrom = Q.gacfrom;
if(Q.gacprefix) Q.datas.gacprefix = Q.gacprefix;
$.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
}).then(function(data) {
var query = data.query;
if(!query) return;
if(!Q.result) Q.result = {};
var categories = query.pages;
for(var id in categories){
var page = categories[id];
Q.result[page.title] = page;
}
var cont = data.continue;
if(cont){
Q.datas.gaccontinue = cont.gaccontinue;
MassEval.functions.getAPIAllcategories(Q);
}else{
if(typeof(Q.callback) == "function") Q.callback(Q);
}
});
},
// ------------------------------- Fonctions pour le listing des pages -------------------------------
startPageAnalysis : function(){
var ElementsToDisable = [
"EvalThemeInput",
"PortalInput",
"CatInput",
"SubCatsCheckBox",
"LinksCheckbox",
"GlobalVerifInput",
"GlobalAddEvalInput",
"subcatdepthForm",
"fieldsetModes"
];
MassEval.functions.disableThings(ElementsToDisable, true);
var FromToSelector = document.getElementById("FromToSelector");
if(FromToSelector) $(FromToSelector.parentNode).addClass("RangeSelectorDisabled");
var RangeSelectorAbbrLink = document.getElementById("RangeSelectorAbbrLink");
if(RangeSelectorAbbrLink) $(RangeSelectorAbbrLink).addClass("RangeSelectorDisabled");
},
endPageAnalysis : function(){
var ElementsToEnable = [
"EvalThemeInput",
"CatInput",
"SubCatsCheckBox",
"LinksCheckbox",
"GlobalVerifInput",
"GlobalAddEvalInput",
"fieldsetModes"
];
MassEval.functions.disableThings(ElementsToEnable, false);
MassEval.functions.updatePortalSelect();
var SubCats = document.getElementById("SubCatsCheckBox");
MassEval.functions.disableThings(["subcatdepthForm"], (!SubCats || (SubCats && !SubCats.checked)));
var FromToSelector = document.getElementById("FromToSelector");
if(FromToSelector) $(FromToSelector.parentNode).removeClass("RangeSelectorDisabled");
var RangeSelectorAbbrLink = document.getElementById("RangeSelectorAbbrLink");
if(RangeSelectorAbbrLink) $(RangeSelectorAbbrLink).removeClass("RangeSelectorDisabled");
MassEval.functions.alertControl("listpages");
MassEval.functions.alertControl("getstatus");
},
getOnePageStatus : function(Q){
var Input = document.getElementById("PageInput");
if(!Input) return;
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
MassEval.functions.getThesePagesStatus([ Input.value ], Q.onlymissingeval);
},
getCategoryStatus : function(Q){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var CheckBox = document.getElementById("SubCatsCheckBox");
if(typeof(Q.catindex)==="undefined"){
var Conditions = MassEval.functions.getFilterConditions();
if(!Conditions) return;
MassEval.params.CatListRunning = true;
MassEval.params.PreviewSaved = {};
Q.catindex = 0;
MassEval.params.PageTitleList = [];
MassEval.params.PageList = [];
MassEval.params.SubCatList = [];
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
var FirstCat = document.getElementById("CatInput").value;
if(!FirstCat) return;
MassEval.params.SubCatList.push({title:(mw.config.get("wgFormattedNamespaces")[14]+":"+FirstCat),depth:0});
}
var catinfo = MassEval.params.SubCatList[Q.catindex];
if(!catinfo){
var PageList = MassEval.params.PageTitleList;
var ChosenPages = [];
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
for(var a=0,l=PageList.length;a<l;a++){
if(a < from) continue;
if(a > to) continue;
ChosenPages.push(PageList[a]);
}
MassEval.functions.alertControl("listpages");
return MassEval.functions.getThesePagesStatus(ChosenPages, (Q.onlymissingeval ? true : false));
}
if(MassEval.params.PageTitleList.length > (Q.maxpages-1)) return MassEval.functions.getPageStatus(Q.evaltheme);
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
MassEval.functions.startPageAnalysis();
var count = (Q.catindex+1)+"/"+MassEval.params.SubCatList.length;
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgPages.split("$count").join(count).split("$cat").join(catinfo.title), "Running");
MassEval.functions.getAPICategorymembers({
onlymissingeval : Q.onlymissingeval,
catindex : Q.catindex,
evaltheme : Q.evaltheme,
startpages : Q.startpages,
endpages : Q.endpages,
maxpages : Q.maxpages,
title : catinfo.title,
depth : catinfo.depth,
cmprop : 'title',
cmdir : (Q.onlymissingeval ? 'desc' : 'asc'),
cmsort : (Q.onlymissingeval ? 'timestamp' : 'sortkey'),
cmtype : ((CheckBox && CheckBox.checked) ? 'page|subcat' : 'page'),
callback : function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var alltitles = Object.keys(R.result);
if(alltitles.length == 0){
MassEval.functions.alertControl("listpages");
MassEval.functions.endPageAnalysis();
return;
}
for(var pi in R.result){
var pageinfo = R.result[pi];
var title = pageinfo.title;
var ns = parseInt(pageinfo.ns);
if(ns == 14 && MassEval.params.SubCatList.indexOf(title)===-1 && R.depth<MassEval.params.CurrentMaxSubcatLevel){
MassEval.params.SubCatList.push({title:title,depth:(R.depth+1)});
}else if(ns < 2){
title = MassEval.functions.getMainPage(title);
if(MassEval.params.PageTitleList.indexOf(title)==-1){
MassEval.params.PageTitleList.push(title);
}
}
}
}
var pageprops = datas.pageprops;
if(pageprops && pageprops.disambiguation === "") PortalEval.params.PageList[index].disambig = true;
}
}
R.catindex++
MassEval.functions.getCategoryStatus(R);
}
}
if(hasStub){
});
},
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+ "?title="+encodeURIComponent(title)+"&action=raw&section=0";
$.ajax({url:URL, complete: function(Req){
getLinksStatus : function(Q){
var Input = document.getElementById("LinksInput");
PortalEval.functions.getStubParams(Req.responseText, index, portal);
var NSInput = document.getElementById("LinksInputNS");
if(typeof(callback) == "function") callback(portal, index);
}});
if(!Input || !NSInput) return;
var CanContinue = MassEval.functions.checkEmergencyStop();
}else{
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
if(typeof(callback) == "function") callback(portal, index);
var PageName = MassEval.functions.ucFirst(Input.value);
var NS = parseInt(NSInput.value);
Input.value = PageName;
Q.title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
Q.result = [];
Q.onlymissingeval = !!Q.onlymissingeval;
Q.callback = function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
MassEval.params.PageLinksList = [];
var titles = R.result;
for(var a=0,l=titles.length;a<l;a++){
var title = titles[a];
var OK = true;
for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
}
if(OK) MassEval.params.PageLinksList.push(title);
}
}
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=MassEval.params.PageLinksList.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = MassEval.params.PageLinksList[a];
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
}
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgLinks.split("$page").join(Q.title), "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
if(MassEval.params.PageLinksList.length == 0) MassEval.functions.getAPILinks(Q);
else Q.callback({result:MassEval.params.PageLinksList,onlymissingeval:Q.onlymissingeval});
},
getLinkshereStatus : function(Q){
var Input = document.getElementById("LinkshereInput");
var NSInput = document.getElementById("LinkshereInputNS");
if(!Input || !NSInput) return;
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var PageName = MassEval.functions.ucFirst(Input.value);
var NS = parseInt(NSInput.value);
Q.title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
Q.result = [];
Q.onlymissingeval = !!Q.onlymissingeval;
Q.lhprop = 'title';
Q.lhnamespace = '0|1';
Q.lhshow = '!redirect';
Q.callback = function(R){
var onlymissingeval = R.onlymissingeval;
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
MassEval.params.PageLinkshereList = [];
var titles = R.result;
for(var a=0,l=titles.length;a<l;a++){
var title = titles[a];
var OK = true;
for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
}
if(OK) MassEval.params.PageLinkshereList.push(title);
}
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=MassEval.params.PageLinkshereList.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = MassEval.params.PageLinkshereList[a];
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
}
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgLinkshere.split("$page").join(Q.title), "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
if(MassEval.params.PageLinkshereList.length == 0) MassEval.functions.getAPILinkshere(Q);
else Q.callback({result:MassEval.params.PageLinkshereList,onlymissingeval:Q.onlymissingeval});
},
getTemplateStatus : function(Q){
var Input = document.getElementById("TemplateInput");
if(!Input) return;
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var PageName = MassEval.functions.ucFirst(Input.value);
Q.title = mw.config.get("wgFormattedNamespaces")[10]+":"+PageName;
Q.result = [];
Q.onlymissingeval = !!Q.onlymissingeval;
Q.einamespace = '0';
Q.callback = function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
MassEval.params.PageTemplateList = R.result;
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=MassEval.params.PageTemplateList.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = MassEval.params.PageTemplateList[a];
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
}
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgTemplate.split("$template").join(PageName), "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
if(MassEval.params.PageTemplateList.length == 0) MassEval.functions.getAPIEmbeddedin(Q);
else Q.callback({result:MassEval.params.PageTemplateList,onlymissingeval:Q.onlymissingeval});
},
getNewpagesStatus : function(Q){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgNewpages, "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
var Timestamp = MassEval.functions.getTimeSelectorValue("NewpagesTimeSelector");
Q.onlymissingeval = !!Q.onlymissingeval;
MassEval.functions.getAPIRecentchanges({timestamp:Timestamp,onlymissingeval:Q.onlymissingeval,callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var titles = R.result;
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=titles.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = titles[a].title;
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
}});
},
getCreationsStatus : function(Q){
var Input = document.getElementById("UserInput");
if(!Input) return;
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgCreations.split("$user").join(Input.value), "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
var Timestamp = MassEval.functions.getTimeSelectorValue("CreationsTimeSelector");
Q.onlymissingeval = !!Q.onlymissingeval;
MassEval.functions.getAPIUsercontribs({timestamp:Timestamp,user:Input.value,onlymissingeval:Q.onlymissingeval,callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var titles = R.result;
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=titles.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = titles[a];
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
}});
},
getPrefixesStatus : function(Q){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
Q.Prefix = document.getElementById("PrefixInput").value;
if(!Q.datas){
Q.PageList = [];
Q.datas = { format:'json',action:'query',list:'allpages',
apprefix : Q.Prefix,
apnamespace : 0,
aplimit : MassEval.params.APILimit
};
MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgPrefixes.split("$1").join(Q.Prefix), "Running");
MassEval.functions.startPageAnalysis();
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
}
Q.onlymissingeval = !!Q.onlymissingeval;
$.ajax({url: mw.util.wikiScript('api'), data: Q.datas,dataType: 'json'
}).then(function(data) {
var query = data.query;
if(query){
var pages = query.allpages;
for(var a=0,l=pages.length;a<l;a++){
var pagedata = pages[a];
var page = pagedata.title;
Q.PageList.push(page);
}
}
var cont = data.continue;
if(cont){
Q.datas.apcontinue = cont.apcontinue;
return MassEval.functions.getPrefixesStatus(Q);
}
var titles = Q.PageList;
var Range = MassEval.functions.getFromToSelectorValues();
var from = (Range.from-1), to = (Range.to-1);
var Newlist = [];
for(var a=0,l=titles.length;a<l;a++){
if(a < from) continue
if(a > to) continue;
var thistitle = titles[a];
if(thistitle) Newlist.push(thistitle);
else console.warn("title manquant : "+a);
}
MassEval.functions.alertControl("listpages");
MassEval.functions.getThesePagesStatus(Newlist, Q.onlymissingeval);
});
});
},
},
getStubParams : function(WT, index, portal){
getThesePagesStatus : function(titles, onlymissingeval){
if(!titles || titles.length == 0) return;
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
MassEval.functions.startPageAnalysis();
MassEval.functions.clearBoardList();
var EvalThemeSelect = document.getElementById('EvalThemeInput');
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
MassEval.params.PageList = [];
MassEval.params.PageTitleList = [];
MassEval.params.SubCatList = [];
MassEval.params.PreviewSaved ={};
for(var a=0,l=titles.length;a<l;a++){
var title = MassEval.functions.getMainPage(titles[a]);
MassEval.params.PageList.push({title:title,talktitle:MassEval.functions.getTalkPage(title)});
}
MassEval.functions.getPageStatus(EvalThemeSelect.value, 0, onlymissingeval);
},
getPageStatus : function(evaltheme, index, onlymissingeval){
if(!index) index = 0;
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var page = MassEval.params.PageList[index];
if(!page){ return MassEval.functions.checkPagesEvalDone(); }
if(MassEval.params.PreloadPreview){
MassEval.functions.preloadPage(page.title, index);
MassEval.functions.preloadPage(page.talktitle, index);
}
var count = (index+1)+"/"+MassEval.params.PageList.length;
MassEval.functions.alertControl("getstatus", MassEval.texts.AlertMsgParams.split("$count").join(count).split("$page").join(page.title), "Running");
var ReqDatas = {format:'json',action:'query',prop:'revisions|info|links|pageprops',rvprop:'content',rvsection:0,pllimit:1,titles:page.title+"|"+page.talktitle};
if(MassEval.params.SearchForPortalTag){
ReqDatas.prop += "|categories";
ReqDatas.cllimit = MassEval.params.APILimit;
ReqDatas.clshow = "hidden";
}
$.ajax({
url: mw.util.wikiScript('api'),
data:ReqDatas,
success: function(data) {
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
var query = data.query;
if(!query) return MassEval.functions.getPageStatus(evaltheme, (index+1), onlymissingeval);
var pages = query.pages;
for(var id in pages){
var pageinfo = pages[id];
var title = pageinfo.title;
var redirect = (pageinfo.redirect === "");
var missing = (pageinfo.missing === "");
var wikitexte = "";
if(!missing) wikitexte = pageinfo.revisions[0]["*"];
if(title == page.title){
if(redirect){
var links = pageinfo.links;
if(links){
var getAllPagesInfos = function(info){
var pageinfos = [];
var pagedatas = MassEval.params.PageList;
for(var a=0,l=pagedatas.length;a<l;a++){
pageinfos.push(pagedatas[a][info]);
}
return pageinfos;
};
for(var a=0,l=links.length;a<l;a++){
var realtitle = links[a].title;
var alltitles = getAllPagesInfos("title");
if(alltitles.indexOf(realtitle)!==-1) return MassEval.functions.getPageStatus(evaltheme, (index+1));
var realtalktitle = MassEval.functions.getTalkPage(realtitle);
MassEval.params.PageList[index].redirectfrom = title;
MassEval.params.PageList[index].title = realtitle;
MassEval.params.PageList[index].talktitle = realtalktitle;
return MassEval.functions.getPageStatus(evaltheme, index, onlymissingeval);
}
}
}else if(missing){
MassEval.params.PageList[index].pagemissing = 1;
}else{
var pageprops = pageinfo.pageprops;
if(pageprops && pageprops.disambiguation === "") MassEval.params.PageList[index].disambig = true;
var StubParams = MassEval.functions.getStubParams(wikitexte, evaltheme);
for(var id in StubParams){
MassEval.params.PageList[index][id] = StubParams[id];
}
var categories = pageinfo.categories;
if(categories && categories.length > 0){
var CatTemplate = MassEval.params.PortalCatTemplate;
var Prefix = CatTemplate.split("$1")[0];
var Suffix = CatTemplate.split("$1")[1];
var SuffixLength = Suffix.length;
MassEval.params.PageList[index].portals = [];
for(var a=0,l=categories.length;a<l;a++){
var thiscat = categories[a];
var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
var thisSuffix = pagetitle.substr((pagetitle.length-SuffixLength), SuffixLength);
if(pagetitle.indexOf(Prefix)===0 && thisSuffix === Suffix){
var portalName = pagetitle.split(Prefix).join("").split(Suffix).join("");
MassEval.params.PageList[index].portals.push(portalName);
}
}
}
}
}else if(title == page.talktitle){
if(missing){
MassEval.params.PageList[index].talkmissing = 1;
}else{
var EvalParams = MassEval.functions.getEvalParams(wikitexte, evaltheme);
for(var id in EvalParams){
MassEval.params.PageList[index][id] = EvalParams[id];
}
}
}
}
if(onlymissingeval){
if(MassEval.functions.setStubEvalDefaultParams(index, evaltheme)){
MassEval.functions.fillBoardLine(index, evaltheme, true);
MassEval.functions.checkFilterOptions();
}
}else{
MassEval.functions.fillBoardLine(index, evaltheme, false);
MassEval.functions.checkFilterOptions();
}
MassEval.functions.getPageStatus(evaltheme, (index+1), onlymissingeval);
}
});
},
setStubEvalDefaultParams : function(index, evaltheme){
var show = false;
var DefaultAVT = parseInt(document.getElementById("GlobalAddEvalAVTSelect").value);
var DefaultIMP = parseInt(document.getElementById("GlobalAddEvalIMPSelect").value);
var Infos = MassEval.params.PageList[index];
var BEFORE = "BEF "+JSON.stringify(Infos);
if(Infos.talkmissing == 1) show = true;
if(Infos.evalAVT === null || typeof(Infos.evalAVT)==="undefined"){
if(Infos.stub !== null) MassEval.params.PageList[index].evalAVT = 5;
else MassEval.params.PageList[index].evalAVT = DefaultAVT;
show = true;
}
if(Infos.evalIMP===null || typeof(Infos.evalIMP)==="undefined"){
MassEval.params.PageList[index].evalIMP = DefaultIMP;
show = true;
}
if(typeof(Infos.allIMP)==="undefined"){
MassEval.params.PageList[index].allIMP = {};
MassEval.params.PageList[index].allIMP[evaltheme] = DefaultIMP;
show = true;
}else if(typeof(Infos.allIMP[evaltheme])==="undefined"){
MassEval.params.PageList[index].allIMP[evaltheme] = DefaultIMP;
show = true;
}
return show;
},
checkPagesEvalDone : function(EmergencyStop){
MassEval.functions.endPageAnalysis();
MassEval.functions.checkFilterOptions();
MassEval.functions.updateSortLink();
MassEval.params.CatListRunning = false;
if(EmergencyStop) MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
},
getStubParams : function(WT, evaltheme){
var StubParams = {
stub : null,
stubWT : ""
};
var Reg = new RegExp("\\{\\{ *"+MassEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var matches = WT.match(Reg);
var matches = WT.match(Reg);
var Wikitext = "";
var Wikitext = "";
Line 649: Line 2,505:
thisparam = thisparam.replace(/^[ ]*/g, "");
thisparam = thisparam.replace(/^[ ]*/g, "");
thisparam = thisparam.replace(/[ ]*$/g, "");
thisparam = thisparam.replace(/[ ]*$/g, "");
if(thisparam.indexOf(PortalEval.functions.ucFirst(PortalEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf(MassEval.functions.ucFirst(MassEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf(PortalEval.functions.lcFirst(PortalEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf(MassEval.functions.lcFirst(MassEval.params.StubTemplate)) != -1) continue;
if(thisparam.indexOf("=") == -1){
if(thisparam.indexOf("=") == -1){
var stubtheme = PortalEval.functions.ucFirst(thisparam);
var stubtheme = MassEval.functions.ucFirst(thisparam);
if(!PortalEval.params.PageList[index]["stub"]) PortalEval.params.PageList[index]["stub"] = [];
if(!StubParams.stub) StubParams.stub = [];
if(PortalEval.params.PageList[index]["stub"].indexOf(stubtheme)==-1) PortalEval.params.PageList[index]["stub"].push(stubtheme);
if(StubParams.stub.indexOf(stubtheme)==-1) StubParams.stub.push(stubtheme);
if(typeof(PortalEval.params.StubThemes[stubtheme]) == "undefined"){
var ExistingTheme = (typeof(MassEval.params.StubThemes[MassEval.functions.ucFirst(stubtheme)]) !== "undefined");
var adjDatas = PortalEval.functions.getAdjDatas(stubtheme);
var existingTheme = (typeof(MassEval.params.StubThemes[MassEval.functions.lcFirst(stubtheme)]) !== "undefined");
if( !ExistingTheme && !existingTheme){
var adjDatas = MassEval.functions.getAdjDatas(stubtheme);
if(adjDatas.type === null){
if(adjDatas.type === null){
PortalEval.params.StubThemes[stubtheme] = { };
MassEval.params.StubThemes[stubtheme] = { };
}
}
}
}
Line 665: Line 2,523:
}
}
}
}
PortalEval.params.PageList[index].stubWT = Wikitext;
StubParams.stubWT = Wikitext;
return StubParams;
},
},
getEvalParams : function(WT, index, portal){
getEvalParams : function(WT, evaltheme){
var EvalParams = {
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
evalAVT : null,
evalIMP : null,
evalWT : "",
haseval : false
};
var Reg = new RegExp("\\{\\{ *"+MassEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
var matches = WT.match(Reg);
var matches = WT.match(Reg);
var Wikitext = "";
var Wikitext = "";
if(matches != null){
if(matches != null){
EvalParams.haseval = true
for(var a=0,l=matches.length;a<l;a++){
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
var thismatch = matches[a];
Line 689: Line 2,555:
if(thisparam.indexOf("avancement")!=-1){
if(thisparam.indexOf("avancement")!=-1){
var AVT = thisparam.replace(/.*=[ ]*/g, "").replace(/\\n/g, "").replace(/\W/g, "");
var AVT = thisparam.replace(/.*=[ ]*/g, "").replace(/\\n/g, "").replace(/\W/g, "");
for(var avt=0,avtlen=PortalEval.params.Avancement.length;avt<avtlen;avt++){
for(var avt=0,avtlen=MassEval.params.Avancement.length;avt<avtlen;avt++){
var thisavt = PortalEval.params.Avancement[avt];
var thisavt = MassEval.params.Avancement[avt];
if(AVT == thisavt.wiki.replace(/\W/g, "")) PortalEval.params.PageList[index].evalAVT = avt;
if(AVT == thisavt.wiki.replace(/\W/g, "")) EvalParams.evalAVT = avt;
}
}
}
}
Line 697: Line 2,563:
for(var p=0,plen=implicitparams.length;p<plen;p++){
for(var p=0,plen=implicitparams.length;p<plen;p++){
var thisimplicitparam = implicitparams[p];
var thisimplicitparam = implicitparams[p];
for(var imp=0,implen=PortalEval.params.Importance.length;imp<implen;imp++){
for(var imp=0,implen=MassEval.params.Importance.length;imp<implen;imp++){
var thisimp = PortalEval.params.Importance[imp];
var thisimp = MassEval.params.Importance[imp];
if(thisimplicitparam.replace(/\W/g, "") == thisimp.wiki.replace(/\W/g, "")){
if(thisimplicitparam.replace(/\W/g, "") == thisimp.wiki.replace(/\W/g, "")){
if(implicitparams[(p-1)].toLowerCase() == portal.toLowerCase()) PortalEval.params.PageList[index].evalIMP = imp;
var theme = MassEval.functions.getForEvalThemeAlias(implicitparams[(p-1)]);
if(!PortalEval.params.PageList[index].allIMP) PortalEval.params.PageList[index].allIMP = {};
if(theme.toLowerCase() == evaltheme.toLowerCase()) EvalParams.evalIMP = imp;
PortalEval.params.PageList[index].allIMP[implicitparams[(p-1)]] = imp;
if(!EvalParams.allIMP) EvalParams.allIMP = {};
EvalParams.allIMP[theme] = imp;
}
}
}
}
Line 708: Line 2,575:
}
}
}
}
for(var theme in EvalParams.allIMP){
PortalEval.params.PageList[index].evalWT = Wikitext;
var ExistingTheme = (MassEval.params.EvalThemes.indexOf(MassEval.functions.ucFirst(theme)) === -1);
var existingTheme = (MassEval.params.EvalThemes.indexOf(MassEval.functions.lcFirst(theme)) === -1);
if(!ExistingTheme && !existingTheme){
MassEval.functions.createNewEvalTheme(theme, false);
var EvalThemeSelect = document.getElementById("EvalThemeInput");
MassEval.functions.createEvalThemeSelect(EvalThemeSelect, EvalThemeSelect.value);
}
}
EvalParams.evalWT = Wikitext;
return EvalParams;
},
},
getForEvalThemeAlias : function(theme){
var UCtheme = MassEval.functions.ucFirst(theme);
var LCtheme = MassEval.functions.lcFirst(theme);
if(MassEval.params.EvalThemesAliases[UCtheme]) return MassEval.params.EvalThemesAliases[UCtheme];
if(MassEval.params.EvalThemesAliases[LCtheme]) return MassEval.params.EvalThemesAliases[LCtheme];
return theme;
},
// ------------------------------- Fonctions pour le chargement des thèmes -------------------------------
getStubThemes : function(){
getStubThemes : function(){
if(Object.keys(PortalEval.params.StubThemes).length>0) return PortalEval.functions.checkThemes();
if(Object.keys(MassEval.params.StubThemes).length>0) return MassEval.functions.checkPreliminaryLoadings();
var lastStubThemes = MassEval.functions.localStorage.getItem("StubThemes");
var stubthemepage = PortalEval.params.StubThemesPage;
PortalEval.functions.alertControl();
var lastStubAdjM = MassEval.functions.localStorage.getItem("StubAdjM");
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgThemes, true);
var lastStubAdjF = MassEval.functions.localStorage.getItem("StubAdjF");
if(lastStubThemes && lastStubAdjM && lastStubAdjF){
var URL = mw.config.get('wgServer')+mw.config.get('wgScript')+"?title="+encodeURIComponent(stubthemepage)+"&action=raw";
MassEval.params.StubThemes = JSON.parse(lastStubThemes);
$.ajax({url:URL, complete: function(Req){
var Wikitext = Req.responseText;
MassEval.params.StubAdjM = JSON.parse(lastStubAdjM);
MassEval.params.StubAdjF = JSON.parse(lastStubAdjF);
console.info(Object.keys(MassEval.params.StubThemes).length+" thèmes d'ébauche retrouvés, ainsi que "+MassEval.params.StubAdjM.length+" adjectifs masculins et "+MassEval.params.StubAdjF.length+" adjectifs féminins. [localStorage]");
MassEval.params.StubThemesOK = true;
return MassEval.functions.checkPreliminaryLoadings();
}
var stubthemepage = MassEval.params.StubThemesPage;
MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
$.ajax({
url: mw.util.wikiScript('api'),
data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:stubthemepage},
success: function(data){
var query = data.query;
var page = query.pages[Object.keys(query.pages)[0]];
var Wikitext = page.revisions[0]["*"];
var commStart = "[==[";
var commStart = "[==[";
var commEnd = "]==]";
var commEnd = "]==]";
Line 751: Line 2,650:
}
}
}
}
var FakeStubThemes = PortalEval.params.FakeStubThemes;
var FakeStubThemes = MassEval.params.FakeStubThemes;
for(var a=0,l=FakeStubThemes.length;a<l;a++){
for(var a=0,l=FakeStubThemes.length;a<l;a++){
var faketheme = FakeStubThemes[a];
var faketheme = FakeStubThemes[a];
Line 783: Line 2,682:
}
}
var adjF = [];
var adjF = [];
var adj = [];
for(var ad=0,l=adjM.length;ad<l;ad++){
for(var ad=0,l=adjM.length;ad<l;ad++){
var thisF = adjM[ad];
var thisF = adjM[ad];
Line 813: Line 2,711:
if(adjM.indexOf(target)!==-1) adjM.push(al);
if(adjM.indexOf(target)!==-1) adjM.push(al);
if(adjF.indexOf(target)!==-1) adjF.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];
if(allP.indexOf(target)!==-1 && typeof(p[al])==-1) p[al] = p[target];
}
}
PortalEval.params.StubAdjM = adjM.sort();
MassEval.params.StubAdjM = adjM.sort();
PortalEval.params.StubAdjF = adjF.sort();
MassEval.params.StubAdjF = adjF.sort();
PortalEval.params.StubAdj = adj.concat(adjM, adjF).sort();
allP = Object.keys(p);
allP = Object.keys(p);
for(var i=0,l=allP.length;i<l;i++){ allP[i] = PortalEval.functions.ucFirst(allP[i]); }
for(var i=0,l=allP.length;i<l;i++){ allP[i] = MassEval.functions.ucFirst(allP[i]); }
allP.sort();
allP.sort();
for(var i=0,l=allP.length;i<l;i++){
for(var i=0,l=allP.length;i<l;i++){
var key = allP[i]
var key = allP[i]
var P = p[key] || p[PortalEval.functions.lcFirst(key)];
var P = p[key] || p[MassEval.functions.lcFirst(key)];
PortalEval.params.StubThemes[key] = P;
MassEval.params.StubThemes[key] = P;
}
}
MassEval.functions.localStorage.setItem("StubThemes", JSON.stringify(MassEval.params.StubThemes));
PortalEval.params.StubThemesOK = true;
PortalEval.functions.checkThemes();
MassEval.functions.localStorage.setItem("StubAdjM", JSON.stringify(MassEval.params.StubAdjM));
MassEval.functions.localStorage.setItem("StubAdjF", JSON.stringify(MassEval.params.StubAdjF));
console.info(allP.length+" thèmes d'ébauche trouvés, ainsi que "+adjM.length+" adjectifs masculins et "+adjF.length+" adjectifs féminins.");
MassEval.params.StubThemesOK = true;
MassEval.functions.checkPreliminaryLoadings();
}});
}});
},
},
getEvalThemes : function(queryopt){
getEvalThemes : function(){
if(MassEval.params.EvalThemes.length>0) return MassEval.functions.checkPreliminaryLoadings();
if(!queryopt){
var lastEvalThemes = MassEval.functions.localStorage.getItem("EvalThemes");
if(PortalEval.params.EvalThemes.length>0) return PortalEval.functions.checkThemes();
var lastEvalThemesCat = MassEval.functions.localStorage.getItem("EvalThemesCat");
queryopt = {action :'query',list:'categorymembers',
var lastEvalThemesAliases = MassEval.functions.localStorage.getItem("EvalThemesAliases");
cmlimit : PortalEval.params.APILimit,
if(lastEvalThemes && lastEvalThemesCat && lastEvalThemesAliases){
cmtitle : mw.config.get("wgFormattedNamespaces")[14]+":"+PortalEval.params.EvalCategory,
MassEval.params.EvalThemes = JSON.parse(lastEvalThemes);
cmtype : 'subcat'
MassEval.params.EvalThemesCat = JSON.parse(lastEvalThemesCat);
};
MassEval.params.EvalThemesAliases = JSON.parse(lastEvalThemesAliases);
console.info(MassEval.params.EvalThemes.length+" thèmes d'évaluation retrouvés, ainsi que "+Object.keys(MassEval.params.EvalThemesAliases).length+" alias. [localStorage]");
MassEval.params.EvalThemesOK = true;
return MassEval.functions.checkPreliminaryLoadings();
}
}
PortalEval.functions.alertControl();
MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgThemes, true);
MassEval.functions.getAPIAllcategories({
gacprefix : MassEval.params.EvalCategory,
var api = new mw.Api();
api.get(queryopt).then(function(data){
callback : function(R){
var result = R.result;
if(data.query.categorymembers){
for(var a=0,l=data.query.categorymembers.length;a<l;a++){
var CatList = Object.keys(result);
var page = data.query.categorymembers[a];
for(var a=0,l=CatList.length;a<l;a++){
var title = page.title
var thiscat = result[CatList[a]];
if(thiscat.missing==="") continue;
for(var p=0,plen=PortalEval.params.EvalCatPrefixes.length;p<plen;p++){
var EvalCatPrefix = PortalEval.params.EvalCatPrefixes[p];
var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
title = title.split(mw.config.get("wgFormattedNamespaces")[14]+":"+EvalCatPrefix).join("");
var title = pagetitle;
for(var p=0,plen=MassEval.params.EvalCatPrefixes.length;p<plen;p++){
var EvalCatPrefix = MassEval.params.EvalCatPrefixes[p];
title = title.split(EvalCatPrefix).join("");
}
}
title = PortalEval.functions.ucFirst(title);
if(title == pagetitle) continue;
if(title.indexOf("/")!==-1 && PortalEval.params.ManuEvalThemes.indexOf(title) === -1) continue;
if(title.indexOf("/")!==-1 && MassEval.params.ManuEvalThemes.indexOf(title) === -1) continue;
if(PortalEval.params.FakeEvalThemes.indexOf(title)!==-1) continue;
if(MassEval.params.FakeEvalThemes.indexOf(title)!==-1) continue;
if(PortalEval.params.EvalThemes.indexOf(title)!==-1) continue;
if(MassEval.params.EvalThemes.indexOf(title)!==-1) continue;
PortalEval.params.EvalThemes.push(title);
MassEval.params.EvalThemes.push(title);
}
}
if(MassEval.params.DefaultPortal && MassEval.params.EvalThemes.indexOf(MassEval.params.DefaultPortal)===-1) MassEval.params.EvalThemes.push(MassEval.params.DefaultPortal);
for(var a=0,l=MassEval.params.MisplacedEvalThemes.length;a<l;a++){
var thismanutheme = MassEval.params.MisplacedEvalThemes[a];
if(MassEval.params.EvalThemes.indexOf(thismanutheme)===-1) MassEval.params.EvalThemes.push(thismanutheme);
}
MassEval.functions.getEvalThemesCats();
}
}
});
if(data.continue && data.continue.cmcontinue){
},
queryopt.cmcontinue = data.continue.cmcontinue;
getEvalThemesCats : function(){
PortalEval.functions.getEvalThemes(queryopt);
var Page = MassEval.params.EvalThemesUsusualCats;
}else{
PortalEval.params.EvalThemes.sort();
var DefaultCatTitle = MassEval.params.EvalThemesDefaultCat;
PortalEval.params.EvalThemesOK = true;
var NotDefaultCatTitle = MassEval.params.EvalThemesUnusualCatTemplate;
$.ajax({
PortalEval.functions.checkThemes();
url: mw.util.wikiScript('api'),
data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:Page},
success: function(data){
var query = data.query;
var page = query.pages[Object.keys(query.pages)[0]];
var Wikitext = page.revisions[0]["*"];
var Lines = Wikitext.split("\n");
var SpecialCat = {};
for(var a=0,l=Lines.length;a<l;a++){
var Line = Lines[a];
if(Line.indexOf("=")===-1) continue;
if(Line.indexOf("#")!==-1) continue;
var Project = Line.split("=")[0];
Project = Project.replace(/.*\|/g, "");
Project = Project.replace(/^ */g, "");
Project = Project.replace(/ *$/g, "");
if(MassEval.params.EvalThemes.indexOf(Project)===-1 && MassEval.params.EvalThemes.indexOf(MassEval.functions.lcFirst(Project))===-1){
MassEval.params.EvalThemes.push(Project);
}
var CatTitle = Line.split("=")[1];
CatTitle = CatTitle.replace(/^ /g, "");
CatTitle = CatTitle.replace(/ $/g, "");
SpecialCat[Project] = CatTitle;
}
for(var t=0,tlen=MassEval.params.EvalThemes.length;t<tlen;t++){
var theme = MassEval.params.EvalThemes[t];
var Theme = MassEval.functions.ucFirst(theme);
if(typeof(SpecialCat[Theme])!=="undefined") MassEval.params.EvalThemesCat[theme] = NotDefaultCatTitle.split("$1").join(SpecialCat[Theme]);
else MassEval.params.EvalThemesCat[theme] = DefaultCatTitle.split("$1").join(MassEval.functions.ucFirst(theme));
}
MassEval.params.EvalThemes.sort();
MassEval.functions.getEvalThemesAliases();
}
}
});
});
},
},
createThemeSelect : function(Select, defaultoption, addemptyoption){
getEvalThemesAliases : function(){
var Page = MassEval.params.EvalThemesAliasesPage;
$.ajax({
url: mw.util.wikiScript('api'),
data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:Page},
success: function(data){
var query = data.query;
var page = query.pages[Object.keys(query.pages)[0]];
var Wikitext = page.revisions[0]["*"];
var Lines = Wikitext.split("\n");
for(var a=0,l=Lines.length;a<l;a++){
var Line = Lines[a];
if(Line.indexOf("=")===-1) continue;
if(Line.indexOf("#")!==-1) continue;
if(Line.indexOf("}")!==-1) continue;
if(Line.indexOf("{")!==-1) continue;
var Aliases = Line.split("=")[0];
Aliases = Aliases.replace(/^ *\|/g, "");
Aliases = Aliases.replace(/ *$/g, "");
Aliases = Aliases.replace(/ +\|/g, "|");
Aliases = Aliases.replace(/\| +/g, "|");
Aliases = Aliases.split("|");
var Theme = Line.split("=")[1];
Theme = Theme.replace(/^ /g, "");
Theme = Theme.replace(/ $/g, "");
for(var al=0,allen=Aliases.length;al<allen;al++){
var Alias = MassEval.functions.ucFirst(Aliases[al]);
var alias = MassEval.functions.lcFirst(Aliases[al]);
MassEval.params.EvalThemesAliases[Alias] = Theme;
MassEval.params.EvalThemesAliases[alias] = Theme;
}
}
console.info(MassEval.params.EvalThemes.length+" thèmes d'évaluation trouvés, ainsi que "+Object.keys(MassEval.params.EvalThemesAliases).length+" alias.");
MassEval.functions.localStorage.setItem("EvalThemes", JSON.stringify(MassEval.params.EvalThemes));
MassEval.functions.localStorage.setItem("EvalThemesCat", JSON.stringify(MassEval.params.EvalThemesCat));
MassEval.functions.localStorage.setItem("EvalThemesAliases", JSON.stringify(MassEval.params.EvalThemesAliases));
MassEval.params.EvalThemesOK = true;
MassEval.functions.checkPreliminaryLoadings();
}
});
},
createNewEvalTheme : function(theme, category){
MassEval.params.EvalThemes.push(theme);
MassEval.params.EvalThemesCat[theme] = category;
MassEval.functions.localStorage.setItem("EvalThemes", JSON.stringify(MassEval.params.EvalThemes));
MassEval.functions.localStorage.setItem("EvalThemesCat", JSON.stringify(MassEval.params.EvalThemesCat));
},
createEvalThemeSelect : function(Select, defaultoption, addemptyoption){
if(!Select){
if(!Select){
Select = document.createElement('select');
Select = document.createElement('select');
Select.style.width = PortalEval.params.EvalThemeWidth+"px";
Select.className = "IMPtheme";
}else{
}else{
while(Select.firstChild) Select.removeChild(Select.firstChild);
while(Select.firstChild) Select.removeChild(Select.firstChild);
}
}
$(Select).addClass("EvalThemeSelect");
var Themes = PortalEval.functions.sortTextList(PortalEval.params.EvalThemes);
var Themes = MassEval.functions.sortTextList(MassEval.params.EvalThemes);
if(addemptyoption) Themes.unshift("");
if(addemptyoption) Themes.unshift("");
for(var a=0,l=Themes.length;a<l;a++){
for(var a=0,l=Themes.length;a<l;a++){
var title = Themes[a];
var title = Themes[a];
var opt = document.createElement('option');
var opt = document.createElement('option');
opt.innerHTML = title;
opt.innerHTML = MassEval.functions.ucFirst(title);
opt.value = title;
opt.value = title;
if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
Line 888: Line 2,881:
return Select;
return Select;
},
},
checkThemes : function(){
getPortalList : function(){
if(MassEval.params.PortalList.length > 0) return MassEval.functions.checkPreliminaryLoadings();
PortalEval.functions.disableThings(["GlobalOptionsInput"], (!(PortalEval.params.EvalThemesOK && PortalEval.params.OptionsSubPageOK)));
var lastPortalList = MassEval.functions.localStorage.getItem("PortalList");
if(PortalEval.params.StubThemesOK && PortalEval.params.EvalThemesOK){
if(lastPortalList){
var PortalListInput = document.getElementById("PortalEval_OptionPortalInput");
MassEval.params.PortalList = JSON.parse(lastPortalList);
PortalEval.functions.disableThings([ PortalListInput ], false);
console.info(MassEval.params.PortalList.length+" catégories de portail retrouvées. [localStorage]");
var PortalSelect = document.getElementById("PortalEval_OptionPortal");
MassEval.params.PortalListOK = true;
if(PortalSelect){
PortalEval.functions.createThemeSelect(PortalSelect, PortalEval.params.DefaultPortal);
return MassEval.functions.checkPreliminaryLoadings();
}
if(PortalEval.params.AutoLaunchList) PortalEval.functions.getPages(-1, PortalSelect.value);
else PortalEval.functions.alertControl();
MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
var CatTemplate = MassEval.params.PortalCatTemplate;
var Prefix = CatTemplate.split("$1")[0];
var Suffix = CatTemplate.split("$1")[1];
var SuffixLength = Suffix.length;
MassEval.functions.getAPIAllcategories({
gacprefix : Prefix,
callback : function(R){
var result = R.result;
var CatList = Object.keys(result);
for(var a=0,l=CatList.length;a<l;a++){
var thiscat = result[CatList[a]];
if(thiscat.missing==="") continue;
var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
var thisSuffix = pagetitle.substr((pagetitle.length-SuffixLength), SuffixLength);
if(thisSuffix !== Suffix) continue;
var portalName = pagetitle.split(Prefix).join("").split(Suffix).join("");
if(MassEval.params.PortalList.indexOf(portalName)===-1) MassEval.params.PortalList.push(portalName);
}
console.info(MassEval.params.PortalList.length+" catégories de portail trouvées.");
MassEval.functions.localStorage.setItem("PortalList", JSON.stringify(MassEval.params.PortalList));
MassEval.params.PortalListOK = true;
MassEval.functions.checkPreliminaryLoadings();
}
}
});
},
createPortalSelect : function(defaultvalue){
var Select = document.getElementById("PortalInput");
if(!Select){
Select = document.createElement('select');
Select.id = "PortalInput";
Select.name = "PortalInput";
$(Select).addClass("PortalSelect");
Select.title = MassEval.texts.Portal;
}else{
while(Select.firstChild) Select.removeChild(Select.firstChild);
}
var Portals = MassEval.functions.sortTextList(MassEval.params.PortalList);
if(Portals.length > 0){
var emptyopt = Select.appendChild(document.createElement('option'));
emptyopt.innerHTML = "";
emptyopt.value = "";
if(typeof(defaultoption)==="undefined") emptyopt.selected = "selected";
}
for(var a=0,l=Portals.length;a<l;a++){
var title = Portals[a];
var opt = Select.appendChild(document.createElement('option'));
opt.innerHTML = MassEval.functions.ucFirst(title);
opt.value = title;
if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
}
MassEval.functions.updatePortalSelect();
return Select;
},
updatePortalSelect : function(){
var EvalThemeSelect = document.getElementById("EvalThemeInput");
var PortalSelect = document.getElementById("PortalInput");
if(!EvalThemeSelect || !PortalSelect) return;
var EvalTheme = EvalThemeSelect.value;
var PortalList = MassEval.params.PortalList;
MassEval.functions.disableThings(["PortalInput"], true);
PortalSelect.style.borderColor = "";
if(PortalList.indexOf(MassEval.functions.ucFirst(EvalTheme))!==-1){
PortalSelect.value = MassEval.functions.ucFirst(EvalTheme);
}else if(PortalList.indexOf(MassEval.functions.lcFirst(EvalTheme))!==-1){
PortalSelect.value = MassEval.functions.lcFirst(EvalTheme);
}else{
PortalSelect.value = "";
MassEval.functions.disableThings(["PortalInput"], false);
PortalSelect.style.borderColor = "red";
}
},
getPortalSelectValue : function(){
var PortalSelect = document.getElementById("PortalInput");
if(!PortalSelect) return false;
return PortalSelect.value;
},
getAPIUserInfos : function(){
var lastTimeCorrection = MassEval.functions.localStorage.getItem("TimeCorrection");
var lastAPILimit = MassEval.functions.localStorage.getItem("APILimit");
if(lastTimeCorrection && lastAPILimit){
MassEval.params.TimeCorrection = parseInt(JSON.parse(lastTimeCorrection));
console.info("Correction des horaires "+MassEval.params.TimeCorrection+" retrouvée. [localStorage]");
MassEval.params.APILimit = parseInt(JSON.parse(lastAPILimit));
console.info("Limite API "+MassEval.params.APILimit+" retrouvée. [localStorage]");
MassEval.params.UserInfosOK = true;
return MassEval.functions.checkPreliminaryLoadings();
}
$.ajax({url: mw.util.wikiScript('api'),data:{format:'json',action:'query',meta:'userinfo',uiprop:'options|rights'},dataType:'json'}).then(function(data) {
var query = data.query;
if(query){
var userinfo = query.userinfo;
if(userinfo){
var options = userinfo.options;
if(options){
var timecorrection = options.timecorrection;
if(timecorrection){
timecorrection = parseInt(timecorrection.replace(/.*\|/g, "")); // "Offset|-75"
if(!isNaN(timecorrection)){
MassEval.params.TimeCorrection = timecorrection;
console.info("Correction des horaires "+MassEval.params.TimeCorrection+" trouvée.");
MassEval.functions.localStorage.setItem("TimeCorrection", MassEval.params.TimeCorrection);
}
}
}
var rights = userinfo.rights;
if(rights){
var apihighlimits = (rights.indexOf("apihighlimits")!==-1);
if(apihighlimits) MassEval.params.APILimit = 5000;
else MassEval.params.APILimit = 500;
console.info("Limite API "+MassEval.params.APILimit+" trouvée.");
MassEval.functions.localStorage.setItem("APILimit", MassEval.params.APILimit);
}
}
}
MassEval.params.UserInfosOK = true;
MassEval.functions.checkPreliminaryLoadings();
});
},
checkPreliminaryLoadings : function(){
var PARAMS = MassEval.params;
var EvalThemeSelect = document.getElementById("EvalThemeInput");
var Cond = PARAMS.LaunchCondition;
if(PARAMS.EvalThemesOK && PARAMS.PortalListOK && !PARAMS.EvalThemeStuffsOK){
MassEval.params.EvalThemeStuffsOK = true;
MassEval.functions.createEvalThemeSelect(EvalThemeSelect, MassEval.params.DefaultPortal);
MassEval.functions.createPortalSelect(MassEval.params.DefaultPortal);
MassEval.functions.updateEvalTable(EvalThemeSelect.value);
MassEval.functions.disableThings(["EvalThemeInput"], false);
}
if(PARAMS.EvalThemesOK && PARAMS.OptionsSubPageOK && !PARAMS.OptionsStuffsOK){
MassEval.params.OptionsStuffsOK = true;
MassEval.functions.disableThings(["GlobalOptionsInput"], false);
var taboptionlink = document.getElementById("optionlinkintab");
if(taboptionlink) $(taboptionlink).removeClass("disabledoptionlink");
}
if(PARAMS.StubThemesOK && PARAMS.EvalThemesOK && PARAMS.BeforeStubTemplatesOK && PARAMS.PortalListOK && !PARAMS.DatasStuffsOK){
MassEval.params.DatasStuffsOK = true;
var datalinkintab = document.getElementById("datalinkintab");
if(datalinkintab) $(datalinkintab).removeClass("disableddatlink");
}
if(PARAMS.StubThemesOK && PARAMS.EvalThemesOK && PARAMS.PortalListOK && PARAMS.CatSubPageCountOK && PARAMS.UserInfosOK && !PARAMS.AllStuffsOK){
MassEval.params.AllStuffsOK = true;
MassEval.functions.disableThings([ "SubCatsCheckBox"], false);
MassEval.functions.disableThings([ "GlobalVerifInput","GlobalAddEvalInput"], (Cond === 2));
MassEval.functions.alertControl("getthemes");
if(Cond === 4) MassEval.functions.getThesePagesStatus([mw.config.get('wgTitle')]);
}
},
// ------------------------------- Fonctions pour le chargement des modèles à mettre avant le bandeau d'ébauche -------------------------------
getBeforeStubTemplates : function(){
if(MassEval.params.BeforeStubTemplatesOK) return;
var lastBeforeStubTemplates = MassEval.functions.localStorage.getItem("BeforeStubTemplates");
if(lastBeforeStubTemplates){
MassEval.params.BeforeStubTemplates = JSON.parse(lastBeforeStubTemplates);
console.info(MassEval.params.BeforeStubTemplates.length + " modèles pré-{{Ébauche}} trouvés (redirects inclus). [localStorage]");
MassEval.params.BeforeStubTemplatesOK = true
return;
}
var Cats = MassEval.params.BeforeStubTemplatesCats;
for(var a=0,l=Cats.length;a<l;a++){
var cat = Cats[a];
MassEval.params.BeforeStubTemplatesReq++
MassEval.functions.getAPICategorymembers({
title : (mw.config.get("wgFormattedNamespaces")[14]+":"+cat),
cmprop : 'title',
cmtype : 'page',
callback : function(R){
MassEval.params.BeforeStubTemplatesReq--
var result = R.result;
for(var pi in R.result){
var pageinfo = R.result[pi];
var title = pageinfo.title;
var ns = parseInt(pageinfo.ns);
if(ns == 10){
title = MassEval.functions.getNamespaceInfoFromPage(title, "PageName");
if(MassEval.params.BeforeStubTemplates.indexOf(title)===-1) MassEval.params.BeforeStubTemplates.push(title);
}
}
if(MassEval.params.BeforeStubTemplatesReq ===0){
MassEval.functions.getBeforeStubTemplatesRedirects();
}
}
});
}
},
getBeforeStubTemplatesRedirects : function(){
var AddNsName = function(t){ return (mw.config.get("wgFormattedNamespaces")[10]+":"+t); }
var BeforeStubTemplates = MassEval.functions.makeGroupsFromArray(MassEval.params.BeforeStubTemplates, 50, AddNsName);
for(var a=0,l=BeforeStubTemplates.length;a<l;a++){
MassEval.params.BeforeStubTemplatesReq++
MassEval.functions.getAPILinkshere({
title : (BeforeStubTemplates[a].join("|")),
lhshow : 'redirect',
lhprop : 'title',
lhnamespace : 10,
callback: function(R){
MassEval.params.BeforeStubTemplatesReq--
var result = R.result;
for(var page in result){
var pageinfo = result[page];
var linkshere = pageinfo.linkshere;
if(linkshere){
for(var item in linkshere){
var iteminfo = linkshere[item];
var title = iteminfo.title;
var ns = iteminfo.ns;
if(ns === 10){
title = MassEval.functions.getNamespaceInfoFromPage(title, "PageName");
if(MassEval.params.BeforeStubTemplates.indexOf(title)===-1) MassEval.params.BeforeStubTemplates.push(title);
}
}
}
}
if(MassEval.params.BeforeStubTemplatesReq ===0){
MassEval.params.BeforeStubTemplates.sort();
console.info(MassEval.params.BeforeStubTemplates.length + " modèles pré-{{Ébauche}} trouvés (redirects inclus).");
// alert("MassEval.params.BeforeStubTemplates :\n\n" + MassEval.params.BeforeStubTemplates.join("\n"));
MassEval.functions.localStorage.setItem("BeforeStubTemplates", JSON.stringify(MassEval.params.BeforeStubTemplates));
MassEval.params.BeforeStubTemplatesOK = true;
}
}
});
}
},
// ------------------------------- Fonctions pour l'onglet des données -------------------------------
openDatasForm : function(){
var DatasDiv = document.getElementById("fieldsetDatasContainer");
var DatasFS = document.getElementById("fieldsetDatas");
if(!DatasDiv || !DatasFS) return;
if(DatasDiv.style.display != "none"){
return MassEval.functions.closeDatasForm();
}else{
DatasDiv.style.display = "";
var Legend = DatasFS.appendChild(document.createElement('legend'));
Legend.innerHTML = MassEval.texts.GoDatasText;
var P = DatasFS.appendChild(document.createElement('p'));
P.style.textAlign = "center";
var ULs = [
DatasFS.appendChild(MassEval.functions.createEvalUL("evaldataUL")),
DatasFS.appendChild(MassEval.functions.createStubUL("stubdataUL")),
DatasFS.appendChild(MassEval.functions.createDiversUL("divdataUL")),
DatasFS.appendChild(MassEval.functions.createRAZUL("RAZdataUL"))
];
for(var a=0,l=ULs.length;a<l;a++){
MassEval.functions.setColumnsWidth(ULs[a].getElementsByTagName('ul')[0]);
}
MassEval.functions.createToggleButtons(P, ULs, "Datas");
}
},
createDataSimple : function(UL, Data){
var LI = UL.appendChild(document.createElement('li'));
$(LI).addClass('DataLI');
var Label = LI.appendChild(document.createElement('label'));
Label.innerHTML = MassEval.texts[("OPTION"+Data)] || Data;
LI.appendChild(document.createTextNode(' : '));
var Span = LI.appendChild(document.createElement('span'));
$(Span).addClass('DataInfo');
Span.innerHTML = JSON.stringify(MassEval.params[Data]);
},
createDataMultiple : function(UL, Data){
var multiple = MassEval.params[Data];
var LI = UL.appendChild(document.createElement('li'));
$(LI).addClass('DataLI');
var Label = LI.appendChild(document.createElement('label'));
Label.innerHTML = MassEval.texts[("OPTION"+Data)] || Data;
LI.appendChild(document.createTextNode(' : '));
var subUL = LI.appendChild(document.createElement('ul'));
$(subUL).addClass('DatasubUL');
for(var id in multiple){
if(multiple.hasOwnProperty(id)){
var subLI = subUL.appendChild(document.createElement('li'));
var SpanWrapper = subLI.appendChild(document.createElement('span'));
if(typeof(parseInt(id)) !== "number" || (""+parseInt(id)) === "NaN"){
var Label = SpanWrapper.appendChild(document.createElement('label'));
Label.innerHTML = MassEval.texts[("OPTION"+id)] || id;
SpanWrapper.appendChild(document.createTextNode(' : '));
}
var Span = SpanWrapper.appendChild(document.createElement('span'));
$(Span).addClass('DataInfo');
Span.style.whiteSpace = "nowrap";
Span.innerHTML = JSON.stringify(multiple[id]);
}
}
},
createEvalUL : function(ID){
var Div = document.createElement('div');
Div.id = ID;
var UL = Div.appendChild(document.createElement('ul'));
var Datas = [
{name:"EvalTemplate"},
{name:"EvalThemes",type:"multiple"},
{name:"EvalThemesAliasesPage"},
{name:"EvalThemesAliases",type:"multiple"},
{name:"EvalCategory"},
{name:"EvalCatPrefixes"},
{name:"EvalThemesDefaultCat"},
{name:"EvalThemesUsusualCats"},
{name:"EvalThemesUnusualCatTemplate"},
{name:"EvalCatsPrefixes"},
{name:"EvalCatsCommonPrefix"},
{name:"EvalThemesCat",type:"multiple"},
{name:"MisplacedEvalThemes",type:"multiple"},
{name:"PortalCatTemplate"},
{name:"PortalList",type:"multiple"},
{name:"Avancement",type:"multiple"},
{name:"Importance",type:"multiple"},
];
for(var a=0,l=Datas.length;a<l;a++){
if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
else MassEval.functions.createDataSimple(UL, Datas[a].name);
}
return Div;
},
createStubUL : function(ID){
var Div = document.createElement('div');
Div.id = ID;
var UL = Div.appendChild(document.createElement('ul'));
var Datas = [
{name:"StubTemplate"},
{name:"StubThemesPage"},
{name:"StubThemes",type:"multiple"},
{name:"StubAdjM",type:"multiple"},
{name:"StubAdjF",type:"multiple"},
];
for(var a=0,l=Datas.length;a<l;a++){
if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
else MassEval.functions.createDataSimple(UL, Datas[a].name);
}
return Div;
},
createDiversUL : function(ID){
var Div = document.createElement('div');
Div.id = ID;
var UL = Div.appendChild(document.createElement('ul'));
MassEval.params.MissingTexts = MassEval.functions.getMissingTexts();
MassEval.params.UnusedTexts = MassEval.functions.getUnusedTexts();
var Datas = [
{name:"MissingTexts",type:"multiple"},
{name:"UnusedTexts",type:"multiple"},
{name:"BeforeStubTemplatesCats"},
{name:"BeforeStubTemplates",type:"multiple"},
{name:"ModesMap",type:"multiple"},
{name:"CurrentHeights"},
{name:"SortOptions"},
{name:"BorderStyles"},
{name:"SizeUnits"},
{name:"DivIDsToPreview"},
{name:"TalkSubPagesToAvoid"},
{name:"Accents",type:"multiple"},
{name:"FontFamilies",type:"multiple"},
{name:"EvalCatAllpages"},
{name:"EvalCatStubpages"},
{name:"SpecialpageName"},
{name:"OptionsSubPage"},
{name:"TestPage"},
{name:"APILimit"},
{name:"TimeCorrection"},
{name:"localStorageExpiry"},
{name:"ChangesToMakeDelay"},
];
for(var a=0,l=Datas.length;a<l;a++){
if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
else MassEval.functions.createDataSimple(UL, Datas[a].name);
}
return Div;
},
createRAZUL : function(ID){
var Div = document.createElement('div');
Div.id = ID;
var UL = Div.appendChild(document.createElement('ul'));
var Items = MassEval.params.localStorageItems;
for(var a=0,l=Items.length;a<l;a++){
var itemname = Items[a];
var LI = UL.appendChild(document.createElement('li'));
$(LI).addClass('DataLI');
var RAZInput = LI.appendChild(MassEval.functions.createInput({type:"button",name:itemname,value:MassEval.texts.GoDatasRAZText,title:MassEval.texts.GoDatasRAZTitle}));
RAZInput.onclick = function(){
localStorage.removeItem(this.name);
localStorage.removeItem((this.name+"_TS"));
delete MassEval.params.localStorageTimestamps[(this.name+"_TS")];
}
var Label = LI.appendChild(document.createElement('label'));
Label.setAttribute("for", itemname);
Label.innerHTML = " <code>"+itemname+"</code> : "+(MassEval.texts[("OPTION"+itemname)] || itemname);
Label.title = MassEval.functions.calculateRemainingTime(MassEval.params.localStorageTimestamps[(itemname+"_TS")]);
var multiple = MassEval.params[itemname];
if(typeof(multiple)==="object"){
var subUL = LI.appendChild(document.createElement('ul'));
$(subUL).addClass('DatasubUL');
for(var id in multiple){
if(multiple.hasOwnProperty(id)){
var subLI = subUL.appendChild(document.createElement('li'));
var SpanWrapper = subLI.appendChild(document.createElement('span'));
if(typeof(parseInt(id)) !== "number" || (""+parseInt(id)) === "NaN"){
var Label = SpanWrapper.appendChild(document.createElement('label'));
Label.innerHTML = MassEval.texts[("OPTION"+id)] || id;
SpanWrapper.appendChild(document.createTextNode(' : '));
}
var Span = SpanWrapper.appendChild(document.createElement('span'));
$(Span).addClass('DataInfo');
Span.style.whiteSpace = "nowrap";
Span.innerHTML = JSON.stringify(multiple[id]);
}
}
}else{
LI.appendChild(document.createTextNode(" : "));
var Span = LI.appendChild(document.createElement('span'));
$(Span).addClass('DataInfo');
Span.innerHTML = JSON.stringify(multiple);
}
}
return Div;
},
calculateRemainingTime(timestamp){
if(typeof(timestamp)!== "number") return false;
var now = new Date().getTime();
var remaining = ( (MassEval.params.localStorageExpiry*60*60*1000) - (now-timestamp));
var Hremaining = Math.floor(remaining / (60*60*1000));
var Mremaining = Math.floor( (remaining-(Hremaining*60*60*1000)) / (60*1000));
var template = MassEval.texts.localStorageExpiryT; // "$h heures et $m mimutes",
return template.split("$h").join(Hremaining).split("$m").join(Mremaining)
},
getMissingTexts : function(){
var missingExplaination = {};
for(var text in MassEval.texts){
if(text.indexOf("OPTION")!=-1) continue;
var opt = "OPTION"+text;
if(typeof(MassEval.texts[opt])!="string") missingExplaination[('OPTION'+text)] = MassEval.texts[text];
}
for(var text in MassEval.styles){
var opt = "OPTION"+text;
if(typeof(MassEval.texts[opt])!="string") missingExplaination[('OPTION'+text)] = MassEval.styles[text];
}
return missingExplaination;
},
getUnusedTexts : function(){
var NOTunused = ["params","styles","texts","moreparams","evaldataUL","stubdataUL","divdataUL","RAZdataUL","UnusedTexts"];
var unusedExplaination = {};
var Texts = MassEval.texts;
var Styles = MassEval.styles;
var Params = MassEval.params;
for(var text in Texts){
if(text.indexOf("OPTION")===-1) continue;
var thisExpl = text.substr(6, (text.length-6));
if(NOTunused.indexOf(thisExpl)!==-1) continue;
if(typeof( Texts[thisExpl])!=="undefined") continue;
if(typeof(Styles[thisExpl])!=="undefined") continue;
if(typeof(Params[thisExpl])!=="undefined") continue;
unusedExplaination[text] = Texts[text];
}
return unusedExplaination;
},
setColumnsWidth : function(UL){
if(!UL) return;
var subULs = UL.getElementsByTagName('ul');
for(var a=0,l=subULs.length;a<l;a++){
var subUL = subULs[a];
var max = 0;
var subLIs = subUL.getElementsByTagName('li');
for(var li=0,lilen=subLIs.length;li<lilen;li++){
var W = $(subLIs[li].firstChild).width();
if(W > max) max = W;
}
subUL.setAttribute("style", "-webkit-columns:"+(max+5)+"px;-moz-columns:"+(max+5)+"px;columns:"+(max+5)+"px;");
var toggleLink = subUL.parentNode.insertBefore(MassEval.functions.createLink(null,{text:MassEval.texts.Show,title:MassEval.texts.ShowTip,href:"javascript:;"}), subUL);
toggleLink.style.marginLeft = "1.5em";
toggleLink.onclick = function(){
if(this.innerHTML == MassEval.texts.Show){
this.nextSibling.style.display = "";
this.innerHTML = MassEval.texts.Hide;
this.title = MassEval.texts.HideTip;
}else{
this.nextSibling.style.display = "none";
this.innerHTML = MassEval.texts.Show;
this.title = MassEval.texts.ShowTip;
}
}
subUL.style.display = "none";
}
},
closeDatasForm : function(){
var DatasDiv = document.getElementById("fieldsetDatasContainer");
var DatasFS = document.getElementById("fieldsetDatas");
if(!DatasDiv || !DatasFS) return;
DatasDiv.style.display = "none";
while(DatasFS.firstChild){ DatasFS.removeChild(DatasFS.firstChild); }
},
// ------------------------------- Fonctions pour la personnalisation automatique -------------------------------
getUserSubPage : function() {
if(MassEval.params.OptionsSubPageOK) return;
var Page = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
$.ajax({
url: mw.util.wikiScript('api'),
data: { format:'json',action:'query',prop:'revisions|info',rvlimit:1,rvprop:'content',titles:Page},
success: function(data) {
var query = data.query;
if(!query){
MassEval.params.OptionsSubPageOK = true;
return MassEval.functions.checkPreliminaryLoadings();
}
var pageinfo = query.pages[Object.keys(query.pages)[0]];
var missing = (pageinfo.missing === "");
if(missing){
MassEval.params.OptionsSubPageOK = true;
return MassEval.functions.checkPreliminaryLoadings();
}
var Text = pageinfo.revisions[0]["*"];
var CommentStart = MassEval.params.OptionsPageCommentStart;
var CommentEnd = MassEval.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, "");
MassEval.params.OptionsMoreParams = MoreParams;
if(MoreParams) console.info("Trouvé personnalisation supplémentaire.");
else console.info("Pas trouvé de personnalisation supplémentaire.");
}
}
MassEval.params.OptionsSubPageOK = true;
MassEval.functions.checkPreliminaryLoadings();
}
});
},
setDefaultParams : function() {
MassEval.params.DEFAULTparams = {};
var EditableParams = MassEval.params.EditableParams;
for(var a=0,l=EditableParams.length;a<l;a++){
var paramname = EditableParams[a];
if(typeof(MassEval.params[paramname])!=="undefined") MassEval.params.DEFAULTparams[paramname] = MassEval.params[paramname];
}
MassEval.params.DEFAULTtexts = {};
var Texts = MassEval.texts;
for(var textname in Texts){
MassEval.params.DEFAULTtexts[textname] = Texts[textname];
}
MassEval.params.DEFAULTstyles = {};
var Styles = MassEval.styles;
for(var stylename in Styles){
MassEval.params.DEFAULTstyles[stylename] = Styles[stylename];
}
},
getCustomParams : function() {
var customFunc = ["Lang", "Site", "User"];
for(var a=0,l=customFunc.length;a<l;a++){
var funcName = "MassEval_"+customFunc[a]+"Custom";
if(typeof(window[funcName])==="function") try{ window[funcName](); }catch(e){ console.warn(funcName+"()\n------\n"+e.message); }
}
}
},
},
updateOptions : function(){
updateOptions : function(){
var F = document.getElementById("PortalEvalOptionsFS");
var F = document.getElementById("fieldsetOptions");
if(!F) return;
if(!F) return;
var NewParamText = [];
var NewParamText = [];
var MoreParams = ""
var MoreParams = "";
var ULs = F.getElementsByTagName('ul');
var ULs = F.getElementsByTagName('ul');
var foundIssues = [];
for(var a=0,l=ULs.length;a<l;a++){
for(var a=0,l=ULs.length;a<l;a++){
var UL = ULs[a];
var UL = ULs[a];
if(!$(UL).hasClass("optionsUL") || !UL.id) continue;
if(!$(UL).hasClass("optionsUL") || !UL.id) continue;
var type = UL.id.split("OPTIONUL").join("");
var type = UL.id.split("OPTIONUL").join("");
var Lis = UL.getElementsByTagName('li');
var Lis = UL.getElementsByTagName('li');
for(var i=0,ilen=Lis.length;i<ilen;i++){
for(var i=0,ilen=Lis.length;i<ilen;i++){
var LI = Lis[i];
var LI = Lis[i];
if($(LI).hasClass("dummyLI")) continue;
var More = PortalEval.functions.getFirstElementByName(LI, ["textarea"], "moreparams");
var More = MassEval.functions.getFirstElementByName(LI, ["textarea"], "moreparams");
if(More) MoreParams = More.value;
else{
if(More){
MoreParams = More.value;
var Type = PortalEval.functions.getFirstElementByName(LI, ["input"], "type");
var Name = PortalEval.functions.getFirstElementByName(LI, ["input"], "name");
}else{
var Type = MassEval.functions.getFirstElementByName(LI, ["input"], "type");
var DefaultNode = PortalEval.functions.getFirstElementByName(LI, ["input",], "default");
var Name = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
var ActualNode = PortalEval.functions.getFirstElementByName(LI, ["textarea","select","input"], "actual");
var DefaultNode = MassEval.functions.getFirstElementByName(LI, ["input",], "default");
var ActualNode = MassEval.functions.getFirstElementByName(LI, ["textarea","select","input"], "actual");
if(!Type || !Name || !DefaultNode || !ActualNode){
if(!Type) console.log("item Type manquant : "+type+" "+i);
if(!Name) console.log("item Name manquant : "+type+" "+i);
if(!DefaultNode) console.log("item DefaultNode manquant : "+type+" "+i);
if(!ActualNode) console.log("item ActualNode manquant : "+type+" "+i);
continue;
}
var Test = MassEval.functions.checkThatModifiedOption(LI, ActualNode, ActualNode.value);
if(Test) foundIssues.push(Test);
Type = Type.value;
Type = Type.value;
Name = Name.value;
Name = Name.value;
var Actual = (Type=="boolean" ? ActualNode.checked : ActualNode.value);
var Actual = (Type=="boolean" ? ActualNode.checked : ActualNode.value);
var Default = (Type=="boolean" ? (DefaultNode.value == "true") : DefaultNode.value);
var Default = (Type=="boolean" ? (DefaultNode.value == "true") : DefaultNode.value);
if(Type=="string" && (Default.split("/n").length-1) === 0) Actual = Actual.split("/n").join("");
Actual = (Type=="string" ? '"'+Actual.replace(/"/g, '\\"')+'"' : Actual);
Actual = (Type=="string" ? '"'+Actual.replace(/"/g, '\\"')+'"' : Actual);
Default = (Type=="string" ? '"'+Default.replace(/"/g, '\\"')+'"' : Default);
Default = (Type=="string" ? '"'+Default.replace(/"/g, '\\"')+'"' : Default);
Line 931: Line 3,485:
if(Actual === Default) continue;
if(Actual === Default) continue;
Actual = (Type=="string" ? Actual.split("\n").join("\\n\"\n + \"") : Actual);
Actual = (Type=="string" ? Actual.split("\n").join("\\n\"\n + \"") : Actual);
NewParamText.push(" PortalEval.functions.customize('"+type+"','"+Name+"',"+Actual+");");
NewParamText.push(" MassEval.functions.customize('"+type+"','"+Name+"',"+Actual+");\n");
}
}
}
}
}
}
if(foundIssues.length > 0) return MassEval.functions.alertControl(("foundoptionissue_"+a+"_"+i), foundIssues.join("</br>"), "Warning");
NewParamText = "\n"+NewParamText.join("\n")+'\n\n'+PortalEval.params.OptionsPageCommentStart+MoreParams+PortalEval.params.OptionsPageCommentEnd;
else MassEval.functions.alertControl(("foundoptionissue_"+a+"_"+i));
NewParamText = PortalEval.params.OptionsPageTemplate.split("$1").join(NewParamText);
NewParamText = "\n"+NewParamText.join("\n")+'\n\n'+MassEval.params.OptionsPageCommentStart+MoreParams+MassEval.params.OptionsPageCommentEnd;
NewParamText = MassEval.params.OptionsPageTemplate.split("$1").join(NewParamText);
// return alert(NewParamText);
// return alert(NewParamText);
PortalEval.functions.saveOptions(NewParamText, MoreParams);
MassEval.functions.saveOptions(NewParamText, MoreParams);
},
},
saveOptions : function(NewParamText, MoreParams){
saveOptions : function(NewParamText, MoreParams){
var title = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js';
var title = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgSaveParams.split("$page").join(title), true);
MassEval.functions.alertControl("saveoptions", MassEval.texts.AlertMsgSaveParams.split("$page").join(title), "Running");
$.ajax({
$.ajax({
url: mw.util.wikiScript('api'),
url: mw.util.wikiScript('api'),
Line 955: Line 3,511:
title: title,
title: title,
text: NewParamText,
text: NewParamText,
summary: PortalEval.texts.SaveParamsResume.split("$docpage").join(PortalEval.params.DocPage),
summary: MassEval.texts.SaveParamsResume.split("$docpage").join(MassEval.params.DocPage),
basetimestamp: "now",
basetimestamp: "now",
format: 'json',
format: 'json',
Line 962: Line 3,518:
dataType: 'json',
dataType: 'json',
success: function(data){
success: function(data){
var DEFAULTparams = PortalEval.params.DEFAULTparams;
var DEFAULTparams = MassEval.params.DEFAULTparams;
for(var dp in DEFAULTparams){ PortalEval.params[dp] = DEFAULTparams[dp]; }
for(var dp in DEFAULTparams){ MassEval.params[dp] = DEFAULTparams[dp]; }
var DEFAULTtexts = PortalEval.params.DEFAULTtexts;
var DEFAULTstyles = MassEval.params.DEFAULTstyles;
for(var dt in DEFAULTtexts){ PortalEval.texts[dt] = DEFAULTtexts[dt]; }
for(var ds in DEFAULTstyles){ MassEval.styles[ds] = DEFAULTstyles[ds]; }
var DEFAULTtexts = MassEval.params.DEFAULTtexts;
for(var dt in DEFAULTtexts){ MassEval.texts[dt] = DEFAULTtexts[dt]; }
try{
try{
eval(NewParamText);
eval(NewParamText);
window.PortalEval_UserCustom();
window.MassEval_UserCustom();
MassEval.functions.setCSSstyles();
}catch(e){ console.error(e.message); }
}catch(e){ console.error(e.message); }
PortalEval.params.OptionsMoreParams = MoreParams;
MassEval.params.OptionsMoreParams = MoreParams;
if(MassEval.params.SearchForPortalTag) $(document.body).removeClass("hideportals");
PortalEval.functions.alertControl();
PortalEval.functions.openOptionsForm();
else $(document.body).addClass("hideportals");
PortalEval.functions.openOptionsForm();
MassEval.functions.alertControl("saveoptions");
MassEval.functions.openOptionsForm(true);
}
}
});
});
Line 980: Line 3,540:
customize : function(type, optname, optvalue){
customize : function(type, optname, optvalue){
if(!type || !optname || typeof(optvalue)==="undefined") return;
if(!type || !optname || typeof(optvalue)==="undefined") return;
if(typeof(type)!=="string" || typeof(optname)!=="string") return;
var Default = PortalEval.params[("DEFAULT"+type)];
if(['params','texts','styles'].indexOf(type)===-1) return;
if(typeof(optvalue)!=="string" && typeof(optvalue)!=="number" && typeof(optvalue)!=="boolean") return;
var Default = MassEval.params[("DEFAULT"+type)];
if(typeof(Default)!=="object") return;
if(typeof(Default)!=="object") return;
Default = Default[optname];
Default = Default[optname];
if(typeof(Default)==="undefined") return;
if(typeof(Default)==="undefined") return;
PortalEval[type][optname] = optvalue;
MassEval[type][optname] = optvalue;
var p = { texts:"texte",params:"paramètre",styles:"style"};
var msg = "Personnalisation " + p[type] + " \""+optname+"\" : "
+ (typeof(Default)==="string" ? "\""+Default+"\" → \""+optvalue+"\"" : Default+" → "+optvalue)
console.info(msg);
},
unsafeCustomize : function(type, optname, optvalue){
MassEval[type][optname] = optvalue;
},
},
createParamsUL : function(){
createParamsUL : function(){
var Div = document.createElement('div');
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.id = "params";
Div.style.overflowY = "scroll";
Div.id = "OPTIONparams";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
var UL = document.createElement('ul');
UL.id = "OPTIONULparams";
UL.id = "OPTIONULparams";
UL.className = "optionsUL";
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)
Div.appendChild(UL)
var ActualParams = PortalEval.params;
var ActualParams = MassEval.params;
var EditableParams = PortalEval.params.EditableParams;
var EditableParams = MassEval.params.EditableParams;
var DEFAULTparams = PortalEval.params.DEFAULTparams;
var DEFAULTparams = MassEval.params.DEFAULTparams;
for(var a=0,l=EditableParams.length;a<l;a++){
for(var a=0,l=EditableParams.length;a<l;a++){
var paramname = EditableParams[a];
var paramname = EditableParams[a];
var modified = false;
var LI = UL.appendChild(document.createElement('li'));
var LI = document.createElement('li');
$(LI).addClass("OptionparamsLI");
var defaultparam = DEFAULTparams[paramname];
var defaultparam = DEFAULTparams[paramname];
var actualparam = ActualParams[paramname];
var actualparam = ActualParams[paramname];
var modified = (actualparam !== defaultparam);
var HiddenName = PortalEval.functions.createInput({type:'hidden',name:"name",value:paramname});
LI.appendChild(HiddenName);
var HiddenName = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:paramname}));
var HiddenType = PortalEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultparam)});
var HiddenType = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultparam)}));
var DefaultHidden = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaultparam}));
LI.appendChild(HiddenType);
var DefaultInput = LI.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",value:MassEval.texts.DefButtonText,
if(actualparam !== defaultparam) modified = true;
title:MassEval.texts.DefButtonTitle.split("$1").join(defaultparam)}));
var DefaultHidden = PortalEval.functions.createInput({type:'hidden',name:"default",value:defaultparam});
DefaultInput.onclick = function(){
LI.appendChild(DefaultHidden);
MassEval.functions.razModifiedOption(this, "params");
var DefaultInput = PortalEval.functions.createInput({type:'button',name:"defaultB",value:PortalEval.texts.DefButtonText,
}
title:PortalEval.texts.DefButtonTitle.split("$1").join(defaultparam)});
LI.appendChild(DefaultInput);
var ActualInput;
if(typeof(defaultparam)==="boolean"){
if(typeof(defaultparam)==="boolean"){
ActualInput = LI.appendChild(MassEval.functions.createInput({type:'checkbox',name:"actual",value:actualparam}));
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";
if(actualparam) ActualInput.checked = "checked";
}else if(typeof(defaultparam)!=="object"){
}else{
ActualInput = LI.appendChild(MassEval.functions.createInput({type:'text',name:"actual",value:actualparam}));
DefaultInput.onclick = function(){ this.nextSibling.value = this.previousSibling.value; }
if(paramname == "DefaultPortal" || paramname == "DefaultSort"){
ActualInput.className = ("OptInput" + (typeof(defaultparam) === "number" ? "Nbr" : "Str" ));
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);
LI.appendChild(ActualInput);
var Label = document.createElement('label');
LI.appendChild(document.createTextNode(" : "));
var Label = LI.appendChild(document.createElement('label'));
Label.innerHTML = PortalEval.texts[("OPTION"+paramname)] || ("OPTION"+paramname);
Label.innerHTML = MassEval.texts[("OPTION"+paramname)] || ("OPTION"+paramname);
if(modified){
if(modified){
Label.style.color = "red";
$(LI).addClass("modifiedoption");
Label.title = PortalEval.texts.OptionModified;
Label.title = MassEval.texts.OptionModified;
}else{
DefaultInput.disabled = "disabled";
}
}
Label.setAttribute('for', paramname);
Label.setAttribute('for', paramname);
if(ActualInput.tagName.toLowerCase() == "input" && ActualInput.type == "checkbox")
ActualInput.onclick = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
else if(ActualInput.tagName.toLowerCase() == "input")
ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
}
return Div;
},
setInputToSelects : function(){
var UL = document.getElementById("OPTIONULparams");
if(!UL) return;
var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0 );
var Lis = UL.getElementsByTagName('li');
var NewActualSelect;
for(var a=0,l=Lis.length;a<l;a++){
LI = Lis[a];
var NameInput = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
if(!NameInput || !ActualInput) continue;
var paramname = NameInput.value;
var actualparam = ActualInput.value;
var modified = false;
if(paramname == "DefaultPortal"){
NewActualSelect = MassEval.functions.createEvalThemeSelect(null, actualparam, (actualparam === ""));
modified = true;
}
if(modified){
NewActualSelect.name = "actual";
NewActualSelect.style.width = ($(ActualInput).width() + MoreWidth)+"px";
ActualInput.parentNode.insertBefore(NewActualSelect, ActualInput);
ActualInput.parentNode.removeChild(ActualInput);
NewActualSelect.onchange = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
}
}
},
setIconPreview : function(){
var UL = document.getElementById("OPTIONULparams");
if(!UL) return;
var Lis = UL.getElementsByTagName('li');
for(var a=0,l=Lis.length;a<l;a++){
LI = Lis[a];
var NameInput = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
if(!NameInput || !ActualInput) continue;
var paramname = NameInput.value;
var actualparam = ActualInput.value;
var suffix = paramname.substr((paramname.length-4), 4);
if(suffix == "Icon"){
ActualInput.id = paramname;
ActualInput.onfocus = function(){
var ID = this.id;
var ExistingPreview = document.getElementById("ImagePreview_"+ID);
if(!ExistingPreview){
var ExistingPreviewSpan = this.parentNode.insertBefore(document.createElement('span'), this.nextSibling);
$(ExistingPreviewSpan).addClass("ImagePreviewSpan");
ExistingPreview = ExistingPreviewSpan.appendChild(document.createElement('img'));
ExistingPreview.id = "ImagePreview_"+ID;
ExistingPreview.className = "ImagePreview";
}
ExistingPreview.src = (MassEval.params.ImageURL + this.value);
$(ExistingPreview).fadeIn("fast");
}
ActualInput.onkeyup = function(){
var ID = this.id;
var ExistingPreview = document.getElementById("ImagePreview_"+ID);
if(!ExistingPreview){
var ExistingPreviewSpan = this.parentNode.insertBefore(document.createElement('span'), this.nextSibling);
$(ExistingPreviewSpan).addClass("ImagePreviewSpan");
ExistingPreview = ExistingPreviewSpan.appendChild(document.createElement('img'));
ExistingPreview.id = "ImagePreview_"+ID;
ExistingPreview.className = "ImagePreview";
$(ExistingPreview).fadeIn("fast");
}
ExistingPreview.src = (MassEval.params.ImageURL + this.value);
MassEval.functions.checkModifiedOption(this, "params");
}
ActualInput.onblur = function(){
var ID = this.id;
var ExistingPreview = document.getElementById("ImagePreview_"+ID);
if(ExistingPreview) $(ExistingPreview).fadeOut("fast");
}
}
}
},
createStylesUL : function(){
var Div = document.createElement('div');
Div.id = "styles";
var UL = document.createElement('ul');
UL.id = "OPTIONULstyles";
UL.className = "optionsUL";
Div.appendChild(UL)
var ActualStyles = MassEval.styles;
var DEFAULTstyles = MassEval.params.DEFAULTstyles;
for(var stylename in DEFAULTstyles){
var modified = false;
var LI = UL.appendChild(document.createElement('li'));
$(LI).addClass("OptionstylesLI");
var defaultstyle = DEFAULTstyles[stylename];
var actualstyle = ActualStyles[stylename];
if(actualstyle !== defaultstyle) modified = true;
var FORM = LI.appendChild(document.createElement('form'));
FORM.onsubmit = function(){ return false; };
var HiddenName = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:stylename}));
var HiddenType = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultstyle)}));
var DefaultHidden = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaultstyle}));
var DefaultInput = FORM.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",
value:MassEval.texts.DefButtonText,title:MassEval.texts.DefButtonTitle.split("$1").join(defaultstyle)}));
DefaultInput.onclick = function(){
MassEval.functions.razModifiedOption(this, "styles");
}
var ActualInput = FORM.appendChild(MassEval.functions.createInput({type:'text',name:"actual",value:actualstyle}));
ActualInput.className = "OptInputCSS";
ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "styles"); };
LI.appendChild(document.createTextNode(" : "));
LI.appendChild(document.createTextNode(" : "));
LI.appendChild(Label);
var Label = LI.appendChild(document.createElement('label'));
var SizeUnits = MassEval.params.SizeUnits
UL.appendChild(LI);
for(var a=0,l=SizeUnits.length;a<l;a++){
var thisunit = SizeUnits[a];
if(defaultstyle.indexOf(thisunit)!==-1){
$(ActualInput).addClass("SizeUnit");
ActualInput.title = MassEval.texts.SizeUnitTip.split("$units").join(SizeUnits.join(", "));
}
}
Label.innerHTML = MassEval.texts[("OPTION"+stylename)] || ("OPTION"+stylename);
if(modified){
$(LI).addClass("modifiedoption");
Label.title = MassEval.texts.OptionModified;
}else{
DefaultInput.disabled = "disabled";
}
Label.setAttribute('for', stylename);
}
}
return Div;
return Div;
},
setFontFamilySelector : function(){
var UL = document.getElementById("OPTIONULstyles");
if(!UL) return;
var li = UL.getElementsByTagName('li')[0];
if(!li) return;
var Input = MassEval.functions.getFirstElementByName(li, ["input"], "actual");
if(!Input) return;
var Select = document.createElement("select");
var FontFamilies = MassEval.params.FontFamilies;
for(var fam in FontFamilies){
var optgroup = Select.appendChild(document.createElement("optgroup"));
optgroup.setAttribute("label", "— "+fam+" —");
var Families = FontFamilies[fam].sort();
for(var a=0,l=Families.length;a<l;a++){
var thisfam = Families[a];
if(MassEval.functions.fontTest(thisfam, fam)){
var opt = Select.appendChild(document.createElement("option"));
opt.value = thisfam;
opt.innerHTML = thisfam;
opt.style.fontFamily = thisfam;
opt.onmouseover = function(){ $("#FontTester").style.style.fontFamily = this.value; }
}
}
}
Select.onchange = function(){
this.nextSibling.style.fontFamily = this.value;
MassEval.functions.checkModifiedOption(this, "styles");
}
Select.value = Input.value;
Select.name = "actual";
var Width = Input.clientWidth;
var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0);
Select.style.width = (Width+ MoreWidth)+"px";
Input.parentNode.insertBefore(Select, Input);
var FontTester = Input.parentNode.insertBefore(document.createElement("div"), Input);
FontTester.id = "FontTester";
FontTester.style.display = "none";
FontTester.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.";
Select.onfocus = function(){
this.nextSibling.style.fontFamily = Select.value;
$("#FontTester").fadeIn("fast");
};
Select.onblur = function(){ $("#FontTester").fadeOut("fast"); };
Input.parentNode.removeChild(Input);
},
setColorPickers : function(){
var UL = document.getElementById("OPTIONULstyles");
if(!UL) return;
var Lis = UL.getElementsByTagName('li');
var stylescount = 0;
for(var a=0,l=Lis.length;a<l;a++){
LI = Lis[a];
var DefaultInput = MassEval.functions.getFirstElementByName(LI, ["input"], "default");
var TextInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
if(!DefaultInput || !TextInput ) continue;
var defaultstyle = DefaultInput.value;
if(defaultstyle.indexOf("#")===0){
TextInput.title = MassEval.texts.ColorInput;
var colorpickerDiv = TextInput.parentNode.insertBefore(document.createElement('div'), TextInput.nextSibling);
colorpickerDiv.id = "Divcolorpicker"+stylescount;
colorpickerDiv.style.display = "none";
colorpickerDiv.className = "colorpickerDiv";
var colorpicker = colorpickerDiv.appendChild(document.createElement('div'));
colorpicker.id = "colorpicker"+stylescount;
colorpicker.className = "colorpicker";
TextInput.id = "Inputcolorpicker"+stylescount;
$(TextInput).addClass("Inputcolorpicker");
TextInput.parentNode.id = "Formcolorpicker"+stylescount;
TextInput.parentNode.onmouseout = function(){
var ColorpickerID = ("Divcolorpicker" + this.id.split("colorpicker")[1]);
$("#"+ColorpickerID).stop();
$("#"+ColorpickerID).fadeOut("fast");
MassEval.functions.checkModifiedOption(MassEval.functions.getFirstElementByName(this, ["input"], "actual"), "styles");
};
TextInput.parentNode.onmouseover = function(){
var ColorpickerID = ("Divcolorpicker" + this.id.split("colorpicker")[1]);
$("#"+ColorpickerID).stop();
$("#"+ColorpickerID).fadeIn("fast");
};
MassEval.params.ColorPickers[stylescount] = $('#colorpicker'+stylescount).farbtastic('#Inputcolorpicker'+stylescount);
stylescount++;
}
}
},
createBorderStyleSelectors : function(){
var UL = document.getElementById("OPTIONULstyles");
if(!UL) return;
var Lis = UL.getElementsByTagName('li');
var stylescount = 0;
for(var a=0,l=Lis.length;a<l;a++){
LI = Lis[a];
var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
MassEval.functions.createBorderStyleSelector(ActualInput);
}
},
createBorderStyleSelector : function(Input){
if(!Input || !Input.parentNode) return;
var possibles = MassEval.params.BorderStyles;
if(possibles.indexOf(Input.value)===-1) return;
var Select = document.createElement("select");
Select.name = Input.name;
for(var a=0,l=possibles.length;a<l;a++){
var thisstyle = possibles[a];
var opt = Select.appendChild(document.createElement('option'));
opt.value = thisstyle;
opt.innerHTML = thisstyle;
if(thisstyle === Input.value) opt.selected = "selected";
}
var Width = Input.clientWidth;
var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0);
Select.style.width = (Width+(MoreWidth ? MoreWidth : 0))+"px";
Select.onchange = function(){ MassEval.functions.checkModifiedOption(this, "styles"); };
Input.parentNode.insertBefore(Select, Input);
Input.parentNode.removeChild(Input);
},
},
createTextsUL : function(){
createTextsUL : function(){
var Div = document.createElement('div');
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.id = "texts";
Div.style.overflowY = "scroll";
Div.id = "OPTIONtexts";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
var UL = document.createElement('ul');
UL.id = "OPTIONULtexts";
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";
UL.className = "optionsUL";
Div.appendChild(UL);
Div.appendChild(UL);
var DEFAULTtexts = PortalEval.params.DEFAULTtexts;
var DEFAULTtexts = MassEval.params.DEFAULTtexts;
var ActualTexts = PortalEval.texts;
var ActualTexts = MassEval.texts;
var LIcount = 0;
for(var textname in DEFAULTtexts){
for(var textname in DEFAULTtexts){
LIcount++;
var modified = false;
var modified = false;
var defaulttext = DEFAULTtexts[textname];
var defaulttext = DEFAULTtexts[textname];
var rows = defaulttext.split("\n").length;
var actualtext = ActualTexts[textname];
var actualtext = ActualTexts[textname];
var LI = document.createElement('li');
var LI = UL.appendChild(document.createElement('li'));
$(LI).addClass("OptiontextsLI");
var HiddenName = PortalEval.functions.createInput({type:'hidden',name:"name",value:textname});
var labelText = MassEval.texts[("OPTION"+textname)];
LI.appendChild(HiddenName);
if(typeof(labelText)!=="undefined"){
var HiddenType = PortalEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaulttext)});
LI.appendChild(HiddenType);
var Label = LI.appendChild(document.createElement('label'));
Label.appendChild(document.createTextNode(labelText));
if(typeof(defaulttext)!="object"){
Label.setAttribute('for', textname);
if(actualtext !== defaulttext) modified = true;
}else{
var DefaultHidden = PortalEval.functions.createInput({type:'hidden',name:"default",value:defaulttext});
LI.appendChild(DefaultHidden);
var strippedtextname = textname.replace(/^OPTION/,"");
var text = MassEval.texts[strippedtextname];
var ActualInput = PortalEval.functions.createInput({type:'textarea',name:"actual",value:actualtext,
var style = MassEval.styles[strippedtextname];
title : (PortalEval.texts[("OPTION"+textname)] || PortalEval.texts[textname] || textname)});
var param = (MassEval.params.EditableParams.indexOf(strippedtextname) !==-1);
ActualInput.setAttribute('rows', 1);
var ROparam = MassEval.params[strippedtextname];
if(modified) ActualInput.style.color = 'red';
LI.appendChild(ActualInput);
if(typeof(text)!=="undefined"){
var Label = LI.appendChild(document.createElement('label'));
Label.appendChild(document.createTextNode(MassEval.texts.text));
Label.setAttribute('for', textname);
}else if(typeof(style)!=="undefined"){
var Label = LI.appendChild(document.createElement('label'));
Label.appendChild(document.createTextNode(MassEval.texts.style));
Label.setAttribute('for', textname);
}else if(param){
var Label = LI.appendChild(document.createElement('label'));
Label.appendChild(document.createTextNode(MassEval.texts.param));
Label.setAttribute('for', textname);
}else if(typeof(ROparam)!=="undefined"){
var Label = LI.appendChild(document.createElement('label'));
Label.appendChild(document.createTextNode(MassEval.texts.readonlyparam));
Label.setAttribute('for', textname);
}
}
var F = LI.appendChild(document.createElement("form"));
F.onsubmit = function(){ return false; }
var HiddenName = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:textname}));
var HiddenType = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaulttext)}));
if(actualtext !== defaulttext) modified = true;
var DefaultHidden = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaulttext}));;
var DefaultInput = F.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",
value:MassEval.texts.DefButtonText,title:MassEval.texts.DefButtonTitle.split("$1").join(defaulttext)}));
DefaultInput.onclick = function(){
MassEval.functions.razModifiedOption(this, "texts");
}
var ActualInput = F.appendChild(MassEval.functions.createInput({type:'textarea',name:"actual",value:actualtext,
title : (MassEval.texts[("OPTION"+textname)] || MassEval.texts[textname] || textname)}));
ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "texts"); };
ActualInput.setAttribute('rows', rows);
if(modified){
$(LI).addClass("modifiedoption");
Label.title = MassEval.texts.OptionModified;
}else{
DefaultInput.disabled = "disabled";
}
}
UL.appendChild(LI);
}
}
return Div;
return Div;
Line 1,090: Line 3,921:
createMoreParamsUL : function(){
createMoreParamsUL : function(){
var Div = document.createElement('div');
var Div = document.createElement('div');
Div.style.height = PortalEval.params.OptionsHeight + "px";
Div.id = "moreparams";
Div.style.overflowY = "scroll";
Div.id = "OPTIONmoreparams";
Div.className = "optionsDiv";
var UL = document.createElement('ul');
var UL = document.createElement('ul');
UL.id = "OPTIONULmoreparams";
UL.id = "OPTIONULmoreparams";
UL.style.marginRight = "1em";
UL.className = "optionsUL";
UL.className = "optionsUL";
Div.appendChild(UL);
Div.appendChild(UL);
var OptionsMoreParams = (PortalEval.params.OptionsMoreParams || "");
var OptionsMoreParams = (MassEval.params.OptionsMoreParams || "");
var MoreLI = document.createElement('li');
var MoreLI = document.createElement('li');
MoreLI.style.marginTop = "1em";
MoreLI.style.marginTop = "1em";
MoreLI.style.paddingBottom = "1em";
MoreLI.style.padding = "2px";
var TestZone = document.createElement('span');
MoreLI.style.paddingLeft = "2px";
var TestButton = MassEval.functions.createInput({type:"button",value:MassEval.texts.TestMoreParamsText,title:MassEval.texts.TestMoreParamsTip});
MoreLI.style.paddingRight = "2px";
TestButton.onclick = function(){ MassEval.functions.testMoreParamsCode(); };
var Textarea = PortalEval.functions.createInput({type:"textarea",name:'moreparams',value:OptionsMoreParams});
var TestResult = document.createElement('span');
Textarea.setAttribute('rows', PortalEval.params.MoreParamsRows);
TestResult.id = "MoreParamsTestResult";
TestZone.appendChild(TestButton);
TestZone.appendChild(TestResult);
var Textarea = MassEval.functions.createInput({type:"textarea",name:'moreparams',value:OptionsMoreParams,id:'moreparamsTextarea'});
Textarea.setAttribute('rows', MassEval.params.MoreParamsRows);
Textarea.style.resize = "vertical";
if(OptionsMoreParams){
if(OptionsMoreParams){
Textarea.style.color = "red";
Textarea.style.color = "red";
Textarea.title = PortalEval.texts.OptionModified;
Textarea.title = MassEval.texts.OptionModified;
}
}
MoreLI.appendChild(TestZone);
MoreLI.appendChild(Textarea);
MoreLI.appendChild(Textarea);
UL.appendChild(MoreLI);
UL.appendChild(MoreLI);
return Div;
return Div;
},
},
openOptionsForm : function(){
testMoreParamsCode : function(){
var TROptions = document.getElementById("PortalEvalOptionsTR");
var Textarea = document.getElementById("moreparamsTextarea");
var OptionsDiv = document.getElementById("PortalEvalOptionsFS");
var TestResultArea = document.getElementById("MoreParamsTestResult");
if(!Textarea || !TestResultArea ) return false;
var Code = Textarea.value;
if(!Code) return true;
try{
eval(Code);
TestResultArea.innerHTML = MassEval.texts.MoreParamsTestOK;
return false;
}catch(e){
TestResultArea.innerHTML = MassEval.texts.MoreParamsTestKO.split("$1").join("<span>" +e.message+ "</span>");
return e.message;
}
},
openOptionsForm : function(recreate){
var TROptions = document.getElementById("fieldsetOptionsContainer");
var OptionsDiv = document.getElementById("fieldsetOptions");
if(!TROptions || !OptionsDiv) return;
if(!TROptions || !OptionsDiv) return;
if(TROptions.style.display != "none"){
if(TROptions.style.display != "none" && !recreate){
TROptions.style.display = "none";
return MassEval.functions.closeOptionsForm();
while(OptionsDiv.firstChild){ OptionsDiv.removeChild(OptionsDiv.firstChild); }
}else{
}else{
if(recreate) while(OptionsDiv.firstChild){ OptionsDiv.removeChild(OptionsDiv.firstChild);}
var Legend = document.createElement('legend');
TROptions.style.display = "";
var OKInput = PortalEval.functions.createInput({type:'button',value:PortalEval.texts.OptionValidate,title:PortalEval.texts.OptionValidateTip});
if(!OptionsDiv.firstChild){
OKInput.onclick = function(){
var Legend = OptionsDiv.appendChild(document.createElement('legend'));
PortalEval.functions.updateOptions();
var OKInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.OptionValidate,title:MassEval.texts.OptionValidateTip,id:"SaveOptionsInput"}));
}
Legend.appendChild(OKInput);
OKInput.onclick = function(){
OptionsDiv.appendChild(Legend);
MassEval.functions.updateOptions();
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);
}
}
var subpagename = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
if(a>0) Input.style.marginLeft = "0.5em";
var SPTip = MassEval.texts.OptionSubPageTip.split("$page").join(subpagename);
if(ulcount !== 0) thisUL.style.display = "none";
var SPInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.OptionSubPageText,title:SPTip,id:"lastSPInput"}));
else Input.style.textDecoration = "underline";
P.appendChild(Input);
SPInput.onclick = function(){
var URL = mw.util.getUrl(subpagename,{'diff':'cur','oldid':'prev'});
ulcount++;
window.open(URL);
}
var RAZInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.GlobDefButtonText,id:"GlobalRAZoptionInput"}));
RAZInput.onclick = function(){
MassEval.functions.razModifiedOptionsInShownTab();
}
var P = OptionsDiv.appendChild(document.createElement('p'));
P.style.textAlign = "center";
var ULs = [
OptionsDiv.appendChild(MassEval.functions.createParamsUL()),
OptionsDiv.appendChild(MassEval.functions.createStylesUL()),
OptionsDiv.appendChild(MassEval.functions.createTextsUL()),
OptionsDiv.appendChild(MassEval.functions.createMoreParamsUL())
];
MassEval.functions.setInputToSelects();
MassEval.functions.setIconPreview();
MassEval.functions.setFontFamilySelector();
MassEval.functions.createBorderStyleSelectors();
MassEval.functions.setColorPickers();
MassEval.functions.createToggleButtons(P, ULs, "Options");
}
}
TROptions.style.display = "";
}
}
},
},
showThisUL : function(I){
closeOptionsForm : function(){
var TROptions = document.getElementById("fieldsetOptionsContainer");
if(TROptions){
if(MassEval.params.LaunchCondition !== 2) $(TROptions).slideUp("slow");
else TROptions.style.display = "none";
}
},
createToggleButtons : function(P, ULs, Type){
if(!P) return;
var RAZInput = document.getElementById("GlobalRAZoptionInput");
var ulcount = 0;
for(var a=0,l=ULs.length;a<l;a++){
var thisUL = ULs[a];
$(thisUL).addClass(Type+"Div");
var ID = thisUL.id;
var Input = MassEval.functions.createInput({type:'button',name:ID,value:(MassEval.texts[ID] || ID)});
Input.onclick = function(){
MassEval.functions.showThisUL(this, Type);
}
if(a>0) Input.style.marginLeft = "0.5em";
if(ulcount !== MassEval.params[("Displayed"+Type+"UL")]) thisUL.style.display = "none";
else{
Input.style.textDecoration = "underline";
if(RAZInput) RAZInput.title = MassEval.texts.GlobDefButtonTitle.split("$1").join(Input.value);
}
P.appendChild(Input);
ulcount++;
}
},
showThisUL : function(I, Type){
var P = I.parentNode;
var P = I.parentNode;
var F = document.getElementById("PortalEvalOptionsFS");
var F = document.getElementById("fieldset"+Type);
if(!P || !F) return;
if(!P || !F) return;
var ELID = I.name;
var ELID = I.name;
Line 1,162: Line 4,044:
for(var a=0,l=ELs.length;a<l;a++){
for(var a=0,l=ELs.length;a<l;a++){
var thisEL = ELs[a];
var thisEL = ELs[a];
if(!$(thisEL).hasClass("optionsDiv") || !thisEL.id) continue;
if(!$(thisEL).hasClass(Type+"Div") || !thisEL.id) continue;
if(thisEL.id == ELID) thisEL.style.display = "";
if(thisEL.id == ELID){
thisEL.style.display = "";
}
else thisEL.style.display = "none";
else thisEL.style.display = "none";
}
}
var RAZInput = document.getElementById("GlobalRAZoptionInput");
var Inputs = P.getElementsByTagName('input');
var Inputs = P.getElementsByTagName('input');
for(var a=0,l=Inputs.length;a<l;a++){
for(var a=0,l=Inputs.length;a<l;a++){
var Input = Inputs[a];
var Input = Inputs[a];
if(I == Input) Input.style.textDecoration = "underline";
if(I == Input){
Input.style.textDecoration = "underline";
else Input.style.textDecoration = "";
MassEval.params[("Displayed"+Type+"UL")] = a;
if(RAZInput && Type === "Options") RAZInput.title = MassEval.texts.GlobDefButtonTitle.split("$1").join(I.value);
}else Input.style.textDecoration = "";
}
}
},
},
createCategorySelect : function(InputText){
checkModifiedOption : function(actualnode, type){
if(!type) type = "params";
var CategorySelect = document.createElement('select');
CategorySelect.id = "PortalEval_CatSelect";
var LI = actualnode.parentNode;
var defaultN = MassEval.functions.getFirstElementByName(LI, ["input"], "defaultB");
CategorySelect.style.display = "none";
var nameP = MassEval.functions.getFirstElementByName(LI, ["input"], "name").value;
InputText.parentNode.insertBefore(CategorySelect, InputText.nextSibling);
var Cat = InputText.value;
var typeP = MassEval.functions.getFirstElementByName(LI, ["input"], "type").value;
var newvalue = actualnode.value;
if(Cat !== "") PortalEval.functions.getSelectedPrefixCats(Cat);
if(typeP=="number") newvalue = parseInt(newvalue);
if(typeP=="boolean") newvalue = actualnode.checked;
var defparam = MassEval.params[("DEFAULT"+type)][nameP];
if(defparam === newvalue) defaultN.disabled = "disabled";
else{
defaultN.disabled = false;
}
var Msg = MassEval.functions.checkThatModifiedOption(LI, actualnode, newvalue);
if(Msg) MassEval.functions.alertControl("issue_"+nameP, Msg, "Warning");
else MassEval.functions.alertControl("issue_"+nameP);
},
},
setCategorySelectPosition : function(){
checkThatModifiedOption : function(LI, actualnode, newvalue){
if($(actualnode).hasClass("SizeUnit")){
var InputText = document.getElementById("PortalEval_Cat");
var goodunit = false;
var CategorySelect = document.getElementById("PortalEval_CatSelect");
var Options = CategorySelect.getElementsByTagName('option');
var SizeUnits = MassEval.params.SizeUnits;
var reg1 = newvalue.match(new RegExp("^[0-9]*\\.?[0-9]+("+SizeUnits.join("|")+")$"));
var Taille = PortalEval.params.CategorySelectSize;
var reg2 = newvalue.match(new RegExp("\\.+[0-9]*\\.+"));
if(reg1 !==null && reg2 === null) LI.parentNode.removeAttribute("style");
else{
LI.parentNode.style.border = "1px solid red";
return MassEval.texts.AlertMsgSizeUnit.split("$units").join(SizeUnits.join(", "));
}
}else if($(actualnode).hasClass("Inputcolorpicker") ){
var l = newvalue.length;
var reg1 = newvalue.match(new RegExp("#[0-9a-fA-F]{6}"));
var reg2 = newvalue.match(new RegExp("#[0-9a-fA-F]{3}"));
if((l==7 && reg1 !==null) || (reg2!==null && l==4)) LI.parentNode.removeAttribute("style");
else{
LI.parentNode.style.border = "1px solid red";
return MassEval.texts.AlertMsgColorInput;
}
}
return false;
},
razModifiedOption : function(defaultbutton, type, global){
var Parent = defaultbutton.parentNode;
var defaultP = MassEval.functions.getFirstElementByName(Parent, ["input"], "default").value;
var nameP = MassEval.functions.getFirstElementByName(Parent, ["input"], "name").value;
var typeP = MassEval.functions.getFirstElementByName(Parent, ["input"], "type").value;
var actualT = MassEval.functions.getFirstElementByName(Parent, ["input","select","textarea"], "actual");
if(typeP == "boolean"){
actualT.checked = (defaultP === "true" ? "checked" : false );
}else{
actualT.value = defaultP;
if($(actualT).hasClass("Inputcolorpicker")){
var index = actualT.id.split("colorpicker")[1];
$.farbtastic(MassEval.params.ColorPickers[index]).setColor(defaultP);
}
}
if(!global) actualT.focus();
MassEval.functions.checkModifiedOption(actualT, type);
},
razModifiedOptionsInShownTab : function(){
var FS = document.getElementById("fieldsetOptions");
if(!FS) return;
var ULs = FS.getElementsByTagName("ul");
for(var a=0,l=ULs.length;a<l;a++){
var ul = ULs[a];
if(!$(ul).hasClass("optionsUL") || !ul.id || ul.id.indexOf("OPTIONUL")===-1) continue;
if(ul.parentNode.style.display == "none") continue;
var type = ul.id.split("OPTIONUL").join("");
if(type==="Moreparamas"){
var MoreparamsTextarea = ul.getElementsByTagName('textarea')[0];
if(MoreparamsTextarea) MoreparamsTextarea.value = "";
}else{
var LIs = ul.getElementsByTagName('li');
for(var b=0,m=LIs.length;b<m;b++){
var li = LIs[b];
var defaultbutton = MassEval.functions.getFirstElementByName(li, ["input"], "defaultB");
if(defaultbutton) MassEval.functions.razModifiedOption(defaultbutton, type, true);
}
}
}
},
// ------------------------------- Fonctions pour les suggestions -------------------------------
newAnalysisID : function(suggestcount){
var id = MassEval.functions.generateID();
MassEval.params.SuggestRunning[id] = [];
for(var a=0,l=suggestcount;a<l;a++){
MassEval.params.SuggestRunning[id].push(true);
}
return id;
},
checkAnalysisID : function(id, endrequest){
var Suggest = MassEval.params.SuggestRunning[id];
if(!Suggest) return true;
MassEval.params.SuggestRunning[id][endrequest] = true;
for(var a=0,l=Suggest.length;a<l;a++){
if(Suggest[a] === false) return false;
}
return true;
},
createSuggestSelect : function(InputText){
var Form = document.createElement('form');
Form.onsubmit = function(){ return false; };
Form.id = InputText.id + "Form";
$(Form).addClass("SuggestForm");
var SuggestSelect = Form.appendChild(document.createElement('select'));
SuggestSelect.id = InputText.id + "Select";
SuggestSelect.style.display = "none";
SuggestSelect.style.zIndex = 5;
Form.appendChild(InputText);
return Form;
},
updateSuggestionElements : function(titles, OldInputValue, InputID){
var Input = document.getElementById(InputID);
var Select = document.getElementById(InputID+"Select");
if(titles.length == 0){
return Select.style.display = "none";
}
while(Select.firstChild){ Select.removeChild(Select.firstChild); }
for(var a=0,l=titles.length;a<l;a++){
var title = titles[a];
var option = Select.insertBefore(document.createElement('option'), Select.firstChild);
option.value = title;
option.innerHTML = title;
option.onclick = function(){
MassEval.functions.onSelectClick(this, InputID);
}
if(a == 0) option.selected = "selected";
}
Select.style.display = "";
if(titles.length>MassEval.params.SuggestSelectSize){
var opt = Select.firstChild;
try{ $(Select).scrollTop((opt.offsetHeight * titles.length)); }catch(e){ }
}
var suggestion = titles[0];
/*
if(suggestion.indexOf(OldInputValue) === 0 && OldInputValue!==suggestion){
var text = Input.value;
Input.value = suggestion;
if(Input.createTextRange){
var ra = Input.createTextRange();
ra.moveStart("character", text.length);
ra.moveEnd("character", suggestion.length);
ra.select();
}else if(Input.setSelectionRange){
Input.setSelectionRange(text.length, suggestion.length);
}else{
Input.selectionStart = text.length;
Input.selectionEnd = suggestion.length;
}
}
*/
if(titles.length == 1 && OldInputValue!==suggestion) MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
if(titles.length == 1) Select.style.display = "none";
if(OldInputValue == suggestion) Select.style.display = "none";
MassEval.functions.setSuggestSelectPosition(InputID);
},
setSuggestSelectPosition : function(InputID){
var Input = document.getElementById(InputID);
var Select = document.getElementById(InputID+"Select");
var Options = Select.getElementsByTagName('option');
var Taille = MassEval.params.SuggestSelectSize;
if(Options.length < Taille) Taille = Options.length;
if(Options.length < Taille) Taille = Options.length;
var H = (Taille * 20);
var H = (Taille * 21);
CategorySelect.size = Taille;
Select.size = Taille;
CategorySelect.style.align = "left";
Select.style.height = H + "px" ;
CategorySelect.style.Zindex = 5;
Select.style.marginTop = "-" + H + "px" ;
Select.style.marginRight = "-" + ( $(Input.parentNode).width() - $(Input).width() ) + "px" ;
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){
onSelectClick : function(option, InputID){
var NewCat = option.value;
var NewValue = option.value;
var CatInput = document.getElementById("PortalEval_Cat");
var Input = document.getElementById(InputID);
CatInput.value = NewCat;
Input.value = NewValue;
option.parentNode.style.display = "none";
option.parentNode.style.display = "none";
Input.focus();
PortalEval.functions.getSelectedPrefixCats(NewCat);
PortalEval.functions.getSelectedCatInfos(NewCat);
MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
PortalEval.functions.getSelectedCatParents(NewCat);
PortalEval.functions.getSelectedCatDaughters(NewCat);
CatInput.focus();
},
},
// ------------------------------- Fonctions pour le tableau dans [[Special:MassEval]] -------------------------------
checkSelectedCat : function(){
prepareSpecialpage : function(){
var CatInput = document.getElementById("PortalEval_Cat");
var Title = document.getElementsByTagName('title')[0];
var TitleH = document.getElementById('firstHeading');
if(!TitleH) TitleH = document.getElementById('section_0');
if(!TitleH) TitleH = document.getElementsByTagName('h1')[0];
var Content = document.getElementById('mw-content-text');
if(!Title || !TitleH || !Content) return;
$(document.body).removeClass("mw-invalidspecialpage");
Title.innerHTML = MassEval.texts.SpecialpageNameH.split("$1").join(MassEval.texts.SpecialpageName);
TitleH.innerHTML = MassEval.texts.SpecialpageName;
while(Content.firstChild){ Content.removeChild(Content.firstChild); }
var Datas = {
mode : "cat",
title : false
};
var wgTitle = mw.config.get("wgTitle");
if(wgTitle.indexOf(MassEval.params.SpecialpageName+"/")!=-1){
var params = wgTitle.split(MassEval.params.SpecialpageName+"/")[1];
var mode = params.match(new RegExp("^mode=[^\/]*"));
if(mode !== null){
var thismode = mode[0].split("mode=").join("");
var AllModes = Object.keys(MassEval.params.ModesMap);
if(AllModes.indexOf(thismode)!==-1) Datas.mode = thismode;
Datas.title = MassEval.functions.getMainPage(params.replace(mode[0], "").replace(/^\//, ""));
}else{
Datas.title = MassEval.functions.getMainPage(params);
}
}
MassEval.params.CurrentMode = Datas.mode;
MassEval.functions.createSpecialpageBoard(Content, Datas);
},
updateContentSub : function(selection, NS){
var contentSub = document.getElementById("contentSub");
if(!contentSub) return;
contentSub.style.marginBottom = 0;
var template = MassEval.texts.contentSubTemplate; // "← $1"
var Mode = MassEval.params.CurrentMode;
var link = false;
if(selection){
if(Mode == "page"){
var title = selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "cat"){
var title = mw.config.get('wgFormattedNamespaces')[14]+":"+selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "links"){
var title = NS + (NS === "" ? "" : ":") +selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "linkshere"){
var title = "Special:Whatlinkshere/"+NS + (NS === "" ? "" : ":") +selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "template"){
var title = mw.config.get('wgFormattedNamespaces')[10]+":"+selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "newpages"){
var title = "Special:Newpages";
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}else if(Mode == "creations"){
var title = mw.config.get('wgFormattedNamespaces')[2]+":"+selection;
link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
}
}
if(link){
contentSub.style.visibility = "visible";
contentSub.innerHTML = template.split("$1").join(link);
}else{
contentSub.style.visibility = "hidden";
contentSub.innerHTML = template;
}
},
createSpecialpageBoard : function(contentNode, Datas){
$(document.body).addClass('MultiplePagesAnalysis');
var MassEvalBoard = document.createElement('div');
MassEvalBoard.id = "MassEvalBoard";
contentNode.appendChild(MassEvalBoard);
if(MassEval.params.AddWarning){
var Caption = MassEvalBoard.appendChild(document.createElement("p"));
$(Caption).addClass("error");
Caption.style.textAlign = "center";
Caption.innerHTML = MassEval.texts.Warning;
}
var MainContainer = MassEvalBoard.appendChild(document.createElement('div'));
MainContainer.id = "MassEvalBoardHead";
$(MainContainer).addClass("FieldsetContent");
MassEvalBoard.appendChild(MassEval.functions.createBoardListDiv());
var EvalFieldset = MainContainer.appendChild(MassEval.functions.createEvalFieldset()); // Thème d'évaluation
MassEval.functions.setEvalTableSizes();
var ModesFieldset = MainContainer.appendChild(MassEval.functions.createModesFieldset(Datas.mode)); // Sélecteur de modes
var ModesContainer = ModesFieldset.firstChild.nextSibling.appendChild(document.createElement('div'));
var PageFieldset = ModesContainer.appendChild(MassEval.functions.createPageFieldset(Datas.title)); // Mode Page
var CategoryFieldset = ModesContainer.appendChild(MassEval.functions.createCategoryFieldset(Datas.title)); // Mode Catégorie
var LinksFieldset = ModesContainer.appendChild(MassEval.functions.createLinksFieldset(Datas.title)); // Mode Links
var LinkshereFieldset = ModesContainer.appendChild(MassEval.functions.createLinkshereFieldset(Datas.title)); // Mode Linkshere
var TemplateFieldset = ModesContainer.appendChild(MassEval.functions.createTemplateFieldset(Datas.title)); // Mode Template
var NewpagesFieldset = ModesContainer.appendChild(MassEval.functions.createNewpagesFieldset()); // Mode Newpages
var CreationsFieldset = ModesContainer.appendChild(MassEval.functions.createCreationsFieldset(Datas.title)); // Mode Creations
var PrefixesFieldset = ModesContainer.appendChild(MassEval.functions.createPrefixesFieldset(Datas.title)); // Mode Prefixes
var ActionFieldset = MainContainer.appendChild(MassEval.functions.createFilterFieldset()); // Filtrage
MassEval.functions.setFromSelectorAnchor();
MassEval.functions.setToSelectorAnchor();
MassEval.functions.setMoveSelectorAnchor();
MassEval.functions.setFromToSelectorValues();
var ActionFieldset = MainContainer.appendChild(MassEval.functions.createActionFieldset()); // Actions
var OptionsInput = document.getElementById("GlobalOptionsInput"); // Options
var OptionDiv = document.createElement('div');
OptionDiv.style.display = "none";
OptionDiv.id = "fieldsetOptionsContainer";
var OptionFS = document.createElement('fieldset');
OptionFS.id = "fieldsetOptions";
$(OptionFS).addClass("NoShowHideLinks");
OptionDiv.appendChild(OptionFS);
MassEval.functions.addOptionLinkInSpecialpage();
if(MassEval.params.SpecialOptionLinkOK){
MassEvalBoard.appendChild(OptionDiv);
OptionsInput.style.display = "none";
OptionDiv.style.display = "none";
}else{
OptionsInput.parentNode.appendChild(OptionDiv);
}
var DatasDiv = MassEvalBoard.appendChild(document.createElement('div')); // Données
DatasDiv.style.display = "none";
DatasDiv.id = "fieldsetDatasContainer";
var DatasFS = DatasDiv.appendChild(document.createElement('fieldset'));
DatasFS.id = "fieldsetDatas";
$(DatasFS).addClass("NoShowHideLinks");

var CatInput = document.getElementById("CatInput"); // Largeurs
var InputWidth = CatInput.clientWidth+"px";
var SelectWidth = (CatInput.clientWidth + MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))])+"px";
var TDWidth = (CatInput.clientWidth+10) +"px";
var IDs = [
"EvalThemeTD","EvalThemeInput","PortalInput",
"TDPage","PageInput",
"TDCat","CatInput",
"TDLinks","LinksInput","LinksInputNS",
"TDLinkshere","LinkshereInput","LinkshereInputNS",
"TDTemplate","TemplateInput",
"TDNewpages",
"TDUser","UserInput",
"TDPrefixes","PrefixInput",
];
for(var a=0,l=IDs.length;a<l;a++){
var id = IDs[a];
var N = document.getElementById(id);
if(!N || !N.tagName) continue;
var T = N.tagName.toLowerCase();
if(T === "input") N.style.width = InputWidth;
if(T === "select") N.style.width = SelectWidth;
if(T === "td"){
N.style.width = TDWidth;
$(N).addClass("TDSelector");
}
}
$("#EvalThemeTD").width(($("#EvalThemeTD").width()+8));
MassEval.functions.setSynchronizedResizeV([ // ----------- Hauteurs
"PageInputInfo",
"CatParentsDiv",
"CatDaughtersDiv",
"LinksInputInfo",
"LinkshereInputInfo",
"TemplateInputInfo",
"TemplateDoc",
"NewpagesInputInfo",
"UserInputInfo"
], 50);
MassEval.functions.displayNodes(["SPInput"], false);
MassEval.functions.createShowHideLinks(MassEvalBoard);
MassEval.params.CatSubPageCountOK = true;
MassEval.functions.getAPIUserInfos();
MassEval.functions.getRelevantModeFieldset(Datas.mode);
MassEval.functions.getEvalThemes();
MassEval.functions.getStubThemes();
MassEval.functions.getUserSubPage();
MassEval.functions.getBeforeStubTemplates();
MassEval.functions.getPortalList();
},
createShowHideLinks : function(Parent){
if(!Parent) return;
var Fieldsets = Parent.getElementsByTagName('fieldset');
for(var a=0,l=Fieldsets.length;a<l;a++){
var Fieldset = Fieldsets[a];
if($(Fieldset).hasClass("NoShowHideLinks")) continue;
var Legend = Fieldset.getElementsByTagName('legend')[0];
if(!Legend) continue;
var showhidelink = Legend.appendChild(MassEval.functions.createLink(null,{text:MassEval.texts.Hide,title:MassEval.texts.HideTip,href:"javascript:;"}));
$(showhidelink).addClass("showhideConfigForm");
showhidelink.onclick = function(){
MassEval.functions.clickShowHideLinks(this);
}
}
},
clickShowHideLinks : function(link){
var legend = link.parentNode;
var fieldset = legend.parentNode;
var nodes = [];
var Node = legend.nextSibling;
while(Node){
if(!Node.tagName || (Node.tagName && Node.tagName.toLowerCase() != 'legend')) nodes.push(Node);
Node = Node.nextSibling;
if(!Node) break;
}
if(link.title == MassEval.texts.HideTip){
for(var n=0,nlen=nodes.length;n<nlen;n++){ $(nodes[n]).slideUp(); }
link.innerHTML = MassEval.texts.Show;
link.title = MassEval.texts.ShowTip;
}else{
for(var n=0,nlen=nodes.length;n<nlen;n++){ $(nodes[n]).slideDown() }
link.innerHTML = MassEval.texts.Hide;
link.title = MassEval.texts.HideTip;
}
},
// ------------------------------- Fonctions pour le tableau dans les articles, pages de discussion et sous-pages utilisateur -------------------------------
createPageBoard : function(){
var LaunchCondition = MassEval.params.LaunchCondition;
var target = document.getElementById("mw-content-text");
if(!target) return;
var board = document.getElementById("MassEvalBoard");
if(board){
if(board.style.display == "none"){
$(board).slideDown("slow");
}else{
$(board).slideUp("slow");
}
return
}
$(document.body).addClass('SinglePageAnalysis');
board = document.createElement("div");
board.id = "MassEvalBoard";
target.insertBefore(board, target.firstChild);
var boardHead = board.appendChild(document.createElement("div"));
boardHead.id = "MassEvalBoardHead";
var CloseButton = boardHead.appendChild(document.createElement("a"));
CloseButton.id = "CloseButton";
CloseButton.href = "javascript:MassEval.functions.createPageBoard()";
CloseButton.title = MassEval.texts.GoCloseTitle;
var CloseButtonImage = CloseButton.appendChild(document.createElement("img"));
CloseButtonImage.src = MassEval.params.ImageURL + MassEval.params.CloseIcon;
$(CloseButtonImage).addClass("ButtonImage MainCloseIcon");
CloseButtonImage.id = "CloseButtonImage";
if(MassEval.params.AddWarning){
var Caption = boardHead.appendChild(document.createElement("p"));
$(Caption).addClass("error");
Caption.innerHTML = MassEval.texts.Warning;
}
var MainOptions = boardHead.appendChild(document.createElement("div"));
MainOptions.id = "MassEvalMainOptionsFS";
var StandardMainOptions = MainOptions.appendChild(document.createElement("div"));
StandardMainOptions.appendChild(MassEval.functions.createEvalFieldset());
StandardMainOptions.appendChild(MassEval.functions.createActionFieldset());
board.appendChild(MassEval.functions.createBoardListDiv());
var VerifInput = document.getElementById('GlobalVerifInput');
VerifInput.title = MassEval.texts.GoVerifOne;
VerifInput.onclick = function(){
if(LaunchCondition === 4) MassEval.functions.getThesePagesStatus([mw.config.get('wgTitle')]);
if(LaunchCondition === 5) MassEval.functions.getThesePagesStatus([mw.config.get('wgPageName').split("_").join(" ")]);
}
MassEval.functions.displayNodes(["EmergencyStop","LinksActions","GlobalOptionsInput","MassEval_TH6"], false);
MassEval.params.CatSubPageCountOK = true;
MassEval.params.UserInfosOK = true;
MassEval.functions.getEvalThemes();
MassEval.functions.getStubThemes();
MassEval.functions.getUserSubPage();
MassEval.functions.getBeforeStubTemplates();
MassEval.functions.getPortalList();
},

// ------------------------------- Formulaire "Thème d'évaluation" -------------------------------
createEvalFieldset : function(){
var LaunchCond = MassEval.params.LaunchCondition;
var EvalFieldset = document.createElement('fieldset');
EvalFieldset.id = "fieldsetEval";
var PortalLabel = document.createElement('legend');
PortalLabel.innerHTML = MassEval.texts.EvalTheme;
EvalFieldset.appendChild(PortalLabel);
var EvalContainer = document.createElement('div');
$(EvalContainer).addClass("FieldsetContent");
if(LaunchCond === 2) EvalFieldset.appendChild(EvalContainer);
var MainEvalTable = EvalContainer.appendChild(document.createElement('table'));
MainEvalTable.style.width = "100%";
MainEvalTable.style.marginTop = "-1em";
var EvalTR = MainEvalTable.appendChild(document.createElement('tr'));
var EvalSelectTD = EvalTR.appendChild(document.createElement('td'));
EvalSelectTD.setAttribute("rowspan", 2);
EvalSelectTD.id = "EvalThemeTD";
var EvalTableTD = EvalTR.appendChild(document.createElement('td'));
var EvalTable = EvalTableTD.appendChild(MassEval.functions.createEvalTable());
var evalinputFS = EvalSelectTD.appendChild(document.createElement('fieldset'));
evalinputFS.id = "EvalThemeInputfieldset";
$(evalinputFS).addClass("NoBorderFieldset NoShowHideLinks")
var evalinputL = evalinputFS.appendChild(document.createElement('legend'));
evalinputL.innerHTML = MassEval.texts.EvalTheme;
var EvalThemeSelect = document.createElement('select');
EvalThemeSelect.id = "EvalThemeInput";
EvalThemeSelect.name = "EvalThemeInput";
$(EvalThemeSelect).addClass("EvalThemeSelect");
EvalThemeSelect.onchange = function(){
if(MassEval.params.LaunchCondition === 2) MassEval.functions.updateEvalTable(this.value);
MassEval.functions.updatePortalSelect();
}
EvalThemeSelect.title = MassEval.texts.EvalTheme;
if(LaunchCond !== 2){
EvalFieldset.appendChild(EvalThemeSelect);
}else{
evalinputFS.appendChild(EvalThemeSelect);
}
var portalinputFS = EvalSelectTD.appendChild(document.createElement('fieldset'));
portalinputFS.id = "PortalInputfieldset";
$(portalinputFS).addClass("NoBorderFieldset NoShowHideLinks")
var portalinputL = portalinputFS.appendChild(document.createElement('legend'));
portalinputL.innerHTML = MassEval.texts.Portal;
var PortalSelect = EvalFieldset.appendChild(MassEval.functions.createPortalSelect());
if(LaunchCond !== 2){
EvalFieldset.appendChild(PortalSelect);
}else{
portalinputFS.style.margin = "1em 0";
portalinputFS.appendChild(PortalSelect);
}
MassEval.functions.disableThings([ EvalThemeSelect ], true );
return EvalFieldset;
},
createEvalTable : function(){
var IMP = MassEval.params.Importance;
var AVT = MassEval.params.Avancement;
var EvalTable = document.createElement('table');
EvalTable.id = "EvalTable";
var TRAVT = EvalTable.appendChild(document.createElement('tr'));
var TDupdate = TRAVT.appendChild(document.createElement('td'));
TDupdate.id = "EvalTableUpdateTD";
TDupdate.style.paddingLeft = "3px";
TDupdate.style.textAlign = "center";
TDupdate.setAttribute('rowspan', 3);
var updateButton = TDupdate.appendChild( MassEval.functions.createInput({type:'button',value:MassEval.texts.UpdateTableEvalText,title:MassEval.texts.UpdateTableEvalTip,id:"EvalTable_update"}));
updateButton.onclick = function(){
var EvalThemeSelect = document.getElementById("EvalThemeInput");
var Theme = EvalThemeSelect.value;
if(!Theme) return;
MassEval.functions.updateEvalTable(Theme);
}
var TDAVT = TRAVT.appendChild(document.createElement('td'));
var TRIMP = EvalTable.appendChild(document.createElement('tr'));
var TDIMP = TRIMP.appendChild(document.createElement('td'));
var AVTTable = TDAVT.appendChild(document.createElement('table'));
AVTTable.id = "EvalTable_AVT";
AVTTable.style.width = "100%";
var AVTCaption = AVTTable.appendChild(document.createElement('caption'));
AVTCaption.innerHTML = MassEval.texts.AVT;
var TRAVT1 = AVTTable.appendChild(document.createElement('tr'));
var TRAVT2 = AVTTable.appendChild(document.createElement('tr'));
for(var a=0,l=AVT.length;a<l;a++){
var AVTa = AVT[a];
var TH = TRAVT1.appendChild(document.createElement('th'));
if(a==0) $(TH).addClass("EvalTableFirstTH");
var icon = "";
if(AVTa.icon) icon = '<img alt="'+AVTa.wiki+'" src="'+AVTa.icon+'" class="EvalTableIcon" /> ';
TH.innerHTML = icon + AVTa.text;
TH.style.whiteSpace = "nowrap";
TH.style.backgroundColor = AVTa.color;
if(AVTa.textcolor) TH.style.color = AVTa.textcolor;
var TD = TRAVT2.appendChild(document.createElement('td'));
TD.style.textAlign = "center";
TD.id = "EvalTable_AVT"+a;
}
var TotAVTTH = TRAVT1.appendChild(document.createElement('th'));
$(TotAVTTH).addClass("EvalTableLastTH");
TotAVTTH.innerHTML = MassEval.texts.TableEvalTotal;
var TotAVTTD = TRAVT2.appendChild(document.createElement('td'));
TotAVTTD.style.textAlign = "center";
TotAVTTD.style.fontWeight = "bold";
TotAVTTD.id = "EvalTable_AVTtotal";
var IMPTable = TDIMP.appendChild(document.createElement('table'));
IMPTable.id = "EvalTable_IMP";
IMPTable.style.width = "100%";
var IMPCaption = IMPTable.appendChild(document.createElement('caption'));
IMPCaption.innerHTML = MassEval.texts.IMP;
var TRIMP1 = IMPTable.appendChild(document.createElement('tr'));
var TRIMP2 = IMPTable.appendChild(document.createElement('tr'));
for(var a=0,l=IMP.length;a<l;a++){
var IMPa = IMP[a];
var TH = TRIMP1.appendChild(document.createElement('th'));
if(a==0) $(TH).addClass("EvalTableFirstTH");
TH.innerHTML = IMPa.text;
TH.style.whiteSpace = "nowrap";
TH.style.backgroundColor = IMPa.color;
if(IMPa.textcolor) TH.style.color = IMPa.textcolor;
var TD = TRIMP2.appendChild(document.createElement('td'));
TD.style.textAlign = "center";
TD.id = "EvalTable_IMP"+a;
}
var TotIMPTH = TRIMP1.appendChild(document.createElement('th'));
$(TotIMPTH).addClass("EvalTableLastTH");
TotIMPTH.innerHTML = MassEval.texts.TableEvalTotal;
var TotIMPTD = TRIMP2.appendChild(document.createElement('td'));
TotIMPTD.style.textAlign = "center";
TotIMPTD.style.fontWeight = "bold";
TotIMPTD.id = "EvalTable_IMPtotal";
var EvalCatsTR = EvalTable.appendChild(document.createElement('tr'));
var EvalCatsTD = EvalCatsTR.appendChild(document.createElement('td'));
EvalCatsTD.id = "ThemeCatsTD";
var ThemeCats = EvalCatsTD.appendChild(document.createElement('table'));
ThemeCats.id = "ThemeCats";
ThemeCats.style.width = "100%";
var ThemeCatsCaption = ThemeCats.appendChild(document.createElement('caption'));
ThemeCatsCaption.innerHTML = MassEval.texts.ThemeCats;
var ThemeCatsTR = ThemeCats.appendChild(document.createElement('tr'));
var CatAllpages = ThemeCatsTR.appendChild(document.createElement('td'));
CatAllpages.id = "CatAllpages";
CatAllpages.style.visibility = "hidden";
var CatStubpages = ThemeCatsTR.appendChild(document.createElement('td'));
CatStubpages.id = "CatStubpages";
CatStubpages.style.visibility = "hidden";
var CatMaincat = ThemeCatsTR.appendChild(document.createElement('td'));
CatMaincat.id = "CatMaincat";
CatMaincat.style.visibility = "hidden";
return EvalTable;
},
setEvalTableSizes : function(){
var EvalTableIMP = document.getElementById("EvalTable_IMP");
var EvalTableAVT = document.getElementById("EvalTable_AVT");
var TableCats = document.getElementById("ThemeCats");
var TDIMP = EvalTableIMP.getElementsByTagName('td');
var TDAVT = EvalTableAVT.getElementsByTagName('td');
var TDCAT = TableCats.getElementsByTagName('td');
var SetSize = function(TDs){
var maxsize = 10;
for(var a=0,l=TDs.length;a<l;a++){
var width = TDs[a].clientWidth;
if(width > maxsize) maxsize = width;
}
for(var a=0,l=TDs.length;a<l;a++){
TDs[a].width = maxsize+"px";
TDs[a].style.height = "1.5em";
}
}
SetSize(TDIMP);
SetSize(TDAVT);
SetSize(TDCAT);
},
clearEvalTable : function(){
var TableAVT = document.getElementById('EvalTable_AVT');
var TableIMP = document.getElementById('EvalTable_IMP');
if(TableAVT){
var TDs = TableAVT.getElementsByTagName('td');
for(var a=0,l=TDs.length;a<l;a++){
TDs[a].innerHTML = "";
}
}
if(TableIMP){
var TDs = TableIMP.getElementsByTagName('td');
for(var a=0,l=TDs.length;a<l;a++){
TDs[a].innerHTML = "";
}
}
},
updateEvalTable : function(EvalTheme){
if(!EvalTheme) return;
MassEval.params.EvalTableRequests = 0;
var Table = document.getElementById('EvalTable');
if(!Table) return;
MassEval.functions.clearEvalTable();
MassEval.functions.disableThings([ "EvalTable_update" ], true);
MassEval.functions.alertControl("updateevaltable", MassEval.texts.AlertMsgEvals.split("$theme").join(EvalTheme), "Running");
MassEval.functions.updateCatAllpages(EvalTheme);
MassEval.functions.updateCatStubpages(EvalTheme);
MassEval.functions.updateCatMaincat(EvalTheme);
var catprefix = MassEval.params.EvalThemesCat[EvalTheme];
if(!catprefix) return MassEval.functions.updateEvalTable2(EvalTheme);
console.info("updateEvalTable : Requête 1 - thème="+EvalTheme+' - catprefix="'+catprefix+'"');
MassEval.params.EvalTableRequests++
MassEval.functions.getAPIAllcategories({
gacprefix : catprefix,
theme : EvalTheme,
callback : function(R){
MassEval.params.EvalTableRequests--
var result = R.result;
var CatList = Object.keys(result);
if(CatList.length === 0) return MassEval.functions.checkCatinfosEvalTable();
var EvalCatsMatches = MassEval.params.EvalCatsMatches;
var allcats = {};
for(var a=0,l=CatList.length;a<l;a++){
var catinfo = result[CatList[a]];
if(catinfo.missing==="") continue;
var thiscattitle = catinfo.title;
for(var Match in EvalCatsMatches){
var thismatch = Match;
if(thiscattitle.indexOf(thismatch)!==-1){
var params = EvalCatsMatches[thismatch];
var Type = MassEval.params[(params.param)];
var ID = params.id;
for(var v=0,vlen=Type.length;v<vlen;v++){
var typeindex = v
var thistype = Type[v];
var wiki = thistype.wiki;
if(wiki==="?") wiki = MassEval.functions.lcFirst(thistype.text);
if((thiscattitle+"|").indexOf((thismatch+" "+wiki+"|"))!==-1){
allcats[thiscattitle] = {
cattitle : thiscattitle,
type : Type,
typeindex : typeindex,
idnode : ID
}
}
}
}
}
}
var catlengths = Object.keys(allcats);
if(catlengths.length == 0) return MassEval.functions.checkCatinfosEvalTable();
var totalIMP = document.getElementById("EvalTable_IMPtotal");
if(totalIMP) totalIMP.innerHTML = "";
var totalAVT = document.getElementById("EvalTable_AVTtotal");
if(totalAVT) totalAVT.innerHTML = "";
for(var cat in allcats){
MassEval.functions.setCatinfosEvalTable(allcats[cat]);
}
}
});
},
updateEvalTable2 : function(EvalTheme){
console.info("updateEvalTable : Requête 2 - thème="+EvalTheme);
MassEval.params.EvalTableRequests++
MassEval.functions.getAPIAllcategories({
gacprefix : MassEval.params.EvalCatsCommonPrefix,
theme : EvalTheme,
callback : function(R1){
MassEval.params.EvalTableRequests--
var allcats = {};
var result = R1.result;
if(!result) return MassEval.functions.checkCatinfosEvalTable();
var alltitles = Object.keys(result);
if(alltitles.length == 0) return MassEval.functions.checkCatinfosEvalTable();
var category = false
for(var a=0,l=alltitles.length;a<l;a++){
var thiscat = alltitles[a];
var goodcat = false;
for(var p=0,plen=MassEval.params.EvalCatsPrefixes.length;p<plen;p++){
if(thiscat.indexOf(mw.config.get('wgFormattedNamespaces')[14]+":"+MassEval.params.EvalCatsPrefixes[p])===0) goodcat = true;
}
if(goodcat && thiscat.indexOf(R1.theme) !== -1) category = thiscat;
}
if(!category) return MassEval.functions.checkCatinfosEvalTable();
MassEval.params.EvalTableRequests++
MassEval.functions.getAPICategorymembers({
title : category,
cmprop : 'title',
cmtype : 'subcat',
callback : function(R2){
MassEval.params.EvalTableRequests--
var allcats = {};
var result = R2.result;
if(!result) return MassEval.functions.checkCatinfosEvalTable();
var alltitles = Object.keys(result);
if(alltitles.length == 0) return MassEval.functions.checkCatinfosEvalTable();
var EvalCatsMatches = MassEval.params.EvalCatsMatches;
for(var a=0,l=alltitles.length;a<l;a++){
var thiscattitle = alltitles[a];
for(var Match in EvalCatsMatches){
var thismatch = Match;
if(thiscattitle.indexOf(thismatch)!==-1){
var params = EvalCatsMatches[thismatch];
var Type = MassEval.params[(params.param)];
var ID = params.id;
for(var v=0,vlen=Type.length;v<vlen;v++){
var typeindex = v
var thistype = Type[v];
var wiki = thistype.wiki;
if(wiki==="?") wiki = MassEval.functions.lcFirst(thistype.text);
if((thiscattitle+"|").indexOf((thismatch+" "+wiki+"|"))!==-1){
allcats[thiscattitle] = {
cattitle : thiscattitle,
type : Type,
typeindex : typeindex,
idnode : ID
}
}
}
}
}
}
var catlengths = Object.keys(allcats);
if(catlengths.length == 0) return MassEval.functions.checkCatinfosEvalTable();
var totalIMP = document.getElementById("EvalTable_IMPtotal");
if(totalIMP) totalIMP.innerHTML = "";
var totalAVT = document.getElementById("EvalTable_AVTtotal");
if(totalAVT) totalAVT.innerHTML = "";
for(var cat in allcats){
MassEval.functions.setCatinfosEvalTable(allcats[cat]);
}
}
});
}
});
},
setCatinfosEvalTable : function(Infos){
MassEval.params.EvalTableRequests++
MassEval.functions.getAPICategoryinfo({
infos : Infos,
title : Infos.cattitle.split(mw.config.get('wgFormattedNamespaces')[14]+":").join(""),
callback : function(R){
MassEval.params.EvalTableRequests--
var result = R.result;
if(!result) return MassEval.functions.checkCatinfosEvalTable();
var Infos = R.infos;
var pages = R.result.pages;
var formattedpages = MassEval.functions.formatNumber(pages);
var NodeID = "EvalTable_" + Infos.idnode + Infos.typeindex;
var totalNodeID = "EvalTable_" + Infos.idnode + "total";
var Node = document.getElementById(NodeID);
if(!Node) return MassEval.functions.checkCatinfosEvalTable();
while(Node.firstChild){ Node.removeChild(Node.firstChild); };
var link = Node.appendChild(MassEval.functions.createLink(Infos.cattitle,{text:formattedpages}));
var totalNode = document.getElementById(totalNodeID);
if(!totalNode) return MassEval.functions.checkCatinfosEvalTable();
var ActualValue = totalNode.innerHTML.split(" ").join("");
ActualValue = (ActualValue ? parseInt(ActualValue) : 0);
totalNode.innerHTML = MassEval.functions.formatNumber(ActualValue+pages);
MassEval.functions.addSelectCatOnclickTolink(link, Infos.cattitle.split(mw.config.get('wgFormattedNamespaces')[14]+":").join(""))
MassEval.functions.checkCatinfosEvalTable();
}
});
},
checkCatinfosEvalTable : function(){
if(MassEval.params.EvalTableRequests===0){
MassEval.functions.disableThings([ "EvalTable_update" ], false);
MassEval.functions.alertControl("updateevaltable");
}
},
updateCatAllpages : function(evaltheme){
var CatAllpages = document.getElementById("CatAllpages");
if(!evaltheme || !CatAllpages) return;
CatAllpages.style.visibility = "hidden";
CatAllpages.innerHTML = "?";
evaltheme = MassEval.functions.ucFirst(evaltheme);
var Page = MassEval.params.EvalCatAllpages.split("$1").join(evaltheme);
MassEval.functions.getAPICategoryinfo({title:Page,callback:function(R){
CatAllpages.innerHTML = "";
var Link = CatAllpages.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+Page,{text:Page}));
CatAllpages.style.visibility = "visible";
MassEval.functions.addSelectCatOnclickTolinks(CatAllpages);
MassEval.functions.getCatInfoFromLink(Link, Page, true);
}});
},
updateCatStubpages : function(evaltheme){
var CatStubpages = document.getElementById("CatStubpages");
if(!evaltheme || !CatStubpages) return;
CatStubpages.innerHTML = "?";
CatStubpages.style.visibility = "hidden";
var Page = MassEval.params.EvalCatStubpages.split("$1").join(MassEval.functions.ucFirst(evaltheme));
var page = MassEval.params.EvalCatStubpages.split("$1").join(MassEval.functions.lcFirst(evaltheme));
var CallBack = function(R){
if(!R.result.missing){
CatStubpages.innerHTML = "";
var Link = CatStubpages.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+R.title,{text:R.title}));
CatStubpages.style.visibility = "visible";
MassEval.functions.addSelectCatOnclickTolinks(CatStubpages);
MassEval.functions.getCatInfoFromLink(Link, R.title, true);
}
}
MassEval.functions.getAPICategoryinfo({title:Page,callback:CallBack});
MassEval.functions.getAPICategoryinfo({title:page,callback:CallBack});
},
updateCatMaincat : function(evaltheme){
var CatMaincat = document.getElementById("CatMaincat");
if(!evaltheme || !CatMaincat) return;
CatMaincat.style.visibility = "hidden";
CatMaincat.innerHTML = "?";
evaltheme = MassEval.functions.ucFirst(evaltheme);
MassEval.functions.getAPICategoryinfo({title:evaltheme,callback:function(R){
CatMaincat.innerHTML = "";
var Link = CatMaincat.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+evaltheme,{text:evaltheme}));
CatMaincat.style.visibility = "visible";
MassEval.functions.addSelectCatOnclickTolinks(CatMaincat);
MassEval.functions.getCatInfoFromLink(Link, evaltheme, true);
}});
},
// ------------------------------- Formulaire sélecteur de mode -------------------------------
createModesFieldset : function(){
var SelectedMode = MassEval.params.CurrentMode;
var LaunchCond = MassEval.params.LaunchCondition;
var ModesFieldset = document.createElement('fieldset');
ModesFieldset.id = "fieldsetModes";
var PortalLabel = ModesFieldset.appendChild(document.createElement('legend'));
PortalLabel.innerHTML = MassEval.texts.Modes;
var EvalContainer = ModesFieldset.appendChild(document.createElement('div'));
$(EvalContainer).addClass("FieldsetContent");
var Form = EvalContainer.appendChild(document.createElement('form'));
Form.onsubmit = function(){ return false; };
var AllModes = Object.keys(MassEval.params.ModesMap);
for(var a=0,l=AllModes.length;a<l;a++){
var Mode = AllModes[a];
var Text = MassEval.texts[(Mode+"Mode")];
var Title = MassEval.texts[(MassEval.params.ModesMap[Mode].veriftitle)];

var Button = Form.appendChild(MassEval.functions.createInput({type:'button',value:Text,title:Title,name:Mode,id:Text}));
Button.onclick = function(){
MassEval.functions.getRelevantModeFieldset(this.name);
}
if(Mode == SelectedMode) $(Button).addClass("modeselected");
}
return ModesFieldset;
},
getRelevantModeFieldset : function(Mode){
console.info("Mode = "+Mode);
var AllModes = Object.keys(MassEval.params.ModesMap);
if(AllModes.indexOf(Mode)===-1) return;
MassEval.params.CurrentMode = Mode;
var AllModesInfo = MassEval.params.ModesMap;
for(var mode in AllModesInfo){
var B = document.getElementById(MassEval.texts[(mode+"Mode")]);
var FS = document.getElementById(AllModesInfo[mode].id);
if(!FS || !B) continue;
if(mode === Mode){
$(B).addClass("modeselected");
FS.style.display = "";
}else{
$(B).removeClass("modeselected");
FS.style.display = "none";
}
}
var VerifTitle = MassEval.texts[AllModesInfo[Mode].veriftitle];
var VerifInput = document.getElementById("GlobalVerifInput");
if(VerifInput && VerifTitle) VerifInput.title = VerifTitle;
var AddTitle = MassEval.texts[AllModesInfo[Mode].addtitle];
var AddInput = document.getElementById("GlobalAddEvalInput");
if(AddInput && AddTitle) AddInput.title = AddTitle;
var func = MassEval.functions[AllModesInfo[Mode].updatefunc];
if(typeof(func) === "function") func();
},
getPageInfos : function(OldInputValue, NS, InputID){
var DIV = document.getElementById(InputID+"Info");
if(!DIV) return console.log("Manque élément "+InputID+"Info");
var P = document.getElementById(InputID+"InfoExist");
if(!P) return console.log("Manque élément "+InputID+"InfoExist");
P.style.visibility = "hidden";
var LI = document.getElementById(InputID+"Count");
if(LI){
var OldLIcontent = LI.innerHTML;
LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
}
var title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+OldInputValue;
var datas = {format:'json',action:'query',prop:'info',
titles : title,
inprop : 'protection|talkid|watched|watchers|visitingwatchers|subjectid',
};
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
var Input = document.getElementById(InputID);
if(Input.value.indexOf(OldInputValue)===0){
var UL = document.createElement('ul');
$(UL).addClass("PageInfos");
var CurrentMode = MassEval.params.CurrentMode;
var template = CurrentMode+"Exists";
var linktext = (CurrentMode === "template" ? OldInputValue : title );
var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(title)+'" title="'+title+'">'+linktext+'</a>';
P.style.visibility = "hidden";
var unwantedinfo = ["restrictiontypes","pagelanguagehtmlcode","pagelanguagedir"];
var pages = data.query.pages;
if(CurrentMode == "page") MassEval.functions.setFromToSelectorValues(1);
var exists = true;
var invalid = false;
for(var id in pages){
var pageinfo = pages[id];
for(var infoname in pageinfo){
if(unwantedinfo.indexOf(infoname)===-1){
var infovalue = pageinfo[infoname];
if(infoname === "missing"){
if(infovalue === "") exists = false;
}else if(infoname == "invalid"){
invalid = true;
}
var LI = UL.appendChild(document.createElement('li'));
MassEval.functions.cleanPageUserInfos(LI, infoname, infovalue);
}
}
}
if(invalid){
LI.innerHTML = OldLIcontent;
MassEval.functions.neutralizeLinks(LI);
P.style.visibility = "visible";
return;
}
while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
DIV.appendChild(UL);
if(exists){
$(P.parentNode).removeClass("pagenoexists");
template = MassEval.texts[(template+"Yes")];
MassEval.functions.updateContentSub(OldInputValue, mw.config.get("wgFormattedNamespaces")[NS]);
}else{
$(P.parentNode).addClass("pagenoexists");
template = MassEval.texts[(template+"No")];
if(CurrentMode == "page") MassEval.functions.setFromToSelectorValues(0);
MassEval.functions.updateContentSub();
}
template = template.split("$page").join('<b>'+link+'</b>');
P.innerHTML = template;
MassEval.functions.neutralizeLinks(P);
P.style.visibility = "visible";
}
if(MassEval.functions.checkAnalysisID(id, 0)) MassEval.functions.alertControl("inputanalysis");
});
},
cleanPageUserInfos_checkBoolean : function(infovalue){
return MassEval.texts[( (infovalue === "") ? "YES" : "NO" )];
},
cleanPageUserInfos_checkNamespace : function(infovalue){
if(infovalue == 0) return MassEval.texts.MainNamespace;
else return mw.config.get("wgFormattedNamespaces")[infovalue];
},
cleanPageUserInfos_checkGender : function(infovalue){
return MassEval.texts[("INFOgender"+infovalue)]
},
cleanPageUserInfos_checkTimestamp : function(infovalue){
if(!infovalue || infovalue === null) return "";
var Template = MassEval.texts.TimeDateTemplate;
infovalue = infovalue.split("Z").join("");
var time = infovalue.split("T")[1].split(":");
var date = infovalue.split("T")[0].split("-");
var Time = new Date(parseInt(date[0]), (parseInt(date[1])-1), parseInt(date[2]), parseInt(time[0]), parseInt(time[1]) );
Time = new Date(Time.getTime()+(MassEval.params.TimeCorrection*60*1000));
Template = Template.split("$min").join( MassEval.functions.addZero(Time.getMinutes()) );
Template = Template.split("$h").join( MassEval.functions.addZero(Time.getHours()) );
Template = Template.split("$j").join( Time.getDate() );
Template = Template.split("$m").join( MassEval.texts[("Month"+MassEval.functions.addZero(Time.getMonth()+1) )]);
Template = Template.split("$a").join( Time.getFullYear());
return Template;
},
cleanPageUserInfos_checkUserName : function(infovalue){
return MassEval.functions.createLink("User:"+infovalue, {text:infovalue});
},
cleanPageUserInfos : function(LI, infoname, infovalue){
var cleanPageUserInfosFuncs = {
missing : MassEval.functions.cleanPageUserInfos_checkBoolean,
pageid : null,
ns : MassEval.functions.cleanPageUserInfos_checkNamespace,
title : MassEval.functions.createLink,
contentmodel : null,
pagelanguage : null,
touched : MassEval.functions.cleanPageUserInfos_checkTimestamp,
lastrevid : null,
length : MassEval.functions.formatNumber,
protection : JSON.stringify,
watched : MassEval.functions.cleanPageUserInfos_checkBoolean,
watchers : MassEval.functions.formatNumber,
visitingwatchers : MassEval.functions.formatNumber,
subjectid : null,
talkid : null,
userid : null,
name : MassEval.functions.cleanPageUserInfos_checkUserName,
editcount : MassEval.functions.formatNumber,
registration : MassEval.functions.cleanPageUserInfos_checkTimestamp,
groups : JSON.stringify,
gender : MassEval.functions.cleanPageUserInfos_checkGender
};
var infoRealName = MassEval.texts[("INFO"+infoname)] || infoname;
var Span = LI.appendChild(document.createElement('span'));
Span.innerHTML = infoRealName + " : ";
Span.style.fontWeight = "bold";
var CleanFunc = cleanPageUserInfosFuncs[infoname];
if(CleanFunc !== null && typeof(CleanFunc)==="function") infovalue = CleanFunc(infovalue);
if(typeof(infovalue)==="string" || typeof(infovalue)==="number") LI.appendChild(document.createTextNode(infovalue));
else LI.appendChild(infovalue);
MassEval.functions.neutralizeLinks(LI);
return LI;
},
getPageSuggestions : function(OldInputValue, NS, InputID){
var Input = document.getElementById(InputID);
var Select = document.getElementById(InputID+"Select");
if(Input.value !== OldInputValue){
if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getPageSuggestions(Input.value, NS, InputID);
if(MassEval.functions.checkAnalysisID(id, 1)) MassEval.functions.alertControl("inputanalysis");
return;
}
var datas = {format:'json',action:'query',list:'allpages',
apprefix : OldInputValue,
apnamespace : NS,
apfilterredir : 'nonredirects',
aplimit : (MassEval.params.SuggestNumber*2)
};
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
Input = document.getElementById(InputID);
if(Input.value.indexOf(OldInputValue)===0){
var query = data.query;
if(query){
var pages = query.allpages;
var titles = [];
for(var a=0,l=pages.length;a<l;a++){
var pagedata = pages[a];
var page = pagedata.title;
if(NS != 10 || page.indexOf(MassEval.params.TemplateDocPage) === -1) titles.push(MassEval.functions.getNamespaceInfoFromPage(page, "PageName"));
}
while(titles.length > MassEval.params.SuggestNumber){ titles.pop(); }
MassEval.functions.updateSuggestionElements(titles, OldInputValue, InputID);
}
}
});
},
getUserSuggestions : function(OldInputValue, InputID){
var Input = document.getElementById(InputID);
if(Input.value !== OldInputValue){
if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getUserSuggestions(Input.value, InputID);
if(MassEval.functions.checkAnalysisID(id, 1)) MassEval.functions.alertControl("useranalysis");
return;
}
var datas = {format:'json',action:'query',list:'allusers',
auprefix : OldInputValue,
aplimit : MassEval.params.SuggestNumber
};
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
Input = document.getElementById(InputID);
if(Input.value.indexOf(OldInputValue)===0){
var query = data.query;
if(query){
var users = []
var allusers = query.allusers;
for(var a=0,l=allusers.length;a<l;a++){
users.push(allusers[a].name);
}
MassEval.functions.updateSuggestionElements(users, OldInputValue, InputID);
}
}
});
},
setInfosCount : function(count, LiID, InputValue){
var LI = document.getElementById(LiID);
if(!LI) return console.log("Manque élément "+LiID);
var CurrentMode = MassEval.params.CurrentMode;
var template = MassEval.texts[(CurrentMode+"Infos")].split("$1").join(MassEval.functions.formatNumber(count));
if(InputValue) template = template.split("$2").join(InputValue);
LI.innerHTML = template;
},
// ------------------------------- Formulaire "Page" -------------------------------
createPageFieldset : function(title){ // Mode Page
if(!title) title = "";
else{
var CurrentMode = MassEval.params.CurrentMode;
if(CurrentMode==="cat") title = mw.config.get("wgFormattedNamespaces")[14] + ":" + title;
if(CurrentMode==="template") title = mw.config.get("wgFormattedNamespaces")[10] + ":" + title;
if(CurrentMode==="creations") title = mw.config.get("wgFormattedNamespaces")[2] + ":" + title;
}
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetPage";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.pageMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR = Table.appendChild(document.createElement('tr'));
var TDPage = TR.appendChild(document.createElement('td'));
TDPage.id = "TDPage";
var FS = TDPage.appendChild(document.createElement("fieldset"));
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
var Legend = FS.appendChild(document.createElement("legend"));
Legend.innerHTML = MassEval.texts.PageLabel;
var Input = MassEval.functions.createInput({type:"text",value:title,name:'page',id:"PageInput"});
var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
Input.onkeyup = function(){ MassEval.functions.checkSelectedPage(MassEval.params.KeyUpDelay); };
var TD = TR.appendChild(document.createElement('td'));
TD.setAttribute("rowspan", 2);
TD.setAttribute('valign',"top");
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var P = TDinfos.appendChild(document.createElement('p'));
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.PageInfosLabel;
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "PageInputInfo";
$(Div).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "PageInputInfoExist";
Pinfos.innerHTML = MassEval.texts.PageExistsNo;
Pinfos.style.visibility = "hidden";
return Fieldset;
},
checkSelectedPage : function(Delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var Input = document.getElementById("PageInput");
if(!Input) return;
var PageName = MassEval.functions.ucFirst(Input.value);
if(!PageName || PageName.length < 1) return;
var NS = 0;
Input.value = PageName;
var funcs = ["getPageSuggestions","getPageInfos"];
var mainfunc = function(){
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](PageName, NS, Input.id);
}
}
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
else mainfunc();
},
// ------------------------------- Formulaire "Catégorie" -------------------------------

createCategoryFieldset : function(CatTitle){
if(!CatTitle) CatTitle = "";
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetCat";
$(Fieldset).addClass("NoShowHideLinks");
var CatLabel = Fieldset.appendChild(document.createElement('legend'));
CatLabel.innerHTML = MassEval.texts.catMode;
var CategoryContainer = Fieldset.appendChild(document.createElement('div'));
$(CategoryContainer).addClass("FieldsetContent");
var Table = CategoryContainer.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR1 = Table.appendChild(document.createElement('tr'));
var TDCat = TR1.appendChild(document.createElement('td'));
TDCat.id = "TDCat";
var CatInput = MassEval.functions.createInput({type:"text",value:CatTitle,name:'cat',id:"CatInput"});
CatInput.onkeyup = function(){ MassEval.functions.checkSelectedCat(MassEval.params.KeyUpDelay); };
TDCat.appendChild(MassEval.functions.createSuggestSelect(CatInput));
var CatSubcatForm = TDCat.appendChild(document.createElement('form'));
CatSubcatForm.onsubmit = function(){ return false; };
CatSubcatForm.id = "subcatcheckboxform";
var PortalListCubCat = CatSubcatForm.appendChild(MassEval.functions.createInput({type:"checkbox",title:MassEval.texts.SubCatTitle.split("$count").join(""),name:'subcats',id:"SubCatsCheckBox"}));
PortalListCubCat.onclick = function(){ MassEval.functions.getSelectedCatPageCountInSubcats(); }
var Label = CatSubcatForm.appendChild(document.createElement('label'));
Label.setAttribute('for', 'subcats');
Label.innerHTML = MassEval.texts.SubCatTitle.split("$count").join('<span id="pagesinsubcatscount"> </span>');
var Radioform = TDCat.appendChild(document.createElement('form'));
Radioform.id = "subcatdepthForm";
var Radioslabel = Radioform.appendChild(document.createElement('label'));
Radioslabel.setAttribute('for', 'subcatdepth');
Radioslabel.innerHTML = MassEval.texts.SubCatDepthText;
MassEval.params.CurrentMaxSubcatLevel = 1;
for(var a=1,l=(MassEval.params.MaxSubcatLevel+1);a<l;a++){
var RLabel = Radioform.appendChild(document.createElement('label'));
RLabel.innerHTML = a;
var Radio = Radioform.appendChild(MassEval.functions.createInput({type:'radio',value:a,title:a,name:'subcatdepth',id:"subcatdepth"+a}));
Radio.disabled = "disabled";
Radio.onclick = function(){
if(this.disabled) return;
MassEval.params.CurrentMaxSubcatLevel = this.value;
MassEval.functions.getSelectedCatPageCountInSubcats();
}
if(a==1) Radio.checked = "checked";
}
var TDFamily = TR1.appendChild(document.createElement('td'));
TDFamily.setAttribute('rowspan', 2);
TDFamily.setAttribute('valign', 'top');
var FamilyTable = TDFamily.appendChild(document.createElement('table'));
FamilyTable.width = "100%";
var FamilyTR = FamilyTable.appendChild(document.createElement('tr'));
var TDParents = FamilyTR.appendChild(document.createElement('td'));
TDParents.width = "50%";
TDParents.id = "TDParents";
TDParents.setAttribute('valign',"top");
var Pparents = TDParents.appendChild(document.createElement('p'))
$(Pparents).addClass("InfosP");
Pparents.innerHTML = MassEval.texts.CatParents;
var DivParents = TDParents.appendChild(document.createElement('div'));
DivParents.id = "CatParentsDiv";
var TDDaughters = FamilyTR.appendChild(document.createElement('td'));
TDDaughters.id = "TDDaughters";
TDDaughters.width = "50%";
TDDaughters.setAttribute('valign',"top");
var Pdaughters = TDDaughters.appendChild(document.createElement('p'))
$(Pdaughters).addClass("InfosP");
Pdaughters.innerHTML = MassEval.texts.CatDaughters;
var DivDaughters = TDDaughters.appendChild(document.createElement('div'));
DivDaughters.id = "CatDaughtersDiv";
var TR2 = Table.appendChild(document.createElement('tr'));
var TDCatInfos = TR2.appendChild(document.createElement('td'));
TDCatInfos.id = "TDCatInfos";
$(TDCatInfos).addClass("TDInfos pagenoexists");
var DivInfos = TDCatInfos.appendChild(document.createElement('div'));
DivInfos.id = "CatInfosDiv";
var Pinfos = DivInfos.appendChild(document.createElement('p'));
Pinfos.id = "Pinfos";
DivInfos.style.visibility = "hidden";
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";
return Fieldset;
},
checkSelectedCat : function(delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var CatInput = document.getElementById("CatInput");
if(!CatInput) return;
if(!CatInput) return;
var Cat = CatInput.value;
var Cat = MassEval.functions.ucFirst(CatInput.value);
if(Cat.length<1) return;
setTimeout(function(){
CatInput.value = Cat;
PortalEval.functions.getSelectedPrefixCats(Cat);
var funcs = ["PrefixCats","CatInfos","CatParents","CatDaughters","CatPageCountInSubcats"];
PortalEval.functions.getSelectedCatInfos(Cat);
clearTimeout(MassEval.params.SuggestTimeout);
PortalEval.functions.getSelectedCatParents(Cat);
var mainfunc = function(){
PortalEval.functions.getSelectedCatDaughters(Cat);
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgCatAnalys.split("$cat").join(Cat), "Running");
},1000);
MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
for(var a=0,l=funcs.length;a<l;a++) MassEval.functions[("getSelected"+funcs[a])](Cat, "CatInput");
}
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc,delay);
else mainfunc();
},
},
getSelectedPrefixCats(Cat){
getSelectedPrefixCats(OldInputValue, InputID){
var CatInput = document.getElementById("PortalEval_Cat");
var Input = document.getElementById(InputID);
var CatSelect = document.getElementById("PortalEval_CatSelect");
var Select = document.getElementById(InputID+"Select");
if(CatInput.value != Cat) return;
if(Input.value !== OldInputValue){
if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getSelectedPrefixCats(Input.value, InputID);
// https://fr.wikipedia.org/w/api.php?action=query&aclimit=20&list=allcategories&acprefix=Colo
if(MassEval.functions.checkAnalysisID(id, 0)) MassEval.functions.alertControl("selectoranalysis");
return;
}
var datas = {
var datas = {
action : 'query',
action : 'query',
list : 'allcategories',
list : 'allcategories',
acprefix : Cat,
acprefix : OldInputValue,
aclimit : PortalEval.params.CategorySuggestions,
aclimit : MassEval.params.SuggestNumber,
format : 'json'
format : 'json'
};
};
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
$.ajax({
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
Input = document.getElementById(InputID);
if(CatInput.value.indexOf(Cat)!==0) return;
if(Input.value.indexOf(OldInputValue)===0){
var categories = data.query.allcategories;
var categories = data.query.allcategories;
var titles = [];
if(categories.length == 0) return CatSelect.style.display = "none";
for(var a=0,l=categories.length;a<l;a++){
while(CatSelect.firstChild){ CatSelect.removeChild(CatSelect.firstChild); }
var titles = [];
var catdata = categories[a];
for(var a=0,l=categories.length;a<l;a++){
var category = catdata[(Object.keys(catdata)[0])];
var catdata = categories[a];
titles.push(category);
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);
}
}
MassEval.functions.updateSuggestionElements(titles, OldInputValue, InputID);
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){
getSelectedCatInfos : function(Cat){
var CatInput = document.getElementById("PortalEval_Cat");
var CatInput = document.getElementById("CatInput");
if(CatInput.value != Cat) return;
if(CatInput.value != Cat) return MassEval.functions.updateContentSub();
var CatInfosDiv = document.getElementById("CatInfosDiv");
var CatInfosDiv = document.getElementById("CatInfosDiv");
if(!CatInfosDiv) return;
if(!CatInfosDiv) return MassEval.functions.alertControl("selectoranalysis");
CatInfosDiv.style.visibility = "hidden";
CatInfosDiv.style.visibility = "hidden";
MassEval.functions.getAPICategoryinfo({
var datas = {
action:'query',
title : Cat,
prop:'categoryinfo',
callback : function(R){
var CatInput = document.getElementById("CatInput");
titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
if(CatInput.value.indexOf(R.title) ===0){
format:'json'
var Pinfos = document.getElementById("Pinfos");
};
var LIpages = document.getElementById("LIpages");
$.ajax({
var LIsubcats = document.getElementById("LIsubcats");
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
var SubCats = document.getElementById("SubCatsCheckBox");
}).then(function(data) {
CatInput = document.getElementById("PortalEval_Cat");
LIpages.style.visibility = "hidden";
if(CatInput.value != Cat) return;
LIsubcats.style.visibility = "hidden";
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
if(R.result.missing){
$(Pinfos.parentNode.parentNode).addClass("pagenoexists");
var missing = page.missing === "";
var Pinfos = document.getElementById("Pinfos");
Pinfos.innerHTML = MassEval.texts.CatExistsNo.split("$cat").join('<b>'+R.title+'</b>');
var LIpages = document.getElementById("LIpages");
MassEval.functions.updateContentSub();
}else{
var LIsubcats = document.getElementById("LIsubcats");
$(Pinfos.parentNode.parentNode).removeClass("pagenoexists");
LIpages.style.visibility = "hidden";
MassEval.functions.updateContentSub(R.title, mw.config.get('wgFormattedNamespaces')[14]);
LIsubcats.style.visibility = "hidden";
var pages = R.result.pages;
if(missing){
var CatInput = document.getElementById("PortalEval_Cat");
var subcats = R.result.subcats;
var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+encodeURIComponent(R.title))+'" title="'+mw.config.get('wgFormattedNamespaces')[14]+":"+R.title+'">'+R.title+'</a>';
if(CatInput.value != Cat) return;
if(MassEval.params.CurrentCatOnSpecialpage == R.title) link = R.title;
$(Pinfos).addClass("nocat");
Pinfos.innerHTML = PortalEval.texts.CatExistsNo.split("$cat").join(Cat);
Pinfos.innerHTML = MassEval.texts.CatExistsYes.split("$cat").join('<b>'+link+'</b>');
LIpages.innerHTML = MassEval.texts.CatPages.split("$1").join(MassEval.functions.formatNumber(pages));
}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";
LIpages.style.visibility = "visible";
LIsubcats.innerHTML = MassEval.texts.CatCats.split("$1").join(MassEval.functions.formatNumber(subcats));
}
if(subcats){
LIsubcats.innerHTML = PortalEval.texts.CatCats.split("$1").join(subcats);
LIsubcats.style.visibility = "visible";
LIsubcats.style.visibility = "visible";
}
}
if(!SubCats.checked){
MassEval.functions.setFromToSelectorValues((R.result.pages ? R.result.pages : 0));
MassEval.functions.alertControl("selectoranalysis");
}
CatInfosDiv.style.visibility = "visible";
}
}
if(MassEval.functions.checkAnalysisID(R.id, 1)) MassEval.functions.alertControl("selectoranalysis");
}
}
CatInfosDiv.style.visibility = "visible";
});
});
},
},
createCategoryLinkInList(pageinfo){
getSelectedCatParents(Cat, ParentList, clcontinue){
var CatInput = document.getElementById("PortalEval_Cat");
var LI = document.createElement('li');
if(CatInput.value != Cat) return;
var page = pageinfo.title;
var title = MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
if(!ParentList){
var span = document.createElement('span');
ParentList = [];
$(span).addClass("CategoryTreeToggle");
var CatParentsDiv = document.getElementById("CatParentsDiv");
span.innerHTML = MassEval.texts.CatButtonClosed;
CatParentsDiv.style.visibility= "hidden";
LI.appendChild(span);
while(CatParentsDiv.firstChild){ CatParentsDiv.removeChild(CatParentsDiv.firstChild); }
LI.appendChild(document.createTextNode(" "));
LI.appendChild(MassEval.functions.createLink(page,{text:title}));
if(pageinfo.hidden === ""){
var abbr = LI.appendChild(document.createElement('abbr'));
$(abbr).addClass("hiddencaticon");
abbr.title = MassEval.texts.HiddenCat;
abbr.innerHTML = '<img class="HiddenCatIcon" src="'+MassEval.params.ImageURL+MassEval.params.HiddenCatIcon+'" />';
}
}
var datas = {
return LI;
},
action:'query',
getSelectedCatParents(Cat){
prop:'categories',
var CanContinue = MassEval.functions.checkEmergencyStop();
clprop:'hidden',
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
cllimit:PortalEval.params.APILimit,
var CatInput = document.getElementById("CatInput");
titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
if(CatInput.value != Cat) return;
format:'json'
var CatParentsDiv = document.getElementById("CatParentsDiv");
};
while(CatParentsDiv.firstChild){ CatParentsDiv.removeChild(CatParentsDiv.firstChild); }
if(clcontinue) datas.clcontinue = clcontinue;
$.ajax({
MassEval.functions.getAPICategories({
node : CatParentsDiv,
url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
catname : Cat,
}).then(function(data) {
title : mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
callback : function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
var page = data.query.pages[(Object.keys(data.query.pages)[0])];
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var categories = page.categories;
var CatInput = document.getElementById("CatInput");
if(!categories) return;
if(CatInput.value.indexOf(R.catname)===0){
for(var a=0,l=categories.length;a<l;a++){
while(R.node.firstChild){ R.node.removeChild(R.node.firstChild); }
ParentList.push([categories[a].title,(categories[a].hidden===""?true:false)]);
}
var allcats = R.result;
var cont = data.continue;
if(typeof(allcats)=="object"){
var alltitles = Object.keys(allcats);
if(cont){
if(alltitles.length > 0){
PortalEval.functions.getSelectedCatParents(Cat, ParentList, cont.clcontinue)
var UL = R.node.appendChild(document.createElement('ul'));
}else{
var UL = document.createElement('ul');
for(var pi in R.result){
CatParentsDiv.appendChild(UL);
UL.appendChild(MassEval.functions.createCategoryLinkInList(R.result[pi]));
for(var a=0,l=ParentList.length;a<l;a++){
}
var page = ParentList[a][0];
MassEval.functions.addSelectCatOnclickTolinks(UL);
var title = PortalEval.functions.getNamespaceInfoFromPage(page, "PageName");
MassEval.functions. getCatInfoFromLinks(UL);
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){
getSelectedCatDaughters(Cat){
var CatInput = document.getElementById("PortalEval_Cat");
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var CatInput = document.getElementById("CatInput");
if(CatInput.value != Cat) return;
if(CatInput.value != Cat) return;
// "//fr.wikipedia.org/w/api.php?format=json&action=categorytree&category=Colombie";
var CatDaughtersDiv = document.getElementById("CatDaughtersDiv");
var CatDaughtersDiv = document.getElementById("CatDaughtersDiv");
CatDaughtersDiv.style.visibility= "hidden";
while(CatDaughtersDiv.firstChild){ CatDaughtersDiv.removeChild(CatDaughtersDiv.firstChild); }
MassEval.functions.getAPICategorymembers({
$.ajax({
node : CatDaughtersDiv,
url: mw.util.wikiScript('api'),
data: {
catname : Cat,
title : mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
action:'categorytree',
options:{showcount:1},
cmtype : 'subcat',
category:Cat,
callback : function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
format:'json'
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
},
var CatInput = document.getElementById("CatInput");
dataType: 'json'
if(CatInput.value.indexOf(R.catname)===0){
}).then(function(data) {
while(CatDaughtersDiv.firstChild){ CatDaughtersDiv.removeChild(CatDaughtersDiv.firstChild); }
CatInput = document.getElementById("PortalEval_Cat");
if(CatInput.value != Cat) return;
var c = 0;
var HTML = data.categorytree["*"];
var UL = R.node.appendChild(document.createElement('ul'));
for(var pi in R.result){
CatDaughtersDiv.innerHTML = HTML;
PortalEval.functions.addSelectCatOnclickTolinks(CatDaughtersDiv);
UL.appendChild(MassEval.functions.createCategoryLinkInList(R.result[pi]));
c++
CatDaughtersDiv.style.visibility= "visible";
}
if(c>0){
MassEval.functions.addSelectCatOnclickTolinks(UL);
MassEval.functions. getCatInfoFromLinks(UL);
}
}
}
});
});
},
},
addSelectCatOnclickTolinks(node){
addSelectCatOnclickTolinks : function(node){
var alllinks = node.getElementsByTagName('a');
var alllinks = node.getElementsByTagName('a');
for(var a=0,l=alllinks.length;a<l;a++){
for(var a=0,l=alllinks.length;a<l;a++){
var link = alllinks[a];
var link = alllinks[a];
MassEval.functions.addSelectCatOnclickTolink(link, link.innerHTML);
link.onclick = function(){
}
var cat = this.innerHTML;
},
var Input = document.getElementById("PortalEval_Cat");
addSelectCatOnclickTolink : function(link, cattitle, limitation){
if(Input){
Input.value = cat;
link.onclick = function(){
if(limitation || $(link).hasClass("new")) return false;
PortalEval.functions.checkSelectedCat();
MassEval.functions.getRelevantModeFieldset("cat");
var cat = cattitle;
var Input = document.getElementById("CatInput");
if(Input){
Input.value = cat;
MassEval.functions.checkSelectedCat();
}
return false;
}
if(!limitation && !$(link).hasClass("new")){
link.title = MassEval.texts.SelectCat.split("$1").join(cattitle);
}else{
if(!$(link).hasClass("new")) link.title = MassEval.texts.TooMuchSubCatsSel.split("$1").join(cattitle).split("$limit").join(MassEval.params.MaxSubCatAllowedSel);
else link.title = MassEval.texts.CatDoesntExistSel.split("$1").join(cattitle);
link.style.cursor = "not-allowed";
}
},
getCatInfoFromLinks : function (node, noexpand){
if(!node) return;
var links = node.getElementsByTagName('a');
for(var a=0,l=links.length;a<l;a++){
MassEval.functions.getCatInfoFromLink(links[a], links[a].innerHTML, noexpand);
}
},
getCatInfoFromLink : function (link, catname, noexpand){
MassEval.functions.getAPICategoryinfo({
link : link,
title : catname,
callback : function(R){
var Parent = R.link.parentNode;
if(R.result.missing === true || !Parent){
$(link).addClass("new");
MassEval.functions.addSelectCatOnclickTolink(R.link, R.link.innerHTML);
return
}
}
return false;
var template = MassEval.texts.CatInfos;
if(!R.result.pages && R.result.subcats) template = MassEval.texts.CatInfosNOP;
if(R.result.pages && !R.result.subcats) template = MassEval.texts.CatInfosNOC;
var pages = '<abbr title="'+MassEval.texts.CatInfosPageTip+'">'+MassEval.texts.CatInfosPageText+'</abbr>';
var subcats = '<abbr title="'+MassEval.texts.CatInfosCatTip+'">'+MassEval.texts.CatInfosCatText+'</abbr>';
template = template.split("$P").join(pages);
template = template.split("$C").join(subcats);
template = template.split("$1").join(MassEval.functions.formatNumber(R.result.pages));
template = template.split("$2").join(MassEval.functions.formatNumber(R.result.subcats));
var infospan = Parent.appendChild(document.createElement('span'));
infospan.innerHTML = template;
if(R.result.subcats > MassEval.params.MaxSubCatAllowedSel){
MassEval.functions.addSelectCatOnclickTolink(R.link, R.link.innerHTML, true);
}
if(R.result.subcats > 0 && !noexpand){
var ToggleSpan = Parent.firstChild;
var ToggleLink = Parent.insertBefore(MassEval.functions.createLink(null, {text:"",title:MassEval.texts.CatButtonExpand,href:"javascript:;"}), ToggleSpan);
ToggleSpan.parentNode.removeChild(ToggleSpan);
ToggleLink.appendChild(ToggleSpan);
ToggleLink.className = ToggleSpan.className;
ToggleSpan.className = "";
if(R.result.subcats > MassEval.params.MaxSubCatAllowedExp){
ToggleLink.title = MassEval.texts.TooMuchSubCatsExp.split("$1").join(catname).split("$limit").join(MassEval.params.MaxSubCatAllowedExp);
ToggleLink.style.cursor = "not-allowed";
}else{
ToggleLink.onclick = function(){
var UL = Parent.getElementsByTagName('ul')[0];
if(UL){
if(UL.style.display == "none"){
UL.style.display = "";
ToggleSpan.innerHTML = MassEval.texts.CatButtonOpened;
this.title = MassEval.texts.CatButtonHide;
}else{
UL.style.display = "none";
ToggleSpan.innerHTML = MassEval.texts.CatButtonClosed;
this.title = MassEval.texts.CatButtonExpand;
}
}else{
MassEval.functions.categorytreeExpand(catname, Parent, this);
}
}
}
}
}
});
},
categorytreeExpand : function(catname, LI, ToggleLink){
if(!LI.parentNode) return;
MassEval.functions.getAPICategorymembers({
node : LI,
link : ToggleLink,
title : mw.config.get('wgFormattedNamespaces')[14]+":"+catname,
cmtype : 'subcat',
callback : function(R){
if(!R.node.parentNode || !R.link || !R.link.firstChild) return;
var UL = R.node.appendChild(document.createElement('ul'));
for(var pi in R.result){
var pageinfo = R.result[pi];
var page = pageinfo.title;
var title = MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
var LI = UL.appendChild(document.createElement('li'));
var span = document.createElement('span');
$(span).addClass("CategoryTreeToggle");
span.innerHTML = MassEval.texts.CatButtonClosed;
LI.appendChild(span);
LI.appendChild(document.createTextNode(" "));
LI.appendChild(MassEval.functions.createLink(page,{text:title}));
if(pageinfo.hidden === ""){
LI.appendChild(MassEval.functions.createHiddenCatIcon());
}
}
R.link.firstChild.innerHTML = MassEval.texts.CatButtonOpened;
R.link.title = MassEval.texts.CatButtonHide;
MassEval.functions.addSelectCatOnclickTolinks(UL);
MassEval.functions. getCatInfoFromLinks(UL);
}
});
},
getSelectedCatPageCountInSubcats : function(Cat){
var catinput = document.getElementById("CatInput");
var subcatcheckbox = document.getElementById("SubCatsCheckBox");
var countspan = document.getElementById("pagesinsubcatscount");
if(!catinput || !subcatcheckbox || !countspan) return MassEval.functions.alertControl("selectoranalysis");;
if(subcatcheckbox.checked && !subcatcheckbox.disabled){
MassEval.functions.disableThings(["subcatdepthForm"], false);
var catname = catinput.value;
if(!catname){
countspan.style.display = "none";
return MassEval.functions.alertControl("selectoranalysis");
}
countspan.style.display = "";
var Hidden = document.getElementById("lastcategorycounted");
var LHidden = document.getElementById("lastsubcatlevel");
if( Hidden && Hidden.value == catname && LHidden && LHidden.value == MassEval.params.CurrentMaxSubcatLevel){
var b = countspan.getElementsByTagName('b')[0];
if(b){
var pageCount = parseInt(b.innerHTML.replace(/[^0-9]/g, ""));
MassEval.functions.setFromToSelectorValues(pageCount);
}
}else{
MassEval.functions.getPageCountInSubcats({start:true,title:catname});
}
}else{
MassEval.functions.disableThings(["subcatdepthForm"], true);
countspan.style.display = "none";
MassEval.functions.alertControl("selectoranalysis");
var LIpages = document.getElementById("LIpages");
if(LIpages){
var pageCount = parseInt(LIpages.innerHTML.replace(/[^0-9]/g, ""))
MassEval.functions.setFromToSelectorValues(pageCount);
}
}
}
}
},
},
prepareSpecialpage : function(){
getPageCountInSubcats: function(Q){
var Title = document.getElementsByTagName('title')[0];
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var TitleH = document.getElementsByTagName('h1')[0];
if(Q.start === true){
var Content = document.getElementById('mw-content-text');
MassEval.params.SubCatCount = {catlist:[],pagelist:[]};
if(!Title || !TitleH || !Content) return;
MassEval.params.SubCatCountReq = 0;
Title.innerHTML = PortalEval.texts.SpecialpageNameH.split("$1").join(PortalEval.texts.SpecialpageName);
Q.maxdepth = MassEval.params.CurrentMaxSubcatLevel;
TitleH.innerHTML = PortalEval.texts.SpecialpageName;
Q.currentdepth = 0;
while(Content.firstChild){ Content.removeChild(Content.firstChild); }
Q.catname = Q.title;
PortalEval.functions.createSpecialpageBoard(Content);
Q.title = (mw.config.get('wgFormattedNamespaces')[14]+":"+Q.title);
}
MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], true);
Q.start = false;
delete Q.datas;
MassEval.params.SubCatCountReq++;
Q.cmprop = 'title';
Q.cmtype = 'page|subcat';
Q.callback = function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var newcatvalue = document.getElementById("CatInput").value;
if(newcatvalue.indexOf(R.catname)!==0 || R.maxdepth != MassEval.params.CurrentMaxSubcatLevel){
MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
return;
}
var catstocheck = [];
for(var pi in R.result){
var pageinfo = R.result[pi];
var ns = parseInt(pageinfo.ns);
var title = pageinfo.title;
if(ns === 14 && MassEval.params.SubCatCount.catlist.indexOf(title)===-1 && R.currentdepth<MassEval.params.CurrentMaxSubcatLevel){
MassEval.params.SubCatCount.catlist.push(title);
catstocheck.push({
title : title,
depth : R.currentdepth
});
}else if(ns<2 && MassEval.params.SubCatCount.pagelist.indexOf(title)===-1){
MassEval.params.SubCatCount.pagelist.push(title);
}
}
var TooMuchCats = (catstocheck.length > MassEval.params.MaxSubCatAllowedSel)
if(!TooMuchCats){
for(var a=0,l=catstocheck.length;a<l;a++){
var cattocheck = catstocheck[a];
MassEval.functions.getPageCountInSubcats({
title : cattocheck.title,
currentdepth : (cattocheck.depth+1),
catname : R.catname,
maxdepth : R.maxdepth
});
}
}
MassEval.params.SubCatCountReq--;
MassEval.functions.setPageCountInSubcats(R, TooMuchCats);
};
MassEval.functions.getAPICategorymembers(Q);
},
},
createSpecialpageBoard : function(contentNode){
setPageCountInSubcats : function(Q, TooMuchCats){
var PortalEvalBoard = document.createElement('div');
var cb = document.getElementById("SubCatsCheckBox");
var cs = document.getElementById("pagesinsubcatscount");
PortalEvalBoard.id = "PortalEvalBoard";
if((!cb.checked || TooMuchCats) && cs){
contentNode.appendChild(PortalEvalBoard);
cs.style.display = "none";
var PortalEvalBoardHead = document.createElement('fieldset');
MassEval.params.CatSubPageCountOK = true;
PortalEvalBoardHead.id = "PortalEvalBoardHead";
MassEval.functions.checkPreliminaryLoadings();
PortalEvalBoard.appendChild(PortalEvalBoardHead);
return;
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);
}
}
var newcatvalue = document.getElementById("CatInput").value;
SortFS.parentNode.removeChild(SortFS);
if(newcatvalue.indexOf(Q.catname)===0){
var TDCat = document.createElement('td');
var bold = (MassEval.params.SubCatCountReq == 0);
var CatFS = document.getElementById("fieldsetCat");
var CatSelect = document.getElementById("PortalEval_Cat");
var template = MassEval.texts.CatAllPagesCount;
template = template.split("$1").join(MassEval.functions.formatNumber(MassEval.params.SubCatCount.pagelist.length));
CatSelect.onkeyup = PortalEval.functions.checkSelectedCat;
if(cs){
var CatInput = document.getElementById("PortalEval_SubCats");
template = template.split("$P").join('<abbr title="'+MassEval.texts.CatInfosPageTip+'">'+MassEval.texts.CatInfosPageText+'</abbr>');
var nodes = [CatSelect, CatInput];
template = (bold ? '<b>'+template+'</b>' : template);
for(var a=0,l=nodes.length;a<l;a++){
var node = nodes[a];
cs.innerHTML = "("+template+")";
node.parentNode.removeChild(node);
if(bold){
var Hidden = cs.appendChild(MassEval.functions.createInput({type:'hidden',value:Q.catname,id:"lastcategorycounted"}));
var Form = document.createElement('form');
var RHidden = cs.appendChild(MassEval.functions.createInput({type:'hidden',value:Q.maxdepth,id:"lastsubcatlevel"}));
Form.onsubmit = function(){ return false; };
MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
Form.appendChild(node);
if(a==1){
}
var Label = document.createElement('label');
cs.style.display = "";
Label.setAttribute('for', 'subcats');
}else if(bold){
template = "("+template.split("$P").join(MassEval.texts.CatInfosPageTip.toLowerCase())+")";
Label.innerHTML = PortalEval.texts.SubCatTitle;
cb.title = MassEval.texts.SubCatTitle.split("$count").join(template);
Form.appendChild(document.createTextNode(' '));
MassEval.functions.disableThings([ "SubCatsCheckBox" ], false);
Form.appendChild(Label);
MassEval.params.CatSubPageCountOK = true;
MassEval.functions.checkPreliminaryLoadings();
MassEval.functions.alertControl("selectoranalysis");
}
}
MassEval.functions.setFromToSelectorValues(MassEval.params.SubCatCount.pagelist.length);
TDCat.appendChild(Form);
}else{
cs.style.display = "none";
}
}
},
TDCat.style.width = (parseInt(CatSelect.style.width.split("px").join(""))+100)+"px";
// ------------------------------- Formulaire "Liens" -------------------------------
var Table = document.createElement('table');
createLinksFieldset : function(title){ // Mode Links
var DefaultNS = 0;
if(!title) title = "";
else{
var CurrentMode = MassEval.params.CurrentMode;
if(CurrentMode==="cat") DefaultNS = 14;
if(CurrentMode==="template") DefaultNS = 10;
if(CurrentMode==="creations") DefaultNS = 2;
}
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetLinks";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.linksMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
Table.style.width = "100%";
var TR1 = document.createElement('tr');
var TR = Table.appendChild(document.createElement('tr'));
var TR2 = document.createElement('tr');
var TDLinks = TR.appendChild(document.createElement('td'));
var TDInfos = document.createElement('td');
TDLinks.id = "TDLinks";
var TDFamily = document.createElement('td');
var FS = TDLinks.appendChild(document.createElement("fieldset"));
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
TDFamily.setAttribute('rowspan', 2);
TR1.appendChild(TDCat);
var Legend = FS.appendChild(document.createElement("legend"));
Legend.innerHTML = MassEval.texts.LinksLabel;
TR1.appendChild(TDFamily);
var Input = MassEval.functions.createInput({type:"text",value:title,name:'linkshere',id:"LinksInput"});
TR2.appendChild(TDInfos);
var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
var FamilyTable = document.createElement('table')
Input.onkeyup = function(){ MassEval.functions.checkSelectedLinks(MassEval.params.KeyUpDelay); };
var FamilyTR = document.createElement('tr');
var NSInput = Form.insertBefore(MassEval.functions.createNamespaceSelect(DefaultNS), Form.firstChild);
TDFamily.appendChild(FamilyTable);
NSInput.onchange = function(){ MassEval.functions.checkSelectedLinks(MassEval.params.KeyUpDelay); };
FamilyTable.appendChild(FamilyTR);
NSInput.id = "LinksInputNS";
var TDParents = document.createElement('td');
var TDDaughters = document.createElement('td');
var TD = TR.appendChild(document.createElement('td'));
FamilyTR.appendChild(TDParents);
TD.setAttribute("rowspan", 2);
FamilyTR.appendChild(TDDaughters);
TD.setAttribute('valign',"top");
Table.appendChild(TR1);
var InfoTable = TD.appendChild(document.createElement('table'));
Table.appendChild(TR2);
InfoTable.width = "100%";
CatFS.appendChild(Table);
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var DivInfos = TDInfos.appendChild(document.createElement('div'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
DivInfos.id = "CatInfosDiv";
var Pinfos = DivInfos.appendChild(document.createElement('p'));
var P = TDinfos.appendChild(document.createElement('p'))
Pinfos.id = "Pinfos";
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.LinksInfosLabel;
var ULinfos = DivInfos.appendChild(document.createElement('ul'));
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "LinksInputInfo";
$(Div).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "LinksInputInfoExist";
Pinfos.innerHTML = MassEval.texts.PageExistsNo;
Pinfos.style.visibility = "hidden";
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "LIpages";
LIpages.id = "LinksInputCount";
return Fieldset;
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(){
checkSelectedLinks : function(Delay){
var board = document.getElementById("PortalEvalBoard");
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
if(board){
var Input = document.getElementById("LinksInput");
board.style.display = "";
var NSInput = document.getElementById("LinksInputNS");
return PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, false);
if(!Input || !NSInput) return;
var PageName = MassEval.functions.ucFirst(Input.value);
if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
var NS = parseInt(NSInput.value);
Input.value = PageName;
var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
var funcs = ["getPageSuggestions","getPageInfos","getLinksCount"];
var mainfunc = function(){
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgLinks.split("$page").join(Title), "Running");
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](PageName, NS, Input.id);
}
}
}
PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, false);
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
board = document.createElement("div");
board.id = "PortalEvalBoard";
else mainfunc();
},
board.style.backgroundColor = "white";
getLinksCount : function(title, NS, InputID){
document.body.appendChild(board);
MassEval.params.PageLinksList = [];
var boardHead = document.createElement("div");
var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
boardHead.id = "PortalEvalBoardHead";
MassEval.functions.getAPILinks({title:Title,result:[],callback:function(R){
var HeadTable = document.createElement("table");
var CanContinue = MassEval.functions.checkEmergencyStop();
HeadTable.width = "100%";
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
if(PortalEval.params.AddWarning){
var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
var Caption = document.createElement("caption");
$(Caption).addClass("error");
var titles = R.result;
Caption.innerHTML = PortalEval.texts.Warning;
for(var a=0,l=titles.length;a<l;a++){
HeadTable.appendChild(Caption);
var title = titles[a];
var OK = true;
for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
}
if(OK) MassEval.params.PageLinksList.push(title);
}
var count = MassEval.params.PageLinksList.length;
MassEval.functions.setInfosCount(count, (InputID+"Count"));
MassEval.functions.setFromToSelectorValues(count);
MassEval.functions.alertControl("selectoranalysis");
}});
},
// ------------------------------- Formulaire "Pages liées" -------------------------------
createLinkshereFieldset : function(title){ // Mode Linkshere
var DefaultNS = 0;
if(!title) title = "";
else{
var CurrentMode = MassEval.params.CurrentMode;
if(CurrentMode==="cat") DefaultNS = 14;
if(CurrentMode==="template") DefaultNS = 10;
if(CurrentMode==="creations") DefaultNS = 2;
}
}
var HeadTR = document.createElement("tr");
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetLinkshere";
var TDRunning = document.createElement("td"); // Icone Running
$(Fieldset).addClass("NoShowHideLinks");
TDRunning.id = "PortalEvalBoardControlRunning";
var Label = Fieldset.appendChild(document.createElement('legend'));
TDRunning.width = "30px";
Label.innerHTML = MassEval.texts.linkshereMode;
HeadTR.appendChild(TDRunning);
var TDMainHead = document.createElement("td");
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
TDMainHead.id = "PortalEvalMainOptionsFS";
var Table = Container.appendChild(document.createElement('table'));
TDMainHead.style.textAlign = "center";
TDMainHead.style.whiteSpace = "nowrap";
Table.style.width = "100%";
var Center = document.createElement('center');
var TR = Table.appendChild(document.createElement('tr'));
TDMainHead.appendChild(Center);
var TDLinkshere = TR.appendChild(document.createElement('td'));
TDLinkshere.id = "TDLinkshere";
var MainOptions = PortalEval.functions.createMainOptions();
for(var a=0,l=MainOptions.length;a<l;a++) Center.appendChild(MainOptions[a]);
var FS = TDLinkshere.appendChild(document.createElement("fieldset"));
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
var TDButtons = document.createElement("td"); // Bouton Fermer
var Legend = FS.appendChild(document.createElement("legend"));
TDButtons.width = "30px";
Legend.innerHTML = MassEval.texts.LinkshereLabel;
TDButtons.style.textAlign = "right";
var Input = MassEval.functions.createInput({type:"text",value:title,name:'linkshere',id:"LinkshereInput"});
TDButtons.valign = "top";
var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
var CloseButton = document.createElement("a");
CloseButton.href = "javascript:PortalEval.functions.removeBoard()";
Input.onkeyup = function(){ MassEval.functions.checkSelectedLinkshere(MassEval.params.KeyUpDelay); };
var NSInput = Form.insertBefore(MassEval.functions.createNamespaceSelect(DefaultNS), Form.firstChild);
CloseButton.title = PortalEval.texts.GoCloseTitle;
NSInput.onchange = function(){ MassEval.functions.checkSelectedLinkshere(MassEval.params.KeyUpDelay); };
var CloseButtonImage = document.createElement("img");
CloseButtonImage.width = 24;
NSInput.id = "LinkshereInputNS";
var TD = TR.appendChild(document.createElement('td'));
CloseButtonImage.height = 24;
TD.setAttribute("rowspan", 2);
CloseButtonImage.src = PortalEval.params.ImageURL + PortalEval.params.CloseIcon;
CloseButton.appendChild(CloseButtonImage);
TD.setAttribute('valign',"top");
TDButtons.appendChild(CloseButton);
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
HeadTR.appendChild(TDMainHead);
HeadTR.appendChild(TDButtons);
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
HeadTable.appendChild(HeadTR);
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var TRControl = document.createElement("tr");
var P = TDinfos.appendChild(document.createElement('p'))
TRControl.id = "PortalEvalBoardControlTR";
var TDControl = document.createElement("td");
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.LinkshereInfosLabel;
TDControl.setAttribute("colspan", "3");
var ControlSpan = document.createElement('span');
var Div = TDinfos.appendChild(document.createElement('div'));
ControlSpan.style.whiteSpace = "nowrap";
Div.id = "LinkshereInputInfo";
$(Div).addClass("PageInfosDiv");
ControlSpan.id = "PortalEvalBoardControl";
TDControl.appendChild(ControlSpan);
var TR2 = Table.appendChild(document.createElement('tr'));
TRControl.appendChild(TDControl);
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
HeadTable.appendChild(TRControl);
var TROptions = document.createElement("tr");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
TROptions.id = "PortalEvalOptionsTR";
Pinfos.id = "LinkshereInputInfoExist";
Pinfos.innerHTML = MassEval.texts.PageExistsNo;
TROptions.style.display = "none";
Pinfos.style.visibility = "hidden";
var TDOptions = document.createElement("td");
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
TDOptions.setAttribute("colspan", "3");
var OptionsDiv = document.createElement('div');
var LIpages = ULinfos.appendChild(document.createElement('li'));
OptionsDiv.style.margin = "0 1em 0 1em";
LIpages.id = "LinkshereInputCount";
return Fieldset;
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){
checkSelectedLinkshere : function(Delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
var control = document.getElementById("PortalEvalBoardControl");
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var controlTR = document.getElementById("PortalEvalBoardControlTR");
var controlRunning = document.getElementById("PortalEvalBoardControlRunning");
var Input = document.getElementById("LinkshereInput");
var NSInput = document.getElementById("LinkshereInputNS");
if(!control || !controlTR || !controlRunning) return;
if(!text){
if(!Input || !NSInput) return;
var PageName = MassEval.functions.ucFirst(Input.value);
controlRunning.innerHTML = '<img width="24" height="24" src="'+PortalEval.params.ImageURL + PortalEval.params.OKIcon+'" />';
if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
control.innerHTML = '';
var NS = parseInt(NSInput.value);
controlTR.style.display = 'none';
Input.value = PageName;
var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
var funcs = ["getPageSuggestions","getPageInfos","getLinkshereCount"];
var mainfunc = function(){
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgLinkshere.split("$page").join(Title), "Running");
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](PageName, NS, Input.id);
}
}
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
else mainfunc();
},
getLinkshereCount : function(title, NS, InputID){
var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
MassEval.params.PageLinkshereList = [];
MassEval.functions.getAPILinkshere({title:Title,result:[],lhprop:'title',lhnamespace:'0|1',lhshow:'!redirect',callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
var Infos = R.result[Title];
if(Infos){
var titles = Infos.linkshere;
if(titles && titles.length > 0){
for(var a=0,l=titles.length;a<l;a++){
var title = titles[a].title;
var OK = true;
for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
}
if(OK) MassEval.params.PageLinkshereList.push(title);
}
}
}
var count = MassEval.params.PageLinkshereList.length;
MassEval.functions.setInfosCount(count, (InputID+"Count"));
MassEval.functions.setFromToSelectorValues(count);
MassEval.functions.alertControl("selectoranalysis");
}});
},
// ------------------------------- Formulaire "Inclusions" -------------------------------
createTemplateFieldset : function(title){ // Mode Template
if(!title) title = "";
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetTemplate";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.templateMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR = Table.appendChild(document.createElement('tr'));
var TDTemplate = TR.appendChild(document.createElement('td'));
TDTemplate.id = "TDTemplate";
var FS = TDTemplate.appendChild(document.createElement("fieldset"));
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
var Legend = FS.appendChild(document.createElement("legend"));
Legend.innerHTML = MassEval.texts.TemplateLabel;
var Input = MassEval.functions.createInput({type:"text",value:title,name:'template',id:"TemplateInput"});
var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
Input.onkeyup = function(){ MassEval.functions.checkSelectedTemplate(MassEval.params.KeyUpDelay); };
var TD = TR.appendChild(document.createElement('td'));
TD.setAttribute("rowspan", 2);
TD.setAttribute('valign',"top");
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var P = TDinfos.appendChild(document.createElement('p'));
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.TemplateInfosLabel;
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "TemplateInputInfo";
$(Div).addClass("PageInfosDiv");
var TDdoc = InfoTR.appendChild(document.createElement('td'));
TDdoc.id = "TDtemplatedoc";
TDdoc.setAttribute('valign',"top");
var Pdoc = TDdoc.appendChild(document.createElement('p'))
$(Pdoc).addClass("InfosP");
Pdoc.innerHTML = MassEval.texts.TemplateDocLabel;
var Divdoc = TDdoc.appendChild(document.createElement('div'));
Divdoc.id = "TemplateDoc";
$(Divdoc).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "TemplateInputInfoExist";
Pinfos.innerHTML = MassEval.texts.TemplateExistsNo;
Pinfos.style.visibility = "hidden";
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "TemplateInputCount";
return Fieldset;
},
checkSelectedTemplate : function(Delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var Input = document.getElementById("TemplateInput");
if(!Input) return;
var PageName = MassEval.functions.ucFirst(Input.value);
if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
var NS = 10;
Input.value = PageName;
var funcs = ["getPageSuggestions","getPageInfos","getEnbeddedinCount","getTemplateDoc"];
var mainfunc = function(){
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgTemplate.split("$template").join(PageName), "Running");
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](PageName, NS, Input.id);
}
}
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
else mainfunc();
},
getEnbeddedinCount : function(title, NS, InputID){
MassEval.params.PageTemplateList = [];
var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
MassEval.functions.getAPIEmbeddedin({title:Title,result:[],einamespace:'0',callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
MassEval.params.PageTemplateList = R.result;
var count = MassEval.params.PageTemplateList.length;
MassEval.functions.setInfosCount(count, (InputID+"Count"));
MassEval.functions.setFromToSelectorValues(count);
MassEval.functions.alertControl("selectoranalysis");
}});
},
getTemplateDoc : function(title, NS, InputID){
var DocDiv = document.getElementById("TemplateDoc");
if(!DocDiv) return;
while(DocDiv.firstChild){ DocDiv.removeChild(DocDiv.firstChild); }
var DocTitle = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title; // +MassEval.params.TemplateDocPage;
var URL = mw.util.getUrl(DocTitle);
$.ajax({url:URL, complete: function(Req){
while(DocDiv.firstChild){ DocDiv.removeChild(DocDiv.firstChild); }
var TEMP = document.createElement("div");
TEMP.style.display = "none";
TEMP.innerHTML = Req.responseText;
document.body.appendChild(TEMP);
var Divs = TEMP.getElementsByTagName('div');
var IDs = MassEval.params.DivIDsToPreview;
var noarticletext = false;
for(var a=0,l=Divs.length;a<l;a++){
if($(Divs[a]).hasClass("noarticletext")) noarticletext = true;
}
if(!noarticletext){
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) continue;
DocDiv.appendChild(thisDiv);
if(thisDiv.id === "catlinks") MassEval.functions.addSelectCatOnclickTolinks(thisDiv);
else MassEval.functions.neutralizeLinks(thisDiv);
}
}
TEMP.parentNode.removeChild(TEMP);
}});
},
// ------------------------------- Formulaire "Nouvelles pages" -------------------------------
createNewpagesFieldset : function(){ // Mode Newpages
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetNewpages";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.newpagesMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR = Table.appendChild(document.createElement('tr'));
var TDNewpages = TR.appendChild(document.createElement('td'));
TDNewpages.id = "TDNewpages";
var TimeSelector = TDNewpages.appendChild(MassEval.functions.createTimeSelector(MassEval.functions.checkSelectedNewpages));
TimeSelector.id = "NewpagesTimeSelector";
var TD = TR.appendChild(document.createElement('td'));
TD.setAttribute("rowspan", 2);
TD.setAttribute('valign',"top");
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var P = TDinfos.appendChild(document.createElement('p'));
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.newpagesInfosLabel;
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "NewpagesInputInfo";
$(Div).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
TDInfos.id = "NewpagesExistInfos";
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "NewpagesExist";
Pinfos.innerHTML = MassEval.texts.newpagesExistsNo;
Pinfos.style.visibility = "hidden";
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "NewpagesInfos";
return Fieldset;
},
checkSelectedNewpages : function(Delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
MassEval.functions.updateContentSub(true);
var LI = document.getElementById("NewpagesInfos");
if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
var Timestamp = MassEval.functions.getTimeSelectorValue("NewpagesTimeSelector");
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgNewpages, "Running");
MassEval.functions.getAPIRecentchanges({timestamp:Timestamp,callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgNewpages, "Stop");
var titles = R.result;
var count = Object.keys(titles).length;
var P = document.getElementById("NewpagesExist");
var LI = document.getElementById("NewpagesInfos");
if(count==0){
var template = MassEval.texts.newpagesExistsNo;
$(P.parentNode).addClass("pagenoexists");
}else{
var template = MassEval.texts.newpagesExistsYes;
$(P.parentNode).removeClass("pagenoexists");
}
P.innerHTML = template;
P.style.visibility = "visible";
MassEval.functions.setInfosCount(count, "NewpagesInfos");
MassEval.functions.setFromToSelectorValues(count);
var DIV = document.getElementById("NewpagesInputInfo");
while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); }
var UL = DIV.appendChild(document.createElement('ul'));
$(UL).addClass("PageInfos");
for(var a=0,l=titles.length;a<l;a++){
var title = titles[a].title;
var timestamp = titles[a].timestamp;
var LI = UL.appendChild(document.createElement('li'));
var link = LI.appendChild(MassEval.functions.createLink(title));
link.onclick = function(){ return false; };
LI.appendChild(document.createTextNode(" : "));
LI.appendChild(document.createTextNode(MassEval.functions.cleanPageUserInfos_checkTimestamp(timestamp)));
}
MassEval.functions.alertControl("selectoranalysis");
}});
},
// ------------------------------- Formulaire "Créations" -------------------------------
createCreationsFieldset : function(title){ // Mode Creations
if(!title) title = "";
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetCreations";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.creationsMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR = Table.appendChild(document.createElement('tr'));
var TDUser = TR.appendChild(document.createElement('td'));
TDUser.id = "TDUser";
var UserFS = TDUser.appendChild(document.createElement("fieldset"));
$(UserFS).addClass("NoBorderFieldset NoShowHideLinks");
var Legend = UserFS.appendChild(document.createElement("legend"));
Legend.innerHTML = MassEval.texts.UserLabel;
var Input = MassEval.functions.createInput({type:"text",value:title,name:'user',id:"UserInput"});
var Form = UserFS.appendChild(MassEval.functions.createSuggestSelect(Input));
Input.onkeyup = function(){ MassEval.functions.checkSelectedCreations(MassEval.params.KeyUpDelay); };
var TimeSelector = TDUser.appendChild(MassEval.functions.createTimeSelector(MassEval.functions.checkSelectedCreations));
TimeSelector.id = "CreationsTimeSelector";
var TD = TR.appendChild(document.createElement('td'));
TD.setAttribute("rowspan", 2);
TD.setAttribute('valign',"top");
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var P = TDinfos.appendChild(document.createElement('p'));
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.UserInfosLabel;
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "UserInputInfo";
$(Div).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "UserInputInfoExist";
Pinfos.innerHTML = MassEval.texts.creationsExistsNo;
Pinfos.style.visibility = "hidden";
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "UserInputCount";
return Fieldset;
},
checkSelectedCreations : function(Delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var Input = document.getElementById("UserInput");
if(!Input) return;
var PageName = MassEval.functions.ucFirst(Input.value);
if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
Input.value = PageName;
var funcs = ["getUserSuggestions","getUserInfos","getUsercontribsCount"];
var mainfunc = function(){
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgCreations.split("$user").join(PageName), "Running");
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](PageName, Input.id);
}
}
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
else mainfunc();
},
getUserInfos : function(OldInputValue, InputID){
var DIV = document.getElementById(InputID+"Info");
if(!DIV) return console.log("Manque élément "+InputID+"Info");
var P = document.getElementById(InputID+"InfoExist");
if(!P) return console.log("Manque élément "+InputID+"InfoExist");
P.style.visibility = "hidden";
var LI = document.getElementById(InputID+"Count");
if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
var Datas = {format:'json',action:'query',list:'users',
usprop : 'blockinfo|groups|editcount|registration|emailable|gender',
ususers : OldInputValue
};
$.ajax({url: mw.util.wikiScript('api'), data: Datas,dataType: 'json'
}).then(function(data) {
var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(mw.config.get("wgFormattedNamespaces")[2]+":"+OldInputValue)+'" title="'+mw.config.get("wgFormattedNamespaces")[2]+":"+OldInputValue+'">'+OldInputValue+'</a>';
var unwantedinfo = [];
Input = document.getElementById(InputID);
if(Input.value.indexOf(OldInputValue)===0){
while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
var UL = DIV.appendChild(document.createElement("ul"));
$(UL).addClass("PageInfos");
var found = false;
var query = data.query;
if(query){
var user = query.users[0];
if(user){
var username = user.name;
if(username === OldInputValue){
found = true;
for(var infoname in user){
if(unwantedinfo.indexOf(infoname)===-1){
var infovalue = user[infoname];
if(infoname === "missing" && infovalue === "") found = false;
var LI = UL.appendChild(document.createElement('li'));
MassEval.functions.cleanPageUserInfos(LI, infoname, infovalue);
}
}
}
}
}
}
if(found){
var template = MassEval.texts.creationsExistsYes;
$(P.parentNode).removeClass("pagenoexists");
MassEval.functions.updateContentSub(OldInputValue);
}else{
var template = MassEval.texts.creationsExistsNo;
$(P.parentNode).addClass("pagenoexists");
MassEval.functions.updateContentSub();
}
template = template.split("$page").join('<b>'+link+'</b>');
P.innerHTML = template;
MassEval.functions.neutralizeLinks(P);
P.style.visibility = "visible";
});
},
getUsercontribsCount : function(user, InputID){
var Timestamp = MassEval.functions.getTimeSelectorValue("CreationsTimeSelector");
MassEval.functions.getAPIUsercontribs({timestamp:Timestamp,user:user,callback:function(R){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var titles = R.result;
var count = titles.length;
MassEval.functions.setInfosCount(count, (InputID+"Count"));
MassEval.functions.setFromToSelectorValues(count);
MassEval.functions.alertControl("selectoranalysis");
}});
},
// ------------------------------- Formulaire "Prefixes" -------------------------------
createPrefixesFieldset : function(title){
if(!title) title = "";
var Fieldset = document.createElement('fieldset');
Fieldset.id = "fieldsetPrefixes";
$(Fieldset).addClass("NoShowHideLinks");
var Label = Fieldset.appendChild(document.createElement('legend'));
Label.innerHTML = MassEval.texts.prefixesMode;
var Container = Fieldset.appendChild(document.createElement('div'));
$(Container).addClass("FieldsetContent");
var Table = Container.appendChild(document.createElement('table'));
Table.style.width = "100%";
var TR = Table.appendChild(document.createElement('tr'));
var TDPrefixes = TR.appendChild(document.createElement('td'));
TDPrefixes.id = "TDPrefixes";
var FS = TDPrefixes.appendChild(document.createElement("fieldset"));
$(FS).addClass("NoBorderFieldset NoShowHideLinks");
var Legend = FS.appendChild(document.createElement("legend"));
Legend.innerHTML = MassEval.texts.PrefixLabel;
var Input = MassEval.functions.createInput({type:"text",value:title,name:'prefix',id:"PrefixInput"});
var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
Input.onkeyup = function(){ MassEval.functions.checkSelectedPrefixes(MassEval.params.KeyUpDelay); };
var TD = TR.appendChild(document.createElement('td'));
TD.setAttribute("rowspan", 2);
TD.setAttribute('valign',"top");
var InfoTable = TD.appendChild(document.createElement('table'));
InfoTable.width = "100%";
var InfoTR = InfoTable.appendChild(document.createElement('tr'));
var TDinfos = InfoTR.appendChild(document.createElement('td'));
TDinfos.setAttribute('valign',"top");
var P = TDinfos.appendChild(document.createElement('p'));
$(P).addClass("InfosP");
P.innerHTML = MassEval.texts.prefixesInfosLabel;
var Div = TDinfos.appendChild(document.createElement('div'));
Div.id = "PrefixInputInfo";
$(Div).addClass("PageInfosDiv");
var TR2 = Table.appendChild(document.createElement('tr'));
var TDInfos = TR2.appendChild(document.createElement('td'));
$(TDInfos).addClass("TDInfos pagenoexists");
var Pinfos = TDInfos.appendChild(document.createElement('p'));
Pinfos.id = "PrefixInputInfoExist";
Pinfos.innerHTML = MassEval.texts.prefixesExistsNo;
Pinfos.style.visibility = "hidden";
var ULinfos = TDInfos.appendChild(document.createElement('ul'));
var LIpages = ULinfos.appendChild(document.createElement('li'));
LIpages.id = "PrefixInputCount";
return Fieldset;
},
checkSelectedPrefixes : function(delay){
var CanContinue = MassEval.functions.checkEmergencyStop();
if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var Input = document.getElementById("PrefixInput");
if(!Input) return;
var Prefix = MassEval.functions.ucFirst(Input.value);
if(!Prefix || Prefix.length < 1) return;
Input.value = Prefix;
var funcs = ["getPageSuggestions","getPrefixedPageCount"];
var mainfunc = function(){
MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgPrefixes.split("$1").join(Prefix), "Running");
for(var a=0,l=funcs.length;a<l;a++){
MassEval.functions[funcs[a]](Prefix, 0, Input.id);
}
}
clearTimeout(MassEval.params.SuggestTimeout);
if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
else mainfunc();
},
getPrefixedPageCount : function(OldInputValue, NS, InputID, pagelist, contvalue){
var P = document.getElementById("PrefixInputInfoExist");
var Div = document.getElementById("PrefixInputInfo");
if(!P || !Div) return MassEval.functions.alertControl("selectoranalysis");
var LI = document.getElementById("PrefixInputCount");
if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
while(Div.firstChild){ Div.removeChild(Div.firstChild); };
if(!pagelist) pagelist = [];
var datas = {format:'json',action:'query',list:'allpages',
apprefix : OldInputValue,
apnamespace : NS,
aplimit : MassEval.params.APILimit
};
if(contvalue) datas.apcontinue = contvalue;
$.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
}).then(function(data) {
Input = document.getElementById(InputID);
if(Input.value.indexOf(OldInputValue)===0){
var query = data.query;
if(query){
var pages = query.allpages;
for(var a=0,l=pages.length;a<l;a++){
var pagedata = pages[a];
var page = pagedata.title;
pagelist.push(page);
}
}
var cont = data.continue;
if(cont){
var apcontinue = cont.apcontinue;
if(apcontinue) return MassEval.functions.getPrefixedPageCount(OldInputValue, NS, InputID, pagelist, apcontinue);
}
var count = pagelist.length;
if(count==0){
var template = MassEval.texts.prefixesExistsNo.split("$1").join(OldInputValue);
$(P.parentNode).addClass("pagenoexists");
}else{
var template = MassEval.texts.prefixesExistsYes.split("$1").join(OldInputValue);
$(P.parentNode).removeClass("pagenoexists");
}
P.innerHTML = template;
P.style.visibility = "visible";
MassEval.functions.setInfosCount(count, (InputID+"Count"), OldInputValue);
MassEval.functions.setFromToSelectorValues(count);
while(Div.firstChild){ Div.removeChild(Div.firstChild); };
var UL = Div.appendChild(document.createElement('ul'));
$(UL).addClass("PageInfos");
for(var a=0,l=pagelist.length;a<l;a++){
var t = pagelist[a];
var LI = UL.appendChild(document.createElement('li'));
var link = LI.appendChild(MassEval.functions.createLink(t));
link.onclick = function(){ return false; };
}
MassEval.functions.alertControl("selectoranalysis");
}
});
},
// ------------------------------- Formulaire "Filtrage" -------------------------------
createFilterFieldset : function(){
var SearchFieldset = document.createElement('fieldset');
SearchFieldset.id = "fieldsetSearch";
var SearchLegend = SearchFieldset.appendChild(document.createElement('legend'));
SearchLegend.innerHTML = MassEval.texts.Search;
var SearchContainer = SearchFieldset.appendChild(document.createElement('div'));
$(SearchContainer).addClass("FieldsetContent");
var SearchForm = SearchContainer.appendChild(document.createElement('form'));
SearchForm.onsubmit = function(){ return false; };
SearchForm.id = "EvalSearchForm";
var FromToSelectorContainer = SearchForm.appendChild(document.createElement('div'));
FromToSelectorContainer.id = "FromToSelectorContainer";
var FromToSelectorDiv = FromToSelectorContainer.appendChild(document.createElement('div'));
FromToSelectorDiv.title = MassEval.texts.RangeSelectorTip
FromToSelectorDiv.id = "FromToSelectorDiv";
FromToSelectorDiv.style.width = "100%";
$(FromToSelectorDiv).addClass("RangeSelectorDisabled");
var FromHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorFrom"}));
var ToHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorTo"}));
var CatSizeHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorCatSize"}));
var FromToSelector = FromToSelectorDiv.appendChild(document.createElement('div'));
FromToSelector.id = "FromToSelector";
FromToSelector.style.position = "relative";
FromToSelector.style.top = 0;
FromToSelector.style.left = "0%";
FromToSelector.style.width = "100%";
var FromDiv = FromToSelector.appendChild(document.createElement('div'));
FromDiv.id = "FromSelector";
FromDiv.style.position = "relative";
FromDiv.style.top = 0;
FromDiv.style.left = 0;
var ToDiv = FromToSelector.appendChild(document.createElement('div'));
ToDiv.id = "ToSelector";
ToDiv.style.float = "right";
ToDiv.style.position = "relative";
ToDiv.style.top = 0;
ToDiv.style.right = 0;
var MoveDiv = FromToSelector.appendChild(document.createElement('div'));
MoveDiv.id = "FromSelectorMove";
var table = SearchForm.appendChild(document.createElement('table'));
table.width = "100%";
var tr = table.appendChild(document.createElement('tr'));
var tdRange = tr.appendChild(document.createElement('td'));
var tdFilter = tr.appendChild(document.createElement('td'));
var tdCounter = tr.appendChild(document.createElement('td'));
tdRange.width = "125px";
tdCounter.width = "125px";
var CounterA = tdRange.appendChild(document.createElement('a'));
CounterA.href = "javascript:;";
CounterA.id = "RangeSelectorAbbrLink";
CounterA.onclick = function (){
if(!$(this).hasClass("RangeSelectorDisabled")) MassEval.functions.razFromToSelector();
}
var Counter = CounterA.appendChild(document.createElement('span'));
var Template = MassEval.texts.RangeSelectorTempl;
Counter.innerHTML = Template.split("$from").join("<span id='FromSelectorValue'>0</span>").split("$to").join("<span id='ToSelectorValue'>0</span>");
Counter.id = "RangeSelectorAbbr";
Counter.title = MassEval.texts.RangeViewerTip;
var PageFilteredCount = tdCounter.appendChild(MassEval.functions.createLink(null,{text:"",href:"javascript:;",title:MassEval.texts.NotFilteredCount}));
PageFilteredCount.id = "PageFilteredCount";
PageFilteredCount.style.visibility = "hidden";
PageFilteredCount.onclick = function(){ MassEval.functions.razFilterOptions(); };
var Center = tdFilter.appendChild(document.createElement('center'));
Center.id = "FilterOptions";
var STUBform = Center.appendChild(document.createElement('span'));
STUBform.id = "FilterForm_STUB";
var STUBLabel = STUBform.appendChild(document.createElement('label'));
STUBLabel.innerHTML = MassEval.texts.STUB + " : ";
STUBLabel.setAttribute("for", "StubFilterCheckbox");
var StubParams = [
{ text : MassEval.texts.NO , color: MassEval.params.Avancement[1].color },
{ text : MassEval.texts.YES, color: MassEval.params.Avancement[5].color }
];
for(var a=0,l=StubParams.length;a<l;a++){
var STUB = StubParams[a];
var Span = STUBform.appendChild(document.createElement('span'));
Span.style.backgroundColor = STUB.color;
var STUBInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:STUB.text,name:"StubFilterCheckbox"}));
STUBInput.checked = "checked";
if(a===0) $(Span).addClass('startFilterOption');
else $(Span).addClass('endFilterOption');
}
var ANDORselect1 = Center.appendChild(document.createElement('select'));
ANDORselect1.id = "ANDORselect1";
var AND = ANDORselect1.appendChild(document.createElement('option'));
AND.value = "AND";
AND.innerHTML = MassEval.texts.SearchAND;
AND.selected = "selected";
var OR = ANDORselect1.appendChild(document.createElement('option'));
OR.value = "OR";
OR.innerHTML = MassEval.texts.SearchOR;
var AVTform = Center.appendChild(document.createElement('span'));
AVTform.id = "FilterForm_AVT";
var AVTLabel = AVTform.appendChild(document.createElement('label'));
AVTLabel.innerHTML = MassEval.texts.AVT + " : ";
AVTLabel.setAttribute("for", "Avancement_Filter");
var Avancements = MassEval.params.Avancement;
for(var a=0,l=Avancements.length;a<l;a++){
var AVT = Avancements[a];
var Span = AVTform.appendChild(document.createElement('span'));
Span.style.backgroundColor = AVT.color;
var AVTInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:AVT.text,name:"Avancement_Filter"}));
AVTInput.checked = "checked";
if(a===0) $(Span).addClass('startFilterOption');
}
var NoAVTSpan = AVTform.appendChild(document.createElement('span'));
NoAVTSpan.style.backgroundColor = "black";
$(NoAVTSpan).addClass('endFilterOption');
var NoAVTInput = NoAVTSpan.appendChild(MassEval.functions.createInput({type:'checkbox',value:-1,title:MassEval.texts.AVTOptNone,name:"Avancement_Filter"}));
NoAVTInput.checked = "checked";
var ANDORselect2 = Center.appendChild(document.createElement('select'));
ANDORselect2.id = "ANDORselect2";
var AND = ANDORselect2.appendChild(document.createElement('option'));
AND.value = "AND";
AND.innerHTML = MassEval.texts.SearchAND;
AND.selected = "selected";
var OR = ANDORselect2.appendChild(document.createElement('option'));
OR.value = "OR";
OR.innerHTML = MassEval.texts.SearchOR;
var IMPform = Center.appendChild(document.createElement('span'));
IMPform.id = "FilterForm_IMP";
var IMPLabel = IMPform.appendChild(document.createElement('label'));
IMPLabel.innerHTML = MassEval.texts.IMP + " : ";
IMPLabel.setAttribute("for", "Importance_Filter");
var Importances = MassEval.params.Importance;
for(var a=0,l=Importances.length;a<l;a++){
var IMP = Importances[a];
var Span = IMPform.appendChild(document.createElement('span'));
Span.style.backgroundColor = IMP.color;
var IMPInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:IMP.text,name:"Importance_Filter"}));
IMPInput.checked = "checked";
if(a===0) $(Span).addClass('startFilterOption');
}
var NoIMPSpan = IMPform.appendChild(document.createElement('span'));
NoIMPSpan.style.backgroundColor = "black";
$(NoIMPSpan).addClass('endFilterOption');
var NoIMPInput = NoIMPSpan.appendChild(MassEval.functions.createInput({type:'checkbox',value:-1,title:MassEval.texts.IMPOptNone,name:"Importance_Filter"}));
NoIMPInput.checked = "checked";
var inputs = Center.getElementsByTagName('input');
for(var a=0,l=inputs.length;a<l;a++){ inputs[a].onclick = function(){ MassEval.functions.checkFilterOptions(); } }
var selects = Center.getElementsByTagName('select');
for(var a=0,l=selects.length;a<l;a++){ selects[a].onclick = function(){ MassEval.functions.checkFilterOptions(); } }
return SearchFieldset;
},
setFromToSelectorValues : function(totalpages){
if(typeof(totalpages) !== "number" || (""+totalpages) === "NaN") return;
var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
var FromToSelectorDiv = document.getElementById("FromToSelectorDiv");
var FromHidden = document.getElementById("FromToSelectorFrom");
var ToHidden = document.getElementById("FromToSelectorTo");
var FromToSelector = document.getElementById("FromToSelector");
var FromSelectorValue = document.getElementById("FromSelectorValue");
var ToSelectorValue = document.getElementById("ToSelectorValue");
var RangeSelectorLink = document.getElementById("RangeSelectorAbbrLink");
if(!CatSizeHidden || !FromToSelectorDiv || !FromHidden || !ToHidden || !FromToSelector || !FromSelectorValue || !ToSelectorValue || !RangeSelectorLink) return;
if(totalpages===0){
CatSizeHidden.value = 0;
FromHidden.value = 0;
FromSelectorValue.innerHTML = 0;
ToHidden.value = 0;
ToSelectorValue.innerHTML = 0;
$(FromToSelectorDiv).addClass("RangeSelectorDisabled");
MassEval.functions.disableThings(["GlobalVerifInput","GlobalAddEvalInput"], true);
RangeSelectorLink.style.visibility = "hidden";
}else{
}else{
CatSizeHidden.value = totalpages;
controlRunning.innerHTML = (running ? ('<img width="24" height="24" src="'+PortalEval.params.ImageURL + PortalEval.params.RunningIcon+'" />' + " ") : "")
control.innerHTML = text;
FromHidden.value = 1;
controlTR.style.display = '';
FromSelectorValue.innerHTML = 1;
ToHidden.value = totalpages;
ToSelectorValue.innerHTML = totalpages;
$(FromToSelectorDiv).removeClass("RangeSelectorDisabled");
MassEval.functions.disableThings(["GlobalVerifInput","GlobalAddEvalInput"], false);
RangeSelectorLink.style.visibility = "visible";
}
}
FromToSelector.style.left = "0%";
FromToSelector.style.width = "100%";
$(FromSelectorValue.parentNode).removeClass("NotAllPages");
},
},
createMainOptions : function(){
updateFromToSelectorValues : function(data){
var CatLI = document.createElement('fieldset'); // Catégorie
var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
var FromHidden = document.getElementById("FromToSelectorFrom");
CatLI.id = "fieldsetCat";
var CatLabel = document.createElement('legend');
var ToHidden = document.getElementById("FromToSelectorTo");
var FromToSelector = document.getElementById("FromToSelector");
CatLabel.innerHTML = PortalEval.texts.Cat;
var FromSelectorValue = document.getElementById("FromSelectorValue");
var Cond = PortalEval.functions.getLaunchCondition();
var CatTitle = "";
var ToSelectorValue = document.getElementById("ToSelectorValue");
if(!CatSizeHidden || !FromHidden || !ToHidden || !FromToSelector || !FromSelectorValue || !ToSelectorValue) return;
var wgTitle = mw.config.get("wgTitle");
if(Cond == 1) CatTitle = wgTitle;
var NEWfrom = data.from;
var NEWto = data.to;
else if(Cond == 2 && wgTitle.indexOf("PortalEval/")!=-1) CatTitle = wgTitle.split("PortalEval/")[1];
var Total = parseInt(CatSizeHidden.value);
var PortalCat = PortalEval.functions.createInput({type:"text",value:CatTitle,name:'cat'});
if((NEWfrom != 1 || NEWto != Total) && Total !==1) $(FromSelectorValue.parentNode).addClass("NotAllPages");
PortalCat.id = "PortalEval_Cat";
else $(FromSelectorValue.parentNode).removeClass("NotAllPages");
PortalCat.style.width = PortalEval.params.CatInputWidth+"px";
FromHidden.value = NEWfrom;
PortalEval.functions.disableThings([ PortalCat ], (Cond != 2) );
FromSelectorValue.innerHTML = NEWfrom;
var PortalListCubCat = PortalEval.functions.createInput({type:"checkbox",title:PortalEval.texts.SubCatTitle,name:'subcats'});
PortalListCubCat.id = "PortalEval_SubCats";
ToHidden.value = NEWto;
ToSelectorValue.innerHTML = NEWto;
CatLI.appendChild(CatLabel);
},
CatLI.appendChild(PortalCat);
getFromToSelectorValues : function(){
CatLI.appendChild(PortalListCubCat);
var EvalLI = document.createElement('fieldset'); // Évaluations
var Hidden = document.getElementById("FromToSelectorCatSize");
var FromHidden = document.getElementById("FromToSelectorFrom");
EvalLI.id = "fieldsetEval";
var PortalLabel = document.createElement('legend');
var ToHidden = document.getElementById("FromToSelectorTo");
if(!Hidden || !FromHidden || !ToHidden) return null;
PortalLabel.innerHTML = PortalEval.texts.Portal
var PortalSelect = document.createElement('select');
var values = {
from : parseInt(FromHidden.value),
PortalSelect.id = "PortalEval_OptionPortal";
to : parseInt(ToHidden.value),
PortalSelect.name = "PortalEval_OptionPortal";
total : parseInt(Hidden.value)
PortalSelect.style.width = PortalEval.params.MainEvalThemeWidth+"px";
};
EvalLI.appendChild(PortalLabel);
return values;
EvalLI.appendChild(PortalSelect);
},
var SortLI = document.createElement('fieldset'); // Tri
razFromToSelector : function(){
SortLI.id = "fieldsetSort";
var SortLabel = document.createElement('legend');
var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
if(!CatSizeHidden) return;
SortLabel.innerHTML = PortalEval.texts.Sort;
var SortHidden = PortalEval.functions.createInput({type:"hidden"});
MassEval.functions.setFromToSelectorValues(parseInt(CatSizeHidden.value));
},
SortHidden.id = "PortalEval_SortHidden";
getNav : (function () {
var SortSelect = PortalEval.functions.createSortSelect(PortalEval.params.DefaultSort, SortHidden);
var agt = navigator.userAgent.toLowerCase();
SortSelect.id = "PortalEval_OptionSort";
var is_ie = agt.indexOf("msie") !== -1 && agt.indexOf("opera") === -1;
SortSelect.name = "PortalEval_OptionSort";
return function () {
var SortListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoSortText,title:PortalEval.texts.GoSortTitle});
return is_ie;
SortListInput.id = "PortalEval_SortButton";
};
SortListInput.onclick = function(){
})(),
var Portal_Select = document.getElementById("PortalEval_OptionPortal");
getXmousePosition : function(e){
var Sort_Select = document.getElementById("PortalEval_OptionSort");
var X;
var Sort_Hidden = document.getElementById("PortalEval_SortHidden");
if(MassEval.functions.getNav()){
Sort_Hidden.value = Sort_Select.value;
X = parseInt( e.clientX + document.getElementsByTagName('body')[0].scrollLeft );
PortalEval.functions.disableThings([ this ], true);
}else{
PortalEval.functions.sortPages(Sort_Select.value, Portal_Select.value);
X = parseInt( e.clientX );
}
}
return X;
SortLI.appendChild(SortLabel);
},
SortLI.appendChild(SortHidden);
setFromSelectorAnchor : function(){
SortLI.appendChild(SortSelect);
var anchorNode = document.getElementById("FromSelector");
SortLI.appendChild(SortListInput);
var ActionsLI = document.createElement('fieldset'); // Actions
var ElementToMoveAndResize = document.getElementById("FromToSelector");
if(!anchorNode || !ElementToMoveAndResize) return;
anchorNode.onmousedown = function(e){
if(!e) { e = window.event; }
var totalWidth = parseInt(ElementToMoveAndResize.parentNode.clientWidth);
var values = MassEval.functions.getFromToSelectorValues();
var initialX = MassEval.functions.getXmousePosition(e);
ElementToMoveAndResize.initialX = initialX;
ElementToMoveAndResize.Step = (100/values.total);
ElementToMoveAndResize.initialFrom = (values.from-1);
ElementToMoveAndResize.initialTo = (values.to+1);
ElementToMoveAndResize.initialTotal = values.total;
//console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToMoveAndResize.Step+" | From = "+ElementToMoveAndResize.initialFrom+" | To = "+ElementToMoveAndResize.initialTo);
$(document.body).addClass("MouseFunctionRunning");
$(document.body).addClass("ResizeFunctionRunning");
document.body.onmousemove = function(e){
if(!e) { e = window.event; }
var X = MassEval.functions.getXmousePosition(e);
var PercentMove = parseFloat((X - ElementToMoveAndResize.initialX)/(totalWidth*100)*10000);
var NewSteps = Math.round(PercentMove/ElementToMoveAndResize.Step);
var NewLeft = (ElementToMoveAndResize.initialFrom + NewSteps);
if(NewLeft < 0) NewLeft = 0;
if(NewLeft > ElementToMoveAndResize.initialTo-2) NewLeft = (ElementToMoveAndResize.initialTo-2);
var NewWidth = (ElementToMoveAndResize.initialTo - NewLeft -1);
//console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Step = "+ElementToMoveAndResize.Step+" | From = "+NewLeft+" | To = "+(NewWidth+NewLeft));
ElementToMoveAndResize.style.width = (NewWidth*ElementToMoveAndResize.Step) + '%';
ElementToMoveAndResize.style.left = (NewLeft*ElementToMoveAndResize.Step) + '%';
MassEval.functions.updateFromToSelectorValues({from:(NewLeft+1),to:(NewLeft+NewWidth)});
};
document.body.onmouseup = function(e) {
document.body.onmousemove = null;
document.body.onmouseup = null;
$(document.body).removeClass("MouseFunctionRunning");
$(document.body).removeClass("ResizeFunctionRunning");
};
};
anchorNode.style.cursor = "w-resize";
},
setToSelectorAnchor : function(){
var anchorNode = document.getElementById("ToSelector");
var ElementToResize = document.getElementById("FromToSelector");
if(!anchorNode || !ElementToResize) return;
anchorNode.onmousedown = function(e){
if(!e) { e = window.event; }
var totalWidth = parseInt(ElementToResize.parentNode.clientWidth);
var values = MassEval.functions.getFromToSelectorValues();
var initialX = MassEval.functions.getXmousePosition(e);
ElementToResize.initialX = initialX;
ElementToResize.Step = (100/values.total);
ElementToResize.initialFrom = (values.from-1);
ElementToResize.initialTo = (values.to+1);
ElementToResize.initialTotal = values.total;
//console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToResize.Step+" | From = "+ElementToResize.initialFrom+" | To = "+ElementToResize.initialTo);
$(document.body).addClass("MouseFunctionRunning");
$(document.body).addClass("ResizeFunctionRunning");
document.body.onmousemove = function(e){
if(!e) { e = window.event; }
var X = MassEval.functions.getXmousePosition(e);
var PercentMove = parseFloat((X - ElementToResize.initialX)/(totalWidth*100)*10000);
var NewSteps = Math.round(PercentMove/ElementToResize.Step);
var NewWidth = ((ElementToResize.initialTo-ElementToResize.initialFrom) -1 + NewSteps);
if(NewWidth < 1) NewWidth = 1;
if((NewWidth+ElementToResize.initialFrom) > ElementToResize.initialTotal){
NewWidth = (ElementToResize.initialTotal - ElementToResize.initialFrom);
}
//console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Width = "+NewWidth);
ElementToResize.style.width = (NewWidth*ElementToResize.Step) + '%';
MassEval.functions.updateFromToSelectorValues({from:(ElementToResize.initialFrom+1),to:(ElementToResize.initialFrom+NewWidth)});
};
document.body.onmouseup = function(e) {
document.body.onmousemove = null;
document.body.onmouseup = null;
$(document.body).removeClass("MouseFunctionRunning");
$(document.body).removeClass("ResizeFunctionRunning");
};
};
anchorNode.style.cursor = "w-resize";
},
setMoveSelectorAnchor : function(){
var anchorNode = document.getElementById("FromSelectorMove");
var ElementToMove = document.getElementById("FromToSelector");
if(!anchorNode || !ElementToMove) return;
anchorNode.onmousedown = function(e){
if(!e) { e = window.event; }
var totalWidth = parseInt(ElementToMove.parentNode.clientWidth);
var values = MassEval.functions.getFromToSelectorValues();
var initialX = MassEval.functions.getXmousePosition(e);
ElementToMove.initialX = initialX;
ElementToMove.Step = (100/values.total);
ElementToMove.initialFrom = (values.from-1);
ElementToMove.initialTo = values.to;
ElementToMove.initialTotal = values.total;
//console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToMove.Step+" | From = "+ElementToMove.initialFrom+" | To = "+ElementToMove.initialTo);
$(document.body).addClass("MouseFunctionRunning");
$(document.body).addClass("MoveFunctionRunning");
document.body.onmousemove = function(e){
if(!e) { e = window.event; }
var X = MassEval.functions.getXmousePosition(e);
var PercentMove = parseFloat((X - ElementToMove.initialX)/(totalWidth*100)*10000);
var NewSteps = Math.round(PercentMove/ElementToMove.Step);
var NewLeft = (ElementToMove.initialFrom + NewSteps);
if(NewLeft < 0) NewLeft = 0;
var NewWidth = ((ElementToMove.initialTo-ElementToMove.initialFrom));
if((NewWidth+NewLeft) > ElementToMove.initialTotal) NewLeft = ElementToMove.initialTotal-NewWidth;
//console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Step = "+ElementToMove.Step+" | From = "+NewLeft+" | To = "+(NewWidth+NewLeft));
ElementToMove.style.width = (NewWidth*ElementToMove.Step) + '%';
ElementToMove.style.left = (NewLeft*ElementToMove.Step) + '%';
MassEval.functions.updateFromToSelectorValues({from:(NewLeft+1),to:(NewLeft+NewWidth)});
};
document.body.onmouseup = function(e) {
document.body.onmousemove = null;
document.body.onmouseup = null;
$(document.body).removeClass("MouseFunctionRunning");
$(document.body).removeClass("MoveFunctionRunning");
};
};
anchorNode.style.cursor = "move";
},
checkFilterOptions : function(data){
var MassEvalBoardList = document.getElementById("MassEvalBoardList");
var STUBSelector = document.getElementById("FilterForm_STUB");
var ANDORselect1 = document.getElementById("ANDORselect1");
var AVTSelector = document.getElementById("FilterForm_AVT");
var ANDORselect2 = document.getElementById("ANDORselect2");
var IMPSelector = document.getElementById("FilterForm_IMP");
var PageFilteredCount = document.getElementById("PageFilteredCount");
if(!MassEvalBoardList || !STUBSelector || !ANDORselect1 || !AVTSelector || !ANDORselect2 || !IMPSelector || !PageFilteredCount) return;
if(!MassEval.functions.getFilterConditions()) return;
PageFilteredCount.style.visibility = "hidden";
var TRs = MassEvalBoardList.getElementsByTagName('tr');
if(TRs.length<2) return;
var stubs = [];
var STUBInputs = STUBSelector.getElementsByTagName("input");
for(var a=0,l=STUBInputs.length;a<l;a++){
if(STUBInputs[a].checked) stubs.push(parseInt(STUBInputs[a].value));
}
var avts = [];
var AVTInputs = AVTSelector.getElementsByTagName("input");
for(var a=0,l=AVTInputs.length;a<l;a++){
if(AVTInputs[a].checked) avts.push(parseInt(AVTInputs[a].value));
}
var imps = [];
var IMPInputs = IMPSelector.getElementsByTagName("input");
for(var a=0,l=IMPInputs.length;a<l;a++){
if(IMPInputs[a].checked) imps.push(parseInt(IMPInputs[a].value));
}
var andor1 = ANDORselect1.value;
var andor2 = ANDORselect2.value;
var shownpages = 0;
var totalpages = 0;
for(var a=1,l=TRs.length;a<l;a++){
var Classes = TRs[a].className.split(" ");
var thisstub = ( (Classes.indexOf("stub")!==-1) ? 1 : 0);
var thisavt = -1;
for(var c=0,clen=Classes.length;c<clen;c++){ if(Classes[c].indexOf("AVT_")!==-1) thisavt = parseInt(Classes[c].split("AVT_").join("")); }
var thisimp = -1;
for(var c=0,clen=Classes.length;c<clen;c++){ if(Classes[c].indexOf("IMP_")!==-1) thisimp = parseInt(Classes[c].split("IMP_").join("")); }
var foundSTUB = (stubs.indexOf(thisstub) !== -1);
var foundAVT = ( avts.indexOf(thisavt) !== -1);
var foundIMP = ( imps.indexOf(thisimp) !== -1);
if(MassEval.functions.getFilterResults([foundSTUB, andor1, foundAVT, andor2, foundIMP])){
$(TRs[a]).removeClass('FilteredLine');
shownpages++
}else{
$(TRs[a]).addClass('FilteredLine');
}
totalpages++
}
var template = MassEval.texts.FilteredCount;
var count = template.split("$shown").join(shownpages).split("$total").join(totalpages);
PageFilteredCount.innerHTML = count;
if(shownpages !== totalpages) $(PageFilteredCount).addClass("NotAllPages");
else $(PageFilteredCount).removeClass("NotAllPages");
PageFilteredCount.style.visibility = "visible";
if(!data) data = {};
data.afteroptioncheck = true;
MassEval.functions.setChangeCancelInputDisabled(data);
},
razFilterOptions(){
var STUBSelector = document.getElementById("FilterForm_STUB");
var AVTSelector = document.getElementById("FilterForm_AVT");
var IMPSelector = document.getElementById("FilterForm_IMP");
if(!STUBSelector || !AVTSelector || !IMPSelector) return;
var Els = [STUBSelector,AVTSelector,IMPSelector];
for(var a=0,l=Els.length;a<l;a++){
var inputs = Els[a].getElementsByTagName('input');
for(var i=0,ilen=inputs.length;i<ilen;i++){
inputs[i].checked = "checked";
}
}
MassEval.functions.checkFilterOptions();
},
getFilterConditions : function(){
var STUBSelector = document.getElementById("FilterForm_STUB");
var AVTSelector = document.getElementById("FilterForm_AVT");
var IMPSelector = document.getElementById("FilterForm_IMP");
if(!STUBSelector || !AVTSelector || !IMPSelector) return true;
var stubs = [];
var STUBInputs = STUBSelector.getElementsByTagName("input");
for(var a=0,l=STUBInputs.length;a<l;a++){
if(STUBInputs[a].checked) stubs.push(parseInt(STUBInputs[a].value));
}
var avts = [];
var AVTInputs = AVTSelector.getElementsByTagName("input");
for(var a=0,l=AVTInputs.length;a<l;a++){
if(AVTInputs[a].checked) avts.push(parseInt(AVTInputs[a].value));
}
var imps = [];
var IMPInputs = IMPSelector.getElementsByTagName("input");
for(var a=0,l=IMPInputs.length;a<l;a++){
if(IMPInputs[a].checked) imps.push(parseInt(IMPInputs[a].value));
}
if(stubs.length == 0 || avts.length == 0 || imps.length == 0){
if(stubs.length == 0){
STUBSelector.style.backgroundColor = "red";
MassEval.functions.alertControl("filtercheckSTUB", MassEval.texts.AlertMsgFilterSTUB, "Warning");
}else{
STUBSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckSTUB");
}
if(avts.length == 0){
AVTSelector.style.backgroundColor = "red";
MassEval.functions.alertControl("filtercheckAVT", MassEval.texts.AlertMsgFilterAVT, "Warning");
}else{
AVTSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckAVT");
}
if(imps.length == 0){
IMPSelector.style.backgroundColor = "red";
MassEval.functions.alertControl("filtercheckIMP", MassEval.texts.AlertMsgFilterIMP, "Warning");
}else{
IMPSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckIMP");
}
return false;
}else{
STUBSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckSTUB");
AVTSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckAVT");
IMPSelector.style.backgroundColor = "transparent";
MassEval.functions.alertControl("filtercheckIMP");
return true;
}
},
getFilterResults : function(VARS){
var table = [
[true ,"AND" ,false ,"AND" ,false ,false ],
[true ,"AND" ,false ,"AND" ,true ,false ],
[true ,"AND" ,true ,"AND" ,false ,false ],
[true ,"AND" ,true ,"AND" ,true ,true ],
[false ,"AND" ,false ,"AND" ,false ,false ],
[false ,"AND" ,false ,"AND" ,true ,false ],
[false ,"AND" ,true ,"AND" ,false ,false ],
[false ,"AND" ,true ,"AND" ,true ,false ],
[true ,"AND" ,false ,"OR" ,false ,false ],
[true ,"AND" ,false ,"OR" ,true ,true ],
[true ,"AND" ,true ,"OR" ,false ,true ],
[true ,"AND" ,true ,"OR" ,true ,true ],
[false ,"AND" ,false ,"OR" ,false ,false ],
[false ,"AND" ,false ,"OR" ,true ,true ],
[false ,"AND" ,true ,"OR" ,false ,false ],
[false ,"AND" ,true ,"OR" ,true ,true ],
[true ,"OR" ,false ,"AND" ,false ,true ],
[true ,"OR" ,false ,"AND" ,true ,true ],
[true ,"OR" ,true ,"AND" ,false ,true ],
[true ,"OR" ,true ,"AND" ,true ,true ],
[false ,"OR" ,false ,"AND" ,false ,false ],
[false ,"OR" ,false ,"AND" ,true ,false ],
[false ,"OR" ,true ,"AND" ,false ,false ],
[false ,"OR" ,true ,"AND" ,true ,true ],
[true ,"OR" ,false ,"OR" ,false ,true ],
[true ,"OR" ,false ,"OR" ,true ,true ],
[true ,"OR" ,true ,"OR" ,false ,true ],
[true ,"OR" ,true ,"OR" ,true ,true ],
[false ,"OR" ,false ,"OR" ,false ,false ],
[false ,"OR" ,false ,"OR" ,true ,true ],
[false ,"OR" ,true ,"OR" ,false ,true ],
[false ,"OR" ,true ,"OR" ,true ,true ]
];
for(var a=0,l=table.length;a<l;a++){
var R = table[a];
var result = true;
for(var r=0,rlen=VARS.length;r<rlen;r++){
if(VARS[r]!==R[r]) result = false;
}
if(result) return R[5];
}
},
// ------------------------------- Formulaire "Actions" -------------------------------
checkEmergencyStop : function(){
var EmergencyStop = document.getElementById("EmergencyStop");
if(!EmergencyStop) return true;
if(EmergencyStop.style.display == "none"){
MassEval.functions.alertControl("emergencystop");
return true;
}
var CanContinue = (!$(EmergencyStop).hasClass("Pushed"));
if(!CanContinue) MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopNeeded, "Stop");
return CanContinue;
},
createActionFieldset : function(){
var Texts = MassEval.texts;
var LaunchCond = MassEval.params.LaunchCondition;
var ActionsLI = document.createElement('fieldset');
ActionsLI.id = "fieldsetActions";
ActionsLI.id = "fieldsetActions";
var ActionsLabel = document.createElement('legend');
var ActionsLabel = ActionsLI.appendChild(document.createElement('legend'));
ActionsLabel.innerHTML = PortalEval.texts.Actions;
ActionsLabel.innerHTML = Texts.Actions;
var ActionsContainer = ActionsLI.appendChild(document.createElement('div'));
var PortalListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoListText,title:PortalEval.texts.GoListTitle});
$(ActionsContainer).addClass("FieldsetContent");
PortalListInput.id = "PortalEval_OptionPortalInput";
var LeftButtons = ActionsContainer.appendChild(document.createElement('div'));
LeftButtons.id = "LeftButtons";
var PortalListInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoListText,title:Texts.GoVerifCat,id:"GlobalVerifInput"}));
PortalListInput.style.fontWeight = "bold";
PortalListInput.onclick = function(){
PortalListInput.onclick = function(){
PortalEval.functions.clearBoard();
var Mode = MassEval.params.CurrentMode;
var Select = document.getElementById("PortalEval_OptionPortal");
var func = MassEval.functions[MassEval.params.ModesMap[Mode].listfunc];
if(typeof(func)==="function") func({});
PortalEval.functions.getPages(-1, Select.value);
};
var LinksActions = LeftButtons.appendChild(document.createElement('div'));
LinksActions.id = "LinksActions";
var EmergencyStop = LinksActions.appendChild(MassEval.functions.createLink(null,{text:"",href: "javascript:;",title:Texts.EmergencyStop }));
EmergencyStop.id = "EmergencyStop";
EmergencyStop.onclick = function(){
if($(this).hasClass("Pushed")){
$(this).removeClass("Pushed");
MassEval.functions.alertControl("emergencystop");
MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
}else{
$(this).addClass("Pushed");
MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopNeeded, "Stop");
}
return false;
};
var AddEvalInput = LinksActions.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoAddEvalText,title:Texts.GoAddLinks,id:"GlobalAddEvalInput"}));
if(LaunchCond ===2) AddEvalInput.title = Texts.GoAddCat;
AddEvalInput.style.fontWeight = "bold";
AddEvalInput.onclick = function(){
var AVTSelect = document.getElementById("GlobalAddEvalAVTSelect");
var IMPSelect = document.getElementById("GlobalAddEvalIMPSelect");
var Cancel = document.getElementById("GlobalAddEvalCancel");
if(!AVTSelect || !IMPSelect || !Cancel) return;
if(AVTSelect.style.display == "none"){
$(AVTSelect).show("slow");
$(IMPSelect).show("slow");
$(Cancel).show("slow");
}else{
$(AVTSelect).hide("slow");
$(IMPSelect).hide("slow");
$(Cancel).hide("slow");
var evaltheme = document.getElementById("EvalThemeInput").value;
var Mode = MassEval.params.CurrentMode;
var func = MassEval.functions[MassEval.params.ModesMap[Mode].listfunc];
if(typeof(func)==="function") func({onlymissingeval:true});
}
}
var AddEvalAVTSelect = LinksActions.appendChild(MassEval.functions.createAVTSelect(7, 0, false, true));
AddEvalAVTSelect.id = "GlobalAddEvalAVTSelect";
AddEvalAVTSelect.onchange = function(){ MassEval.functions.updateSelectBGcolor(this); }
AddEvalAVTSelect.title = Texts.AVT;
var AddEvalIMPSelect = LinksActions.appendChild(MassEval.functions.createIMPSelect(4, "", 0, 0, true));
AddEvalIMPSelect.id = "GlobalAddEvalIMPSelect";
AddEvalIMPSelect.onchange = function(){ MassEval.functions.updateSelectBGcolor(this); }
AddEvalIMPSelect.title = Texts.IMP;
var AddEvalCancel = LinksActions.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoAddCancelText,title:Texts.GoAddCancelTip,id:"GlobalAddEvalCancel"}));
AddEvalCancel.onclick = function(){
var AVTSelect = document.getElementById("GlobalAddEvalAVTSelect");
var IMPSelect = document.getElementById("GlobalAddEvalIMPSelect");
var Cancel = document.getElementById("GlobalAddEvalCancel");
if(!AVTSelect || !IMPSelect || !Cancel) return;
$(AVTSelect).hide("slow");
$(IMPSelect).hide("slow");
$(Cancel).hide("slow");
}
}
MassEval.functions.displayNodes([AddEvalAVTSelect,AddEvalIMPSelect,AddEvalCancel], false);
var GlobalChangeInput = PortalEval.functions.createInput({type:"button",name:"Change",value:PortalEval.texts.GoChangeText,title:PortalEval.texts.GoChangeTitle.split("$1").join("")});
GlobalChangeInput.id = "GlobalChangeInput";
var GlobalChangeInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoChangeText,title:Texts.GoChangeTitle.split("$1").join(""),id:"GlobalChangeInput"}));
GlobalChangeInput.onclick = function(){
GlobalChangeInput.onclick = function(){
MassEval.functions.processTheseLinesChanges();
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";
if(!MassEval.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("")});
var GlobalCancelInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoCancelText,title:Texts.GoCancelTitle.split("$1").join(""),id:"GlobalCancelInput"}));
GlobalCancelInput.id = "GlobalCancelInput";
GlobalCancelInput.onclick = function(){
GlobalCancelInput.onclick = function(){
PortalEval.functions.cancelAllChanges();
MassEval.functions.cancelAllChanges();
}
}
var PortalListInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoListText,title:PortalEval.texts.GoListTitle});
var ParamsInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoOptionsText,title:Texts.GoOptionsTitle,id:"GlobalOptionsInput"}));
MassEval.functions.disableThings([ ParamsInput ], !MassEval.params.OptionsSubPageOK);
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(){
ParamsInput.onclick = function(){
PortalEval.functions.openOptionsForm();
MassEval.functions.openOptionsForm();
}
}
MassEval.functions.disableThings([ PortalListInput, GlobalChangeInput, GlobalCancelInput ], true);
ActionsLI.appendChild(ActionsLabel);
var docInput = ActionsContainer.appendChild(MassEval.functions.createInput({type:'button',value:Texts.GoDocText,title:Texts.GoDocTitle,id:"DocInput"}));
ActionsLI.appendChild(PortalListInput);
docInput.onclick = function(){
ActionsLI.appendChild(GlobalChangeInput);
window.open(MassEval.params.DocURL);
ActionsLI.appendChild(GlobalCancelInput);
}
ActionsLI.appendChild(ParamsInput);
return ActionsLI;
PortalEval.functions.disableThings([ PortalListInput, GlobalChangeInput, GlobalCancelInput ], true);
return [ CatLI, EvalLI, SortLI, ActionsLI ];
},
},
createBoardListDiv : function(){
createBoardListDiv : function(){
var T = MassEval.texts;
var boardListDiv = document.createElement("div");
var boardListDiv = document.createElement("div");
boardListDiv.id = "PortalEvalBoardListDiv";
boardListDiv.id = "MassEvalBoardListDiv";
boardListDiv.className = "empty";
var boardList = document.createElement("table");
boardList.className = "evaltable wikitable centre";
boardListDiv.style.display = "none";
var boardList = boardListDiv.appendChild(document.createElement("table"));
boardList.id = "MassEvalBoardList";
boardList.className = "evaltable centre";
boardList.width = "100%";
boardList.width = "100%";
var TR1 = boardList.appendChild(document.createElement("tr"));
boardList.id = "PortalEvalBoardList";
for(var a=0,l=6;a<l;a++){
boardList.style.marginTop = "0";
var TR1 = document.createElement("tr");
var TH = TR1.appendChild(document.createElement("th"));
boardList.appendChild(TR1);
TH.id = "MassEval_TH"+(a+1);
for(var a=0,l=5;a<l;a++){
$(TH).addClass("TH"+(a+1));
var TH = document.createElement("th");
TH.appendChild(document.createTextNode(T[("TH"+a+"text")]));
TH.innerHTML = PortalEval.texts[("TH"+a+"text")];
var SortLinks = MassEval.functions.createSortLinks(a);
if(a !=0) TH.width = PortalEval.params[("TH"+a+"width")]+"px";
if(SortLinks) TH.appendChild(SortLinks);
TR1.appendChild(TH);
}
if(!MassEval.params.SearchForPortalTag) $(document.body).addClass("hideportals");
}
if(MassEval.params.LaunchCondition ===2){
boardListDiv.appendChild(boardList);
var bottomlinks = boardListDiv.appendChild(document.createElement("div"));
bottomlinks.id = "bottomlinks";
var t = T.bottomlinkstemplate;
bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.EvalTheme), title:" ",href:"#fieldsetEval"}));
bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Modes), title:" ",href:"#fieldsetModes"}));
bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Search), title:" ",href:"#fieldsetSearch"}));
bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Actions), title:" ",href:"#fieldsetActions"}));
bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.PageListTable),title:" ",href:"#MassEvalBoardListDiv"}));
}
return boardListDiv;
return boardListDiv;
},
},
removeBoard : function(){
clearBoardList : function(){
var board = document.getElementById("PortalEvalBoard");
var boardList = document.getElementById("MassEvalBoardList");
var boardListDiv = document.getElementById("MassEvalBoardListDiv");
if(board) board.style.display = "none";
if(boardList && boardListDiv){
PortalEval.functions.displayNodesById(PortalEval.params.ContenIDs, true);
},
clearBoard : function(){
var boardList = document.getElementById("PortalEvalBoardList");
if(boardList){
while(boardList.getElementsByTagName("tr").length > 1){
while(boardList.getElementsByTagName("tr").length > 1){
boardList.getElementsByTagName("tr")[1].parentNode.removeChild(boardList.getElementsByTagName("tr")[1]);
boardList.getElementsByTagName("tr")[1].parentNode.removeChild(boardList.getElementsByTagName("tr")[1]);
if(boardList.getElementsByTagName("tr").length < 2) break;
if(boardList.getElementsByTagName("tr").length < 2) break;
}
}
boardListDiv.style.display = "none";
}
},
// ------------------------------- Formulaire "Options de tri" -------------------------------

createSortLinks : function(thindex){
var SortOption = MassEval.params.SortOptions[thindex];
if(typeof(SortOption)==="undefined") return false;
var Container = document.createElement('div');
Container.className = "SortLinks";
var SortTypes = ["UP","DOWN"];
for(var t=0,tlen=SortTypes.length;t<tlen;t++){
var SortType = SortTypes[t];
var Text = MassEval.texts[("Sort"+SortType+"Arrow")];
var Title = MassEval.texts[(SortOption+SortType)];
var ThisLink = Container.appendChild(MassEval.functions.createLink(null,{text:Text,title:Title,href:"javascript:;"}));
ThisLink.className = (SortOption+"_"+SortType);
ThisLink.onclick = function(){
MassEval.functions.sortPages(this);
}
}
return Container;
},
sortPages : function(Link) {
var evaltheme = document.getElementById("EvalThemeInput").value;
if(!evaltheme) return;
var portaltheme = MassEval.functions.getPortalSelectValue();
var sortvalue = Link.className;
var getsortFunc = {
SortTitle : function(a,b){ var A = [b[1],a[1]].sort(); return ( A[0] == a[1] ? 1 : -1 ); },
SortPortal : function(a,b){ return (b[1] - a[1]); },
SortStub : function(a,b){ return (b[1] - a[1]); },
SortAVT : function(a,b){ return (b[1] - a[1]); },
SortIMP : function(a,b){ return (b[1] - a[1]); }
};
};
var getsortParam = {
SortTitle : function(p){ return MassEval.functions.deleteAccents(p.title); },
SortPortal : function(p, a, evaltheme, portaltheme) {
var count = 0;
if(p.portals && p.portals.length > 0 ){
for(var i=0,l=p.portals.length;i<l;i++){
var portal = p.portals[i];
count += (portal === portaltheme ? 100 : 1);
}
}
return count;
},
SortStub : function(p){ return (p.stub && p.stub.length > 0 ? p.stub.length : 0); },
SortAVT : function(p){ return (typeof(p.evalAVT)=="number" ? (10-p.evalAVT) : -1 ); },
SortIMP : function(p, a, evaltheme) {
var count = 0;
if(p.allIMP && Object.keys(p.allIMP).length > 0 ){
for(var theme in p.allIMP){
count += ( (6-(p.allIMP[theme])) * (6-(p.allIMP[theme])) * (theme === evaltheme ? 100 : 1) );
}
}
return count;
}
};
var down = sortvalue.indexOf("_DOWN")!==-1;
var type = sortvalue.replace(/_.*/g, "");
var sortFunc = getsortFunc[type];
var sortParam = getsortParam[type];
if(typeof(sortFunc)!=="function" || typeof(sortParam)!=="function") return;
MassEval.functions.alertControl("sort", MassEval.texts.AlertMsgSort, "Running");
var NewPageList = [];
var PageList = MassEval.params.PageList;
for(var a=0, l=PageList.length;a<l;a++){
NewPageList.push([ a, sortParam(PageList[a], a, evaltheme, portaltheme) ]);
}
NewPageList = NewPageList.sort(sortFunc);
for(var a=0, l=NewPageList.length;a<l;a++){
var index = NewPageList[a][0];
var TR = document.getElementById("IDtr_"+index);
if(!TR) continue;
// TR.title = NewPageList[a][1];
var target = TR.parentNode;
target.removeChild(TR);
if(down) target.appendChild(TR);
else target.insertBefore(TR, target.firstChild.nextSibling);
}
MassEval.functions.updateSortLink(Link);
MassEval.functions.alertControl("sort");
},
updateSortLink : function(Link) {
var oldLink = document.getElementById("selectedSort");
if(oldLink) oldLink.removeAttribute("id");
if(Link) Link.id = "selectedSort";
},
createControlElement : function(){
var ControlElement = document.getElementById("MassEvalControlUL");
if(!ControlElement){
ControlElement = document.createElement('ul');
ControlElement.id = "MassEvalControlUL";
document.body.appendChild(ControlElement);
var ControlItem = ControlElement.insertBefore(document.createElement('li'), ControlElement.firstChild);
ControlItem.className = "MassEvalControlLI";
ControlItem.id = "MassEvalControlLI_AllOK";
ControlItem.innerHTML = '<img class="AlertIcon" src="'+MassEval.params.ImageURL + MassEval.params.OKIcon+'" title="'+MassEval.texts.AlertMsgNone+'" />';
}
return ControlElement;
},
createControlItem : function(id){
var ControlElement = MassEval.functions.createControlElement();
var ControlItem = ControlElement.insertBefore(document.createElement('li'), ControlElement.firstChild);
ControlItem.className = "MassEvalControlLI";
if(typeof(id)==="string") ControlItem.id = id;
var ControlItemText = ControlItem.appendChild(document.createElement('span'));
ControlItemText.className = "MassEvalBoardControlText";
var ControlItemIcon = ControlItem.appendChild(document.createElement('span'));
ControlItemIcon.className = "MassEvalBoardControlIcon";
return {item:ControlItem,text:ControlItemText,icon:ControlItemIcon,OK:document.getElementById("MassEvalControlLI_AllOK")}
},
removeControlItem : function(id){
if(typeof(id)!=="string") return;
var ControlItem = document.getElementById(id);
if(ControlItem) ControlItem.parentNode.removeChild(ControlItem);
var ControlElement = MassEval.functions.createControlElement();
var RemainingLis = ControlElement.getElementsByTagName("li");
if(RemainingLis.length === 1) ControlElement.firstChild.style.display = "";
},
alertControl : function(id, text, icon){
MassEval.functions.removeControlItem(id);
if(typeof(text)=="string"){
var ControlItem = MassEval.functions.createControlItem(id);
if(!ControlItem) return;
var controlText = ControlItem.text;
var controlIcon = ControlItem.icon;
var controlOK = ControlItem.OK;
if(!controlText || !controlIcon || !controlOK) return;
controlOK.style.display = "none";
if(icon && MassEval.params[(icon+"Icon")]){
var link = '<a href="javascript:MassEval.functions.removeControlItem(\''+id+'\');" '+(text ? ('title="'+text+'"') : "")+' >';
var Icon = '<img class="AlertIcon" src="'+MassEval.params.ImageURL + MassEval.params[(icon+"Icon")]+'" />';
controlIcon.innerHTML = link + Icon + '</a>';
}
controlText.innerHTML = text;
controlText.style.display = '';
}
},
},
// ------------------------------- Fonctions pour la création des lignes de tableau -------------------------------
fillBoardLine : function(index, portal){
fillBoardLine : function(index, evaltheme, onlymissingeval){
var BoardListDiv = document.getElementById("PortalEvalBoardListDiv");
var BoardList = document.getElementById("PortalEvalBoardList");
var BoardListDiv = document.getElementById("MassEvalBoardListDiv");
var BoardList = document.getElementById("MassEvalBoardList");
if(!BoardList || !BoardListDiv) return false;
if(!BoardList || !BoardListDiv) return false;
BoardListDiv.style.display = "";
if(BoardListDiv.style.display == "none") $(BoardListDiv).slideDown("slow");
$(BoardListDiv).removeClass("empty");
var Target = BoardList.getElementsByTagName("tr")[0].parentNode;
var Target = BoardList.getElementsByTagName("tr")[0].parentNode;
var TR = document.createElement('tr');
var TR = document.createElement('tr');
TR.id = "IDtr_"+index;
Target.appendChild(TR);
var pagedatas = PortalEval.params.PageList[index];
var OldTR = document.getElementById("IDtr_"+index);
if(OldTR){
OldTR.parentNode.insertBefore(TR, OldTR);
OldTR.parentNode.removeChild(OldTR);
}else{
Target.appendChild(TR);
}
var pagedatas = MassEval.params.PageList[index];
var title = pagedatas.title;
var title = pagedatas.title;
var talktitle = pagedatas.talktitle;
var talktitle = pagedatas.talktitle;
var pagemissing = pagedatas.pagemissing;
var talkmissing = pagedatas.talkmissing;
var talkmissing = pagedatas.talkmissing;
var redirectfrom = pagedatas.redirectfrom;
var redirectfrom = pagedatas.redirectfrom;
var disambig = pagedatas.disambig;
var disambig = pagedatas.disambig;
var portals = pagedatas.portals;
var stub = pagedatas.stub;
var stub = pagedatas.stub;
var evalWT = pagedatas.evalWT;
var evalWT = pagedatas.evalWT;
Line 1,778: Line 7,267:
var evalIMP = pagedatas.evalIMP;
var evalIMP = pagedatas.evalIMP;
var allIMP = pagedatas.allIMP;
var allIMP = pagedatas.allIMP;
TR.id = "IDtr_"+index;
var classes = [];
var classes = [];
if(stub) classes.push("stub");
if(stub && stub.length > 0) classes.push("stub");
if(typeof(evalAVT)=="number") classes.push("AVT_"+evalAVT);
if(typeof(evalAVT)==="number") classes.push("AVT_"+evalAVT);
if(typeof(evalIMP)=="number") classes.push("IMP_"+evalIMP);
if(typeof(evalIMP)==="number") classes.push("IMP_"+evalIMP);
if(onlymissingeval) classes.push("Modified");
TR.className = classes.join(" ");
TR.className = classes.join(" ");
var TD1 = document.createElement("td"); // "Page"
var TD1 = document.createElement("td"); // "Page"
TD1.className = "TD1";
TD1.className = "TD1";
var TD1Content = TD1.appendChild(document.createElement('div'));
var PageLink = PortalEval.functions.createLink((redirectfrom ? redirectfrom : title), {preview:index, class:(redirectfrom ? "mw-redirect" : "")});
TD1Content.className = "TD1Content";
var TalkPageLink = PortalEval.functions.createLink(talktitle, {text:PortalEval.texts.TalkText, preview:index, class:(talkmissing ? "new" : "")});
var PageLink = MassEval.functions.createLink((redirectfrom ? redirectfrom : title), {preview:index, class:(redirectfrom ? "mw-redirect" : (pagemissing ? "new" : ""))});
TD1.appendChild(PageLink);
var TalkPageLink = MassEval.functions.createLink(talktitle, {text:MassEval.texts.TalkText, preview:index, class:(talkmissing ? "new" : "")});
TD1.appendChild(document.createTextNode(" ("));
TD1.appendChild(TalkPageLink);
TD1Content.appendChild(PageLink);
TD1.appendChild(document.createTextNode(")"));
TD1Content.appendChild(document.createTextNode(" ("));
TD1Content.appendChild(TalkPageLink);
if(disambig){
var Dspan = document.createElement('abbr');
TD1Content.appendChild(document.createTextNode(")"));
if(redirectfrom || disambig) TD1Content.appendChild(document.createTextNode(" — "));
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){
if(redirectfrom){
var Rspan = document.createElement('abbr');
var Rspan = document.createElement('abbr');
$(Rspan).addClass("pagepropicon");
var Ricon = '<img width="12" src="'+PortalEval.params.ImageURL + PortalEval.params.RedirectIcon+'" />';
var Ricon = '<img class="RedirectIcon" src="'+MassEval.params.ImageURL + MassEval.params.RedirectIcon+'" />';
Rspan.innerHTML = Ricon;
Rspan.innerHTML = Ricon;
Rspan.title = PortalEval.texts.RedirectText.split("$page").join(title);
Rspan.title = MassEval.texts.RedirectText.split("$page").join(title);
TD1.appendChild(document.createTextNode(" — "));
TD1Content.appendChild(Rspan);
}
TD1.appendChild(Rspan);
if(disambig){
var Dspan = document.createElement('abbr');
$(Dspan).addClass("pagepropicon");
Dspan.innerHTML = '<img class="DisambigIcon" src="'+MassEval.params.ImageURL + MassEval.params.DisambigIcon+'" />';
Dspan.title = MassEval.texts.DisambigTitle;
TD1Content.appendChild(Dspan);
}
}
var TD2 = document.createElement("td"); // "Bandeau d'ébauche"
var TD2 = document.createElement("td"); // "Portails"
TD2.className = "TD2";
TD2.className = "TD2";
var TD2Content = TD2.appendChild(document.createElement('div'));
TD2.style.textAlign = "right";
TD2Content.className = "TD2Content";
if(MassEval.params.SearchForPortalTag && portals && portals.length > 0){
var PortalUL = TD2Content.appendChild(document.createElement('ul'));
var SelectedPortal = MassEval.functions.getPortalSelectValue();
for(var a=0,l=portals.length;a<l;a++){
var thisportal = portals[a];
var PortalLabel = document.createElement('li');
PortalLabel.innerHTML = thisportal;
if(thisportal === SelectedPortal){
PortalLabel.style.fontWeight = "bold";
PortalUL.insertBefore(PortalLabel, PortalUL.firstChild);
}else{
PortalUL.appendChild(PortalLabel);
}
}
}else if(!MassEval.params.SearchForPortalTag){
TD2.style.backgroundColor = "red";
}
var TD3 = document.createElement("td"); // "Bandeau d'ébauche"
TD3.className = "TD3";
var TD3Content = TD3.appendChild(document.createElement('div'));
TD3Content.className = "TD3Content";
if(stub){
if(stub){
for(var a=0,l=stub.length;a<l;a++){
for(var a=0,l=stub.length;a<l;a++){
TD2.appendChild(PortalEval.functions.createStubSelect(index, a));
TD3Content.appendChild(MassEval.functions.createStubThemeSelect(index, a));
}
}
}
}
Line 1,818: Line 7,332:
if(stub && stub.length > 5) AddStubForm.style.display = "none";
if(stub && stub.length > 5) AddStubForm.style.display = "none";
AddStubForm.id = "STUBadd_"+index;
AddStubForm.id = "STUBadd_"+index;
var AddStubInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.AddSTUBText,title:PortalEval.texts.AddSTUBTitle});
var AddStubInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.AddSTUBText,title:MassEval.texts.AddSTUBTitle});
AddStubInput.onclick = function(){
AddStubInput.onclick = function(){
PortalEval.functions.addOneStubForm(index);
MassEval.functions.addOneStubForm(index);
}
}
AddStubForm.appendChild(AddStubInput);
AddStubForm.appendChild(AddStubInput);
TD2.appendChild(AddStubForm);
TD3Content.appendChild(AddStubForm);
var TD3 = document.createElement("td"); // "Avancement"
var TD4 = document.createElement("td"); // "Avancement"
TD3.className = "TD3";
TD4.className = "TD4";
var TD4Content = TD4.appendChild(document.createElement('div'));
TD3.style.textAlign = "center";
TD4Content.className = "TD4Content";
if(typeof(evalAVT)=="number"){
if(typeof(evalAVT)=="number"){
TD3.appendChild(PortalEval.functions.createAVTSelect(evalAVT, index));
var AVTselect = TD4Content.appendChild(MassEval.functions.createAVTSelect(evalAVT, index));
if( ( (stub && stub.length>0) && evalAVT != 5) || ( (!stub || stub.length==0) && evalAVT == 5) ){
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";
TD3.style.border = "2px solid red";
TD4.style.border = "2px solid red";
}
}
if( (disambig && evalAVT != 6) || (!disambig && evalAVT == 6) ){
}else TD3.appendChild(PortalEval.functions.createAVTSelect(-1, index, true));
var TD4 = document.createElement("td"); // "Importances"
TD1.style.border = "2px solid red";
TD4.className = "TD4";
TD4.style.border = "2px solid red";
TD4.style.textAlign = "right";
}
}else{
var AVTselect = TD4Content.appendChild(MassEval.functions.createAVTSelect(-1, index, true));
}
if(onlymissingeval) $(AVTselect).addClass("Modified");
var TD5 = document.createElement("td"); // "Importances"
TD5.className = "TD5";
var TD5Content = TD5.appendChild(document.createElement('div'));
TD5Content.className = "TD5Content";
if(typeof(evalIMP)=="number"){
if(typeof(evalIMP)=="number"){
TD4.appendChild(PortalEval.functions.createIMPSelect(evalIMP, portal, index, 0));
var IMPselect = TD5Content.appendChild(MassEval.functions.createIMPSelect(evalIMP, evaltheme, index, 0));
if(onlymissingeval) $(IMPselect).addClass("Modified");
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){
if(allIMP){
var count = 1;
var count = 1;
for(var port in allIMP){
for(var theme in allIMP){
if(port == portal) continue;
if(MassEval.functions.ucFirst(theme) == MassEval.functions.ucFirst(evaltheme)) continue;
var thisimp = allIMP[port];
var thisimp = allIMP[theme];
TD4.appendChild(PortalEval.functions.createIMPSelect(thisimp, port, index, count));
TD5Content.appendChild(MassEval.functions.createIMPSelect(thisimp, theme, index, count));
count++
count++
}
}
Line 1,859: Line 7,375:
var AddIMPForm = document.createElement('form');
var AddIMPForm = document.createElement('form');
AddIMPForm.id = "IMPadd_"+index;
AddIMPForm.id = "IMPadd_"+index;
var AddIMPInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.AddIMPText,title:PortalEval.texts.AddIMPTitle});
var AddIMPInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.AddIMPText,title:MassEval.texts.AddIMPTitle});
AddIMPInput.onclick = function(){
AddIMPInput.onclick = function(){
PortalEval.functions.addOneIMPForm(index);
MassEval.functions.addOneIMPForm(index);
}
}
AddIMPForm.appendChild(AddIMPInput);
AddIMPForm.appendChild(AddIMPInput);
TD4.appendChild(AddIMPForm);
TD5Content.appendChild(AddIMPForm);
var TD5 = document.createElement("td"); // "Actions"
var TD6 = document.createElement("td"); // "Actions"
TD5.className = "TD6";
TD6.className = "TD6";
var TD6Content = TD6.appendChild(document.createElement('div'));
TD5.style.textAlign = "center";
TD6Content.className = "TD6Content";
var ChangeInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoChangeOneText,title:PortalEval.texts.GoChangeOneTitle});
ChangeInput.id = "change_"+index;
var ChangeInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoChangeOneText,title:MassEval.texts.GoChangeOneTitle,id:"change_"+index});
$(ChangeInput).addClass("changeinput");
if(!PortalEval.params.AllowEdition) ChangeInput.style.fontStyle = "italic";
if(!MassEval.params.AllowEdition) ChangeInput.style.fontStyle = "italic";
ChangeInput.onclick = function(){
ChangeInput.onclick = function(){
PortalEval.functions.processThatLineChanges(index);
MassEval.functions.processThatLineChanges(index);
}
}
TD5.appendChild(ChangeInput);
TD6Content.appendChild(ChangeInput);
var CancelInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoCancelOneText,title:MassEval.texts.GoCancelOneTitle,id:"cancel_"+index});
TD5.appendChild(document.createElement("br"));
$(CancelInput).addClass("cancelinput");
var CancelInput = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.GoCancelOneText,title:PortalEval.texts.GoCancelOneTitle});
CancelInput.id = "cancel_"+index;
CancelInput.onclick = function(){
CancelInput.onclick = function(){
PortalEval.functions.updateThatLine(index, pagedatas, true);
MassEval.functions.updateThatLine(index, pagedatas, true, true);
}
TD6Content.appendChild(CancelInput);
MassEval.functions.disableThings([ ChangeInput, CancelInput ], (!onlymissingeval));
var ShowHideInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoHideOneText,title:MassEval.texts.GoHideOneTitle,id:"showhide_"+index});
TD6Content.appendChild(ShowHideInput);
ShowHideInput.onclick = function(){
MassEval.functions.showhideThisLineContent(this, index);
}
var LinksCheckbox = document.getElementById("LinksCheckbox");
if([4, 5].indexOf(MassEval.params.LaunchCondition) !== -1 && (!LinksCheckbox || !LinksCheckbox.checked)){
TD6.style.display = "none";
MassEval.functions.displayNodes(["MassEval_TH6"], false);
}else{
MassEval.functions.displayNodes(["MassEval_TH6"], true);
}
}
TD5.appendChild(CancelInput);
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
TR.appendChild(TD1);
TR.appendChild(TD1);
TR.appendChild(TD2);
TR.appendChild(TD2);
Line 1,888: Line 7,416:
TR.appendChild(TD4);
TR.appendChild(TD4);
TR.appendChild(TD5);
TR.appendChild(TD5);
if(PortalEval.params.AutoLaunchPreview) PortalEval.functions.previewPage(title, index);
TR.appendChild(TD6);
if(MassEval.params.AutoLaunchPreview) MassEval.functions.previewPage(title, index);
return TR;
return TR;
},
},
showhideThisLineContent(button, index){
updateAdjSelect : function(type, index, count, def){ // type = "", "M", "F"
var TR = document.getElementById("IDtr_"+index);
if(!TR) return;
var previewbuttons = document.getElementById("previewbuttons_"+index);
var previewDiv = document.getElementById("previewDiv_"+index);
var changeBTN = document.getElementById("change_"+index);
var cancelBTN = document.getElementById("cancel_"+index);
if(button.value == MassEval.texts.GoHideOneText){
button.value = MassEval.texts.GoShowOneText;
button.title = MassEval.texts.GoShowOneTitle;
if(previewbuttons) $(previewbuttons).slideUp("slow");
if(previewDiv) $(previewDiv).slideUp("slow");
if(changeBTN) $(changeBTN).slideUp("slow");
if(cancelBTN) $(cancelBTN).slideUp("slow");
$("#"+TR.id+" .TD2Content").slideUp("slow");
$("#"+TR.id+" .TD3Content").slideUp("slow");
$("#"+TR.id+" .TD4Content").slideUp("slow");
$("#"+TR.id+" .TD5Content").slideUp("slow");
$(TR).addClass("HiddenTR");
}else{
button.value = MassEval.texts.GoHideOneText;
button.title = MassEval.texts.GoHideOneTitle;
if(previewbuttons) $(previewbuttons).slideDown("slow");
if(previewDiv) $(previewDiv).slideDown("slow");
if(changeBTN) $(changeBTN).slideDown("slow");
if(cancelBTN) $(cancelBTN).slideDown("slow");
$("#"+TR.id+" .TD2Content").slideDown("slow");
$("#"+TR.id+" .TD3Content").slideDown("slow");
$("#"+TR.id+" .TD4Content").slideDown("slow");
$("#"+TR.id+" .TD5Content").slideDown("slow");
$(TR).removeClass("HiddenTR");
}
MassEval.functions.setChangeCancelInputDisabled();
},
updateAdjSelect : function(type, index, count, def){ // type = "M", "F"
var Hidden = document.getElementById("adjHidden_"+count+"_"+index);
var Hidden = document.getElementById("adjHidden_"+count+"_"+index);
if(!Hidden){
if(!Hidden){
form = document.createElement("span");
form = document.createElement("span");
form.id = "AdjForm_"+count+"_"+index;
form.id = "AdjForm_"+count+"_"+index;
Hidden = PortalEval.functions.createInput({type:"hidden"});
Hidden = MassEval.functions.createInput({type:"hidden",id:"adjHidden_"+count+"_"+index});
Hidden.id = "adjHidden_"+count+"_"+index;
form.appendChild(Hidden);
form.appendChild(Hidden);
var HiddenType = PortalEval.functions.createInput({type:"hidden",value:type});
var HiddenType = MassEval.functions.createInput({type:"hidden",value:type,id:"TypeadjHidden_"+count+"_"+index});
HiddenType.id = "TypeadjHidden_"+count+"_"+index;
form.appendChild(HiddenType);
form.appendChild(HiddenType);
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.id = "adjSelect_"+count+"_"+index;
Select.id = "adjSelect_"+count+"_"+index;
Select.name = "adjHidden_"+count+"_"+index;
Select.name = "adjHidden_"+count+"_"+index;
Select.className = "adj";
Select.className = "adj StubAdj";
Select.style.width = PortalEval.params.StubThemeWidth+"px";
form.appendChild(Select);
form.appendChild(Select);
Select.onchange = function(){
Select.onchange = function(){
Line 1,914: Line 7,474:
if(val == defval) $(Select).removeClass("Modified");
if(val == defval) $(Select).removeClass("Modified");
else $(Select).addClass("Modified");
else $(Select).addClass("Modified");
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
MassEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
}
}
}else{
}else{
Line 1,928: Line 7,488:
if(type !== null){
if(type !== null){
$(Select).addClass(type);
$(Select).addClass(type);
var list = PortalEval.params[("StubAdj"+type)];
var list = MassEval.params[("StubAdj"+type)];
for(var a=0,l=list.length;a<l;a++){
for(var a=0,l=list.length;a<l;a++){
var thisadj = list[a];
var thisadj = list[a];
Line 1,945: Line 7,505:
getStubAdjType : function(STUBtheme){
getStubAdjType : function(STUBtheme){
var type = null;
var type = null;
var theme = PortalEval.params.StubThemes[STUBtheme];
var theme = MassEval.params.StubThemes[STUBtheme];
if(!theme) return null;
if(!theme) return null;
var catpattern = theme.categ;
var catpattern = theme.categ;
Line 1,959: Line 7,519:
for(var t=0,tlen=adjTypes.length;t<tlen;t++){
for(var t=0,tlen=adjTypes.length;t<tlen;t++){
var thistype = adjTypes[t];
var thistype = adjTypes[t];
var adjList = PortalEval.params[("StubAdj"+thistype)];
var adjList = MassEval.params[("StubAdj"+thistype)];
for(var a=0,l=adjList.length;a<l;a++){
for(var a=0,l=adjList.length;a<l;a++){
var thisadj = adjList[a];
var thisadj = adjList[a];
Line 1,965: Line 7,525:
var catpattern = STUBtheme.split(" "+thisadj).join(" <adj"+(thistype=="F"?"F":"")+">");
var catpattern = STUBtheme.split(" "+thisadj).join(" <adj"+(thistype=="F"?"F":"")+">");
var strippedtheme = STUBtheme.split(" "+thisadj).join("");
var strippedtheme = STUBtheme.split(" "+thisadj).join("");
var realtheme1 = PortalEval.params.StubThemes[PortalEval.functions.lcFirst(strippedtheme)];
var realtheme1 = MassEval.params.StubThemes[MassEval.functions.lcFirst(strippedtheme)];
var realtheme2 = PortalEval.params.StubThemes[PortalEval.functions.ucFirst(strippedtheme)];
var realtheme2 = MassEval.params.StubThemes[MassEval.functions.ucFirst(strippedtheme)];
if(typeof(realtheme1) != "undefined"){
if(typeof(realtheme1) != "undefined"){
adjDatas.type = thistype;
adjDatas.type = thistype;
adjDatas.adj = thisadj;
adjDatas.adj = thisadj;
adjDatas.strippedtheme = PortalEval.functions.lcFirst(strippedtheme);
adjDatas.strippedtheme = MassEval.functions.lcFirst(strippedtheme);
if(!realtheme1.categ) PortalEval.params.StubThemes[PortalEval.functions.lcFirst(strippedtheme)].categ = catpattern;
if(!realtheme1.categ) MassEval.params.StubThemes[MassEval.functions.lcFirst(strippedtheme)].categ = catpattern;
}else if(typeof(realtheme2) != "undefined"){
}else if(typeof(realtheme2) != "undefined"){
adjDatas.type = thistype;
adjDatas.type = thistype;
adjDatas.adj = thisadj;
adjDatas.adj = thisadj;
adjDatas.strippedtheme = PortalEval.functions.ucFirst(strippedtheme);
adjDatas.strippedtheme = MassEval.functions.ucFirst(strippedtheme);
if(!realtheme2.categ) PortalEval.params.StubThemes[PortalEval.functions.ucFirst(strippedtheme)].categ = catpattern;
if(!realtheme2.categ) MassEval.params.StubThemes[MassEval.functions.ucFirst(strippedtheme)].categ = catpattern;
}
}
}
}
Line 1,983: Line 7,543:
return adjDatas;
return adjDatas;
},
},
createStubSelect : function(index, count){
createStubThemeSelect : function(index, count){
var thisstub = PortalEval.params.PageList[index].stub[count];
var thisstub = MassEval.params.PageList[index].stub[count];
var STUBthemeDatas = PortalEval.functions.getAdjDatas(thisstub);
var STUBthemeDatas = MassEval.functions.getAdjDatas(thisstub);
var form = document.createElement("form");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.onsubmit = function(){ return false; };
Line 1,991: Line 7,551:
form.className = "Stub";
form.className = "Stub";
form.style.whiteSpace = "nowrap";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
var Hidden = MassEval.functions.createInput({type:"hidden",id:"Ébauche_"+count+"_"+index});
Hidden.id = "Ébauche_"+count+"_"+index;
form.appendChild(Hidden);
form.appendChild(Hidden);
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.name = "Ébauche_"+count+"_"+index;
Select.name = "Ébauche_"+count+"_"+index;
Select.style.width = PortalEval.params.StubThemeWidth+"px";
Select.className = "StubTheme";
Select.onchange = function(){
Select.onchange = function(){
PortalEval.functions.checkStubFormChanged(this, count, index);
MassEval.functions.checkStubFormChanged(this, count, index);
}
}
form.appendChild(Select);
form.appendChild(Select);
var allthemes = PortalEval.functions.sortTextList(Object.keys(PortalEval.params.StubThemes));
var allthemes = MassEval.functions.sortTextList(Object.keys(MassEval.params.StubThemes));
for(var a=0,l=allthemes.length;a<l;a++){
for(var a=0,l=allthemes.length;a<l;a++){
var thistheme = allthemes[a];
var thistheme = allthemes[a];
var themedatas = PortalEval.params.StubThemes[thistheme];
var themedatas = MassEval.params.StubThemes[thistheme];
var opt = document.createElement('option');
var opt = document.createElement('option');
opt.innerHTML = thistheme;
opt.innerHTML = thistheme;
Line 2,014: Line 7,573:
Select.appendChild(opt);
Select.appendChild(opt);
}
}
var type = ( STUBthemeDatas.type || PortalEval.functions.getStubAdjType(STUBthemeDatas.strippedtheme));
var type = ( STUBthemeDatas.type || MassEval.functions.getStubAdjType(STUBthemeDatas.strippedtheme));
form.appendChild(PortalEval.functions.updateAdjSelect(type, index, count, STUBthemeDatas.adj));
form.appendChild(MassEval.functions.updateAdjSelect(type, index, count, STUBthemeDatas.adj));
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteSTUBText,title:PortalEval.texts.DeleteSTUBTitle});
var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteSTUBText,title:MassEval.texts.DeleteSTUBTitle});
suplink.onclick = function(){
suplink.onclick = function(){
var F = this.parentNode;
var F = this.parentNode;
Line 2,022: Line 7,581:
F.style.display = "none";
F.style.display = "none";
$(F).addClass("Removed");
$(F).addClass("Removed");
PortalEval.functions.checkStubFormNumbers(index);
MassEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
MassEval.functions.setChangeCancelOneSTUBInputDisabled(this, count, index);
}
}
form.appendChild(document.createTextNode(" "));
form.appendChild(document.createTextNode(" "));
Line 2,054: Line 7,613:
var AddStubForm = document.getElementById("STUBadd_"+index);
var AddStubForm = document.getElementById("STUBadd_"+index);
var TD = AddStubForm.parentNode;
var TD = AddStubForm.parentNode;
var count = PortalEval.functions.getSelectCountValue(TD, index, "Stub", "STUBform");
var count = MassEval.functions.getSelectCountValue(TD, index, "Stub", "STUBform");
var form = document.createElement("form");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.onsubmit = function(){ return false; };
Line 2,060: Line 7,619:
form.className = "Stub Modified Added";
form.className = "Stub Modified Added";
form.style.whiteSpace = "nowrap";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden",value:"."});
var Hidden = MassEval.functions.createInput({type:"hidden",value:".",id:"Ébauche NEW_"+count+"_"+index});
Hidden.id = "Ébauche NEW_"+count+"_"+index;
form.appendChild(Hidden);
form.appendChild(Hidden);
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.name = "Ébauche NEW_"+count+"_"+index;
Select.name = "Ébauche NEW_"+count+"_"+index;
Select.className = "StubTheme";
$(Select).addClass("Modified");
$(Select).addClass("Modified");
var allthemes = MassEval.functions.sortTextList(Object.keys(MassEval.params.StubThemes));
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++){
for(var a=0,l=allthemes.length;a<l;a++){
var thistheme = allthemes[a];
var thistheme = allthemes[a];
Line 2,078: Line 7,636:
}
}
Select.onchange = function(){
Select.onchange = function(){
PortalEval.functions.checkStubFormChanged(this, count, index);
MassEval.functions.checkStubFormChanged(this, count, index);
}
}
form.appendChild(Select);
form.appendChild(Select);
form.appendChild(PortalEval.functions.updateAdjSelect(null, index, count, ""));
form.appendChild(MassEval.functions.updateAdjSelect(null, index, count, ""));
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteSTUBText,title:PortalEval.texts.DeleteSTUBTitle});
var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteSTUBText,title:MassEval.texts.DeleteSTUBTitle});
suplink.onclick = function(){
suplink.onclick = function(){
var F = this.parentNode;
var F = this.parentNode;
F.parentNode.removeChild(F);
F.parentNode.removeChild(F);
PortalEval.functions.checkStubFormNumbers(index);
MassEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
MassEval.functions.setChangeCancelOneInputDisabled(index);
}
}
form.appendChild(document.createTextNode(" "));
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
form.appendChild(suplink);
AddStubForm.parentNode.insertBefore(form, AddStubForm);
AddStubForm.parentNode.insertBefore(form, AddStubForm);
PortalEval.functions.checkStubFormNumbers(index);
MassEval.functions.checkStubFormNumbers(index);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
MassEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
Select.focus();
Select.focus();
},
},
Line 2,105: Line 7,663:
if($(adjSelect).hasClass("M")) Oldtype = "M";
if($(adjSelect).hasClass("M")) Oldtype = "M";
if($(adjSelect).hasClass("F")) Oldtype = "F";
if($(adjSelect).hasClass("F")) Oldtype = "F";
var NewType = PortalEval.functions.getStubAdjType(val);
var NewType = MassEval.functions.getStubAdjType(val);
if(NewType!=null){
if(NewType!=null){
var paramAdj = PortalEval.params[("StubAdj"+NewType)];
var paramAdj = MassEval.params[("StubAdj"+NewType)];
if(Oldtype != null) def = paramAdj[adjSelect.value];
if(Oldtype != null) def = paramAdj[adjSelect.value];
else def = paramAdj[adjHidden.value];
else def = paramAdj[adjHidden.value];
Line 2,113: Line 7,671:
if(val == defval && !$(Select.parentNode).hasClass("Added")) $(Select).removeClass("Modified");
if(val == defval && !$(Select.parentNode).hasClass("Added")) $(Select).removeClass("Modified");
else $(Select).addClass("Modified");
else $(Select).addClass("Modified");
PortalEval.functions.updateAdjSelect(NewType, index, count, def);
MassEval.functions.updateAdjSelect(NewType, index, count, def);
PortalEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
MassEval.functions.setChangeCancelOneSTUBInputDisabled(Select, count, index);
},
},
checkStubFormNumbers : function(index){
checkStubFormNumbers : function(index){
Line 2,135: Line 7,693:
if($(Selects[a]).hasClass("Modified") || $(Form).hasClass("Removed")) $(Form).addClass("Modified");
if($(Selects[a]).hasClass("Modified") || $(Form).hasClass("Removed")) $(Form).addClass("Modified");
}
}
PortalEval.functions.setChangeCancelOneInputDisabled(index);
MassEval.functions.setChangeCancelOneInputDisabled(index);
},
},
createIMPSelect : function(evalIMP, portal, index, count){
createIMPSelect : function(evalIMP, evaltheme, index, count, onlyselect){
var form = document.createElement("form");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.onsubmit = function(){ return false; };
Line 2,143: Line 7,701:
form.style.whiteSpace = "nowrap";
form.style.whiteSpace = "nowrap";
form.className = "Eval";
form.className = "Eval";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
var Hidden = MassEval.functions.createInput({type:"hidden",id:"IMP_"+count+"_"+index});
Hidden.id = "IMP_"+count+"_"+index;
form.appendChild(Hidden);
form.appendChild(Hidden);
var Label = document.createElement('label');
var Label = document.createElement('label');
Label.setAttribute("for", "Importance "+portal);
Label.setAttribute("for", "Importance "+evaltheme);
Label.innerHTML = portal;
Label.innerHTML = MassEval.functions.ucFirst(evaltheme);
if(count==0){
if(count==0){
Label.style.fontWeight = "bold";
Label.style.fontWeight = "bold";
Label.className = "portal";
Label.className = "evaltheme";
}
}
form.appendChild(Label);
form.appendChild(Label);
form.appendChild(document.createTextNode(" : "));
form.appendChild(document.createTextNode(" : "));
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.name = "Importance "+portal;
Select.name = "Importance "+evaltheme;
for(var a=0,l=PortalEval.params.Importance.length;a<l;a++){
Select.className = "Importance";
var thisimp = PortalEval.params.Importance[a];
for(var a=0,l=MassEval.params.Importance.length;a<l;a++){
var thisimp = MassEval.params.Importance[a];
var opt = document.createElement('option');
var opt = document.createElement('option');
opt.innerHTML = thisimp.text;
opt.innerHTML = thisimp.text;
Line 2,164: Line 7,722:
opt.style.backgroundColor = thisimp.color;
opt.style.backgroundColor = thisimp.color;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
else opt.style.color = "black";
if(a == evalIMP){
if(a == evalIMP){
opt.selected = "selected";
opt.selected = "selected";
Line 2,170: Line 7,729:
Select.appendChild(opt);
Select.appendChild(opt);
}
}
MassEval.functions.updateSelectBGcolor(Select);
if(onlyselect) return Select;
Select.onchange = function(){
Select.onchange = function(){
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
MassEval.functions.updateSelectBGcolor(this);
MassEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
}
form.appendChild(Select);
form.appendChild(Select);
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteIMPText,title:PortalEval.texts.DeleteIMPTitle});
var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteIMPText,title:MassEval.texts.DeleteIMPTitle});
suplink.onclick = function(){
suplink.onclick = function(){
var F = this.parentNode;
var F = this.parentNode;
thisSelect = F.getElementsByTagName("select")[0];
thisSelect = F.getElementsByTagName("select")[0];
PortalEval.functions.disableThings([ thisSelect ], true);
MassEval.functions.disableThings([ thisSelect ], true);
F.style.display = "none";
F.style.display = "none";
$(F).addClass("Removed");
$(F).addClass("Removed");
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
MassEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
}
form.appendChild(document.createTextNode(" "));
form.appendChild(document.createTextNode(" "));
Line 2,193: Line 7,755:
if(val == defval) $(F).removeClass("Modified");
if(val == defval) $(F).removeClass("Modified");
else $(F).addClass("Modified");
else $(F).addClass("Modified");
PortalEval.functions.setChangeCancelOneInputDisabled(index);
MassEval.functions.setChangeCancelOneInputDisabled(index);
},
},
setChangeCancelOneInputDisabled : function(index) {
setChangeCancelOneInputDisabled : function(index, data) {
var TR = document.getElementById("IDtr_"+index);
var TR = document.getElementById("IDtr_"+index);
if(TR){
var ChangeInput = document.getElementById("change_"+index);
var CancelInput = document.getElementById("cancel_"+index);
var forms = TR.getElementsByTagName("form");
var forms = TR.getElementsByTagName("form");
var dis = "disabled";
for(var a=0,l=forms.length;a<l;a++){
var dis = "disabled";
if($(forms[a]).hasClass("Modified")) dis = false;
for(var a=0,l=forms.length;a<l;a++){
}
if($(forms[a]).hasClass("Modified")) dis = false;
if(dis) $(TR).removeClass("Modified");
}
if(dis) $(TR).removeClass("Modified");
else $(TR).addClass("Modified");
}
else $(TR).addClass("Modified");
PortalEval.functions.disableThings([ CancelInput, ChangeInput ], dis);
MassEval.functions.disableThings([ ("change_"+index), ("cancel_"+index) ], dis);
PortalEval.functions.setChangeCancelInputDisabled();
MassEval.functions.setChangeCancelInputDisabled(data);
},
},
createAVTSelect : function(evalAVT, index, empty){
createAVTSelect : function(evalAVT, index, empty, onlyselect){
var form = document.createElement("form");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.onsubmit = function(){ return false; };
form.style.whiteSpace = "nowrap";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden"});
var Hidden = MassEval.functions.createInput({type:"hidden",id:"AVT_"+index});
Hidden.id = "AVT_"+index;
form.appendChild(Hidden);
form.appendChild(Hidden);
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.name = "Avancement";
Select.name = "Avancement";
Select.className = "Avancement";
if(empty){
if(empty){
var emptyopt = document.createElement('option');
var emptyopt = document.createElement('option');
emptyopt.innerHTML = "";
emptyopt.innerHTML = "";
emptyopt.value = "???";
emptyopt.value = "?";
Select.appendChild(emptyopt);
Select.appendChild(emptyopt);
Hidden.value = "???";
Hidden.value = "?";
}
}
for(var a=0,l=PortalEval.params.Avancement.length;a<l;a++){
for(var a=0,l=MassEval.params.Avancement.length;a<l;a++){
var thisavt = PortalEval.params.Avancement[a];
var thisavt = MassEval.params.Avancement[a];
var opt = document.createElement('option');
var opt = document.createElement('option');
opt.innerHTML = thisavt.text;
opt.innerHTML = thisavt.text;
Line 2,232: Line 7,794:
opt.style.backgroundColor = thisavt.color;
opt.style.backgroundColor = thisavt.color;
if(thisavt.textcolor) opt.style.color = thisavt.textcolor;
if(thisavt.textcolor) opt.style.color = thisavt.textcolor;
else opt.style.color = "black";
if(a == evalAVT){
if(a == evalAVT){
opt.selected = "selected";
opt.selected = "selected";
Line 2,238: Line 7,801:
Select.appendChild(opt);
Select.appendChild(opt);
}
}
MassEval.functions.updateSelectBGcolor(Select);
if(onlyselect) return Select;
Select.onchange = function(){
Select.onchange = function(){
var val = this.value;
var val = this.value;
Line 2,244: Line 7,809:
if(val == defval) $(F).removeClass("Modified");
if(val == defval) $(F).removeClass("Modified");
else $(F).addClass("Modified");
else $(F).addClass("Modified");
PortalEval.functions.setChangeCancelOneInputDisabled(index);
MassEval.functions.updateSelectBGcolor(this);
MassEval.functions.setChangeCancelOneInputDisabled(index);
}
}
form.appendChild(Select);
form.appendChild(Select);
return form;
return form;
},
},
setChangeCancelInputDisabled : function() {
updateSelectBGcolor : function(Select){
var BoardList = document.getElementById("PortalEvalBoardList");
var val = Select.value;
var opt = Select.getElementsByTagName('option');
for(var a=0,l=opt.length;a<l;a++){
var thisopt = opt[a];
if(thisopt.value !== val) continue;
Select.style.backgroundColor = thisopt.style.backgroundColor;
Select.style.color = thisopt.style.color;
}
},
setChangeCancelInputDisabled : function(data) {
var BoardList = document.getElementById("MassEvalBoardList");
var ChangeInput = document.getElementById("GlobalChangeInput");
var ChangeInput = document.getElementById("GlobalChangeInput");
var CancelInput = document.getElementById("GlobalCancelInput");
var CancelInput = document.getElementById("GlobalCancelInput");
var ListInput = document.getElementById("PortalEval_OptionPortalInput");
var ListInput = document.getElementById("GlobalVerifInput");
var AddInput = document.getElementById("GlobalAddEvalInput");
if(!BoardList || !ChangeInput || !CancelInput || !ListInput) return;
if(!BoardList || !ChangeInput || !CancelInput || !ListInput || !AddInput) return;
var ChangeNumber = 0;
var ChangeNumber = 0;
var TRs = BoardList.getElementsByTagName('tr');
var TRs = BoardList.getElementsByTagName('tr');
for(var a=0,l=TRs.length;a<l;a++){
for(var a=0,l=TRs.length;a<l;a++){
if($(TRs[a]).hasClass("Modified")) ChangeNumber++
if($(TRs[a]).hasClass("Modified") && !$(TRs[a]).hasClass("FilteredLine") && !$(TRs[a]).hasClass("HiddenTR")) ChangeNumber++
}
}
if(ChangeNumber > 0){
if(ChangeNumber > 0){
ChangeInput.title = PortalEval.texts.GoChangeTitle.split("$1").join(ChangeNumber+" ");
ChangeInput.title = MassEval.texts.GoChangeTitle.split("$1").join(ChangeNumber+" ");
CancelInput.title = PortalEval.texts.GoCancelTitle.split("$1").join(ChangeNumber+" ");
CancelInput.title = MassEval.texts.GoCancelTitle.split("$1").join(ChangeNumber+" ");
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], false);
MassEval.functions.disableThings([ ChangeInput, CancelInput ], false);
PortalEval.functions.disableThings([ ListInput ], true);
if(!data || !(data.afteroptioncheck || data.afteredit) ) MassEval.functions.disableThings([ ListInput, AddInput ], true);
}else{
}else{
ChangeInput.title = PortalEval.texts.GoChangeTitle.split("$1").join("");
ChangeInput.title = MassEval.texts.GoChangeTitle.split("$1").join("");
CancelInput.title = PortalEval.texts.GoCancelTitle.split("$1").join("");
CancelInput.title = MassEval.texts.GoCancelTitle.split("$1").join("");
PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
MassEval.functions.disableThings([ ChangeInput, CancelInput ], true);
PortalEval.functions.disableThings([ ListInput ], false);
if(!data || !(data.afteroptioncheck || data.afteredit) ) MassEval.functions.disableThings([ ListInput, AddInput ], false);
}
}
if(data && data.afteredit) MassEval.functions.alertControl("edit");
},
},
cancelAllChanges : function(){
cancelAllChanges : function(){
var BoardList = document.getElementById("PortalEvalBoardList");
var BoardList = document.getElementById("MassEvalBoardList");
if(!BoardList) return;
if(!BoardList) return;
var TRs = BoardList.getElementsByTagName('tr');
var TRs = BoardList.getElementsByTagName('tr');
Line 2,281: Line 7,859:
var index = parseInt(TR.id.replace(/[^0-9]/g, ""));
var index = parseInt(TR.id.replace(/[^0-9]/g, ""));
if(!$(TR).hasClass('Modified')) continue;
if(!$(TR).hasClass('Modified')) continue;
PortalEval.functions.updateThatLine(index, PortalEval.params.PageList[index], true);
MassEval.functions.updateThatLine(index, MassEval.params.PageList[index], true, true);
}
}
},
},
addOneIMPForm : function(index){
addOneIMPForm : function(index){
var defaultV = false;
var defaultP = document.getElementById("EvalThemeInput").value;
var allIMP = MassEval.params.PageList[index].allIMP;
var found = false;
if(typeof(allIMP)=="object"){
for(var port in allIMP){
if(port == defaultP) found = true;
}
}
if(!found) defaultV = defaultP;
var AddIMPForm = document.getElementById("IMPadd_"+index);
var AddIMPForm = document.getElementById("IMPadd_"+index);
var TD = AddIMPForm.parentNode;
var TD = AddIMPForm.parentNode;
var count = PortalEval.functions.getSelectCountValue(TD, index, "Eval", "IMPform");
var count = MassEval.functions.getSelectCountValue(TD, index, "Eval", "IMPform");
var form = document.createElement("form");
var form = document.createElement("form");
form.onsubmit = function(){ return false; };
form.onsubmit = function(){ return false; };
Line 2,293: Line 7,881:
form.className = "Eval Modified Added";
form.className = "Eval Modified Added";
form.style.whiteSpace = "nowrap";
form.style.whiteSpace = "nowrap";
var Hidden = PortalEval.functions.createInput({type:"hidden",value:"."});
var Hidden = MassEval.functions.createInput({type:"hidden",value:".",id:"IMP_"+count+"_"+index});
form.appendChild(Hidden);
form.appendChild(Hidden);
var ThemeSelect = MassEval.functions.createEvalThemeSelect(null,defaultV);
Hidden.id = "IMP_"+count+"_"+index;
var ThemeSelect = PortalEval.functions.createThemeSelect();
ThemeSelect.name = "evaltheme";
ThemeSelect.name = "portal";
ThemeSelect.className = "IMPtheme";
form.appendChild(ThemeSelect);
form.appendChild(ThemeSelect);
form.appendChild(document.createTextNode(" : "));
form.appendChild(document.createTextNode(" : "));
var Select = document.createElement("select");
var Select = document.createElement("select");
Select.name = "Importance NEW";
Select.name = "Importance NEW";
for(var a=0,l=PortalEval.params.Importance.length;a<l;a++){
Select.className = "Importance";
var thisimp = PortalEval.params.Importance[a];
for(var a=0,l=MassEval.params.Importance.length;a<l;a++){
var thisimp = MassEval.params.Importance[a];
var opt = document.createElement('option');
var opt = document.createElement('option');
opt.innerHTML = thisimp.text;
opt.innerHTML = thisimp.text;
Line 2,309: Line 7,898:
opt.style.backgroundColor = thisimp.color;
opt.style.backgroundColor = thisimp.color;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
if(thisimp.textcolor) opt.style.color = thisimp.textcolor;
if(a == (PortalEval.params.Importance.length-1)) opt.selected = "selected";
else opt.style.color = "black";
if(a == (MassEval.params.Importance.length-1)) opt.selected = "selected";
Select.appendChild(opt);
Select.appendChild(opt);
}
}
MassEval.functions.updateSelectBGcolor(Select);
Select.onchange = function(){
Select.onchange = function(){
PortalEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
MassEval.functions.updateSelectBGcolor(this);
MassEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
}
}
form.appendChild(Select);
form.appendChild(Select);
var suplink = PortalEval.functions.createInput({type:"button",value:PortalEval.texts.DeleteIMPText,title:PortalEval.texts.DeleteIMPTitle});
var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteIMPText,title:MassEval.texts.DeleteIMPTitle});
suplink.onclick = function(){
suplink.onclick = function(){
var F = this.parentNode;
var F = this.parentNode;
F.parentNode.removeChild(F);
F.parentNode.removeChild(F);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
MassEval.functions.setChangeCancelOneInputDisabled(index);
}
}
form.appendChild(document.createTextNode(" "));
form.appendChild(document.createTextNode(" "));
form.appendChild(suplink);
form.appendChild(suplink);
AddIMPForm.parentNode.insertBefore(form, AddIMPForm);
AddIMPForm.parentNode.insertBefore(form, AddIMPForm);
PortalEval.functions.setChangeCancelOneIMPInputDisabled(Select, count, index);
MassEval.functions.setChangeCancelOneIMPInputDisabled(Select, count, index);
ThemeSelect.focus();
ThemeSelect.focus();
},
},
// ------------------------------- Fonctions pour la validation des changements -------------------------------
createSortSelect : function(DefaultSort, SortHidden){
processTheseLinesChanges : function(){
var SortSelect = document.createElement('select');
var SortOptions = PortalEval.params.SortOptions;
var CancelInput = document.getElementById("GlobalCancelInput");
var SortTypes = ["UP","DOWN"];
var boardList = document.getElementById("MassEvalBoardList");
MassEval.params.ChangesToMake = [];
for(var a=0,l=SortOptions.length;a<l;a++){
var SortOption = SortOptions[a];
var TRs = boardList.getElementsByTagName("tr");
for(var t=0,tlen=SortTypes.length;t<tlen;t++){
for(var a=1,l=TRs.length;a<l;a++){
var SortType = SortTypes[t];
var TR = TRs[a];
if($(TRs[a]).hasClass('FilteredLine') || $(TRs[a]).hasClass('HiddenTR') || !$(TRs[a]).hasClass('Modified')) continue;
var SortValue = SortOption+"_"+SortType;
var opt = document.createElement('option');
var index = parseInt(TR.id.split("IDtr_").join(""));
MassEval.params.ChangesToMake.push({id:index,done:false});
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;
}
}
}
}
MassEval.functions.processNextLineChanges();
return SortSelect;
},
},
sortTextList : function(textlist) {
processNextLineChanges : function(lastindex){
var ChangesToMake = MassEval.params.ChangesToMake;
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 ); });
if(typeof(lastindex)==="number"){
},
MassEval.functions.checkFilterOptions({afteredit:true});
sortPages : function(selectvalue, portal) {
PortalEval.functions.alertControl(PortalEval.texts.AlertMsgSort);
MassEval.functions.setChangeCancelOneInputDisabled(lastindex, {afteredit:true});
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) ]);
}
}
var CanContinue = MassEval.functions.checkEmergencyStop();
NewPageList = NewPageList.sort(func);
if(!CanContinue){
for(var a=0, l=NewPageList.length;a<l;a++){
var index = NewPageList[a][0];
MassEval.params.ChangesToMake = [];
MassEval.functions.setChangeCancelInputDisabled();
var TR = document.getElementById("IDtr_"+index);
MassEval.functions.updateEvalTable(document.getElementById("EvalThemeInput").value);
if(!TR) continue;
return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
var target = TR.parentNode;
target.removeChild(TR);
if(down) target.appendChild(TR);
else target.insertBefore(TR, target.firstChild.nextSibling);
}
}
PortalEval.functions.alertControl();
if(MassEval.params.AllowEdition){
MassEval.functions.disableThings([ "GlobalVerifInput", "GlobalAddEvalInput", "GlobalChangeInput", "GlobalCancelInput"], true);
}
var thisChange;
for(var a=0,l=ChangesToMake.length;a<l;a++){
thisChange = ChangesToMake[a];
if(typeof(lastindex)==="number" && thisChange.id === lastindex){
thisChange.done = true;
continue;
}
if(!thisChange.done){
if(mw.config.get("wgUserGroups").indexOf("bot")!==-1){
MassEval.functions.processThatLineChanges(thisChange.id);
}else{
setTimeout(function(){ MassEval.functions.processThatLineChanges(thisChange.id); }, MassEval.params.ChangesToMakeDelay);
}
return;
}
}
MassEval.params.ChangesToMake = [];
MassEval.functions.setChangeCancelInputDisabled();
MassEval.functions.updateEvalTable(document.getElementById("EvalThemeInput").value);
},
},
processThatLineChanges : function(index){
processThatLineChanges : function(index){
PortalEval.functions.closePreview(index);
MassEval.functions.closePreview(index);
var TR = document.getElementById("IDtr_"+index);
var TR = document.getElementById("IDtr_"+index);
if(!($(TR).hasClass("Modified"))) return;
if(!($(TR).hasClass("Modified"))) return MassEval.functions.processNextLineChanges(index);
var OldParams = PortalEval.params.PageList[index];
var OldParams = MassEval.params.PageList[index];
var NewParams = {
var NewParams = OldParams;
NewParams.evalAVT = false;
title : OldParams.title,
NewParams.evalIMP = false;
talktitle : OldParams.talktitle,
NewParams.allIMP = {};
talkmissing : OldParams.talkmissing,
allIMP : {}
NewParams.evalWT = false;
};
NewParams.stub = [];
NewParams.stubWT = false;
var ChangeInput = document.getElementById("change_"+index);
var ChangeInput = document.getElementById("change_"+index);
var CancelInput = document.getElementById("cancel_"+index);
var CancelInput = document.getElementById("cancel_"+index);
if(PortalEval.params.AllowEdition) PortalEval.functions.disableThings([ ChangeInput, CancelInput ], true);
var talkpageedit = false, pageedit = false;
var talkpageedit = false, pageedit = false;
var Forms = TR.getElementsByTagName('form');
var Forms = TR.getElementsByTagName('form');
Line 2,416: Line 7,997:
for(var i=0,ilen=Inputs.length;i<ilen;i++){
for(var i=0,ilen=Inputs.length;i<ilen;i++){
var ThisInput = Inputs[i];
var ThisInput = Inputs[i];
if(PortalEval.params.AllowEdition && ["button","text"].indexOf(ThisInput)!=-1) PortalEval.functions.disableThings([ ThisInput ], true);
if(MassEval.params.AllowEdition && ["button","text"].indexOf(ThisInput)!=-1) MassEval.functions.disableThings([ ThisInput ], true);
}
}
var Selects = thisForm.getElementsByTagName("select");
var Selects = thisForm.getElementsByTagName("select");
if(PortalEval.params.AllowEdition) PortalEval.functions.disableThings( Selects, true);
if(MassEval.params.AllowEdition) MassEval.functions.disableThings( Selects, true);
for(var s=0,slen=Selects.length;s<slen;s++){
for(var s=0,slen=Selects.length;s<slen;s++){
var ThisSelect = Selects[s];
var ThisSelect = Selects[s];
Line 2,426: Line 8,007:
if(SelectName == "Avancement"){
if(SelectName == "Avancement"){
if($(thisForm).hasClass("Modified")) talkpageedit = true;
if($(thisForm).hasClass("Modified")) talkpageedit = true;
NewParams.evalAVT = parseInt(SelectValue);
NewParams.evalAVT = (SelectValue !== "?" ? parseInt(SelectValue) : "?");
}else if(SelectName == "Importance NEW"){
}else if(SelectName == "Importance NEW"){
var ThemeSelect = Selects[(s-1)];
var ThemeSelect = Selects[(s-1)];
var thisportal = ThemeSelect.value;
var thisevaltheme = ThemeSelect.value;
if(thisportal != ""){
if(thisevaltheme != ""){
talkpageedit = true;
talkpageedit = true;
NewParams.allIMP[thisportal] = parseInt(SelectValue);
NewParams.allIMP[thisevaltheme] = parseInt(SelectValue);
var PortalSelect = document.getElementById("PortalEval_OptionPortal");
var EvalThemeSelect = document.getElementById("EvalThemeInput");
if(PortalSelect && PortalSelect.value == thisportal) NewParams.evalIMP = parseInt(SelectValue);
if(EvalThemeSelect && EvalThemeSelect.value == thisevaltheme) NewParams.evalIMP = parseInt(SelectValue);
}
}
}else if(SelectName.indexOf("Importance")==0){
}else if(SelectName.indexOf("Importance")==0){
if($(thisForm).hasClass("Modified")) talkpageedit = true;
if($(thisForm).hasClass("Modified")) talkpageedit = true;
if($(Label).hasClass("portal")) NewParams.evalIMP = parseInt(SelectValue);
if($(Label).hasClass("evaltheme")) NewParams.evalIMP = parseInt(SelectValue);
NewParams.allIMP[Label.innerHTML] = parseInt(SelectValue);
NewParams.allIMP[Label.innerHTML] = parseInt(SelectValue);
}else if(SelectName.indexOf("Ébauche")==0){
}else if(SelectName.indexOf("Ébauche")==0){
Line 2,447: Line 8,028:
var StubTheme = ThisSelect.value;
var StubTheme = ThisSelect.value;
if(StubTheme != ""){
if(StubTheme != ""){
StubThemeParams = PortalEval.params.StubThemes[StubTheme];
StubThemeParams = MassEval.params.StubThemes[StubTheme];
var catPattern = StubThemeParams.categ;
var catPattern = StubThemeParams.categ;
if(catPattern){
if(catPattern){
catPattern = PortalEval.functions.ucFirst(catPattern);
catPattern = MassEval.functions.ucFirst(catPattern);
var AdjSelect = document.getElementById(SelectName.split("Ébauche").join("adjSelect").split(" NEW").join(""));
var AdjSelect = document.getElementById(SelectName.split("Ébauche").join("adjSelect").split(" NEW").join(""));
var type = null;
var type = null;
Line 2,457: Line 8,038:
var adjID = AdjSelect.value;
var adjID = AdjSelect.value;
if(type && adjID != "-1"){
if(type && adjID != "-1"){
var adj = PortalEval.params[("StubAdj"+type)][adjID];
var adj = MassEval.params[("StubAdj"+type)][adjID];
if(adj){
if(adj){
type = type.replace(/M/, "");
type = type.replace(/M/, "");
Line 2,470: Line 8,051:
}
}
}
}
if(PortalEval.params.AllowEdition && (talkpageedit || pageedit)){
if(MassEval.params.AllowEdition && (talkpageedit || pageedit)){
var TD1 = TR.getElementsByTagName('td')[0];
var Link = TR.getElementsByTagName('a')[0];
var IMG = document.createElement('img');
var IMG = document.createElement('img');
IMG.width = 14;
IMG.width = 14;
IMG.height = 14;
IMG.height = 14;
IMG.src = PortalEval.params.ImageURL + PortalEval.params.RunningIcon;
IMG.src = MassEval.params.ImageURL + MassEval.params.RunningIcon;
TD1.insertBefore(document.createTextNode(" "), TD1.firstChild);
Link.parentNode.insertBefore(IMG, Link);
TD1.insertBefore(IMG, TD1.firstChild);
Link.parentNode.insertBefore(document.createTextNode(" "), Link);
}
}
if(talkpageedit){
if(talkpageedit){
NewParams.talkmissing = 0;
NewParams.talkmissing = 0;
var NewEvalWikitext = "{{"+PortalEval.params.EvalTemplate+"\n";
var NewEvalWikitext = "{{"+MassEval.params.EvalTemplate+"\n";
for(var imp in NewParams.allIMP){
for(var imp in NewParams.allIMP){
NewEvalWikitext += "|"+imp+"|"+PortalEval.params.Importance[NewParams.allIMP[imp]].wiki+"\n"
NewEvalWikitext += "|"+imp+"|"+MassEval.params.Importance[NewParams.allIMP[imp]].wiki+"\n"
}
}
NewEvalWikitext += "|avancement="+PortalEval.params.Avancement[NewParams.evalAVT].wiki+"\n"
if(NewParams.evalAVT !== "?") NewEvalWikitext += "|avancement="+MassEval.params.Avancement[NewParams.evalAVT].wiki+"\n";
else NewEvalWikitext += "|avancement=\n";
var OldEvalWikitext = OldParams.evalWT;
var OldEvalWikitext = OldParams.evalWT;
if(OldEvalWikitext){
if(OldEvalWikitext){
Line 2,497: Line 8,079:
}
}
}
}
if(MassEval.params.LaunchCondition === 5 && !OldParams.haseval) NewEvalWikitext += MassEval.params.EvalTemplatNoCat;
NewEvalWikitext += "}}";
NewEvalWikitext += "}}";
NewParams.evalWT = NewEvalWikitext;
NewParams.evalWT = NewEvalWikitext;
if(PortalEval.params.AllowEdition){
if(MassEval.params.AllowEdition){
PortalEval.functions.updatePage(index, OldParams, NewParams, false);
MassEval.functions.updatePage(index, OldParams, NewParams, false);
}else{
}else{
var OldEvalWikitext = ( OldParams.evalWT ? OldParams.evalWT : "");
var OldEvalWikitext = ( OldParams.evalWT ? OldParams.evalWT : "");
alert(PortalEval.texts.NoEdition.split("$1").join(OldEvalWikitext).split("$2").join(NewEvalWikitext));
alert(MassEval.texts.NoEdition.split("$1").join(OldEvalWikitext).split("$2").join(NewEvalWikitext));
}
}
}
}
if(pageedit){
if(pageedit){
NewParams.pagemissing = 0;
var NewStubWikitext = "";
var NewStubWikitext = "";
if(NewParams.stub && NewParams.stub.length > 0 ){
if(NewParams.stub && NewParams.stub.length > 0 ){
NewStubWikitext = "{{"+PortalEval.params.StubTemplate;
NewStubWikitext = "{{"+MassEval.params.StubTemplate;
NewStubWikitext += "|"+NewParams.stub.join("|");
NewStubWikitext += "|"+NewParams.stub.join("|");
var OldStubWikitext = OldParams.stubWT;
var OldStubWikitext = OldParams.stubWT;
Line 2,525: Line 8,109:
}
}
NewParams.stubWT = NewStubWikitext;
NewParams.stubWT = NewStubWikitext;
if(PortalEval.params.AllowEdition){
if(MassEval.params.AllowEdition){
PortalEval.functions.updatePage(index, OldParams, NewParams, true);
MassEval.functions.updatePage(index, OldParams, NewParams, true);
}else{
}else{
var OldStubWikitext = ( OldParams.stubWT ? OldParams.stubWT : "");
var OldStubWikitext = ( OldParams.stubWT ? OldParams.stubWT : "");
alert(PortalEval.texts.NoEdition.split("$1").join(OldStubWikitext).split("$2").join(NewStubWikitext));
alert(MassEval.texts.NoEdition.split("$1").join(OldStubWikitext).split("$2").join(NewStubWikitext));
}
}
}
}
},
},
updatePage : function(index, OldParams, NewParams, main){
updatePage : function(index, OldParams, NewParams, main){
if(main) PortalEval.params.StubEditsRunning[index] = true;
if(main) MassEval.params.StubEditsRunning[index] = true;
else PortalEval.params.EvalEditsRunning[index] = true;
else MassEval.params.EvalEditsRunning[index] = true;
var page = (main ? NewParams.title : NewParams.talktitle);
var page = (main ? NewParams.title : NewParams.talktitle);
MassEval.functions.alertControl("edit", MassEval.texts.AlertMsgEdit.split("$page").join(page), "Running");
$.ajax({
$.ajax({
url: mw.util.wikiScript('api'),
url: mw.util.wikiScript('api'),
Line 2,548: Line 8,133:
},
},
success: function(data) {
success: function(data) {
var timestamp = ( (!main && OldParams.talkmissing) ? 'now' : data.query.pages[Object.keys(data.query.pages)[0]].revisions[0].timestamp );
var timestamp = "now";
try{ timestamp = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0].timestamp }catch(e){ }
var func = (main ? "updateMainPage" : "updateTalkpage");
var func = (main ? "updateMainPage" : "updateTalkpage");
var NewWikitext = PortalEval.functions[func](OldParams, NewParams, data);
var NewWikitext = MassEval.functions[func](OldParams, NewParams, data);
var summary = PortalEval.texts[(main ? "StubResume" : "EvalResume")];
var summary = MassEval.texts[(main ? "StubResume" : "EvalResume")];
var template = NewParams[(main ? "stubWT" : "evalWT")].split("\n").join("");
var template = NewParams[(main ? "stubWT" : "evalWT")].split("\n").join("");
$.ajax({
$.ajax({
Line 2,559: Line 8,145:
dataType: 'json'
dataType: 'json'
}).then(function(data) {
}).then(function(data) {
var EditDatas = {
action: 'edit',
title: page,
text: NewWikitext,
summary: summary.split("$docpage").join(MassEval.params.DocPage).split("$template").join(template),
basetimestamp: timestamp,
section: 0,
watchlist: 'nochange',
format: 'json',
token: data.query.tokens.csrftoken
};
if(MassEval.params.EditTag && MassEval.params.UserCanTag) EditDatas.tags = MassEval.params.EditTag;
$.ajax({
$.ajax({
url: mw.util.wikiScript('api'),
url: mw.util.wikiScript('api'),
method: 'POST',
method: 'POST',
data: {
data: EditDatas,
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',
dataType: 'json',
success: function(data){
success: function(data){
if(main) PortalEval.params.StubEditsRunning[index] = false;
if(main) MassEval.params.StubEditsRunning[index] = false;
else PortalEval.params.EvalEditsRunning[index] = false;
else MassEval.params.EvalEditsRunning[index] = false;
if(!PortalEval.params.StubEditsRunning[index] && !PortalEval.params.EvalEditsRunning[index]){
if(!MassEval.params.StubEditsRunning[index] && !MassEval.params.EvalEditsRunning[index]){
PortalEval.functions.updateThatLine(index, NewParams);
MassEval.functions.updateThatLine(index, NewParams, false, false);
}
var ID = false;
var wgPageName = mw.config.get('wgPageName').split("_").join(" ");
if(MassEval.params.LaunchCondition === 5 && NewParams.title === wgPageName) ID = (main ? 'ca-nstab-user' : 'ca-talk');
if(MassEval.params.LaunchCondition === 5 && NewParams.talktitle === wgPageName) ID = (main ? 'ca-nstab-user' : 'ca-talk');
if(MassEval.params.LaunchCondition === 4 && NewParams.title === mw.config.get('wgTitle')) ID = (main ? 'ca-nstab-main' : 'ca-talk');
if(ID){
var li = document.getElementById(ID);
if(li) $(li).removeClass('new');
}
}
}
}
Line 2,588: Line 8,186:
var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
var NewWikitext = "";
var NewWikitext = "";
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var Reg = new RegExp("\\{\\{ *"+MassEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
var matches = OldWikitext.match(Reg);
var matches = OldWikitext.match(Reg);
if(matches == null) NewWikitext = NewParams.stubWT + "\n" + OldWikitext;
if(matches == null){
var BeforeStubTemplates = MassEval.params.BeforeStubTemplates;
else{
var before = "";
for(var a=0,l=BeforeStubTemplates.length;a<l;a++){
var DT = BeforeStubTemplates[a];
var DTReg = new RegExp("\\{\\{ *("+MassEval.functions.ucFirst(DT)+"|"+MassEval.functions.lcFirst(DT)+")[^\\{]*\\}\\}", "g");
var DTMatches = OldWikitext.match(DTReg);
if(DTMatches != null){
for(var m=0,mlen=DTMatches.length;m<mlen;m++){
var thismatch = DTMatches[m];
before += thismatch+"\n";
OldWikitext = OldWikitext.replace(thismatch, "");
}
}
}
NewWikitext = before + (before ? "\n\n" : "") + NewParams.stubWT + "\n" + OldWikitext;
}else{
for(var a=0,l=matches.length;a<l;a++){
for(var a=0,l=matches.length;a<l;a++){
var thismatch = matches[a];
var thismatch = matches[a];
Line 2,601: Line 8,214:
}
}
}
}
NewWikitext = NewWikitext.replace(/^\\n/g, "").replace(/\\n\\n\\n/g, "\n\n");
NewWikitext = NewWikitext.replace(/^\\n/g, "");
NewWikitext = NewWikitext.split("\n\n\n").join("\n\n");
return NewWikitext;
return NewWikitext;
},
},
Line 2,609: Line 8,223:
NewWikitext = NewParams.evalWT;
NewWikitext = NewParams.evalWT;
}else{
}else{
var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
var OldWikitext = "";
try{ OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"]; }catch(e){ }
var Reg = new RegExp("\\{\\{ *"+PortalEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
var Reg = new RegExp("\\{\\{ *"+MassEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
var matches = OldWikitext.match(Reg);
var matches = OldWikitext.match(Reg);
if(matches == null) NewWikitext = NewParams.evalWT + "\n" + OldWikitext;
if(matches == null) NewWikitext = NewParams.evalWT + "\n" + OldWikitext;
Line 2,627: Line 8,242:
return NewWikitext;
return NewWikitext;
},
},
updateThatLine : function(index, NewParams, KeepPreview){
updateThatLine : function(index, NewParams, KeepPreview, CancelAction){
PortalEval.params.PageList[index] = NewParams;
MassEval.params.PageList[index] = NewParams;
if(!KeepPreview){
if(!KeepPreview){
delete PortalEval.params.PreviewSaved[NewParams.title];
delete MassEval.params.PreviewSaved[NewParams.title];
delete PortalEval.params.PreviewSaved[NewParams.talktitle];
delete MassEval.params.PreviewSaved[NewParams.talktitle];
}
}
var portal = document.getElementById("PortalEval_OptionPortal").value;
var evaltheme = document.getElementById("EvalThemeInput").value;
MassEval.functions.fillBoardLine(index, evaltheme);
var OldTR = document.getElementById("IDtr_"+index);
if(!CancelAction) MassEval.functions.processNextLineChanges(index);
while(OldTR.firstChild){ OldTR.removeChild(OldTR.firstChild); }
else MassEval.functions.setChangeCancelInputDisabled();
var target = OldTR.parentNode;
var NewTR = PortalEval.functions.fillBoardLine(index, portal);
target.insertBefore(NewTR, OldTR);
target.removeChild(OldTR);
PortalEval.functions.setChangeCancelOneInputDisabled(index);
},
},
// ------------------------------- Fonctions pour la prévisualisation -------------------------------
preloadPage : function(title, index, callback){
preloadPage : function(title, index, callback){
var previewDiv = document.createElement('div');
var previewDiv = document.createElement('div');
previewDiv.id = "previewDiv_"+index;
previewDiv.id = "previewDiv_"+index;
previewDiv.style.maxHeight = PortalEval.params.PreviewHeight + "px";
$(previewDiv).addClass("previewDiv");
var URL = mw.util.getUrl(title);
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){
$.ajax({url:URL, complete: function(Req){
var TEMP = document.createElement("div");
var TEMP = document.createElement("div");
Line 2,656: Line 8,265:
document.body.appendChild(TEMP);
document.body.appendChild(TEMP);
var Divs = TEMP.getElementsByTagName('div');
var Divs = TEMP.getElementsByTagName('div');
var IDs = PortalEval.params.DivIDsToPreview;
var IDs = MassEval.params.DivIDsToPreview;
for(var a=0,l=Divs.length;a<l;a++){
for(var a=0,l=Divs.length;a<l;a++){
var thisDiv = Divs[a];
var thisDiv = Divs[a];
Line 2,663: Line 8,272:
}
}
TEMP.parentNode.removeChild(TEMP);
TEMP.parentNode.removeChild(TEMP);
PortalEval.functions.enhancePreview(previewDiv);
MassEval.functions.neutralizeLinks(previewDiv);
PortalEval.params.PreviewSaved[title] = previewDiv;
MassEval.functions.enhancePreview(previewDiv);
MassEval.params.PreviewSaved[title] = previewDiv;
if(typeof(callback)==="function") callback(title, index);
if(typeof(callback)==="function") callback(title, index);
}});
}});
Line 2,675: Line 8,285:
previewDiv = document.createElement('div');
previewDiv = document.createElement('div');
previewDiv.id = "previewDiv_"+index;
previewDiv.id = "previewDiv_"+index;
previewDiv.style.maxHeight = PortalEval.params.PreviewHeight + "px";
$(previewDiv).addClass("previewDiv");
previewDiv.style.width = "100%";
previewDiv.style.display = "none";
previewDiv.style.overflowY = "scroll";
previewDiv.style.borderTop = "1px dashed #a2a9b1";
TD1.appendChild(previewDiv);
TD1.appendChild(previewDiv);
$(previewDiv).slideDown("slow");
var closespan = document.createElement('span');
var closespan = document.createElement('span');
closespan.style.float = "right";
closespan.id = "previewbuttons_"+index;
closespan.id = "closespan_"+index;
$(closespan).addClass("previewButtons");
TD1.insertBefore(closespan, TD1.firstChild);
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');
var closelink = document.createElement('a');
closelink.title = PortalEval.texts.PreviewClose;
closelink.title = MassEval.texts.PreviewClose;
closelink.innerHTML = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.CloseIcon+'" />';
closelink.innerHTML = '<img class="previewCloseButtonImage PrevCloseIcon" src="'+MassEval.params.ImageURL + MassEval.params.CloseIcon+'" />';
closelink.href = "javascript:;";
closelink.href = "javascript:;";
closelink.onclick = function(){ PortalEval.functions.closePreview(index); return false; }
closelink.onclick = function(){ MassEval.functions.closePreview(index); return false; }
closespan.appendChild(closelink);
closespan.appendChild(closelink);
}
}
$(previewDiv).addClass("previewDiv");
if(PortalEval.params.PreviewSaved[title]){
var SavedpreviewDiv = PortalEval.params.PreviewSaved[title];
if(MassEval.params.PreviewSaved[title]){
var SavedpreviewDiv = MassEval.params.PreviewSaved[title];
previewDiv.parentNode.insertBefore(SavedpreviewDiv, previewDiv);
previewDiv.parentNode.insertBefore(SavedpreviewDiv, previewDiv);
previewDiv.parentNode.removeChild(previewDiv);
previewDiv.parentNode.removeChild(previewDiv);
$(SavedpreviewDiv).slideDown("slow");
}else{
}else{
var RunningIcon = '<img width="16" height="16" src="'+PortalEval.params.ImageURL + PortalEval.params.RunningIcon+'" />';
var RunningIcon = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
previewDiv.innerHTML = PortalEval.texts.AlertMsgPreview.split("$running").join(RunningIcon);
previewDiv.innerHTML = MassEval.texts.AlertMsgPreview.split("$running").join(RunningIcon);
PortalEval.functions.preloadPage(title, index, PortalEval.functions.previewPage);
MassEval.functions.preloadPage(title, index, MassEval.functions.previewPage);
}
}
},
},
Line 2,725: Line 8,323:
var oldval = parseInt(previewDiv.style.maxHeight.split("px").join(""));
var oldval = parseInt(previewDiv.style.maxHeight.split("px").join(""));
var newval = (oldval+val);
var newval = (oldval+val);
if(newval<0) newval = 0;
if(newval < 0) newval = 0;
console.warn(oldval + " -> " + newval);
previewDiv.style.maxHeight = newval + "px";
previewDiv.style.maxHeight = newval + "px";
},
},
closePreview : function(index, link){
closePreview : function(index, link){
var previewDiv = document.getElementById("previewDiv_"+index);
var previewDiv = document.getElementById("previewDiv_"+index);
if(previewDiv) previewDiv.parentNode.removeChild(previewDiv);
if(previewDiv){
$(previewDiv).slideUp("slow", function(){
var link = document.getElementById("closespan_"+index);
if(link) link.parentNode.removeChild(link);
this.parentNode.removeChild(this);
var link = document.getElementById("previewbuttons_"+index);
if(link) link.parentNode.removeChild(link);
});
}
},
},
// ------------------------------- Fonctions spéciales utiles seulement au développeur -------------------------------
getUserSubPage : function() {
addDeveloperLinks : function(){
if(PortalEval.params.OptionsSubPageOK) return;
var newli = document.getElementById("ca-eval");
var Page = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js';
$.ajax({
if(!newli){
var portlet = document.getElementById(MassEval.params.LinkPortletID);
url: mw.util.wikiScript('api'),
data: {
if(!portlet) return;
var tabs = portlet.getElementsByTagName('li')[0];
action: 'query',prop:'revisions',
newli = tabs.parentNode.appendChild(document.createElement('li'));
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];
}
}
//newli.appendChild(MassEval.functions.createLink(null,{text:"[UUT]",href: "javascript:MassEval.functions.getUnusedTexts();",title:"Textes inutilisés"}));
},
},
// ------------------------------- Fonctions pour les liens en haut de page -------------------------------
getCustomParams : function() {
addPageLink : function() {
var customFunc = ["Lang", "Site", "User"];
var portlet = document.getElementById(MassEval.params.LinkPortletID);
for(var a=0,l=customFunc.length;a<l;a++){
if(!portlet) return;
var funcName = "PortalEval_"+customFunc[a]+"Custom";
var tabs = portlet.getElementsByTagName('li')[0];
if(typeof(window[funcName])==="function") try{ window[funcName](); }catch(e){ console.warn(funcName+"()\n------\n"+e.message); }
var newli = document.createElement('li');
newli.id = 'ca-eval';
tabs.parentNode.appendChild(newli);
if(MassEval.params.UseTopFormInNS0){
var link = newli.appendChild(MassEval.functions.createLink(null, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkPageTitle,
href : "javascript:MassEval.functions.createPageBoard();"
}));
}else{
var page = "Special:"+MassEval.params.SpecialpageName+"/mode=page/" + mw.config.get( (MassEval.params.LaunchCondition != 5 ? 'wgTitle' : "wgPageName") ).split("_").join(" ");
var link = newli.appendChild(MassEval.functions.createLink(page, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkPageTitle,
}));
}
}
if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
},
},
addlink : function() {
addCategoryLink : function() {
var portlet = document.getElementById(PortalEval.params.LinkPortletID);
var portlet = document.getElementById(MassEval.params.LinkPortletID);
if(!portlet)return;
if(!portlet) return;
var tabs = portlet.getElementsByTagName('li')[0];
var tabs = portlet.getElementsByTagName('li')[0];
var newli = document.createElement('li');
var newli = document.createElement('li');
newli.id = 'ca-eval';
newli.id = 'ca-eval';
tabs.parentNode.appendChild(newli);
tabs.parentNode.appendChild(newli);
var Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=cat/"+mw.config.get('wgTitle'), {

text : MassEval.texts.LinkText,
var link = PortalEval.functions.createLink(null, {
text : PortalEval.texts.LinkText,
title : MassEval.texts.LinkCatTitle,
}));
title : PortalEval.texts.LinkTitle,
if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
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(){
addTemplateLink : function() {
var portlet = document.getElementById(MassEval.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 Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=template/"+mw.config.get('wgTitle'), {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkTemplateTitle,
}));
if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
},
addUserLink : function() {
var portlet = document.getElementById(MassEval.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 User = mw.config.get('wgTitle').split("/")[0];
var Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=creations/"+User, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkCreationsTitle,
}));
if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
},
addNewpagesLink : function(){
var LI = document.getElementById("ca-nstab-special");
if(!LI) return;
var evalli = LI.parentNode.appendChild(document.createElement('li'));
evalli.id = "ca-nstab-special-eval";
var evalspan = evalli.appendChild(document.createElement('span'));
var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=newpages/"+mw.config.get('wgTitle'), {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkNewpagesTitle,
}));
},
addCreationsLink : function(){
var LI = document.getElementById("ca-nstab-special");
if(!LI) return;
var evalli = LI.parentNode.appendChild(document.createElement('li'));
evalli.id = "ca-nstab-special-eval";
var evalspan = evalli.appendChild(document.createElement('span'));
var target = mw.util.getParamValue("target");
if(target === null) target = mw.config.get('wgTitle').split("Contributions/")[1];
if(!target) target = mw.config.get('wgUserName');
var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=creations/"+target, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkCreationsTitle,
}));
},
addLinkshereLink : function(){
var portlet = document.getElementById(MassEval.params.LinkPortletID);
if(!portlet) return;
var tabs = portlet.getElementsByTagName('li')[0];
var evalli = tabs.parentNode.appendChild(document.createElement('li'));
evalli.id = "ca-eval";
var evalspan = evalli.appendChild(document.createElement('span'));
var target = mw.util.getParamValue("target");
var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=linkshere/"+target, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkLinkshereTitle,
}));
},
addPrefixindexLink : function(){
var portlet = document.getElementById(MassEval.params.LinkPortletID);
if(!portlet) return;
var tabs = portlet.getElementsByTagName('li')[0];
var evalli = tabs.parentNode.appendChild(document.createElement('li'));
evalli.id = "ca-eval";
var evalspan = evalli.appendChild(document.createElement('span'));
var prefix = mw.util.getParamValue("prefix");
var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=prefixes/"+prefix, {
text : MassEval.texts.LinkText,
title : MassEval.texts.LinkPrefixindexTitle,
}));
},
addlinktoSpecialpage : function(){
var Content = document.getElementById('mw-content-text');
var Content = document.getElementById('mw-content-text');
var Divs = Content.getElementsByTagName('div');
var Divs = Content.getElementsByTagName('div');
var divcount = 0;
var count = 0;
var H2s = Content.getElementsByTagName('h2');
for(var a=0,l=H2s.length;a<l;a++){
var id = H2s[a].id;
if(id == "mw-specialpagesgroup-pagetools") count = a;
}
var divcount = -1;
for(var a=0,l=Divs.length;a<l;a++){
for(var a=0,l=Divs.length;a<l;a++){
var Div = Divs[a];
var Div = Divs[a];
if(!$(Div).hasClass("mw-specialpages-list")) continue;
if(!$(Div).hasClass("mw-specialpages-list")) continue;
divcount++
divcount++
if(divcount != 10) continue;
if(divcount != count) continue;
var UL = Div.getElementsByTagName('ul')[0];
var UL = Div.getElementsByTagName('ul')[0];
if(!UL) continue;
if(!UL) continue;
var LI = document.createElement('li');
var LI = document.createElement('li');
UL.appendChild(LI);
UL.appendChild(LI);
LI.appendChild(PortalEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[-1]+":PortalEval",{text:PortalEval.texts.SpecialpageName}));
LI.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[-1]+":"+MassEval.params.SpecialpageName,{text:MassEval.texts.SpecialpageName}));
}
}
},
},
toggleTabsInSpecialpage : function(link){
var LI = link.parentNode.parentNode;
if($(LI).hasClass("selected")) return;
var Parent = LI.parentNode;
var AllLIs = Parent.getElementsByTagName('li');
for(var a=0,l=AllLIs.length;a<l;a++){
var thisLI = AllLIs[a];
if(thisLI !== LI) $(thisLI).removeClass("selected");
else $(thisLI).addClass("selected");
}
if(LI.id == "ca-nstab-special-options"){
if( !MassEval.params.EvalThemesOK || !MassEval.params.OptionsSubPageOK ) return;
MassEval.functions.openOptionsForm();
MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], false);
MassEval.functions.closeDatasForm();
}else if(LI.id == "ca-nstab-special-datas"){
if(!MassEval.params.StubThemesOK || !MassEval.params.EvalThemesOK || !MassEval.params.BeforeStubTemplatesOK) return;
MassEval.functions.openDatasForm();
MassEval.functions.closeOptionsForm();
MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], false);
}else{
MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], true);
var MassEvalBoardListDiv = document.getElementById("MassEvalBoardListDiv");
if(MassEvalBoardListDiv && $(MassEvalBoardListDiv).hasClass("empty")) MassEvalBoardListDiv.style.display = "none";
MassEval.functions.closeOptionsForm();
MassEval.functions.closeDatasForm();
}
},
addOptionLinkInSpecialpage : function(){
var SpecialLI = document.getElementById("ca-nstab-special");
if(SpecialLI){
var SpecialLink = SpecialLI.getElementsByTagName('a')[0];
if(SpecialLink){
if(SpecialLink.parentNode.tagName.toLowerCase() != "span"){
var specialspan = SpecialLink.parentNode.appendChild(document.createElement('span'));
specialspan.appendChild(SpecialLink);
}
var optionsli = SpecialLI.parentNode.appendChild(document.createElement('li'));
optionsli.id = "ca-nstab-special-options";
var optionsspan = optionsli.appendChild(document.createElement('span'));
var optionslink = optionsspan.appendChild(document.createElement('a'));
optionslink.innerHTML = MassEval.texts.GoOptionsText;
optionslink.title = MassEval.texts.GoOptionsTitle;
optionslink.href = "javascript:;";
optionslink.id = "optionlinkintab";
var datasli = SpecialLI.parentNode.appendChild(document.createElement('li'));
datasli.id = "ca-nstab-special-datas";
var datasspan = datasli.appendChild(document.createElement('span'));
var dataslink = datasspan.appendChild(document.createElement('a'));
dataslink.innerHTML = MassEval.texts.GoDatasText;
dataslink.title = MassEval.texts.GoDatasTitle;
dataslink.href = "javascript:;";
dataslink.id = "datalinkintab";
dataslink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
if(!MassEval.params.StubThemesOK || !MassEval.params.EvalThemesOK || !MassEval.params.BeforeStubTemplatesOK)
$(dataslink).addClass("disableddatlink");
optionslink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
SpecialLink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
if( !MassEval.params.EvalThemesOK || !MassEval.params.OptionsSubPageOK )
$(optionslink).addClass("disabledoptionlink");
MassEval.params.SpecialOptionLinkOK = true;
}
}
},
// ------------------------------- Fonctions pour le lancement -------------------------------
launch : function() {
launch : function() {
var LaunchCond = MassEval.params.LaunchCondition;
var custom = mw.config.get('wgServer')+mw.config.get('wgScript') + '?title='
var Scripts = [];
+ mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+'/'+PortalEval.params.OptionsSubPage+'.js'
var sustomPage = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
+ '&action=raw&ctype=text/javascript';
var customURL = mw.util.getUrl(sustomPage, {'action':'raw','ctype':'text/javascript'});
$.when.apply( null, $.map([ custom ], function ( url ) {
Scripts.push(customURL);
var ColorPickerJS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ColorPicker.js&action=raw&ctype=text/javascript';
var ColorPickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ColorPicker.css&action=raw&ctype=text/css';
var ClockPickerJS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ClockPicker.js&action=raw&ctype=text/javascript';
var ClockPickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ClockPicker.css&action=raw&ctype=text/css';
var DatePickerJS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/DatePicker.js&action=raw&ctype=text/javascript';
var DatePickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/DatePicker.css&action=raw&ctype=text/css';
if(LaunchCond === 2){
mw.loader.load(ColorPickerCSS, 'text/css');
Scripts.push(ColorPickerJS);
mw.loader.load(ClockPickerCSS, 'text/css');
Scripts.push(ClockPickerJS);
mw.loader.load(DatePickerCSS, 'text/css');
Scripts.push(DatePickerJS);
}
$.when.apply( null, $.map(Scripts, function ( url ) {
return $.ajax({ url: url, dataType: 'script', cache: true });
return $.ajax({ url: url, dataType: 'script', cache: true });
})).done(function(){
})).done(function(){
PortalEval.functions.setDefaultParams();
MassEval.functions.setDefaultParams();
PortalEval.functions.getCustomParams();
MassEval.functions.getCustomParams();
var LaunchThis = PortalEval.functions.getLaunchCondition();
var LaunchThis = MassEval.params.LaunchCondition;
if(LaunchThis === 1) PortalEval.functions.addlink();
if([2,4,5].indexOf(LaunchThis)!==-1) MassEval.functions.setCSSstyles();
if(LaunchThis === 2) PortalEval.functions.prepareSpecialpage();
if(LaunchThis === 1) MassEval.functions.addCategoryLink();
if(LaunchThis === 3) PortalEval.functions.addlinktoSpecialpage();
if(LaunchThis === 2) MassEval.functions.prepareSpecialpage();
if(LaunchThis === 3) MassEval.functions.addlinktoSpecialpage();
if(LaunchThis === 4) MassEval.functions.addPageLink();
if(LaunchThis === 5) MassEval.functions.addPageLink();
if(LaunchThis === 6) MassEval.functions.addUserLink();
if(LaunchThis === 7) MassEval.functions.addTemplateLink();
if(LaunchThis === 10) MassEval.functions.addNewpagesLink();
if(LaunchThis === 11) MassEval.functions.addCreationsLink();
if(LaunchThis === 12) MassEval.functions.addLinkshereLink();
if(LaunchThis === 13) MassEval.functions.addPrefixindexLink();
});
});
},
},
getLaunchCondition : function() {
getLaunchCondition : function() {
if(mw.config.get('wgServer') !== '//fr.wikipedia.org') return false;
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 wgTitle = mw.config.get('wgTitle');
var Title = mw.config.get('wgTitle');
var wgAction = mw.config.get('wgAction');
if(mw.config.get('wgNamespaceNumber')==-1 && (Title == "PortalEval" || Title.indexOf("PortalEval/")!=-1)) return 2;
var wgNamespaceNumber = mw.config.get('wgNamespaceNumber');
if(mw.config.get('wgCanonicalSpecialPageName')==="Specialpages") return 3;
var wgCanonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName');
var wgUserName = mw.config.get('wgUserName');
return false;
var LaunchCondition = false;
if(wgNamespaceNumber == 14 && ["edit","submit"].indexOf(wgAction) == -1) LaunchCondition = 1;
if(wgNamespaceNumber == -1 && (wgTitle == MassEval.params.SpecialpageName || wgTitle.indexOf(MassEval.params.SpecialpageName+"/") != -1)) LaunchCondition = 2;
if(wgCanonicalSpecialPageName == "Specialpages") LaunchCondition = 3;
if([0,1].indexOf(wgNamespaceNumber) != -1 && ["edit","submit"].indexOf(wgAction) == -1) LaunchCondition = 4;
if([0,1].indexOf(wgNamespaceNumber) != -1 && wgAction == "edit" && document.URL.indexOf("redlink=1") != -1) LaunchCondition = 4;
if([2,3].indexOf(wgNamespaceNumber) != -1 && wgTitle === wgUserName+MassEval.params.TestPage && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 5;
if([2,3].indexOf(wgNamespaceNumber) != -1 && wgTitle !== wgUserName+MassEval.params.TestPage && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 6;
if(wgNamespaceNumber == 10 && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 7;
if(["Newpages","Recentchanges"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 10;
if(["Contributions"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 11;
if(["Whatlinkshere"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 12;
if(["Prefixindex"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 13;

MassEval.params.LaunchCondition = LaunchCondition;
console.info("MassEval launch condition = "+LaunchCondition);
return LaunchCondition;
},
// ------------------------------- Styles CSS -------------------------------
getCSSstyle : function(stylename) {
if(typeof(MassEval.params.DEFAULTstyles[stylename])==="undefined") return "";
if(typeof(MassEval.styles[stylename])==="undefined") return "";
return MassEval.styles[stylename];
},
setCSSstyles : function() {
var getS = MassEval.functions.getCSSstyle;
if(MassEval.params.ActualStyleTag){
MassEval.params.ActualStyleTag.parentNode.removeChild(MassEval.params.ActualStyleTag);
}
var NewStyles = ""

// Général --------------------------------------------------------


// Partout

+ "#MassEvalBoard input[type=text], #MassEvalBoard input[type=time] { background-color:"+getS('ImpTexbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:"+getS('ImpTexbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalBoard select { background-color:"+getS('ImpTexbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:"+getS('Selectbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalBoard input[type=button] { background-color:"+getS('ImpButbgc')+";border-radius:"+getS('ImpButbdr')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalBoard textarea { background-color:"+getS('ImpTexbgc')+";border-radius:"+getS('ImpTexbdr')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalBoard input[type=button][disabled] { background-color:"+getS('ImpButDisbgc')+"; }"
+ "#MassEvalBoard input[type=text][disabled],#MassEvalBoard input[type=time][disabled] { background-color:"+getS('ImpTexDisbgc')+"; }"
+ "#MassEvalBoard select[disabled], #MassEvalBoard textarea[disabled] { background-color:"+getS('ImpTexDisbgc')+";cursor:not-allowed !important; }"
+ "#MassEvalBoard select, #MassEvalBoard input[type=button], #MassEvalBoard input[type=checkbox], #MassEvalBoard input[type=radio] { cursor:pointer !important; }"
+ "#MassEvalBoard input[type=button]:disabled { cursor:not-allowed !important; }"
+ "a.disabledoptionlink, a.disableddatlink { color:DimGray !important;cursor:not-allowed !important; }"
+ ".showhideConfigForm { margin-left:0.5em; }"
+ "table.centre { margin: 1em auto; }"
+ "#MassEvalBoardHead a, #MassEvalBoardHead a *, #fieldsetOptions a, #fieldsetOptions a *, .TD1Content a, .TD1Content a * { color:"+getS('Linkscol')+"; }"
+ "#MassEvalBoardHead a.new, #MassEvalBoardHead a.new *, #fieldsetOptions a.new, #fieldsetOptions a.new *, .TD1Content a.new, .TD1Content a.new * { color:red; }"
+ "#MassEvalBoardHead a.mw-redirect, .TD1Content a.mw-redirect { green !important }"
+ "#MassEvalBoardHead abbr, #fieldsetOptions abbr, .TD1Content abbr { text-decoration:none !important; }"
+ "#MassEvalBoardHead, #fieldsetOptions, .TD1Content, .TD2, .TD3, .TD4, .TD5, .TD6, #MassEvalBoard input, #MassEvalBoard select { font-size:"+getS('Mainfs')+"; }"
+ "#MassEvalBoardHead, #fieldsetOptions, .TD1Content, .TD2, .TD3, .TD4, .TD5, .TD6, #MassEvalBoard input, #MassEvalBoard select { font-family:"+getS('Mainff')+"; }"

// Page spéciale

+ ".ns--1 #MassEvalBoard legend, #fieldsetOptionsContainer legend, #fieldsetSearchContainer legend { padding:0.25em;margin-left:1.5em; }"
+ ".ns--1 #MassEvalBoard fieldset { border-radius:"+getS('BigFSbdr')+"; }"
+ ".ns--1 #MassEvalBoard fieldset { border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";background-color:"+getS('BigFSbgc')+";border-bottom-width:2px;border-right-width:2px; }"
+ ".ns--1 #MassEvalBoardHead { padding:0 1em;padding-bottom:1em;margin:0;margin-bottom:1em; }"
+ ".ns--1 #MassEvalBoardHead fieldset { margin: 0 0 0.5em 0;padding:0 0.5em;padding-top:0; }"
+ ".TDSelector, .TDInfos { border-right:1px "+getS('Innerbds')+" "+getS('Linesbdc')+"; }"

// Hors page spéciale

+ ".ns-0 #MassEvalBoard, .ns-1 #MassEvalBoard, .ns-2 #MassEvalBoard, .ns-3 #MassEvalBoard { background-color:"+getS('Mainbgc')+";border:1px "+getS('Wrapperbds')+" "+getS('Wrapperbdc')+";margin-bottom:1em;padding:0.5em;border-radius:"+getS('Wrapperbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalMainOptionsFS { padding: 0;margin:0;display:-webkit-flex;display: flex;justify-content:center;align-items:center;flex-wrap: wrap;width:100%;text-align:center; }"
+ "#MassEvalMainOptionsFS legend { padding:0 0.125em;margin:0 0 0 1em; }"
+ "#MassEvalMainOptionsFS fieldset { display:inline;margin:0 1em 0.5em 1em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#MassEvalBoardHead *, #fieldsetOptions *, .TH1, .TH2, .TH3, .TH4, .TH5, .TH6, .TD1Content *, .TD2 *, .TD3 *, .TD4 *, .TD5 *, .TD6 * { color:"+getS('Maincol')+"; }"
+ "#CloseButton {float:right;margin-bottom:-50px; }"
+ "#CloseButtonImage { border-radius: 0.5em;box-shadow: 2px 2px 5px DimGray; }"

// Images

+ ".EvalTableIcon { width:"+getS('EvalTableIcowidth')+"; }"
+ ".RunningIcon { width:"+getS('RunIcowidth' )+"; }"
+ ".PrevCloseIcon { width:"+getS('PrevCloseIcowidth')+"; }"
+ ".RedirectIcon { width:"+getS('RedirectIcowidth' )+"; }"
+ ".DisambigIcon { width:"+getS('DisambigIcowidth' )+"; }"
+ ".HiddenCatIcon { width:"+getS('HiddenCatIcowidth')+"; }"
+ ".AlertIcon { width:"+getS('AlertIcowidth' )+"; }"
+ ".MainCloseIcon { width:"+getS('MainCloseIcowidth')+"; }"

// Formulaire Thème d'évaluation --------------------------------------------------------

+ "#EvalThemeInput, #PortalInput { width:"+getS('MainEvalTwidth')+"; }"
+ "#EvalThemeTD { text-align:left; }"
+ ".ns--1 #EvalThemeInput { width:"+getS('SpeImpCatwdth')+"; }"
+ ".ns--1 #PortalInput { width:"+getS('SpeImpCatwdth')+"; }"
+ ".ns--1 #MassEvalBoard .NoBorderFieldset {border:none;background-color:transparent;margin:0;padding:0; }"
+ ".ns--1 #MassEvalBoard .NoBorderFieldset legend { display: block;width:150px;margin: auto;text-align: center; }"

+ "#ThemeCatsTD { text-align:center; }"
+ "#ThemeCats { margin-bottom:0.5em; }"
+ "#ThemeCats td { text-align:center;font-weight: bold;white-space:nowrap;background-color:"+getS('Linesbgc')+"; }"
+ "#EvalTable_AVT td:first-of-type, #EvalTable_IMP td:first-of-type { border:none; }"

+ "#EvalTable { }"
+ "#EvalTableUpdateTD { }"
+ "#EvalTable_IMP, #EvalTable_AVT, #ThemeCats { border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px;border-radius:"+getS('EvalTbdr')+"; }"

+ ".EvalTableFirstTH { border-top-left-radius:"+getS('EvalTbdr')+"; }"
+ ".EvalTableLastTH { border-top-right-radius:"+getS('EvalTbdr')+"; }"

+ "#EvalTable table, .evaltable { border-spacing:0; }"
+ "#EvalTable caption { font-weight:bold; }"
+ "#EvalTable_IMP th, #EvalTable_AVT th { background-color:"+getS('THListbgc')+";border-left:1px "+getS('Mainbds')+" "+getS('THListbdc')+"; }"
+ "#EvalTable_IMP td, #EvalTable_AVT td { background-color:"+getS('Linesbgc')+";border-left:1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-top:1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
+ "#EvalTable_AVT th:first-of-type, #EvalTable_IMP th:first-of-type { background-color:"+getS('THListbgc')+";border:none; }"
+ "#EvalTable_AVT td:first-of-type, #EvalTable_IMP td:first-of-type { background-color:"+getS('Linesbgc')+";border:none;border-top:1px "+getS('Mainbds')+" "+getS('THListbdc')+"; }"
+ ".hideportals #PortalInput, .hideportals #PortalInputfieldset, .ns--1.hideportals #EvalThemeInputfieldset legend { display:none; }"

// Formulaire Modes --------------------------------------------------------

+ "#fieldsetModes { padding-bottom:0 !important; }"
+ "#fieldsetModes fieldset { padding:0.25em !important; }"
+ "#fieldsetModes fieldset legend { display:none; }"
+ "#fieldsetModes form:first-of-type { text-align:center;margin:0 0 1em 0;}"
+ "#fieldsetModes form:first-of-type input[type='button'] { padding: 0.5em 1em;text-align: center;width:"+getS('ModSelwidth')+";white-space: nowrap;border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:0;border-left:none;background-color:"+getS('ModSelbgc')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#fieldsetModes form:first-of-type input[type='button']:first-of-type { border-left: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-top-left-radius:"+getS('ModSelbdr')+";border-bottom-left-radius:"+getS('ModSelbdr')+"; }"
+ "#fieldsetModes form:first-of-type input[type='button']:last-of-type { border-top-right-radius:"+getS('ModSelbdr')+";border-bottom-right-radius:"+getS('ModSelbdr')+"; }"
+ "#fieldsetModes form:first-of-type input[type='button']:hover { background-color:"+getS('HoverModSelbgc')+"; }"
+ "#fieldsetModes form:first-of-type input.modeselected { background-color:"+getS('ModSelCurrbgc')+"; }"
+ "#fieldsetModes form:first-of-type input.modeselected:hover { background-color:"+getS('HoverModSelCurrbgc')+"; }"

+ "p.InfosP { margin:0 0.5em 0 0.5em;text-align:center;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";font-weight: bold; }"

+ "#CatParentsDiv, #CatDaughtersDiv, .PageInfosDiv { height:"+getS('CatListhght')+";overflow-y:scroll; }"
+ ".TDInfos { border-top:1px "+getS('Innerbds')+" "+getS('Mainbdc')+";padding-left: 0.5em; }"
+ ".pagenoexists b { color:red !important; }"
+ ".pagenoexists b * { color:red !important; }"
+ ".pagenoexists li { visibility:hidden; }"
+ ".TDInfos ul { list-style: circle;margin-left:2em; }"
+ ".TimeSelector {text-align: center; }"
+ ".timeinput { width:"+getS('Timewidth')+";text-align:center; }"
+ ".dateinput { width:"+getS('Datewidth')+";text-align:center; }"
+ ".PageInfos { -webkit-columns:"+getS('PIcolwdth')+"; -moz-columns:"+getS('PIcolwdth')+"; columns:"+getS('PIcolwdth')+";margin-left: 0.25em; }"
+ ".PageInfos li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('PILIbdr')+";background-color:"+getS('PILIbgc')+";border:1px "+getS('Mainbds')+" "+getS('PILIbdc')+"; }"
+ ".PageInfos li:hover, #fieldsetDatas li:hover { background-color:"+getS('HoverPILIbgc')+";border:1px "+getS('Mainbds')+" "+getS('HoverPILIbdc')+"; }"

// Formulaire Pages --------------------------------------------------------


// Formulaire Catégorie --------------------------------------------------------

+ ".SuggestForm { display:-webkit-flex;display:flex;flex-direction:column; }"
+ "#CatInputForm { }"
+ ".ns--1 #CatInput, ns--1 #EvalThemeInput { width:"+getS('SpeImpCatwdth')+"; }"
+ ".ns--1 #fieldsetCat input[type=text] { margin-bottom:0.5em; }"
+ "#subcatdepthForm { padding-left:2em; }"
+ "#subcatdepthForm input {margin-right:0.25em; }"
+ "#CatInfosDiv { padding:1em 0; }"
+ "#Pinfos { margin: 0; }"
+ "#TDDaughters { border-left:1px "+getS('Innerbds')+" "+getS('Mainbdc')+"; }"
+ "#CatParentsDiv ul, #CatDaughtersDiv ul {list-style: none;margin-left: 0.25em; }"
+ "#CatParentsDiv ul ul, #CatDaughtersDiv ul ul {list-style: none;margin-left:1em; }"
+ ".hiddencaticon { margin-left:0.5em; }"


// Formulaire Liens --------------------------------------------------------

+ "#LinksTable { }"

// Formulaire Pages liées --------------------------------------------------------


// Formulaire Inclusions --------------------------------------------------------

+ "#TemplateDoc { font-size:"+getS('TempDocfs')+";margin-left:0.5em; }"
+ "#TDtemplatedoc { border-left:1px "+getS('Innerbds')+" "+getS('Mainbdc')+";width:"+getS('TempDocwidth')+"; }"

// Formulaire Nouvelles pages --------------------------------------------------------

+ "#NewpagesTimeSelector { margin-bottom:1em !important; }"


// Formulaire Filtrage --------------------------------------------------------

+ "#fieldsetSearch { padding:0.5em !important; }"
+ "#ANDORselect1, #ANDORselect2 { margin-left:2em;margin-right:2em; }"
+ "#SearchResultDisplaySelector { float:right; }"
+ "#FilterForm_STUB, #FilterForm_AVT, #FilterForm_IMP { white-space:nowrap; }"
+ "#FilterForm_STUB span, #FilterForm_AVT span, #FilterForm_IMP span { padding:2px;padding-top:5px;border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+"; }"
+ "#PageFilteredCount { float:right; }"
+ "#RangeSelectorAbbr { float:left; }"
+ "#RangeSelectorAbbr, #PageFilteredCount { border:1px "+getS('FiltAbbrbds')+" "+getS('Mainbdc')+";border-radius:"+getS('FiltAbbrbdr')+";padding:0.05em 0.3em 0em 0.3em;background-color:"+getS('FiltAbbrbgc')+";font-weight:bold;border-bottom-width:2px;border-right-width:2px; }"
+ ".startFilterOption { border-radius: "+getS('FilSelbdr')+" 0 0 "+getS('FilSelbdr')+"; }"
+ ".endFilterOption { border-radius: 0 "+getS('FilSelbdr')+" "+getS('FilSelbdr')+" 0; }"
+ ".MouseFunctionRunning * { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }"
+ ".MouseFunctionRunning input[type=text]:focus, .MouseFunctionRunning input[type=time]:focus { -webkit-touch-callout: text; -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; }"
+ ".ResizeFunctionRunning * { cursor:w-resize; }"
+ ".MoveFunctionRunning * { cursor:move; }"
+ "#FromToSelectorContainer { margin-bottom:1em;border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-collapse:collapse;border-radius:1em;border-top-width:2px;border-left-width:2px;overflow:hidden; }"
+ "#FromToSelectorDiv { background-color:"+getS('FiltNSbgc')+"; }"
+ "#FromToSelector { background-color:"+getS('FiltSbgc')+";border-radius:1em;overflow:hidden; }"
+ "#FromSelector { float:left; }"
+ "#ToSelector { float:right; }"
+ "#FromSelector, #ToSelector { width:1em;background-color:" + getS('FiltSbgc') + "; }"
+ "#FromToSelectorContainer, #FromToSelectorDiv, #FromToSelector, #FromSelector, #ToSelector, #FromSelectorMove { height:1em; }"
+ "#FromSelectorMove {margin-left:1em;margin-right:1em; }"
+ "#RangeSelectorAbbrLink *, #PageFilteredCount { color:"+getS('Maincol')+" !important;text-decoration:none !important; }"
+ ".RangeSelectorDisabled #FromToSelector { visibility:hidden; }"
+ ".RangeSelectorDisabled { background-color:"+getS('FiltDISbgc')+" !important; }"
+ ".NotAllPages { border:1px "+getS('FiltAbbrbds')+" "+getS('FiltAbbrMbdc')+" !important;background-color:"+getS('FiltAbbrMbgc')+" !important;border-bottom-width:2px !important;border-right-width:2px !important; }"
+ "#fieldsetSearchContainer { margin-left:0.5em;margin-right:0.5em; }"
+ "#fieldsetSearchContainer #fieldsetSearch { margin:0em 0.5em 0.5em 0.5em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#fieldsetSearchContainer #FromToSelectorContainer { margin:0 0.25em 0.25em 0.25em; }"
+ "#fieldsetSearch select { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; }"

// Formulaire Actions --------------------------------------------------------

+ ".ns--1 #fieldsetActions { padding-bottom:0.75em !important; }"
+ "#GlobalChangeInput, #GlobalOptionsInput, #SPInput, #DocInput { margin-left:1.5em; }"
+ "#GlobalCancelInput { margin-left: 0.125em; }"
+ ".ns--1 #fieldsetActions .FieldsetContent { display:-webkit-flex;display: flex;justify-content: space-between; }"
+ "#fieldsetActions #LeftButtons { display:inline; }"
+ ".ns--1 #fieldsetActions #LeftButtons { display:-webkit-flex;display:flex; }"
+ "#LinksActions { display:-webkit-flex;display:flex;white-space:nowrap; }"
+ "#EmergencyStop { margin:0 0.75em;width:"+getS('EmStopwidth')+";height:"+getS('EmStopwidth')+";border-radius:50%;border: 3px solid DimGray;box-shadow: 2px 2px 5px DimGray;background: radial-gradient(circle, red , DarkRed) !important; }"
+ "#EmergencyStop.Pushed { border-color:FireBrick;box-shadow:none; }"
+ "#GlobalAddEvalAVTSelect, #GlobalAddEvalIMPSelect { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; } "
+ "#GlobalAddEvalCancel {padding-left:0;padding-right:0; }"

// Tableau des pages --------------------------------------------------------

+ "#MassEvalBoardListDiv { padding:"+getS('LinesTbdr')+";background-color:"+getS('BigFSbgc')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('LinesTbdr')+";overflow:hidden; }"
+ "#MassEvalBoardList { margin:0px;border-collapse:collapse; }"
+ ".TH1, .TH2, .TH3, .TH4, .TH5, .TH6 { background-color:"+getS('THListbgc')+";border:1px "+getS('Mainbds')+" "+getS('THListbdc')+";padding-bottom: 0;padding-top: 0; }"
+ ".TD1, .TD2, .TD3, .TD4, .TD5, .TD6 { background-color:"+getS('Linesbgc')+";border:1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
+ ".TH2 { width:"+getS('TH2width')+"; }"
+ ".TH3 { width:"+getS('TH3width')+"; }"
+ ".TH4 { width:"+getS('TH4width')+"; }"
+ ".TH5 { width:"+getS('TH5width')+"; }"
+ ".TH6 { width:"+getS('TH6width')+"; }"
+ ".SinglePageAnalysis .TD1:hover, .SinglePageAnalysis .TD2:hover, .SinglePageAnalysis .TD3:hover, .SinglePageAnalysis .TD4:hover, .SinglePageAnalysis .TD5:hover, "
+ ".MultiplePagesAnalysis tr:hover .TD1, .MultiplePagesAnalysis tr:hover .TD2, .MultiplePagesAnalysis tr:hover .TD3, .MultiplePagesAnalysis tr:hover .TD4, .MultiplePagesAnalysis tr:hover .TD5, .MultiplePagesAnalysis tr:hover .TD6 { background-color:"+getS('HoverLinesbgc')+"; }"
+ ".FilteredLine { display:none !important; }"
+ ".previewDiv { background-color:"+getS('Prvwbgc')+";font-size:"+getS('Prvwfs')+";height:"+getS('Prvwhght')+";width:100%;overflow-y:scroll;border-top:1px "+getS('Prvwbds')+" "+getS('Linesbdc')+";resize:vertical; }"
+ ".previewButtons { float:right; }"
+ ".previewCloseButtonImage { border-radius: 0.25em; }"
+ ".pagepropicon { margin-right:0.5em; }"
+ ".StubTheme { width:"+getS('StubTwidth')+"; }"
+ ".StubAdj { width:"+getS('StubAwidth')+"; }"
+ ".Avancement { width:"+getS('Avtwidth')+"; }"
+ ".IMPtheme { width:"+getS('ImpTwidth')+"; }"
+ ".Importance { width:"+getS('Impwidth')+"; }"
+ ".TD2Content { text-align:left;padding:0 0.25em; }"
+ ".TD3Content { text-align:right;padding:0 0.25em; }"
+ ".TD4Content { text-align:center;padding:0 0.25em; }"
+ ".TD5Content { text-align:right;padding:0 0.25em; }"
+ ".TD6Content { display:-webkit-flex;display:flex;flex-direction: column;align-content:center;padding:0 0.25em; }"
+ ".SortLinks { float:right;margin-bottom:-2em;display:-webkit-flex;display:flex;flex-direction:column;line-height:90%;font-size:70%;border:1px "+getS('Mainbds')+" "+getS('Sortbdc')+";background-color:"+getS('Sortbgc')+";border-radius:"+getS('Sortbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ ".SortLinks a { color:"+getS('Sortcol')+" !important; }"
+ ".SinglePageAnalysis .SortLinks { visibility:hidden; }"
+ "#selectedSort { visibility:hidden; }"
+ ".hideportals .TH2, .hideportals .TD2 { display:none; }"
+ ".TD2Content ul { list-style:none;margin:0;font-size:"+getS('PortListfs')+";line-height:100%; }"
+ ".TD2Content li { border:1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-radius:0.5em;padding:1px 0.5em;background-color:"+getS('Linesbgc')+" !important;cursor:pointer; }"
+ ".TD2Content li:hover { background-color:"+getS('THListbgc')+" !important; }"
+ ".TD3Content form:hover, .TD5Content form:hover { background-color:"+getS('THListbgc')+" !important; }"

// Liens du bas
+ "#MassEvalBoard #bottomlinks { display:-webkit-flex;display:flex;align-content:center; }"
+ "#MassEvalBoard #bottomlinks a { width: 20%;background-color:"+getS('Linesbgc')+";border-top: 3px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-bottom: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-left: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+";text-align: center;padding: 1em 0 1em 0;font-size: 120%; }"
+ "#MassEvalBoard #bottomlinks a:last-of-type { border-right: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
+ "#MassEvalBoard #bottomlinks a:hover { background-color:"+getS('HoverLinesbgc')+"; }"


// Menu d'options --------------------------------------------------------

+ "#MassEvalBoardHead #fieldsetOptions { margin-top:0;margin-left:1em;margin-right:1em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ "#fieldsetOptions li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+"; }"
+ "#fieldsetOptions li:hover, #fieldsetDatas li:hover { background-color:"+getS('HoverOptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('HoverOptLIbdc')+"; }"
+ "#fieldsetOptions textarea { resize:none; }"
+ ".OptInputNbr { width:"+getS('OptNbrwdth')+"; }"
+ ".OptInputStr { width:"+getS('OptStrwdth')+"; }"
+ ".OptInputCSS { width:"+getS('OptStywdth')+"; }"
+ "#fieldsetOptions p { padding-bottom: 0.5em;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";margin-bottom:0.5em;margin-left:2em;margin-right:2em; }"
+ ".ns--1 #fieldsetOptions p { padding-bottom: 1em;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";margin-bottom:1em;margin-left:2em;margin-right:2em; }"
+ "#OPTIONULparams, #OPTIONULstyles, #OPTIONULtexts { -webkit-columns:"+getS('Optcolwdth')+"; -moz-columns:"+getS('Optcolwdth')+"; columns:"+getS('Optcolwdth')+"; }"
+ "#OPTIONULparams li, #OPTIONULstyles li { display:-webkit-flex;display:flex;align-items:center; }"
+ ".optionsUL { margin-right:1em;margin-left:1em; }"
+ "#OPTIONULtexts li input[type=button] { padding-top:0.5em;padding-bottom:0.8em;margin-bottom:-1em; }"
+ "#OPTIONULtexts li textarea { display:inline;margin:0;position:relative;top:1em;margin-top:-1em; }"
+ "#OPTIONULtexts li label { display:block;margin-left:1em; }"
+ "#OPTIONULtexts li { padding-bottom:1em; }"
+ "#OPTIONULtexts li form { display:-webkit-flex;display:flex;align-content:center; }"
+ ".colorpickerDiv { float: left;position: relative;left:-198px;margin-right:-197px;top:-210px;margin-bottom: -200px !important; }"
+ ".colorpicker { border:1px solid "+getS('Mainbdc')+";background-color:white;border-radius:98px;overflow:hidden;box-shadow: 2px 2px 5px DimGray; }"
+ "#OPTIONULstyles form { display:-webkit-flex;display:flex;align-items:center; }"
+ "#GlobalRAZoptionInput { margin-left:1em; }"
+ "#FontTester { display:inline-block; width:350px;height:210px;position: relative;left:0.25em;margin-right: -366px;margin-bottom: -205px;overflow:hidden;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+";border-bottom-width:2px;border-right-width:2px;text-align:justify;font-family:"+getS('Mainff')+";padding:0.5em;box-shadow: 2px 2px 5px DimGray; }"
+ ".ImagePreviewSpan { float: left;width: 0;height: 0; }"
+ ".ImagePreview { float:left;position:relative;top:10px;height:"+getS('OptImgPrevhght')+";margin-top:-"+getS('OptImgPrevhght')+";background: url('//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png') repeat;border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+";border-bottom-width:2px;border-right-width:2px;box-shadow: 2px 2px 5px DimGray; }"

+ ".modifiedoption { background-color:"+getS('OptLIMbgc')+" !important; }"
+ ".modifiedoption:hover { background-color:"+getS('HoverOptLIMbgc')+" !important; }"
+ ".modifiedoption label { cursor:help; }"
+ "#MoreParamsTestResult { margin-left:1em; }"
+ "#MoreParamsTestResult span { color:red !important; }"

// Menu des données --------------------------------------------------------

+ ".DataInfo {padding:0.1em;border:1px solid grey; }"
+ "#fieldsetDatas li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+"; }"
+ "input[name='RAZdataUL'] { margin-left:2em !important; }"

// Bandeau de message --------------------------------------------------------

+ "#MassEvalControlUL { position:fixed;bottom:0;right:0;margin-3px;list-style:none; }"
+ ".MassEvalControlLI { background-color:"+getS('Alertbgc')+";border:1px "+getS('Alertbds')+" "+getS('Alertbdc')+";border-bottom-width:2px;border-right-width:2px;border-radius:"+getS('Alertbdr')+";margin:1px;padding:5px;text-align:right;display:-webkit-flex;display:flex;align-content: center; }"
+ ".MassEvalBoardControlText { color:"+getS('Alertcol')+";margin-right:1.5em;margin-left:1em;font-size:"+getS('Alertfs')+";font-weight:bold; }"
+ "#MassEvalControlLI_AllOK { cursor:help; }"

// Harmonisation clockpicker / datepicker --------------------------------------------------------

+ ".clockpicker-popover .popover-title { display:none; }"
+ ".clockpicker-plate div.active { color: "+getS('DTpickCSelbdc')+";font-weight:bold; }"
+ ".clockpicker-canvas-bg { fill:none;stroke:none; }"
+ ".clockpicker-canvas-bearing { fill:"+getS('DTpickCSelbdc')+"; }"
+ ".clockpicker-canvas line { stroke:"+getS('DTpickCSelbdc')+"; }"
+ ".clockpicker-canvas-fg { fill:"+getS('DTpickCSelbdc')+"; }"
+ ".datepicker-panel > ul > li.picked { color: "+getS('DTpickCSelbdc')+";font-weight:bold; }"
+ ".datepicker-panel > ul > li.picked, .datepicker-panel > ul > li.picked:hover { border:1px solid "+getS('DTpickCSelbdc')+";height:28px;width:28px;line-height:28px; }"
+ ".datepicker-panel > ul > li.picked { background-color:"+getS('DTpickCSelbgc')+" !important; }"
+ ".clockpicker-plate div.active { background-color:"+getS('DTpickCSelbgc')+" !important;border:1px solid "+getS('DTpickCSelbdc')+"; }"
+ ".datepicker-panel > ul > li { background-color:transparent; }"
+ ".datepicker-panel > ul > li { border-radius:50%; }"
+ ".datepicker-panel > ul > li.highlighted { background-color:transparent; }"
+ ".datepicker-panel > ul > li:hover { background-color: "+getS('HoverDTpickCbgc')+" !important; }"
+ ".datepicker-panel > ul > li.picked:hover { background-color: "+getS('HoverDTpickCbgc')+"; }"
+ ".clockpicker-plate div.active:hover { background-color:"+getS('HoverDTpickCbgc')+" !important; }"
+ ".clockpicker-tick:hover { background-color: "+getS('HoverDTpickCbgc')+" !important; }"
+ ".datepicker-panel > ul > li.muted, .datepicker-panel > ul > li.muted:hover { color: "+getS('DTpickUnSelcol')+"; }"
+ ".datepicker-panel > ul > li.disabled, .datepicker-panel > ul > li.disabled:hover { background-color:transparent !important;color: "+getS('DTpickDiscol')+"; }"
+ ".popover, .datepicker-dropdown, .datepicker-container { background-color:"+getS('DTpickbgc')+";font-size: 12px; border: 1px solid "+getS('Mainbdc')+";box-shadow: 0 5px 10px rgba(0, 0, 0, .2);border-radius:"+getS('DTpickbdr')+";border-bottom-width:2px;border-right-width:2px; }"
+ ".datepicker-top-left, .datepicker-top-right { border-top-color:"+getS('Mainbdc')+"; }"
+ ".popover { background-color: "+getS('DTpickbgc')+"; }"
+ ".clockpicker-popover .popover-content { background-color:transparent; }"
+ ".clockpicker-plate {background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+"; }"
+ ".datepicker-container { padding:10px; }"
+ ".datepicker-panel > ul > li[data-view='month prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
+ ".datepicker-panel > ul > li[data-view='month prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='month current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='month next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
+ ".datepicker-panel > ul[data-view='week'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-bottom-style:"+getS('Innerbds')+";border-top-left-radius:15px;border-top-right-radius:15px;height:28px;margin-top:10px;width:210px; }"
+ ".datepicker-panel > ul[data-view='week'] > li, .datepicker-panel > ul[data-view='week'] > li:hover { background-color: transparent !important; }"
+ ".datepicker-panel > ul[data-view='days'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-top:none;border-radius:0 0 15px 15px;width:210px; }"
+ ".datepicker-panel > ul[data-view='days'] > li { margin:2px;width:26px;height:26px;line-height:26px; }"
+ ".datepicker-panel > ul[data-view='days'] > li.picked { width:24px;height:24px;line-height:24px; }"
+ ".datepicker-panel > ul > li[data-view='year prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
+ ".datepicker-panel > ul > li[data-view='year prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='year current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='year next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
+ ".datepicker-panel > div[data-view='months picker'] ul:first-of-type { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;height:28px;line-height:28px;width:210px; }"
+ ".datepicker-panel > ul[data-view='months'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;width:210px;margin-top:10px; }"
+ ".datepicker-panel > ul[data-view='months'] > li { margin:4px 10px;width:32px;height:32px;line-height:32px; }"
+ ".datepicker-panel > ul[data-view='months'] > li.picked { width:30px;height:30px;line-height:30px; }"
+ ".datepicker-panel > ul > li[data-view='years prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
+ ".datepicker-panel > ul > li[data-view='years prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='years current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
+ ".datepicker-panel > ul > li[data-view='years next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
+ ".datepicker-panel > div[data-view='years picker'] ul:first-of-type { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;height:28px;line-height:28px;width:210px; }"
+ ".datepicker-panel > ul[data-view='years'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;width:210px;margin-top:10px; }"
+ ".datepicker-panel > ul[data-view='years'] > li { margin:4px 7px;width:38px;height:38px;line-height:38px; }"
+ ".datepicker-panel > ul[data-view='years'] > li.picked { width:36px;height:36px;line-height:36px; }"
+ ".popover.bottom > .arrow, .popover > .arrow::after { border-bottom-color: "+getS('Mainbdc')+" !important;}"
+ ".datepicker-top-left::before, .datepicker-top-left::after, .datepicker-top-right::before, .datepicker-top-right::after { left:18px;top:-22px; }"
+ ".datepicker-container::before, .datepicker-container::after { border:11px solid transparent; }"
+ ".datepicker-top-left::before, .datepicker-top-right::before { border-bottom-color: "+getS('Mainbdc')+"; }"
+ ".datepicker-panel > ul > li, .datepicker-panel > ul > li.disabled, .datepicker-panel > ul > li.disabled:hover, .datepicker-panel > ul > li.muted, .datepicker-panel > ul > li.muted:hover { background-color: transparent; }"

/*
+ ".popover { display: block !important; }" // <----------------------------------------- garder le conteneur visible pour les tests
+ ".datepicker-container { display: block !important; }" // <---------------------------- garder le conteneur visible pour les tests
*/


// Fancy inputs --------------------------------------------------------
if(MassEval.params.UseFancyInputs){
NewStyles += ""

+ "#MassEvalBoard select, #MassEvalBoard input[type='checkbox'], #MassEvalBoard input[type='radio'] { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; }"

+ "#MassEvalBoard input[type='checkbox'] {width:2.5em;height:1.5em;margin:0;margin-right:0px;margin-left:0px;margin-right:0px;margin-left:0px;margin-right:0.25em;margin-left:0.25em;cursor:pointer;"
+ "border-radius:1.5em;background-color: red;border: 1px solid DimGray;border-bottom-width:3px;border-right-width:3px; }"
+ "#MassEvalBoard input[type='checkbox']::after { content:\"◄\";position: relative;top: -0.10em;color: DarkRed;left:0em;transition:left 0.5s; }"
+ "#MassEvalBoard input[type='checkbox']:disabled::after { color:DimGray; }"
+ "#MassEvalBoard input[type='checkbox']:checked { background-color:Lime; }"
+ "#MassEvalBoard input[type='checkbox']:checked::after { content:\"►\";position: relative;top: -0.10em;color: green;left: 1.375em; }"
+ "#MassEvalBoard input[type='checkbox']:checked:disabled::after { color:DimGray; }"
+ "#MassEvalBoard input[type='checkbox']:disabled { background-color:Gray; }"

+ "#MassEvalBoard input[type='radio'] {width:1em;height: 1em;margin: 0;margin-right: 0px;margin-left: 0px;margin-right: 0px;margin-left: 0px;margin-right: 0.25em;margin-left: 0.25em;cursor:pointer;"
+ "border-radius: 0.75em;background-color: red;border: 1px solid DimGray;border-bottom-width:3px;border-right-width:3px; }"
+ "#MassEvalBoard input[type='radio']:checked { background-color:Lime; }"
+ "#MassEvalBoard input[type='radio']:disabled { background-color:Gray; }"
+ "#MassEvalBoard input[type='radio']:checked:disabled { background-color:LightGrey; }"

+ "#MassEvalBoard select::after { content:\"▼\";position:relative;width:1.5em;height:1.5em;border:1px solid Gray;background-color:silver;color:black; }"


}
MassEval.params.ActualStyleTag = mw.loader.addStyleTag(NewStyles);
}
}
}
}
}
}
// ------------------------------- Lancement -------------------------------

if( PortalEval.functions.getLaunchCondition()){
if( MassEval.functions.getLaunchCondition()){
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function(){
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function(){
$(MassEval.functions.launch);
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>
//</source></noinclude>

Latest revision as of 22:31, 10 August 2018

// Ci-dessous le début du script. Seule la partie personnalisable est transcluse. [[{{fullurl:{{FULLPAGENAME}}|action=purge}} purger]]<noinclude>

// Documentation : [[m:User:OldBee/MassEval.js/doc]]

//<source lang=javascript>
window.MassEval = {
/* ############################### PARTIE PERSONNALISABLE ############################### </source></noinclude>__TOC__

== Textes ==

=== Textes de l'interface ===

<source lang=javascript> // ------------------------------- Textes ------------------------------- */
  texts : {

// Liens en haut de page
    "LinkText"              : "Évaluer",
    "LinkPageTitle"         : "Vérifier l’évaluation de cette page",
    "LinkCatTitle"          : "Vérifier l’évaluation des articles de cette catégorie",
    "LinkLinksTitle"        : "Vérifier l’évaluation des liens de la page",
    "LinkLinkshereTitle"    : "Vérifier l’évaluation des pages pointant vers cette page",
    "LinkTemplateTitle"     : "Vérifier l’évaluation des pages incluant le modèle",
    "LinkNewpagesTitle"     : "Vérifier l’évaluation des nouvelles pages",
    "LinkCreationsTitle"    : "Vérifier l’évaluation des articles créés par l’utilisateur",
    "LinkPrefixindexTitle"  : "Vérifier l’évaluation des pages commençant par...",

// Page spéciale
    "SpecialpageName"       : "Évaluation de masse",
    "SpecialpageNameH"      : "$1 — Wikipédia",
    "contentSubTemplate"    : "← $1",

// Formulaires principaux
    "Warning"               : "Ce script en cours de maintenance. Son fonctionnement n’est pas garanti !",
    "Show"                  : "(+)",
    "ShowTip"               : "Afficher",
    "Hide"                  : "(-)",
    "HideTip"               : "Masquer",

  // Thème d'évaluation
    "EvalTheme"             : "Thème d’évaluation",
    "Portal"                : "Portail associé",
    "UpdateTableEvalText"   : "Màj",
    "UpdateTableEvalTip"    : "Mettre à jour le tableau",
    "AVT"                   : "Avancement",
    "IMP"                   : "Importance",
    "ThemeCats"             : "Catégories liées",
    "TableEvalTotal"        : "Total",

  // Modes
    "Modes"                 : "Mode",
    "MainNamespace"         : "- Articles -",
    "TimeDateLabel"         : "Horodatage",

  // Informations sur la page ou l'utilisateur
    "INFOmissing"           : "Page inexistante ?",
    "INFOpageid"            : "Identifiant de la page",
    "INFOns"                : "Espace de noms",
    "INFOtitle"             : "Titre",
    "INFOcontentmodel"      : "Type de contenu",
    "INFOpagelanguage"      : "Language du contenu",
    "INFOtouched"           : "Dernière mise à jour",
    "INFOlastrevid"         : "Identifiant de la dernière version",
    "INFOlength"            : "Taille (octets)",
    "INFOprotection"        : "Protections",
    "INFOwatched"           : "Page suivie ?",
    "INFOwatchers"          : "Nombre de suiveurs",
    "INFOvisitingwatchers"  : "Nombre de suiveurs ayant visité la dernière révision",
    "INFOsubjectid"         : "Identifiant de la page principale",
    "INFOtalkid"            : "Identifiant de la page de discussion",
    "INFOuserid"            : "Identifiant de l’utilisateur",
    "INFOname"              : "Nom",
    "INFOeditcount"         : "Compteur d’éditions",
    "INFOregistration"      : "Date d’enregistrement",
    "INFOgroups"            : "Groupes",
    "INFOgender"            : "Genre",
    "INFOgenderunknown"     : "inconnu",
    "INFOgenderfemale"      : "féminin",
    "INFOgendermale"        : "masculin",
    "TimeDateTemplate"      : "le $j $m $a à $h:$min",

  // Page
    "pageMode"              : "Page",
    "PageLabel"             : "Titre de la page",
    "PageInfosLabel"        : "Informations sur la page",
    "pageExistsNo"          : "La page $page n’existe pas.",
    "pageExistsYes"         : "La page $page existe",

  // Catégorie
    "catMode"               : "Catégorie", 
    "SubCatTitle"           : "Inclure les sous-catégories $count",
    "CatDaughters"          : "Catégorie filles",
    "CatParents"            : "Catégorie parentes",
    "HiddenCat"             : "Catégorie cachée",
    "CatExistsNo"           : "La catégorie $cat n’existe pas.",
    "CatExistsYes"          : "La catégorie $cat comprend :",
    "CatPages"              : "$1 page(s)",
    "CatCats"               : "$1 catégorie(s)",
    "CatButtonClosed"       : "►",
    "CatButtonExpand"       : "Développer",
    "CatButtonOpened"       : "▼",
    "CatButtonHide"         : "Réduire",
    "CatInfos"              : " → $1 $P, $2 $C",
    "CatInfosNOP"           : " → $2 $C",
    "CatInfosNOC"           : " → $1 $P",
    "CatAllPagesCount"      : "$1 $P",
    "CatInfosPageTip"       : "Pages",
    "CatInfosCatTip"        : "Catégories",
    "CatInfosPageText"      : "P",
    "CatInfosCatText"       : "C",
    "SubCatDepthText"       : "Niveau : ",
    "SelectCat"             : "Sélectionner la catégorie : $1",
    "TooMuchSubCatsSel"     : "La catégorie $1 n’est pas sélectionnable car elle contient trop de sous-catégories (plus de $limit)",
    "TooMuchSubCatsExp"     : "La catégorie $1 n’est pas expansible car elle contient trop de sous-catégories (plus de $limit)",
    "CatDoesntExistSel"     : "La catégorie $1 n’est pas sélectionnable car elle n’existe pas",

  // Liens
    "linksMode"             : "Liens", 
    "LinksLabel"            : "Titre de la page",
    "LinksInfosLabel"       : "Informations sur la page",
    "linksExistsNo"         : "La page $page n’existe pas.",
    "linksExistsYes"        : "La page $page comprend :",
    "linksInfos"            : "$1 lien(s)",

  // Pages liées
    "linkshereMode"         : "Pages liées", 
    "LinkshereLabel"        : "Titre de la page",
    "LinkshereInfosLabel"   : "Informations sur la page",
    "linkshereExistsNo"     : "La page $page n’existe pas.",
    "linkshereExistsYes"    : "La page $page a :",
    "linkshereInfos"        : "$1 page(s) liée(s)",

  // Inclusions
    "templateMode"          : "Inclusions", 
    "TemplateLabel"         : "Nom du modèle",
    "TemplateInfosLabel"    : "Informations sur le modèle",
    "TemplateDocLabel"      : "Documentation du modèle",
    "templateExistsNo"      : "Le modèle $page n’existe pas.",
    "templateExistsYes"     : "Le modèle $page est inclus dans :",
    "templateInfos"         : "$1 page(s)",

  // Nouvelles pages
    "newpagesMode"          : "Nouvelles pages",
    "newpagesInfosLabel"    : "Liste des nouvelles pages",
    "newpagesExistsYes"     : "Il y a :",
    "newpagesExistsNo"      : "Il n’y a pas de nouvelles pages.",
    "newpagesInfos"         : "$1 nouvelle(s) page(s)",

  // Créations
    "creationsMode"         : "Créations", 
    "UserLabel"             : "Nom de l’utilisateur",
    "UserInfosLabel"        : "Informations sur l’utilisateur",
    "creationsExistsNo"     : "L’utilisateur $page n’existe pas.",
    "creationsExistsYes"    : "L’utilisateur $page a créé :",
    "creationsInfos"        : "$1 page(s)",

  // Pages commençant par
    "prefixesMode"          : "Préfixe",
    "PrefixLabel"           : "Préfixe",
    "prefixesInfosLabel"    : "Liste des pages",
    "prefixesExistsYes"     : "Il y existe :",
    "prefixesExistsNo"      : "Il n’y a pas de pages commençant par \"$1\".",
    "prefixesInfos"         : "$1 page(s) commençant par \"$2\".",

  // Filtrage
    "Search"                : "Options de filtrage",
    "RangeViewerTip"        : "Pages sélectionnées pour la vérification.\nCliquer pour toutes les sélectionner.",
    "RangeSelectorTip"      : "Faire glisser pour choisir quelles pages vérifier",
    "RangeSelectorTempl"    : "$from ↔ $to",
    "STUB"                  : "Bandeau d’ébauche",
    "YES"                   : "Oui",
    "NO"                    : "Non",
    "AVTOptNone"            : "Aucun",
    "IMPOptNone"            : "Aucune",
    "SearchAND"             : "ET",
    "SearchOR"              : "OU",
    "FilteredCount"         : "$shown / $total",
    "NotFilteredCount"      : "Nombre de lignes affichées par rapport au total de lignes.\nCliquer pour tout afficher.",

  // Actions
    "Actions"               : "Actions",
    "GoListText"            : "Vérifier l’évaluation",
    "GoVerifOne"            : "Vérifier l’évaluation de la page",
    "GoVerifCat"            : "Vérifier l’évaluation des pages de la catégorie",
    "GoVerifLinks"          : "Vérifier l’évaluation des pages en liens dans la page",
    "GoVerifLinkshere"      : "Vérifier l’évaluation des pages pointant vers cette page",
    "GoVerifTemplate"       : "Vérifier l’évaluation des pages incluant le modèle",
    "GoVerifNewpages"       : "Vérifier l’évaluation des nouvelles pages",
    "GoVerifCreations"      : "Vérifier l’évaluation des articles créés par l’utilisateur",
    "GoVerifPrefixes"       : "Vérifier l’évaluation des articles commançant par...",
    "EmergencyStop"         : "Arrêter d’urgence la requête en cours",
    "GoAddEvalText"         : "Ajouter une évaluation",
    "GoAddOne"              : "Ajouter une évaluation à la page",
    "GoAddCat"              : "Ajouter une évaluation aux pages de la catégorie ciblée.",
    "GoAddLinks"            : "Ajouter une évaluation aux pages en liens dans la page ciblée.",
    "GoAddLinkshere"        : "Ajouter une évaluation aux pages pointant vers la page ciblée.",
    "GoAddTemplate"         : "Ajouter une évaluation aux pages incluant le modèle ciblé.",
    "GoAddNewpages"         : "Ajouter une évaluation aux nouvelles pages.",
    "GoAddCreations"        : "Ajouter une évaluation aux articles créés par l’utilisateur ciblé.",
    "GoAddPrefixes"         : "Ajouter une évaluation aux articles commançant par...",
    "GoAddCancelText"       : "◄",
    "GoAddCancelTip"        : "Annuler l’ajout d’évaluation",
    "GoChangeText"          : "Valider",
    "GoChangeTitle"         : "Valider les $1changements d’évaluation de page",
    "GoCancelText"          : "Annuler",
    "GoCancelTitle"         : "Annuler les $1changements d’évaluation de page",
    "GoOptionsText"         : "Options",
    "GoOptionsTitle"        : "Modifier les options",
    "GoDocText"             : "Documentation",
    "GoDocTitle"            : "Ouvrir la page de documentation (nouvel onglet)",
    "GoCloseTitle"          : "Fermer",

// Tableau des pages
    "PageListTable"         : "Tableau des pages",
    "SortTitleUP"           : "Tri selon le titre de la page (alphabétique)",
    "SortTitleDOWN"         : "Tri selon le titre de la page (alphabétique inversé",
    "SortStubUP"            : "Tri selon le nombre de thèmes d’ébauche (croissant)",
    "SortStubDOWN"          : "Tri selon le nombre de thèmes d’ébauche (décroissant)",
    "SortAVTUP"             : "Tri selon l’avancement (du moins avancé au plus avancé)",
    "SortAVTDOWN"           : "Tri selon l’avancement (du plus avancé au moins avancé)",
    "SortIMPUP"             : "Tri selon l’importance dans le thème sélectionné (du moins important au plus important)",
    "SortIMPDOWN"           : "Tri selon l’importance dans le thème sélectionné (du plus important au moins important)",
    "SortUPArrow"           : "▲",
    "SortDOWNArrow"         : "▼",
    "TH0text"               : "Page", 
    "TH1text"               : "Portails", 
    "TH2text"               : "Bandeau d’ébauche", 
    "TH3text"               : "Avancement", 
    "TH4text"               : "Importances", 
    "TH5text"               : "Actions",
    "TalkText"              : "D",
    "PreviewText"           : "$1 (prévisualiser)",
    "RedirectText"          : "Redirection vers la page : $page",
    "DisambigTitle"         : "Homonymie",
    "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",
    "GoHideOneText"         : "Masquer",
    "GoHideOneTitle"        : "Masquer les informations sur cette page",
    "GoShowOneText"         : "Afficher",
    "GoShowOneTitle"        : "Afficher les informations sur cette page",
    "bottomlinkstemplate"   : "▲ $1 ▲",

// Édition
    "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",
    "EvalResume"            : "[[$docpage|Mise à jour de l’évaluation]] : $template",
    "StubResume"            : "[[$docpage|Mise à jour du bandeau d’ébauche]] : $template",
    "SaveParamsResume"      : "[[$docpage|Sauvegarde des paramètres]]",

// Messages d'alerte
    "AlertMsgNone"          : "Pas de requête en cours",
    "AlertMsgStopNeeded"    : "Arrêt d’urgence demandé",
    "AlertMsgStopDone"      : "Arrêt d’urgence effectué",
    "AlertMsgThemes"        : "Listage des thèmes d’ébauche et d’évaluation",
    "AlertMsgPages"         : "$cat : Listage des pages ($count)",
    "AlertMsgParams"        : "$page : Recherche des paramètres d’ébauche et d’évaluation ($count)",
    "AlertMsgSort"          : "Tri des lignes",
    "AlertMsgSaveParams"    : "Sauvegarde des options personnalisées sur la page $page",
    "AlertMsgPreview"       : "$running Chargement de la prévisualisation",
    "AlertMsgCatAnalys"     : "Analyse des pages de la catégorie : $cat",
    "AlertMsgLinks"         : "Analyse des pages liées dans la page : $page",
    "AlertMsgLinkshere"     : "Analyse des pages pointant vers la page : $page",
    "AlertMsgTemplate"      : "Analyse des inclusions du modèle : $template",
    "AlertMsgNewpages"      : "Analyse des nouvelles pages",
    "AlertMsgCreations"     : "Analyse des pages créées par l’utilisateur : $user",
    "AlertMsgPrefixes"      : "Analyse des pages commençant par : $1",
    "AlertMsgEvals"         : "Analyse des évaluations du thème $theme",
    "AlertMsgEdit"          : "$page : Édition",
    "AlertMsgFilterSTUB"    : "Vous devez sélectionner au moins une option de bandeau d’ébauche !",
    "AlertMsgFilterAVT"     : "Vous devez sélectionner au moins une option de bandeau d’évaluation d’avancement !",
    "AlertMsgFilterIMP"     : "Vous devez sélectionner au moins une option de bandeau d’évaluation d’importance !",
    "AlertMsgSizeUnit"      : "Un champ de texte attend une valeur en unité de longueur valable ($units) !",
    "AlertMsgColorInput"    : "Un champ de texte attend un code couleur exprimé en hexadécimal de 3 ou 6 digits précédés d’un #",

// Menu d'options
    "OptionValidate"        : "Valider les changements",
    "OptionValidateTip"     : "Valider les changements d’options",
    "OptionSubPageText"     : "?",
    "OptionSubPageTip"      : "Ouvrir la sous-page de configuration : $page (nouvel onglet)",
    "DefButtonText"         : "RAZ",
    "DefButtonTitle"        : "Rétablir la valeur par défaut : $1",
    "GlobDefButtonText"     : "RAZ",
    "GlobDefButtonTitle"    : "Rétablir les valeurs par défaut : $1",
    "params"                : "Paramètres",
    "styles"                : "Styles CSS",
    "texts"                 : "Textes",
    "param"                 : "Paramètre personnalisable",
    "readonlyparam"         : "Paramètre non personnalisable",
    "style"                 : "Style CSS",
    "text"                  : "Texte",
    "moreparams"            : "Paramétrage manuel supplémentaire",
    "TestMoreParamsText"    : "Tester",
    "TestMoreParamsTip"     : "Tester le code ci-dessous",
    "MoreParamsTestOK"      : "Pas d’erreur javascript détectée",
    "MoreParamsTestKO"      : "Erreur javascript détectée : $1",
    "OptionModified"        : "Valeur différente de la valeur par défaut",
    "SizeUnitTip"           : "La valeur de ce champ doit impérativement être exprimée en unité de longueur valable ($units)",
    "ColorInput"            : "La valeur de ce champ doit être un code couleur exprimé en hexadécimal de 3 ou 6 digits précédés d’un #",

// Menu des données
    "GoDatasText"           : "Données",
    "GoDatasTitle"          : "Vérifier les données",
    "evaldataUL"            : "Thèmes d’évaluation",
    "stubdataUL"            : "Thèmes d’ébauche",
    "divdataUL"             : "Divers",
    "RAZdataUL"             : "Gestion localStorage",
    "localStorageExpiryT"   : "$h heures et $m mimutes",
    "GoDatasRAZText"        : "Effacer",
    "GoDatasRAZTitle"       : "Effacer les données (cela n’affectera pas la session en cours)",

// Divers
    "Month01"               :"janvier",
    "Month02"               :"février",
    "Month03"               :"mars",
    "Month04"               :"avril",
    "Month05"               :"mai",
    "Month06"               :"juin",
    "Month07"               :"juillet",
    "Month08"               :"août",
    "Month09"               :"septembre",
    "Month10"               :"octobre",
    "Month11"               :"novembre",
    "Month12"               :"décembre",


/* </source><noinclude>// -------------------- Textes de description des textes, styles et paramètres -------------------- </noinclude>

=== Descriptions des paramètres ===

<source lang=javascript> // -------------------- Descriptions des paramètres -------------------- */
    "OPTIONAllowEdition"        : "Permettre l’édition",
    "OPTIONUseTopFormInNS0"     : "Utiliser le formulaire réduit dans les articles et les pages de discussion",
    "OPTIONAutoLaunchPreview"   : "Lancer automatiquement la prévisualisation des pages à la création de la ligne du tableau",
    "OPTIONPreloadPreview"      : "Précharger la prévisualisation des pages",
    "OPTIONAddWarning"          : "Afficher un avertissement en haut de page",
    "OPTIONSearchForPortalTag"  : "Vérifier la présence de bandeaux de portail",
    "OPTIONUseFancyInputs"      : "Utiliser les cases à cocher fantaisie",
    "OPTIONMoreParamsRows"      : "Nombre de ligne du champ de texte pour le paramétrage manuel supplémentaire",
    "OPTIONSuggestSelectSize"   : "Taille de la liste de suggestion de catégories",
    "OPTIONSuggestNumber"       : "Nombre maximum de catégories suggérées",
    "OPTIONKeyUpDelay"          : "Délai en ms avant la prise en compte d’un changement dans un champ de texte",
    "OPTIONMaxSubcatLevel"      : "Niveau maximum pour la recherche dans les sous-catégories",
    "OPTIONMaxSubCatAllowedSel" : "Maximum de sous-catégories qu’une catégorie peut contenir pour être sélectionnable",
    "OPTIONMaxSubCatAllowedExp" : "Maximum de sous-catégories qu’une catégorie peut contenir pour être expansible",
    "OPTIONDefaultPortal"       : "Thème d’évaluation sélectionné 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",
    "OPTIONOKIcon"              : "Image de l’icône \"OK\"",
    "OPTIONRunningIcon"         : "Image de l’icône \"En cours\"",
    "OPTIONWarningIcon"         : "Image de l’icône \"Attention\"",
    "OPTIONStopIcon"            : "Image de l’icône \"Stop\"",
    "OPTIONCloseIcon"           : "Image de l’icône \"Fermer\"",
    "OPTIONRedirectIcon"        : "Image de l’icône \"Redirection\"",
    "OPTIONDisambigIcon"        : "Image de l’icône \"Homonymie\"",
    "OPTIONHiddenCatIcon"       : "Image de l’icône \"Catégorie cachée\"",

/* </source>

=== Descriptions des styles ===

<source lang=javascript> // -------------------- Descriptions des styles -------------------- */

//-- font-family
    "OPTIONMainff"             : "Famille de la police (général)",

//-- font-size
    "OPTIONMainfs"             : "Taille de la police (général)",
    "OPTIONPrvwfs"             : "Taille de la police dans la prévisualisation",
    "OPTIONTempDocfs"          : "Taille de la police de la documentation du modèle",
    "OPTIONPortListfs"         : "Taille de la police de la liste des portails (lignes du tableau des pages)",
    "OPTIONAlertfs"            : "Taille de la police du bandeau de message",

//-- height
    "OPTIONPrvwhght"           : "Hauteur de la fenêtre de prévisualisation",
    "OPTIONCatListhght"        : "Hauteur des cadres déroulants des formulaires \"Modes\"",
    "OPTIONOptImgPrevhght"     : "Hauteur des images prévisualisées (menu des options)",

//-- width
    "OPTIONEvalTableIcowidth"  : "Largeur des images dans la table d’évaluations",
    "OPTIONRunIcowidth"        : "Largeur de l’image \"En cours\"",
    "OPTIONPrevCloseIcowidth"  : "Largeur de l’image \"Fermer\" (prévisualisation)",
    "OPTIONRedirectIcowidth"   : "Largeur de l’image \"Redirection\" (lignes du tableau)",
    "OPTIONDisambigIcowidth"   : "Largeur de l’image \"Homonymie\" (lignes du tableau)",
    "OPTIONHiddenCatIcowidth"  : "Largeur de l’image \"Catégorie cachée\"",
    "OPTIONAlertIcowidth"      : "Largeur de l’image du bandeau de message",
    "OPTIONMainCloseIcowidth"  : "Largeur de l’image \"Fermer\" (bandeau réduit du formulaire des articles)",
    "OPTIONTH2width"           : "Largeur de la colonne \"Portails\"",
    "OPTIONTH3width"           : "Largeur de la colonne \"Bandeau d’ébauche\"",
    "OPTIONTH4width"           : "Largeur de la colonne \"Avancement\"",
    "OPTIONTH5width"           : "Largeur de la colonne \"Importances\"",
    "OPTIONTH6width"           : "Largeur de la colonne \"Actions\"",
    "OPTIONModSelwidth"        : "Largeur des options du sélecteur de modes",
    "OPTIONTimewidth"          : "Largeur des champs de texte d’heure",
    "OPTIONDatewidth"          : "Largeur des champs de texte de date",
    "OPTIONOptcolwdth"         : "Largeur minimum d’une colonne dans les options",
    "OPTIONPIcolwdth"          : "Largeur minimum d’une colonne dans les infos de page",
    "OPTIONTempDocwidth"       : "Largeur de la documentation du modèle",
    "OPTIONOptStrwdth"         : "Largeur des champs de texte dans les options (texte demandé)",
    "OPTIONOptNbrwdth"         : "Largeur des champs de texte dans les options (nombre demandé)",
    "OPTIONOptStywdth"         : "Largeur des champs de texte dans les options (styles)",
    "OPTIONSpeImpCatwdth"      : "Largeur du champ de texte principaux (page spéciale)",
    "OPTIONMainEvalTwidth"     : "Largeur du champ de texte \"Thème d’évaluation\" (hors page spéciale)",
    "OPTIONStubTwidth"         : "Largeur des listes déroulantes des thèmes d’ébauche (thème)",
    "OPTIONStubAwidth"         : "Largeur des listes déroulantes des thèmes d’ébauche (adjectif)",
    "OPTIONAvtwidth"           : "Largeur des listes déroulantes des avancements (colonne \"Avancement\")",
    "OPTIONImpTwidth"          : "Largeur des listes déroulantes des thèmes d’évaluation (colonne \"Importances\")",
    "OPTIONImpwidth"           : "Largeur des listes déroulantes des importance (colonne \"Importances\")",
    "OPTIONEmStopwidth"        : "Diamètre du bouton d’arrêt d’urgence",

//-- border-radius
    "OPTIONWrapperbdr"         : "Arrondi du bandeau d’évaluation (hors page spéciale)",
    "OPTIONSmallFSbdr"         : "Arrondi des formulaires de configuration (hors page spéciale)",
    "OPTIONBigFSbdr"           : "Arrondi des formulaires de configuration (page spéciale)",
    "OPTIONEvalTbdr"           : "Arrondi du tableau d’évaluation",
    "OPTIONModSelbdr"          : "Arrondi des sélecteurs de mode",
    "OPTIONFilSelbdr"          : "Arrondi des options de filtrage",
    "OPTIONFiltAbbrbdr"        : "Arrondi de des afficheurs des options de filtrage",
    "OPTIONLinesTbdr"          : "Arrondi du tableau de vérification",
    "OPTIONSortbdr"            : "Arrondi des liens de tri",
    "OPTIONAlertbdr"           : "Arrondi du bandeau de message",
    "OPTIONImpButbdr"          : "Arrondi des boutons",
    "OPTIONImpTexbdr"          : "Arrondi des champs de texte",
    "OPTIONSelectbdr"          : "Arrondi des listes déroulantes",
    "OPTIONPILIbdr"            : "Arrondi des lignes des infos de page",
    "OPTIONOptLIbdr"           : "Arrondi des lignes des options",
    "OPTIONDTpickbdr"          : "Arrondi des sélecteurs d'horaire et de date",

//-- border-style
    "OPTIONMainbds"            : "Style des bordures (général)",
    "OPTIONWrapperbds"         : "Style de la bordure du bandeau d’évaluation (hors page spéciale)",
    "OPTIONInnerbds"           : "Style des bordures intérieures des formulaires (page spéciale)",
    "OPTIONFiltAbbrbds"        : "Style de la bordure des afficheurs des options de filtrage",
    "OPTIONAlertbds"           : "Style de la bordure du bandeau de message",
    "OPTIONPrvwbds"            : "Style de la bordure supérieure de la prévisualisation",

//-- border-color
    "OPTIONMainbdc"            : "Couleur des bordures (général)",
    "OPTIONWrapperbdc"         : "Couleur de la bordure du bandeau d’évaluation (hors page spéciale)",
    "OPTIONFiltAbbrMbdc"       : "Couleur de la bordure des afficheurs des options de filtrage (actif)",
    "OPTIONPILIbdc"            : "Couleur de la bordure des infos de page",
    "OPTIONHoverPILIbdc"       : "Couleur de la bordure des infos de page (au survol)",
    "OPTIONTHListbdc"          : "Couleur de la bordure des en-têtes du tableau de vérification",
    "OPTIONSortbdc"            : "Couleur de la bordure des liens de tri",
    "OPTIONLinesbdc"           : "Couleur de la bordure des lignes du tableau de vérification",
    "OPTIONAlertbdc"           : "Couleur de la bordure du bandeau de message",
    "OPTIONOptLIbdc"           : "Couleur de la bordure des lignes des options",
    "OPTIONHoverOptLIbdc"      : "Couleur de la bordure des lignes des options (au survol)",
    "OPTIONDTpickCSelbdc"      : "Couleur de la bordure des éléments sélectionnés (sélecteurs d'horaire et de date)",

//-- background-color
    "OPTIONMainbgc"            : "Couleur d’arrière plan du bandeau d’évaluation (hors page spéciale)",
    "OPTIONSmallFSbgc"         : "Couleur d’arrière plan des formulaires de configuration (hors page spéciale)",
    "OPTIONBigFSbgc"           : "Couleur d’arrière plan des formulaires de configuration (page spéciale)",
    "OPTIONModSelbgc"          : "Couleur d’arrière plan des sélecteurs de modes", 
    "OPTIONHoverModSelbgc"     : "Couleur d’arrière plan des sélecteurs de modes (au survol)", 
    "OPTIONModSelCurrbgc"      : "Couleur d’arrière plan du sélecteur de modes activé",
    "OPTIONHoverModSelCurrbgc" : "Couleur d’arrière plan du sélecteur de modes activé (au survol)",
    "OPTIONPILIbgc"            : "Couleur d’arrière plan des infos de page",
    "OPTIONHoverPILIbgc"       : "Couleur d’arrière plan des infos de page (au survol)",
    "OPTIONFiltNSbgc"          : "Couleur d’arrière plan du sélecteur de pages (partie non sélectionnée)",
    "OPTIONFiltSbgc"           : "Couleur d’arrière plan du sélecteur de pages (partie sélectionnée)",
    "OPTIONFiltDISbgc"         : "Couleur d’arrière plan du sélecteur de pages (désactivé)",
    "OPTIONFiltAbbrbgc"        : "Couleur d’arrière plan des afficheurs des options de filtrage (inactif)",
    "OPTIONFiltAbbrMbgc"       : "Couleur d’arrière plan des afficheurs des options de filtrage (actif)",
    "OPTIONTHListbgc"          : "Couleur d’arrière plan des en-têtes du tableau de vérification",
    "OPTIONSortbgc"            : "Couleur d’arrière plan des liens de tri",
    "OPTIONLinesbgc"           : "Couleur d’arrière plan des lignes du tableau de vérification",
    "OPTIONHoverLinesbgc"      : "Couleur d’arrière plan des lignes du tableau de vérification (au survol)",
    "OPTIONPrvwbgc"            : "Couleur d’arrière plan de la prévisualisation",
    "OPTIONImpButbgc"          : "Couleur d’arrière plan des boutons",
    "OPTIONImpButDisbgc"       : "Couleur d’arrière plan des boutons désactivés",
    "OPTIONImpTexbgc"          : "Couleur d’arrière plan des champs de texte et des listes déroulantes",
    "OPTIONImpTexDisbgc"       : "Couleur d’arrière plan des champs de texte et des listes déroulantes désactivés",
    "OPTIONAlertbgc"           : "Couleur d’arrière plan du bandeau de message",
    "OPTIONOptLIbgc"           : "Couleur d’arrière plan des lignes des options",
    "OPTIONHoverOptLIbgc"      : "Couleur d’arrière plan des lignes des options (au survol)",
    "OPTIONOptLIMbgc"          : "Couleur d’arrière plan des lignes des options modifiées",
    "OPTIONHoverOptLIMbgc"     : "Couleur d’arrière plan des lignes des options modifiées (au survol)",
    "OPTIONDTpickbgc"          : "Couleur d’arrière plan des sélecteurs d'horaire et de date",
    "OPTIONDTpickCbgc"         : "Couleur d’arrière plan de l’intérieur des sélecteurs d'horaire et de date",
    "OPTIONDTpickCSelbgc"      : "Couleur d’arrière plan des éléments sélectionnés (sélecteurs d'horaire et de date)",
    "OPTIONHoverDTpickCbgc"    : "Couleur d’arrière plan des éléments au survol (sélecteurs d'horaire et de date)",

//-- color
    "OPTIONMaincol"            : "Couleur du texte (général)",
    "OPTIONLinkscol"           : "Couleur des liens (général)",
    "OPTIONSortcol"            : "Couleur des liens de tri",
    "OPTIONAlertcol"           : "Couleur du texte du bandeau de message",
    "OPTIONDTpickDiscol"       : "Couleur du texte des éléments inactifs (sélecteurs d'horaire et de date)",
    "OPTIONDTpickUnSelcol"     : "Couleur du texte des éléments non sélectionnables (sélecteurs d'horaire et de date)",


/*</source>

=== Descriptions des textes ===

<source lang=javascript> // -------------------- Descriptions des textes -------------------- */

// Liens en haut de page
    "OPTIONLinkText"             : "Intitulé du lien \"Évaluer\"",
    "OPTIONLinkCatTitle"         : "Infobulle du lien \"Évaluer\" (catégories)",
    "OPTIONLinkPageTitle"        : "Infobulle du lien \"Évaluer\" (articles et pages de discussion)",
    "OPTIONLinkLinksTitle"       : "Infobulle du lien \"Évaluer\" (sous-page utilisateur)",
    "OPTIONLinkLinkshereTitle"   : "Infobulle du lien \"Évaluer\" (pages pointant vers cette page)",
    "OPTIONLinkTemplateTitle"    : "Infobulle du lien \"Évaluer\" (modèles)",
    "OPTIONLinkNewpagesTitle"    : "Infobulle du lien \"Évaluer\" (nouvelles pages)",
    "OPTIONLinkCreationsTitle"   : "Infobulle du lien \"Évaluer\" (créations de l’utilisateur)",
    "OPTIONLinkPrefixindexTitle" : "Infobulle du lien \"Évaluer\" (préfixe)",

// Page spéciale
    "OPTIONSpecialpageName"      : "Titre de la page spéciale",
    "OPTIONSpecialpageNameH"     : "Modèle du titre de l’onglet du navigateur",
    "OPTIONcontentSubTemplate"   : "Modèle pour l’élément \"contentSub\"",

// Formulaires principaux
    "OPTIONWarning"              : "Message d’avertissement",
    "OPTIONShow"                 : "Intitulé du lien \"Afficher\"",
    "OPTIONShowTip"              : "Infobulle du lien \"Afficher\"",
    "OPTIONHide"                 : "Intitulé du lien \"Masquer\"",
    "OPTIONHideTip"              : "Infobulle du lien \"Masquer\"",

  // Thème d'évaluation
    "OPTIONEvalTheme"            : "Label du formulaire \"Thèmes d’évaluation\"",
    "OPTIONPortal"               : "Label du sélecteur de portail",
    "OPTIONTableEvalTotal"       : "Texte \"Total\" dans le tableau d’évaluation",
    "OPTIONIMP"                  : "Texte \"Importance\" dans le tableau d’évaluation",
    "OPTIONAVT"                  : "Texte \"Avancement\" dans le tableau d’évaluation",
    "OPTIONUpdateTableEvalText"  : "Intitulé du bouton pour mettre à jour le tableau d’évaluation",
    "OPTIONUpdateTableEvalTip"   : "Infobulle du bouton pour mettre à jour le tableau d’évaluation",
    "OPTIONThemeCats"            : "Label du tableau des catégories liées",

  // Modes
    "OPTIONModes"                : "Label du formulaire \"Mode\"",
    "OPTIONMainNamespace"        : "Nom de l’espace de noms principal",
    "OPTIONTimeDateLabel"        : "Label des sélecteurs de timestamp",

  // Informations sur la page ou l'utilisateur,
    "OPTIONINFOmissing"          : "Page inexistante ?",
    "OPTIONINFOpageid"           : "Identifiant de la page",
    "OPTIONINFOns"               : "Espace de noms",
    "OPTIONINFOtitle"            : "Titre",
    "OPTIONINFOcontentmodel"     : "Type de contenu",
    "OPTIONINFOpagelanguage"     : "Language du contenu",
    "OPTIONINFOtouched"          : "Dernière mise à jour",
    "OPTIONINFOlastrevid"        : "Identifiant de la dernière version",
    "OPTIONINFOlength"           : "Taille (octets)",
    "OPTIONINFOprotection"       : "Protections",
    "OPTIONINFOwatched"          : "Page suivie ?",
    "OPTIONINFOwatchers"         : "Nombre de suiveurs",
    "OPTIONINFOvisitingwatchers" : "Nombre de suiveurs ayant visité la dernière révision",
    "OPTIONINFOsubjectid"        : "Identifiant de la page principale",
    "OPTIONINFOtalkid"           : "Identifiant de la page de discussion",
    "OPTIONINFOuserid"           : "Identifiant de l’utilisateur",
    "OPTIONINFOname"             : "Nom",
    "OPTIONINFOeditcount"        : "Compteur d’éditions",
    "OPTIONINFOregistration"     : "Date d’enregistrement",
    "OPTIONINFOgroups"           : "Groupes",
    "OPTIONINFOgender"           : "Genre",
    "OPTIONINFOgenderunknown"    : "inconnu",
    "OPTIONINFOgenderfemale"     : "féminin",
    "OPTIONINFOgendermale"       : "masculin",
    "OPTIONTimeDateTemplate"     : "Modèle pour les timestamps",

  // Page
    "OPTIONpageMode"             : "Label du formulaire \"Page\"",
    "OPTIONPageLabel"            : "Label du champ de texte \"page\"",
    "OPTIONPageInfosLabel"       : "Label de la liste des informations sur la page (mode page)",
    "OPTIONpageExistsNo"         : "Texte d’information pour une page inexistante",
    "OPTIONpageExistsYes"        : "Texte d’information pour une page existante",

  // Catégorie
    "OPTIONcatMode"              : "Label du formulaire \"Catégorie\"",
    "OPTIONSubCatTitle"          : "Infobulle de la case pour inclure ou non les sous-catégories",
    "OPTIONCatDaughters"         : "Titre de la liste des catégorie filles",
    "OPTIONCatParents"           : "Titre de la liste des catégorie parentes",
    "OPTIONHiddenCat"            : "Infobulle  pour une catégorie cachée",
    "OPTIONCatExistsNo"          : "Texte d’information pour une catégorie inexistante",
    "OPTIONCatExistsYes"         : "Texte d’information pour une catégorie existante",
    "OPTIONCatPages"             : "Ligne de décompte des pages",
    "OPTIONCatCats"              : "Ligne de décompte des sous-catégories",
    "OPTIONSelectCat"            : "Infobulle d’un lien de catégorie sélectionnable",
    "OPTIONCatDoesntExistSel"    : "Infobulle d’un lien de catégorie inexistante",
    "OPTIONTooMuchSubCatsSel"    : "Infobulle d’un lien de catégorie non sélectionnable",
    "OPTIONTooMuchSubCatsExp"    : "Infobulle d’un lien d’expansion de catégorie non sélectionnable",
    "OPTIONCatButtonClosed"      : "Texte de la puce des listes de catégories (fermée)",
    "OPTIONCatButtonOpened"      : "Texte de la puce des listes de catégories (ouverte)",
    "OPTIONCatButtonExpand"      : "Infobulle de la puce des listes de catégories (fermée)",
    "OPTIONCatButtonHide"        : "Infobulle de la puce des listes de catégories (ouverte)",
    "OPTIONCatInfos"             : "Modèle d’information des catégories",
    "OPTIONCatInfosNOP"          : "Modèle d’information des catégories (sous-catégories uniquement)",
    "OPTIONCatInfosNOC"          : "Modèle d’information des catégories (pages uniquement)",
    "OPTIONCatAllPagesCount"     : "Modèle d’information pour le nombre total de pages",
    "OPTIONCatInfosPageTip"      : "Tooltip \"Pages\"",
    "OPTIONCatInfosCatTip"       : "Tooltip \"Catégories\"",
    "OPTIONCatInfosPageText"     : "Texte \"Pages\"",
    "OPTIONCatInfosCatText"      : "Texte \"Catégories\"",
    "OPTIONSubCatDepthText"      : "Label du sélecteur de niveau de profondeur des catégories",

  // Liens
    "OPTIONlinksMode"            : "Label du formulaire \"Liens\"",
    "OPTIONLinksLabel"           : "Label du champ de texte \"page\"",
    "OPTIONLinksInfosLabel"      : "Label de la liste des informations sur la page (mode liens)",
    "OPTIONlinksExistsNo"        : "Texte d’information pour une page inexistante (liens)",
    "OPTIONlinksExistsYes"       : "Texte d’information pour une page existante (liens)",
    "OPTIONlinksInfos"           : "Modèle pour le comptage des liens",

  // Pages liées 
    "OPTIONlinkshereMode"        : "Label du formulaire \"Pages liées\"",
    "OPTIONLinkshereLabel"       : "Label du champ de texte \"page\"",
    "OPTIONLinkshereInfosLabel"  : "Label de la liste des informations sur la page (mode pages liées)",
    "OPTIONlinkshereExistsNo"    : "Texte d’information pour une page inexistante (pages liées)",
    "OPTIONlinkshereExistsYes"   : "Texte d’information pour une page existante (pages liées)",
    "OPTIONlinkshereInfos"       : "Modèle pour le comptage des pages liées",

  // Inclusions
    "OPTIONtemplateMode"         : "Label du formulaire \"Inclusions\"",
    "OPTIONTemplateLabel"        : "Label du champ de texte \"modèle\"",
    "OPTIONTemplateInfosLabel"   : "Label de la liste des informations sur le modèle",
    "OPTIONTemplateDocLabel"     : "Label de la documentation du modèle",
    "OPTIONtemplateExistsNo"     : "Texte d’information pour un modèle inexistant",
    "OPTIONtemplateExistsYes"    : "Texte d’information pour un modèle existant",
    "OPTIONtemplateInfos"        : "Modèle pour le comptage des inclusions",

  // Nouvelles pages
    "OPTIONnewpagesMode"         : "Label du formulaire \"Nouvelles pages\"",
    "OPTIONnewpagesInfosLabel"   : "Label de la liste des nouvelles pages",
    "OPTIONnewpagesExistsNo"     : "Texte d’information lorsqu’il n’y a pas de nouvelles pages",
    "OPTIONnewpagesExistsYes"    : "Texte d’information lorsqu’il y a des nouvelles pages",
    "OPTIONnewpagesInfos"        : "$1 nouvelle(s) page(s)",

  // Créations
    "OPTIONcreationsMode"        : "Label du formulaire \"Créations\"",
    "OPTIONUserLabel"            : "Label du champ de texte \"utilisateur\"",
    "OPTIONUserInfosLabel"       : "Label de la liste des informations sur l’utilisateur",
    "OPTIONcreationsExistsNo"    : "Texte d’information pour un utilisateur inexistant",
    "OPTIONcreationsExistsYes"   : "Texte d’information pour un utilisateur existant",
    "OPTIONcreationsInfos"       : "Modèle pour le comptage des créations d’articles",

  // Préfixe
    "OPTIONprefixesMode"         : "Label du formulaire \"Préfixe\"",
    "OPTIONPrefixLabel"          : "Label du champ de texte \"Préfixe\"",
    "OPTIONprefixesInfosLabel"   : "Label de la liste des pages avec préfixe",
    "OPTIONprefixesExistsYes"    : "Texte d’information lorsqu’il y a des pages avec le préfixe",
    "OPTIONprefixesExistsNo"     : "Texte d’information lorsqu’il n’y a pas de pages avec le préfixe",
    "OPTIONprefixesInfos"        : "Modèle pour le comptage des pages avec préfixe",

  // Filtrage
    "OPTIONSearch"               : "Label du formulaire \"Filtrage\"",
    "OPTIONRangeViewerTip"       : "Infobulle de l’afficheur du sélecteur de pages",
    "OPTIONRangeSelectorTip"     : "Infobulle du sélecteur de pages",
    "OPTIONRangeSelectorTempl"   : "Modèle du sélecteur de pages",
    "OPTIONSTUB"                 : "Label du sélecteur de bandeau d’ébauche du formulaire de filtrage",
    "OPTIONYES"                  : "Mot \"Oui\" pour les sélecteurs du formulaire de filtrage (bandeaux d’ébauche)",
    "OPTIONNO"                   : "Mot \"Non\" pour les sélecteurs du formulaire de filtrage (bandeaux d’ébauche)",
    "OPTIONAVTOptNone"           : "Terme désignant l’absence d’évaluation d’avancement",
    "OPTIONIMPOptNone"           : "Terme désignant l’absence d’évaluation d’importance",
    "OPTIONSearchAND"            : "Mot \"et\" pour les sélecteurs du formulaire de filtrage",
    "OPTIONSearchOR"             : "Mot \"ou\" pour les sélecteurs du formulaire de filtrage",
    "OPTIONNotFilteredCount"     : "Infobulle du compteur de lignes non filtrées",
    "OPTIONFilteredCount"        : "Modèle du compteur de lignes non filtrées",

  // Actions
    "OPTIONActions"              : "Label du formulaire \"Actions\"",
    "OPTIONGoListText"           : "Intitulé du bouton \"Vérifier l’évaluation\"",
    "OPTIONGoVerifOne"           : "Infobulle du bouton \"Vérifier l’évaluation\" (page)",
    "OPTIONGoVerifCat"           : "Infobulle du bouton \"Vérifier l’évaluation\" (pages de la catégorie)",
    "OPTIONGoVerifLinks"         : "Infobulle du bouton \"Vérifier l’évaluation\" (pages en lien)",
    "OPTIONGoVerifLinkshere"     : "Infobulle du bouton \"Vérifier l’évaluation\" (pages pointant vers la page",
    "OPTIONGoVerifTemplate"      : "Infobulle du bouton \"Vérifier l’évaluation\" (pages incluant le modèle",
    "OPTIONGoVerifNewpages"      : "Infobulle du bouton \"Vérifier l’évaluation\" (nouvelles pages",
    "OPTIONGoVerifCreations"     : "Infobulle du bouton \"Vérifier l’évaluation\" (articles créés par l’utilisateur",
    "OPTIONGoVerifPrefixes"      : "Infobulle du bouton \"Vérifier l’évaluation\" (préfixe)",
    "OPTIONEmergencyStop"        : "Infobulle du bouton d’arrêt d’urgence",
    "OPTIONGoAddEvalText"        : "Intitulé du bouton \"Ajouter une évaluation\"",
    "OPTIONGoAddOne"             : "Infobulle du bouton \"Ajouter une évaluation\" (page)",
    "OPTIONGoAddCat"             : "Infobulle du bouton \"Ajouter une évaluation\" (pages de la catégorie)",
    "OPTIONGoAddLinks"           : "Infobulle du bouton \"Ajouter une évaluation\" (pages en lien)",
    "OPTIONGoAddLinkshere"       : "Infobulle du bouton \"Ajouter une évaluation\" (pages pointant vers la page)",
    "OPTIONGoAddTemplate"        : "Infobulle du bouton \"Ajouter une évaluation\" (pages incluant le modèle)",
    "OPTIONGoAddNewpages"        : "Infobulle du bouton \"Ajouter une évaluation\" (nouvelles pages)",
    "OPTIONGoAddCreations"       : "Infobulle du bouton \"Ajouter une évaluation\" (articles créés par l’utilisateur)",
    "OPTIONGoAddPrefixes"        : "Infobulle du bouton \"Ajouter une évaluation\" (préfixe)",
    "OPTIONGoAddCancelText"      : "Intitulé du bouton \"Annuler l’ajout d’évaluation\"",
    "OPTIONGoAddCancelTip"       : "Infobulle du bouton \"Annuler l’ajout d’évaluation\"",
    "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\"",
    "OPTIONGoDocText"            : "Intitulé du bouton \"Documentation\"",
    "OPTIONGoDocTitle"           : "Infobulle du bouton \"Documentation\"",
    "OPTIONGoCloseTitle"         : "Infobulle du bouton pour fermer le formulaire",

// Tableau des pages
    "OPTIONPageListTable"        : "Titre du tableau des pages",
    "OPTIONTH0text"              : "Intitulé de la colonne \"Page\"", 
    "OPTIONTH1text"              : "Intitulé de la colonne \"Portails\"", 
    "OPTIONTH2text"              : "Intitulé de la colonne \"Bandeau d’ébauche\"", 
    "OPTIONTH3text"              : "Intitulé de la colonne \"Avancement\"", 
    "OPTIONTH4text"              : "Intitulé de la colonne \"Importances\"", 
    "OPTIONTH5text"              : "Intitulé de la colonne \"Actions\"",
    "OPTIONSortTitleUP"          : "Infobulle du lien pour le tri selon le titre de la page (alphabétique)",
    "OPTIONSortTitleDOWN"        : "Infobulle du lien pour le tri selon le titre de la page (alphabétique inversé",
    "OPTIONSortStubUP"           : "Infobulle du lien pour le tri selon le nombre de thèmes d’ébauche (croissant)",
    "OPTIONSortStubDOWN"         : "Infobulle du lien pour le tri selon le nombre de thèmes d’ébauche (décroissant)",
    "OPTIONSortAVTUP"            : "Infobulle du lien pour le tri selon l’avancement (du moins avancé au plus avancé)",
    "OPTIONSortAVTDOWN"          : "Infobulle du lien pour le tri selon l’avancement (du plus avancé au moins avancé)",
    "OPTIONSortIMPUP"            : "Infobulle du lien pour le tri selon l’importance dans le thème sélectionné (du moins important au plus important)",
    "OPTIONSortIMPDOWN"          : "Infobulle du lien pour le tri selon l’importance dans le thème sélectionné (du plus important au moins important)",
    "OPTIONSortUPArrow"          : "Intitulé du lien pour le tri (up)",
    "OPTIONSortDOWNArrow"        : "Intitulé du lien pour le tri (down)",
    "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\"",
    "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)",
    "OPTIONGoHideOneText"        : "Intitulé du bouton \"Masquer\"",
    "OPTIONGoHideOneTitle"       : "Infobulle du bouton \"Masquer\"",
    "OPTIONGoShowOneText"        : "Intitulé du bouton \"Afficher\"",
    "OPTIONGoShowOneTitle"       : "Infobulle du bouton \"Afficher\"",
    "OPTIONbottomlinkstemplate"  : "Modèle des liens du bas",

// Édition
    "OPTIONNoEdition"            : "Message par défaut lorsque l’édition n’est pas permise",
    "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]]",

// Messages d'alerte
    "OPTIONAlertMsgNone"         : "Infobulle de l'icône \"OK\"",
    "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",
    "OPTIONAlertMsgCatAnalys"    : "Message lors de l’analyse de la catégorie sélectionnée",
    "OPTIONAlertMsgLinks"        : "Message lors de l’analyse des pages liées dans l’article",
    "OPTIONAlertMsgLinkshere"    : "Message lors de l’analyse des pages pointant vers la page",
    "OPTIONAlertMsgTemplate"     : "Message lors de l’analyse des inclusions du modèle",
    "OPTIONAlertMsgNewpages"     : "Message lors de l’analyse des nouvelles pages",
    "OPTIONAlertMsgCreations"    : "Message lors de l’analyse des pages créées par l’utilisateur",
    "OPTIONAlertMsgPrefixes"     : "Message lors de l’analyse des pages commençant par un préfixe",
    "OPTIONAlertMsgEvals"        : "Message lors de l’analyse des évaluations du thème sélectionné",
    "OPTIONAlertMsgEdit"         : "Message lors d’une édition",
    "OPTIONAlertMsgFilterSTUB"   : "Message lorsqu’aucune option de bandeau d’ébauche n’est sélectionnée",
    "OPTIONAlertMsgFilterAVT"    : "Message lorsqu’aucune option de bandeau d’évaluation d’avancement n’est sélectionnée",
    "OPTIONAlertMsgFilterIMP"    : "Message lorsqu’aucune option de bandeau d’évaluation d’importance n’est sélectionnée",
    "OPTIONAlertMsgSizeUnit"     : "Message lorsqu’un champ de texte attendant une valeur en unité de longueur valable n’en contient pas",
    "OPTIONAlertMsgColorInput"   : "Message lorsqu’un champ de texte attendant un code couleur valide n’en contient pas",
    "OPTIONAlertMsgStopNeeded"   : "Message lorsqu’un arrêt d’urgence est demandé",
    "OPTIONAlertMsgStopDone"     : "Message lorsqu’un arrêt d’urgence est effectué",
    "OPTIONOptionValidate"       : "Intitulé du bouton \"Valider les changements\"",
    "OPTIONOptionValidateTip"    : "Infobulle du bouton \"Valider les changements\"",
    "OPTIONOptionSubPageText"    : "Intitulé du bouton pour ouvrir la sous-page de configuration",
    "OPTIONOptionSubPageTip"     : "Infobulle du bouton pour ouvrir la sous-page de configuration",
    "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",

// Menu d'options
    "OPTIONSizeUnitTip"          : "Infobulle d’un champ de texte attendant une valeur en unité de longueur valable",
    "OPTIONColorInput"           : "Infobulle d’un champ de texte attendant un code couleur valable",
    "OPTIONparams"               : "Intitulé du bouton \"Paramètres\"",
    "OPTIONstyles"               : "Intitulé du bouton \"Styles CSS\"",
    "OPTIONtexts"                : "Intitulé du bouton \"Textes\"",
    "OPTIONmoreparams"           : "Intitulé du bouton \"Paramétrage manuel supplémentaire\"",
    "OPTIONparam"                : "Label d’un texte de description d’un paramètre personnalisable",
    "OPTIONreadonlyparam"        : "Label d’un texte de description d’un paramètre non personnalisable",
    "OPTIONstyle"                : "Label d’un texte de description d’un style CSS",
    "OPTIONtext"                 : "Label d’un texte de description d’un texte",
    "OPTIONGlobDefButtonText"    : "Intitulé du bouton pour rétablir les valeurs par défaut de tout un onglet",
    "OPTIONGlobDefButtonTitle"   : "Infobulle du bouton pour rétablir les valeurs par défaut de tout un onglet",
    "OPTIONTestMoreParamsText"   : "Intitulé du bouton pour tester le paramétrage manuel supplémentaire",
    "OPTIONTestMoreParamsTip"    : "Infobulle du bouton pour tester le paramétrage manuel supplémentaire",
    "OPTIONMoreParamsTestOK"     : "Message lorsqu’aucune erreur javascript n’est détectée",
    "OPTIONMoreParamsTestKO"     : "Message lorsqu’une erreur javascript est détectée",

// Menu des données
    "OPTIONGoDatasText"          : "Intitulé de l’onglet \"Données\"",
    "OPTIONGoDatasTitle"         : "Infobulle de l’onglet \"Données\"",
    "OPTIONGoDatasRAZText"       : "Intitulé du bouton pour effacer les données",
    "OPTIONGoDatasRAZTitle"      : "Infobulle du bouton pour effacer les données",
    "OPTIONlocalStorageExpiryT"  : "Modèle pour le temps restant avant expiration",
    "OPTIONevaldataUL"           : "Intitulé de l’onglet \"Thèmes d’évaluation\" (menu des données)",
    "OPTIONstubdataUL"           : "Intitulé de l’onglet \"Thèmes d’ébauche\" (menu des données)",
    "OPTIONdivdataUL"            : "Intitulé de l’onglet \"Divers\" (menu des données)",
    "OPTIONRAZdataUL"            : "Intitulé de l’onglet \"Gestion localStorage\" (menu des données)",

// Divers
    "OPTIONMonth01" : "Nom du mois de janvier",
    "OPTIONMonth02" : "Nom du mois de février",
    "OPTIONMonth03" : "Nom du mois de mars",
    "OPTIONMonth04" : "Nom du mois d’avril",
    "OPTIONMonth05" : "Nom du mois de mai",
    "OPTIONMonth06" : "Nom du mois de juin",
    "OPTIONMonth07" : "Nom du mois de juillet",
    "OPTIONMonth08" : "Nom du mois d’août",
    "OPTIONMonth09" : "Nom du mois de septembre",
    "OPTIONMonth10" : "Nom du mois d’octobre",
    "OPTIONMonth11" : "Nom du mois de novembre",
    "OPTIONMonth12" : "Nom du mois de décembre",


/* </source>

=== Descriptions des données (paramètres non modifiables) ===

<source lang=javascript> // -------------------- Descriptions des données -------------------- */


    "OPTIONEvalTemplate"                 : "Modèle pour l’évaluation",
    "OPTIONEvalThemes"                   : "Liste des thèmes d’évaluation",
    "OPTIONEvalThemesAliasesPage"        : "Page à analyser pour les alias des thèmes d’évaluation",
    "OPTIONEvalThemesAliases"            : "Liste des alias des thèmes d’évaluation",
    "OPTIONEvalCategory"                 : "Catégorie-mère des projets d’évaluation",
    "OPTIONEvalCatPrefixes"              : "Préfixes des projets d’évaluation",
    "OPTIONEvalThemesDefaultCat"         : "Préfixe par défaut pour les catégories d’évaluation",
    "OPTIONEvalThemesUsusualCats"        : "Page à analyser pour les catégories d’évaluation spéciales",
    "OPTIONEvalThemesUnusualCatTemplate" : "Préfixe pour les catégories d’évaluation spéciales",
    "OPTIONEvalCatsPrefixes"             : "Préfixes pour la catégorie-mère des catégories d’évaluation",
    "OPTIONEvalCatsCommonPrefix"         : "Préfixes commun pour la catégorie-mère des catégories d’évaluation",
    "OPTIONEvalThemesCat"                : "Catégories d’évaluation",
    "OPTIONMisplacedEvalThemes"          : "Thème dont les catégories d’évaluation sont mal placées (pas dans une catégorie \"Wikiprojet\")",
    "OPTIONPortalCatTemplate"            : "Modèle pour les catégories de portails",
    "OPTIONPortalList"                   : "Liste des portails",
    "OPTIONAvancement"                   : "Données pour les évaluations d’avancement",
    "OPTIONImportance"                   : "Données pour les évaluations d’importance",

    "OPTIONStubTemplate"                 : "Modèle de bandeau d’ébauche",
    "OPTIONStubThemesPage"               : "Page à analyser pour récupérer les thèmes d’ébauche",
    "OPTIONStubThemes"                   : "Liste des thèmes d’ébauche",
    "OPTIONStubAdjM"                     : "Liste des adjectifs masculins associables aux thèmes d’ébauche",
    "OPTIONStubAdjF"                     : "Liste des adjectifs féminins associables aux thèmes d’ébauche",
    "OPTIONBeforeStubTemplatesCats"      : "Catégories où sont listés des modèles à maintenir au-dessus du bandeau d’ébauche",
    "OPTIONBeforeStubTemplates"          : "Modèles à maintenir au-dessus du bandeau d’ébauche (avec les redirections)",

    "OPTIONMissingTexts"                 : "Textes d’explication manquants",
    "OPTIONUnusedTexts"                  : "Textes d’explication inutilisés",
    "OPTIONModesMap"                     : "Données sur les modes de fonctionnement",
    "OPTIONSortOptions"                  : "Types de tri possibles",
    "OPTIONBorderStyles"                 : "Types de style de bordure possibles",
    "OPTIONSizeUnits"                    : "Unités de mesures autorisées",
    "OPTIONDivIDsToPreview"              : "Identifiants des éléments d’une page à intégrer à la prévisualisation",
    "OPTIONTalkSubPagesToAvoid"          : "Sous-pages de discussion à ne jamais lister",
    "OPTIONAccents"                      : "Lettres accentuées et composées à transformer pour le tri alphabétique",
    "OPTIONFontFamilies"                 : "Familles de polices",
    "OPTIONEvalCatAllpages"              : "Modèle pour les catégories /Articles liés",
    "OPTIONEvalCatStubpages"             : "Modèle pour les catégories d’ébauche",
    "OPTIONSpecialpageName"              : "Titre de la page spéciale",
    "OPTIONOptionsSubPage"               : "Sous-page utilisateur de personnalisation",
    "OPTIONTestPage"                     : "Sous-page utilisateur de  test du mode \"article\"",
    "OPTIONTimeCorrection"               : "Décalage horaire",
    "OPTIONAPILimit"                     : "Limite de requête API",
    "OPTIONlocalStorageExpiry"           : "Délai d’expiration du localStorage (en heures)",
    "OPTIONChangesToMakeDelay"           : "Délai en ms imposé entre deux éditions",

  }, 
/*</source>

== Styles CSS ==

<source lang=javascript> // ------------------------------- Styles CSS modifiables ------------------------------- */
  styles : { 
//-- font-family
    "Mainff"             : "Arial",
//-- font-size
    "Mainfs"             : "100%",
    "Prvwfs"             : "85%",
    "TempDocfs"          : "85%",
    "PortListfs"         : "85%",
    "Alertfs"            : "175%",
//-- height  
    "Prvwhght"           : "250px", 
    "CatListhght"        : "175px", 
    "OptImgPrevhght"     : "50px",
//-- width
    "EvalTableIcowidth"  : "14px",
    "RunIcowidth"        : "16px",
    "PrevCloseIcowidth"  : "16px",
    "RedirectIcowidth"   : "14px",
    "DisambigIcowidth"   : "12px",
    "HiddenCatIcowidth"  : "14px",
    "AlertIcowidth"      : "20px",
    "MainCloseIcowidth"  : "32px",
    "TH2width"           : "140px", 
    "TH3width"           : "240px",     
    "TH4width"           : "125px",      
    "TH5width"           : "300px",       
    "TH6width"           : "80px",
    "ModSelwidth"        : "12%",
    "Timewidth"          : "75px",
    "Datewidth"          : "100px",
    "TempDocwidth"       : "60%",
    "PIcolwdth"          : "600px",
    "Optcolwdth"         : "600px", 
    "OptStrwdth"         : "350px", 
    "OptNbrwdth"         : "50px",  
    "OptStywdth"         : "195px", 
    "SpeImpCatwdth"      : "250px", 
    "MainEvalTwidth"     : "200px", 
    "StubTwidth"         : "100px", 
    "StubAwidth"         : "100px", 
    "Avtwidth"           : "125px", 
    "ImpTwidth"          : "150px", 
    "Impwidth"           : "80px", 
    "EmStopwidth"        : "16px",
//-- border-radius
    "Wrapperbdr"         : "1em",
    "SmallFSbdr"         : "0.5em",
    "BigFSbdr"           : "1em",
    "EvalTbdr"           : "0.5em",
    "ModSelbdr"          : "2em",
    "PILIbdr"            : "0.5em",
    "FiltAbbrbdr"        : "0.25em",
    "FilSelbdr"          : "0.5em",
    "LinesTbdr"          : "0.375em",
    "Sortbdr"            : "0.5em",
    "Alertbdr"           : "5px",
    "ImpButbdr"          : "0.375em",
    "ImpTexbdr"          : "0.375em",
    "Selectbdr"          : "0.375em",
    "OptLIbdr"           : "0.5em",
    "DTpickbdr"          : "10px",
//-- border-style
    "Mainbds"            : "solid",
    "Wrapperbds"         : "solid",
    "Innerbds"           : "dashed",
    "FiltAbbrbds"        : "solid",
    "Alertbds"           : "solid",
    "Prvwbds"            : "dashed",
//-- border-color
    "Mainbdc"            : "#a2a9b1",
    "Wrapperbdc"         : "#a2a9b1",
    "PILIbdc"            : "#dcdcdc",
    "HoverPILIbdc"       : "#a2a9b1",
    "Sortbdc"            : "#a2a9b1",
    "THListbdc"          : "#a2a9b1",
    "Linesbdc"           : "#a2a9b1",
    "FiltAbbrMbdc"       : "#8b0000",
    "OptLIbdc"           : "#dcdcdc",
    "HoverOptLIbdc"      : "#a2a9b1",
    "Alertbdc"           : "#a2a9b1",
    "DTpickCSelbdc"      : "#0095dd",
//-- background-color
    "Mainbgc"            : "#ffffff",
    "SmallFSbgc"         : "#f8f8f8",
    "BigFSbgc"           : "#f8fcff",
    "ModSelbgc"          : "#f8f8f8",
    "HoverModSelbgc"     : "#e0e0e0",
    "ModSelCurrbgc"      : "#eaf7e8",
    "HoverModSelCurrbgc" : "#b2eaa9",
    "FiltAbbrbgc"        : "#f8f8f8",
    "FiltNSbgc"          : "#ff0000",
    "FiltSbgc"           : "#00ff00",
    "FiltDISbgc"         : "#dcdcdc",
    "FiltAbbrMbgc"       : "#ffd700",
    "ImpButbgc"          : "#f0f0f0",
    "ImpButDisbgc"       : "#c7c7c7",
    "ImpTexbgc"          : "#ffffff",
    "ImpTexDisbgc"       : "#f0f0f0",
    "PILIbgc"            : "#fafdff",
    "HoverPILIbgc"       : "#eaecf0",
    "THListbgc"          : "#d3d3d3",
    "Sortbgc"            : "#f8f8f8",
    "Linesbgc"           : "#f8f8f8",
    "HoverLinesbgc"      : "#eaecf0",
    "Prvwbgc"            : "#ffffff",
    "OptLIbgc"           : "#fafdff",
    "HoverOptLIbgc"      : "#eaecf0",
    "OptLIMbgc"          : "#ffffe0",
    "HoverOptLIMbgc"     : "#f0e68c",
    "Alertbgc"           : "#ffffff",
    "DTpickbgc"          : "#f8f8f8",
    "DTpickCbgc"         : "#ffffff",
    "HoverDTpickCbgc"    : "#c0e5f7",
    "DTpickCSelbgc"      : "#e5f2ff",
//-- color
    "Maincol"            : "#000000",
    "Alertcol"           : "#ff0000",
    "Linkscol"           : "#002bb8",
    "Sortcol"            : "#000000",
    "DTpickDiscol"       : "#cccccc",
    "DTpickUnSelcol"     : "#999999",


  },
/*</source>

== Paramètres ==

<source lang=javascript> // ------------------------------- Paramètres modifiables ------------------------------- */
  params : {
    "AllowEdition"        : true,
    "UseTopFormInNS0"     : true,
    "AutoLaunchPreview"   : false,
    "PreloadPreview"      : false,
    "AddWarning"          : false,
    "SearchForPortalTag"  : true,
    "UseFancyInputs"      : false,
    "SuggestSelectSize"   : 4,
    "SuggestNumber"       : 12,
    "KeyUpDelay"          : 500,
    "MaxSubcatLevel"      : 6,
    "MaxSubCatAllowedSel" : 200,
    "MaxSubCatAllowedExp" : 500,
    "MoreParamsRows"      : 20,
    "DefaultPortal"       : "",
    "LinkPortletID"       : "p-cactions",
    "DocPage"             : "m:User:OldBee/MassEval.js/doc/fr",
    "DocURL"              : "https://meta.wikimedia.org/wiki/User:OldBee/MassEval.js/doc/fr",
    "ImageURL"            : "//upload.wikimedia.org/wikipedia/commons/",
    "RunningIcon"         : "2/2a/Loading_Key.gif",
    "OKIcon"              : "thumb/f/fb/Yes_check.svg/32px-Yes_check.svg.png",
    "CloseIcon"           : "thumb/8/80/Icon_no.svg/32px-Icon_no.svg.png",
    "RedirectIcon"        : "thumb/7/71/Symbol_redirect_arrow_with_gradient.svg/32px-Symbol_redirect_arrow_with_gradient.svg.png",
    "DisambigIcon"        : "thumb/c/c3/Disambiguation.svg/32px-Disambiguation.svg.png",
    "HiddenCatIcon"       : "thumb/1/1f/Tools.svg/32px-Tools.svg.png",
    "WarningIcon"         : "thumb/d/d6/Dialog-warning-custom.svg/32px-Dialog-warning-custom.svg.png",
    "StopIcon"            : "thumb/b/b8/Crystal_Project_Logout.png/32px-Crystal_Project_Logout.png",

//</source><noinclude><source lang="javascript">
// ############################### PARTIE NON PERSONNALISABLE ###############################
// ------------------------------- Paramètres non modifiables -------------------------------
    "EditableParams" : [
      "AllowEdition",
      "UseTopFormInNS0",
      "SearchForPortalTag",
      "AutoLaunchPreview",
      "PreloadPreview",
      "AddWarning",
      "UseFancyInputs",
      "SuggestSelectSize",
      "SuggestNumber",
      "KeyUpDelay",
      "MaxSubcatLevel",
      "MaxSubCatAllowedSel",
      "MaxSubCatAllowedExp",
      "MoreParamsRows",
      "DefaultPortal",
      "LinkPortletID",
      "DocPage",
      "DocURL",
      "ImageURL",
      "OKIcon",
      "RunningIcon",
      "WarningIcon",
      "StopIcon",
      "CloseIcon",
      "RedirectIcon",
      "DisambigIcon",
      "HiddenCatIcon",
    ],
    "SpecialpageName" : "MassEval",
    "OptionsSubPage"  : "/MassEvalparams.js",
    "TestPage"        : "/MassEvalTest",
    "EditTag" : "",
    "UserCanTag" : true, // droit MW "applychangetags"
    "AddDeveloperLinks" : false,
    "TimeCorrection" : 0,
    "UserInfosOK" : false,
    "MissingTexts" : [],
    "UnusedTexts" : [],
    "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" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/6/66/Fairytale_bookmark_gold.svg/14px-Fairytale_bookmark_gold.svg.png"},
      { wiki : "BA",        text : "Bon article",        color : "#66FF66" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Fairytale_bookmark_silver.svg/14px-Fairytale_bookmark_silver.svg.png"},
      { 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 : "homonymie", text : "Homonymie",          color : "#66ff66" , icon : "//upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Disambiguation.svg/14px-Disambiguation.svg.png" },
      { wiki : "?",         text : "Inconnu",            color : "#666666", textcolor:"white" }      
    ],
    "EvalTemplate"            : "Wikiprojet",
    "EvalTemplatNoCat"        : "|nocat=1\n",
    "EvalCategory"            : "Wikiprojet",
    "EvalCatPrefixes"         : ["Wikiprojet ", "Wikiprojet:"],
    "EvalThemes"              : [],
    "EvalThemesCat"           : {},
    "FakeEvalThemes"          : ["Statistique", "sur le management"],
    "ManuEvalThemes"          : ["GNU/Linux"],
    "MisplacedEvalThemes"     : [ // ----------------------- Liste à réduire ! 
                                  "Disney",
                                  "Time Warner",
                                  "Pologne",
                                  "Cynophilie",
                                  "Nintendo",
                                  "Droits de l'homme",
                                  "URSS",
                                  "Ordre du Temple",
                                  "criminologie",
                                  "protestantisme", 
                                  "Bible", 
                                  "Origine et évolution du vivant", 
                                  "Aude", 
                                  "Képi blanc", 
                                  "Massif du Jura", 
                                  "Var", 
                                  "Alsace", 
                                  "Aube", 
                                  "Matériaux", 
                                  "Bicyclette", 
                                  "Parcs de loisirs", 
                                  "Hautes-Alpes", 
                                  "Brest",
                                  "Hautes-Pyrénées",
                                  "Abbeville", 
                                  "Sécurité civile et sapeurs-pompiers",
                                  "Ligne Maginot",
                                  "Baroque",
                                  "Dauphiné",
                                  "Anatomie",
                                  "Bosnie-Herzégovine",
                                  "horreur",
                                  "Athéisme",
                                  "Wiki Loves Earth",
                                  "Christianisme évangélique",
                                  "Pink Floyd",
                                  "Tunisie",
                                  "Eurovision",
                                  "X-Files",
                                  "Limoges",
                                  "Kosovo",
                                  "autisme",
                                  "transidentité",
                                  "Historiographie",
                                  "Biologie marine",
                                  "Firefly",
                                  "Cher",
                                  "Maghreb",
                                  "Champagne-Ardenne",
                                  "syndicalisme",
                                  "numismatique",
                                  "Terre du Milieu",
                                  "Languedoc-Roussillon",
                                  "écologie",
                                  "équidés",
                                  "Provence-Alpes-Côte d'Azur",
                                  "Libye",
                                  "Seine-Saint-Denis",
                                ],

    "EvalThemesUsusualCats"   : "Modèle:Wikiprojet/catégorisation",
    "EvalThemesDefaultCat"    : "Article $1 d'",
    "EvalThemesUnusualCatTemplate" : "$1 d'",
    "EvalCatsPrefixes"        : ["Évaluation des articles ","Évaluation d'article "],
    "EvalCatsCommonPrefix"    : "Évaluation d",
    "EvalCatsMatches"         : {"importance":{param:"Importance",id:"IMP"},"avancement":{param:"Avancement",id:"AVT"}},
    "EvalThemesAliasesPage"   : "Modèle:Wikiprojet/alias",
    "EvalThemesAliases"       : {},
    "EvalTableRequests"       : 0,
    "EvalThemesOK"            : false,
    "PortalList"              : [],
    "PortalListOK"            : false,
    "PortalCatTemplate"       : "Portail:$1/Articles liés",
    "StubTemplate"            : "Ébauche",
    "StubThemesPage"          : "Module:Bandeau/Ébauche",
    "StubThemes"              : {},
    "FakeStubThemes"          : ["thème", /* "et", */ "exemple doc"],
    "StubAdjM"                : [],
    "StubAdjF"                : [],
    "StubThemesOK"            : false,
    "EvalThemeStuffsOK"       : false,
    "OptionsStuffsOK"         : false,
    "AllStuffsOK"             : false,
    "EvalCatAllpages"         : "Portail:$1/Articles liés",
    "EvalCatStubpages"        : "Wikipédia:ébauche $1",
    "BeforeStubTemplatesReq"  : 0,
    "BeforeStubTemplatesCats" : [ "Modèle de titre", "Modèle de bandeau renvoyant vers des homonymes", "Modèle Unicode" ],
    "BeforeStubTemplates"     : [
                                  "Article général",
                                  "Page annexe",
                                  "Av. J.-C.",
                                ],
    "OptionsSubPageOK"        : false,
    "OptionsMoreParams"       : "",
    "OptionsPageTemplate"     : "window.MassEval_UserCustom = function(){\n$1\n}\n",
    "OptionsPageCommentStart" : "/* Paramètrage supplémentaire du script MassEval. */ try{  /* NE PAS MODIFIER CETTE LIGNE  */\n",
    "OptionsPageCommentEnd"   : "\n/* Paramètrage supplémentaire du script MassEval. */ }catch(e){ console.error(e.message); }  /* NE PAS MODIFIER CETTE LIGNE  */",
    "CatSubPageCountOK"       : false,
    "PageTitleList"           : [],
    "PageList"                : [],
    "SubCatList"              : [],
    "StubEditsRunning"        : [],
    "EvalEditsRunning"        : [],
    "PreviewSaved"            : {},
    "APILimit"                : ((mw.config.get("wgUserGroups").indexOf("bot")!==-1 || mw.config.get("wgUserGroups").indexOf("syspo")!==-1) ? 5000 : 500),
    "DivIDsToPreview"         : ["contentSub", "mw-content-text", "catlinks"],
    "Accents"                 : {
                                  "A"  : ["À","Â","Ä","Á"],
                                  "C"  : ["Ç"],
                                  "E"  : ["É","È","Ê","Ë"],
                                  "I"  : ["Î","Ï","Í"],
                                  "O"  : ["Ô","Ö","Ó"],
                                  "U"  : ["Ù","Û","Ü","Ú"],
                                  "Y"  : ["ÿ","Ÿ"],
                                  "Ae" : ["Æ"],
                                  "Oe" : ["Œ"],
                                },
    "SortOptions"             : ["SortTitle","SortPortal","SortStub","SortAVT","SortIMP"],
    "OptionSelectWidthPlus"   : {"monobook":6,"vector":6,"modern":6,"cologneblue":6},
    "BorderStyles"            : ["dotted","dashed","solid","double","groove","ridge","inset","outset"],
    "SizeUnits"               : ["%","em","cn","in","px","pt","pc"],
    "CatListRunning"          : false,
    "SuggestTimeout"          : false,
    "SuggestRunning"          : {},
    "SpecialOptionLinkOK"     : false,
    "LaunchCondition"         : false,
    "CurrentCatOnSpecialpage" : false,
    "SubCatCount"             : {catlist:[],pagelist:[]},
    "SubCatCountReq"          : 0,


    "TalkSubPagesToAvoid"     : [ "/Suppression",
                                  "/Neutralité",
                                  "/Droit d'auteur",
                                  "/Article de qualité",
                                  "/Bon article",
                                  "/Lumière sur",
                                  "/À faire",
                                  "/Archive",
                                  "/archive"
                                ],
    "CurrentHeights"          : {},
    "ChangesToMake"           : [],
    "ChangesToMakeDelay"      : 50,
    "CurrentMaxSubcatLevel"   : 1,
    "DisplayedOptionsUL"      : 0,
    "ColorPickers"            : {},
    "ActualStyleTag"          : false,
    "BeforeStubTemplatesOK"   : false,
    "DatasStuffsOK"           : false,
    "localStorageItems"       : [],
    "localStorageTimestamps"  : {},
    "localStorageExpiry"      : 24,
    "DisplayedDatasUL"        : 0,
    "ModesMap"                : {
                                 "page"      : {id:"fieldsetPage",     veriftitle:"GoVerifOne",       addtitle:"GoAddOne",       updatefunc:"checkSelectedPage",      listfunc:"getOnePageStatus"   }, 
                                 "cat"       : {id:"fieldsetCat",      veriftitle:"GoVerifCat",       addtitle:"GoAddCat",       updatefunc:"checkSelectedCat",       listfunc:"getCategoryStatus"  }, 
                                 "links"     : {id:"fieldsetLinks",    veriftitle:"GoVerifLinks",     addtitle:"GoAddLinks",     updatefunc:"checkSelectedLinks",     listfunc:"getLinksStatus"     }, 
                                 "linkshere" : {id:"fieldsetLinkshere",veriftitle:"GoVerifLinkshere", addtitle:"GoAddLinkshere", updatefunc:"checkSelectedLinkshere", listfunc:"getLinkshereStatus" }, 
                                 "template"  : {id:"fieldsetTemplate", veriftitle:"GoVerifTemplate",  addtitle:"GoAddTemplate",  updatefunc:"checkSelectedTemplate",  listfunc:"getTemplateStatus"  }, 
                                 "newpages"  : {id:"fieldsetNewpages", veriftitle:"GoVerifNewpages",  addtitle:"GoAddNewpages",  updatefunc:"checkSelectedNewpages",  listfunc:"getNewpagesStatus"  }, 
                                 "creations" : {id:"fieldsetCreations",veriftitle:"GoVerifCreations", addtitle:"GoAddCreations", updatefunc:"checkSelectedCreations", listfunc:"getCreationsStatus" }, 
                                 "prefixes"  : {id:"fieldsetPrefixes", veriftitle:"GoVerifPrefixes",  addtitle:"GoAddPrefixes",  updatefunc:"checkSelectedPrefixes",  listfunc:"getPrefixesStatus"  }
                                },
    "CurrentMode"             : null,
    "PageLinksList"           : [],
    "PageLinkshereList"       : [], 
    "PageTemplateList"        : [], 
    "TemplateDocPage"         : "/Documentation",
    "FontFamilies"            : {
                                  "sans-serif" : ["Arial","Bahnschrift","Calibri","Candara","Corbel","Ebrima","Franklin Gothic","Gadugi","Geneva","Helvetica","Lucida Grande","Lucida Sans","Lucida Sans Unicode","Malgun Gothic","Microsoft Yi Baiti","MS PGothic","Tahoma","Trebuchet MS","Verdana"],
                                  "serif"      : ["Antiqua","Book Antiqua","Cambria","Constantia","Garamond","Georgia","Mongolian Baiti","Palatino","Palatino Linotype","PMingLiU-ExtB","SimSun","Sylfaen","Times New Roman"],
                                  "monospace"  : ["Andale Mono","Consolas","Courier","Courier New","Lucida Console","Lucida Sans Typewriter","MS Gothic","Monaco"],
                                  "cursive"    : ["Comic Sans MS","Comic Sans","Gabriola","Lucida Handwriting","Lucida Caligraphy","MV Boli","Segoe Script",],
                                  "fantasy"    : ["Arial Black","Blackletter","Charcoal","Fraktur","Gadget","Impact"]
                                },
  },
// =============================== Fonctions -------------------------------
  // ------------------------------- Fonctions génériques -------------------------------
  functions : {
    generateID : function(){
      return "AutoID"+Math.floor(Math.random() * 1000000000);
    },
    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 MassEval.params.Accents){
        var letters = MassEval.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;
    },
    formatNumber : function(number){
      number = number.toString();
      var parts = [];
      while(number.length>3){
        var lastthree = number.substr((number.length-3),number.length);
        parts.splice(0,0,lastthree);
        number = number.substr(0,(number.length-3));
      }
      parts.splice(0,0,number);
      return parts.join(" ");
    },
    addZero : function(num){
      var Text = num.toString();
      if(Text.length == 1) Text = "0"+Text;
      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;
        if(N && N.tagName && tags.indexOf(N.tagName.toLowerCase()) !== -1){
          N.disabled = DIS;
        }else 
        if(N && N.tagName){
          for(var t=0,tlen=tags.length;t<tlen;t++){
            MassEval.functions.disableThings(N.getElementsByTagName(tags[t]), dis);
          }
        }
      }
    },
    displayNodes : 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 = IDs[a];
        if(typeof(thisNode)=="string") 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;
        }
      }
      //console.log("item not found : tags = "+tags.join(", ")+" | name = "+name);
      return null;
    },
    createLink : function(page, options){
      var link = document.createElement("a");
      link.href = (options && options.href ? options.href : mw.util.getUrl(page));
      link.title = (options && options.title ? options.title : page );
      link.innerHTML = ((options && typeof(options.text)==="string") ? options.text : page );
      if(options && options.class) link.className = options.class;
      if(options && typeof(options.preview)=="number"){
        link.title =  MassEval.texts.PreviewText.split("$1").join(link.title);
        link.onclick = function(){ MassEval.functions.previewPage(page, options.preview); return false; };
      }
      return link;
    },
    neutralizeLinks : function(node){
      var links = node.getElementsByTagName("a");
      for(var a=0,l=links.length;a<l;a++){
        if(links[a].href.indexOf("#")===-1 && links[a].href.indexOf("javascript:")===-1) links[a].onclick = function(){ return false; }
      }
    },
    createInput : function(datas){
      var Input = document.createElement('textarea');
      if(datas.type != 'textarea'){
        Input = document.createElement('input');
        Input.type = datas.type || 'text';
      }
      if(typeof(datas.name)!=="undefined") Input.name = datas.name;
      if(typeof(datas.value)!=="undefined") Input.value = datas.value;
      if(typeof(datas.title)!=="undefined") Input.title = datas.title;
      if(typeof(datas.id)!=="undefined") Input.id = datas.id;
      return Input;
    },
    createSelect : function(options, selectedoption, sname){
      var Select = document.createElement('select');
      for(var val in options){
        var opt = Select.appendChild(document.createElement('option'));
        opt.value = val;
        opt.innerHTML = options[val];
        if(val == selectedoption) opt.selected = "selected";
      }
      if(sname) Select.name = sname;
      return Select;
    },
    createTimeSelector : function(updatefunc){
      var Today = new Date();
      var ThisMinute = Today.getMinutes();
      var ThisHour = Today.getHours();
      var ThisDay = Today.getDate();
      var ThisMonth = Today.getMonth();
      var ThisYear = parseInt(Today.getFullYear());
      var FS = document.createElement("fieldset");
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Label = FS.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.TimeDateLabel;
      var Form = FS.appendChild(document.createElement('form'));
      Form.onsubmit = function(){ return false; };
      var TimeValue = MassEval.functions.addZero(ThisHour)+":"+MassEval.functions.addZero(ThisMinute);
      var TimeInput = Form.appendChild(MassEval.functions.createInput({type:"text",name:"time",value:TimeValue}));
      $(TimeInput).addClass('timeinput');
      $(TimeInput).clockpicker({
        autoclose : true,
        align     : 'right',
        afterDone : function(){ if(typeof(updatefunc)==="function") updatefunc(); }
      });
      var DateInput = Form.appendChild(MassEval.functions.createInput({type:"text",name:'date'}));
      $(DateInput).addClass('dateinput');
      DateInput.setAttribute("data-toggle","datepicker");
      var DatePickerContainer = Form.appendChild(document.createElement('div'));
      var TimeSelector = $(DateInput).datepicker({
        container : DatePickerContainer,
        language  : 'fr-FR',
        endDate   : Today,
        autoPick  : true,
        autoHide : true
      });
      if(typeof(updatefunc)==="function"){
        TimeInput.onkeyup = updatefunc;
        DateInput.onkeyup = updatefunc;
        $(DateInput).on('pick.datepicker', function (e) {
          if (e.date < new Date()) {
            e.preventDefault(); // Prevent to pick the date  
          }
          DateInput.value = $(DateInput).datepicker('getDate', true);
          updatefunc();
       });
      }
      $(Form).addClass("TimeSelector");
      return FS;
    },
    getTimeSelectorValue : function(FormID){
     var TS = "y-m-dTh:min:00Z";
     var Form = document.getElementById(FormID);
     if(!Form) return "";
     var thisTime = MassEval.functions.getFirstElementByName(Form, ["input"], "time").value;
     var H = parseInt(thisTime.split(":")[0]);
     var M = parseInt(thisTime.split(":")[1]);
     var DateSelector = MassEval.functions.getFirstElementByName(Form, ["input"], "date");
     var thisDate = $(DateSelector).datepicker('parseDate', DateSelector.value);
     var Time = thisDate.getTime();
     Time = new Date(Time + (((H*60)+M-MassEval.params.TimeCorrection)*60*1000));
     var Minute = Time.getMinutes();
     var Hour = Time.getHours()
     var Day = Time.getDate();
     var Month =  Time.getMonth();
     var Year = Time.getFullYear();
     TS = TS.split("min").join(MassEval.functions.addZero(Minute));
     TS = TS.split("h").join(MassEval.functions.addZero(Hour));
     TS = TS.split("d").join(MassEval.functions.addZero(Day));
     TS = TS.split("m").join(MassEval.functions.addZero(Month+1));
     TS = TS.split("y").join(Year);
     return TS;
    },
    createNamespaceSelect : function(DefaultNS){
      if(!DefaultNS) DefaultNS = "0";
      var NSobject = JSON.parse(JSON.stringify(mw.config.get("wgFormattedNamespaces")));
      NSobject["0"] = MassEval.texts.MainNamespace;
      delete NSobject["-1"];
      delete NSobject["-2"];
      return MassEval.functions.createSelect(NSobject, DefaultNS);
    },
    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")[(MassEval.functions.getNamespaceInfoFromPage(page)+1)]+":"+MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
    },
    getMainPage : function(page){
      var NS = MassEval.functions.getNamespaceInfoFromPage(page);
      if(NS % 2 == 0) return page;
      return (NS==1 ? "" : mw.config.get("wgFormattedNamespaces")[(NS-1)]+":")+MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
    },
    sortTextList : function(textlist) {
      var NA = MassEval.functions.deleteAccents;
      return textlist.sort(function(a,b){ var A = [NA(b.toLowerCase()),NA(a.toLowerCase())].sort(); return ( A[1] == NA(a.toLowerCase()) ? 1 : -1 ); });
    },
    compareObjects : function(object1, object2){
      if( typeof(object1)==="undefined" || typeof(object2)==="undefined") return false;
      if( typeof(object1)!=="object" || typeof(object2)!=="object") return (object1 === object2);
      for(var id1 in object1){
        if( MassEval.functions.compareObjects(object1[id1], object2[id1]) === false ) return false;
      }
      for(var id2 in object2){
        if( MassEval.functions.compareObjects(object2[id2], object1[id2]) === false ) return false;
      }
      return true;
    },
    makeGroupsFromArray : function(arr, grouplength, modfunc){
      if(typeof(arr)!="object") return false;
      if(typeof(grouplength)!="number") return false;
      var ARR = JSON.parse(JSON.stringify( arr ));
      var groupedarray = [];
      while(ARR.length > 0){
        var group = [];
        for(var x=0,xlen=grouplength;x<xlen;x++){
          var item = ARR.shift();
          if(typeof(item)==="undefined") continue;
          if(typeof(modfunc)==="function") item = modfunc(item);
          group.push(item);
        }
        groupedarray.push(group);
        delete group;
        if(ARR.length === 0) break;
      }
      return groupedarray;
    },
    setSynchronizedResizeV : function(ElmsIDs, delay){
      var Elms = [];
      for(var a=0,l=ElmsIDs.length;a<l;a++){
        var currentElement = document.getElementById(ElmsIDs[a]);
        if(!currentElement) continue;
        Elms.push(currentElement);    
        currentElement.style.resize = "vertical";
        var currentHeight = $(currentElement).height();
        MassEval.params.CurrentHeights[currentElement.id] = currentHeight;
      }
      var ResizeFunc = function(){
        var NewHeight = null;
        for(var a=0,l=Elms.length;a<l;a++){
          var El = Elms[a];
          if(El.style.display == "none" || El.style.visibility == "hidden") continue;
          var ElHeight = $(El).height();
          var oldHeight = MassEval.params.CurrentHeights[El.id];
          if(ElHeight !== oldHeight) NewHeight = ElHeight;
        }
        if(NewHeight === null || NewHeight === 0) return;
        for(var a=0,l=Elms.length;a<l;a++){
          var El = Elms[a];
          El.style.height = NewHeight+"px";
          MassEval.params.CurrentHeights[El.id] = NewHeight;
        }
      };
      setInterval(ResizeFunc, (delay ? delay : 50));
    },
    fontTest : function(fontName){
      var canvas = document.createElement("canvas");
      var context = canvas.getContext("2d");     
      var text = "abcdefghijklmnopqrstuvwxyz0123456789";
      context.font = "72px monospace";
      var baselineSize = context.measureText(text).width;     
      context.font = "72px '" + fontName + "', monospace";
      var newSize = context.measureText(text).width;
      canvas = null;
      return (newSize != baselineSize);
    },
  // ------------------------------- Fonctions localStorage -------------------------------
    localStorage : {
      getItem : function(itemname){
        if(MassEval.params.localStorageItems.indexOf(itemname)===-1) MassEval.params.localStorageItems.push(itemname);
        var TS = localStorage.getItem(itemname+"_TS");
        if(!TS) return false
        TS = parseInt(TS);
        var now = new Date().getTime();
        if( (now - TS) > (MassEval.params.localStorageExpiry*60*60*1000) ){
          localStorage.removeItem(itemname);
          localStorage.removeItem(itemname+"_TS");
          return false;
        }else{ 
          MassEval.params.localStorageTimestamps[(itemname+"_TS")] = now;
          return localStorage.getItem(itemname);
        }
      },
      setItem : function(itemname, itemvalue){
        if(MassEval.params.localStorageItems.indexOf(itemname)===-1) MassEval.params.localStorageItems.push(itemname);
        var now = new Date().getTime();
        MassEval.params.localStorageTimestamps[(itemname+"_TS")] = now;
        localStorage.setItem((itemname+"_TS"), now);
        return localStorage.setItem(itemname, itemvalue);
      }
    },
  // ------------------------------- Fonctions API -------------------------------
    getAPIUsercontribs : function(Q){
      if(!Q || !Q.user) return console.error('Manque paramètre "user" pour MassEval.functions.getAPIUsercontribs');
      if(!Q || !Q.timestamp) return console.error('Manque paramètre "timestamp" pour MassEval.functions.getAPIUsercontribs');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',list:'usercontribs',
          uclimit     : MassEval.params.APILimit,
          ucshow      : 'new',
          ucprop      : 'title',
          ucnamespace : 0,
          ucstart     : 'now',
          ucend       : Q.timestamp,
          ucuser      : Q.user
        };
      }
      $.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        if(!Q.result) Q.result = [];
        var query = data.query;
        if(query){
          var usercontribs = query.usercontribs;
          for(var a=0,l=usercontribs.length;a<l;a++){
            var pageinfo = usercontribs[a];
            var title = pageinfo.title;
            if(Q.result.indexOf(title) ===-1) Q.result.push(title);
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.uccontinue = cont.uccontinue;
          MassEval.functions.getAPIUsercontribs(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPIRecentchanges : function(Q){
      if(!Q || !Q.timestamp) return console.error('Manque paramètre "timestamp" pour MassEval.functions.getAPIRecentchanges');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',generator:'recentchanges',
          grclimit  : MassEval.params.APILimit,
          grcshow : '!redirect',
          grcprop : 'title',
          grctype : 'new',
          grcnamespace : 0,
          prop : 'info',
          grcstart : 'now',
          grcend : Q.timestamp
        };
      }
      $.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        if(!Q.result) Q.result = [];
        var query = data.query;
        if(query){
          var pages = query.pages;
          for(var id in pages){
            var pageinfo = pages[id];
            var title = pageinfo.title;
            var timestamp = pageinfo.touched;
            var missing = (pageinfo.missing === "");
            if(!missing) Q.result.push({title:title, timestamp:timestamp});
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.grccontinue = cont.grccontinue;
          MassEval.functions.getAPIRecentchanges(Q);
        }else{
          Q.result.sort(function(a,b){
            var S = [a.timestamp, b.timestamp].sort();
            return ( S[0] == a.timestamp ? 1 : -1);
          });
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPIEmbeddedin : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPIEmbeddedin');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',list:'embeddedin',
          eilimit  : MassEval.params.APILimit,
          eititle  : Q.title          
        };
        if(Q.einamespace) Q.datas.einamespace =  Q.einamespace;
      }
      $.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        if(!Q.result) Q.result = [];
        var query = data.query;
        if(query){
          var embeddedin = query.embeddedin;
          for(var pageinfo in embeddedin){
            var title = embeddedin[pageinfo].title;
            if(Q.result.indexOf(title) === -1) Q.result.push(title);
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.eicontinue = cont.eicontinue;
          MassEval.functions.getAPIEmbeddedin(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPILinkshere : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPILinkshere');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',prop:'linkshere',
          lhprop      : (Q.lhprop ? Q.lhprop : 'pageid|title|redirect'),
          lhlimit     : MassEval.params.APILimit,
          titles      : Q.title          
        };
        if(Q.lhshow) Q.datas.lhshow =  Q.lhshow;
        if(Q.lhnamespace) Q.datas.lhnamespace =  Q.lhnamespace;
      }
      $.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        if(!Q.result) Q.result = {};
        var query = data.query;
        if(query){
          var pages = query.pages;
          for(var id in pages){
            var pageinfo = pages[id];
            var title = pageinfo.title;
            if(!Q.result[title]) Q.result[title] = pageinfo;
            else{
              var linkshere = pageinfo.linkshere;
              if(linkshere){
                if(!Q.result[title].linkshere) Q.result[title].linkshere = linkshere;
                else{
                  for(var a=0,l=linkshere.length;a<l;a++){
                    Q.result[title].linkshere.push(linkshere[a]);
                  }
                }
              }
            }
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.lhcontinue = cont.lhcontinue;
          MassEval.functions.getAPILinkshere(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPILinks : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPILinks');
      if(!Q.datas) Q.datas = {format:'json',action:'query',generator:'links',gpllimit:MassEval.params.APILimit,gplnamespace:'0|1',titles:Q.title,prop:'info'};
      $.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data){
        if(!Q.result) Q.result = [];
        var query = data.query;
        if(query){
          var pages = query.pages;
          if(pages){
            for(var id in pages){
              var pageinfo = pages[id];
              var ns = pageinfo.ns;
              if(pageinfo.missing !== "" && [0,1].indexOf(ns)!==-1){
                var title = pageinfo.title;
                Q.result.push(title);
              }
            }
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.gplcontinue = cont.gplcontinue;
          MassEval.functions.getAPILinks(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPICategoryinfo : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategoryinfo');  
      var datas = {format:'json',action:'query',prop:'categoryinfo',titles:mw.config.get('wgFormattedNamespaces')[14]+":"+Q.title};
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data){
          var result = {};
          var page = data.query.pages[(Object.keys(data.query.pages)[0])];
          var missing = (page.missing === "");
          if(missing) result.missing = true;
          var categoryinfo = page.categoryinfo;
          if(categoryinfo){
            result.pages = categoryinfo.pages;
            result.subcats = categoryinfo.subcats;
            result.files = categoryinfo.files;
            result.size = categoryinfo.size;
          }
          Q.result = result;
          if(typeof(Q.callback) == "function") Q.callback(Q);
      });
    },
    getAPICategories : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategories');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',prop:'categories',
          clprop:'hidden|sortkey',
          cllimit:MassEval.params.APILimit,
          titles:Q.title          
        };
      }
      $.ajax({url: mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        var page = data.query.pages[(Object.keys(data.query.pages)[0])];
        var categories = page.categories;
        if(categories){
          if(!Q.result) Q.result = {};
          for(var a=0,l=categories.length;a<l;a++){
            var category = categories[a];
            Q.result[category.title] = category;
          }
          var cont = data.continue;
          if(cont){
            Q.datas.clcontinue = cont.clcontinue;
            MassEval.functions.getAPICategories(Q);
          }else{
            if(typeof(Q.callback) == "function") Q.callback(Q);
          }
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPICategorymembers : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategorymembers');
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',list:'categorymembers',
          cmprop  : Q.cmprop || 'ids|title|type|sortkey|timestamp',
          cmlimit : MassEval.params.APILimit,
          cmtitle : Q.title, 
          cmsort  : (Q.cmsort ? Q.cmsort : 'sortkey'),  
          cmdir  : (Q.cmdir ? Q.cmdir : 'asc'),   
          cmtype  : Q.cmtype || 'page|subcat|file',
        };
        
      }
      $.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        var query = data.query;
        if(!query) return;
        var categorymembers = query.categorymembers;
        if(categorymembers && categorymembers.length > 0){
          if(!Q.result) Q.result = {};
          for(var a=0,l=categorymembers.length;a<l;a++){
            var page = categorymembers[a];
            Q.result[page.title] = page;
          }
          var cont = data.continue;
          if(cont){
            Q.datas.cmcontinue = cont.cmcontinue;
            MassEval.functions.getAPICategorymembers(Q);
          }else{
            if(typeof(Q.callback) == "function") Q.callback(Q);
          }
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPICategorymembersGenerator : function(Q){
      if(!Q || !Q.title) return console.error('Manque paramètre "title" pour MassEval.functions.getAPICategorymembersGenerator');
      if(!Q || !Q.prop) return console.error('Manque paramètre "prop" pour MassEval.functions.getAPICategorymembersGenerator '+Q.title);
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',generator:'categorymembers',
          gcmprop  : Q.gcmprop || 'ids|title|type|sortkey|timestamp',
          gcmlimit : MassEval.params.APILimit,
          gcmtitle : Q.title,    
          gcmsort  : (Q.gcmsort ? Q.gcmsort : 'sortkey'),  
          gcmdir  : (Q.gcmdir ? Q.gcmdir : 'asc'),   
          gcmtype  : Q.gcmtype || 'page|subcat|file',
          prop     : Q.prop
        };
      }
      $.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        var query = data.query;
        if(!query) return;
        if(!Q.result) Q.result = {};
        var pages = query.pages;
        for(var id in pages){
          var pageinfo = pages[id];
          var index = pageinfo.title; 
          if(Q.result[index]){
            for(var info in pageinfo){ 
              var thisinfo = pageinfo[info]; 
              if(typeof(thisinfo)!=="object"){ 
                if(typeof(Q.result[index][info])==="undefined") Q.result[index][info] = thisinfo;
              }else{
                if(typeof(Q.result[index][info])!=="object") Q.result[index][info] = thisinfo;
                else{
                  for(var i=0,ilen=thisinfo.length;i<ilen;i++){
                     Q.result[index][info].push(thisinfo[i]);
                  }
                }
              }
            }            
          }else{
            Q.result[index] = pageinfo;
          }
        }
        var cont = data.continue;
        if(cont){
          for(var contname in cont){
            if(contname === "continue") continue;     
            Q.datas[contname] = cont[contname];       
          }
          MassEval.functions.getAPICategorymembersGenerator(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
    getAPIAllcategories : function(Q){
      if(!Q.datas){
        Q.datas = {format:'json',action:'query',generator:'allcategories',
          gaclimit : MassEval.params.APILimit,
        };
      }
      if(Q.gacprop) Q.datas.gacprop = Q.gacprop;
      if(Q.gacfrom) Q.datas.gacfrom = Q.gacfrom;
      if(Q.gacprefix) Q.datas.gacprefix = Q.gacprefix;
      $.ajax({url:mw.util.wikiScript('api'),data:Q.datas,dataType:'json'
      }).then(function(data) {
        var query = data.query;
        if(!query) return;
        if(!Q.result) Q.result = {};
        var categories = query.pages;
        for(var id in categories){
          var page = categories[id];
          Q.result[page.title] = page;
        }
        var cont = data.continue;
        if(cont){
          Q.datas.gaccontinue = cont.gaccontinue;
          MassEval.functions.getAPIAllcategories(Q);
        }else{
          if(typeof(Q.callback) == "function") Q.callback(Q);
        }
      });
    },
  // ------------------------------- Fonctions pour le listing des pages -------------------------------
    startPageAnalysis : function(){
      var ElementsToDisable = [
                              "EvalThemeInput",
                              "PortalInput",
                              "CatInput",
                              "SubCatsCheckBox",
                              "LinksCheckbox",
                              "GlobalVerifInput",
                              "GlobalAddEvalInput",
                              "subcatdepthForm",
                              "fieldsetModes"
      ];
      MassEval.functions.disableThings(ElementsToDisable, true);
      var FromToSelector = document.getElementById("FromToSelector");
      if(FromToSelector) $(FromToSelector.parentNode).addClass("RangeSelectorDisabled");
      var RangeSelectorAbbrLink = document.getElementById("RangeSelectorAbbrLink");
      if(RangeSelectorAbbrLink) $(RangeSelectorAbbrLink).addClass("RangeSelectorDisabled");
    },
    endPageAnalysis : function(){
      var ElementsToEnable = [
                              "EvalThemeInput",
                              "CatInput",
                              "SubCatsCheckBox",
                              "LinksCheckbox",
                              "GlobalVerifInput",
                              "GlobalAddEvalInput",
                              "fieldsetModes"
      ];
      MassEval.functions.disableThings(ElementsToEnable, false);
      MassEval.functions.updatePortalSelect();
      var SubCats = document.getElementById("SubCatsCheckBox");
      MassEval.functions.disableThings(["subcatdepthForm"], (!SubCats || (SubCats && !SubCats.checked)));
      var FromToSelector = document.getElementById("FromToSelector");
      if(FromToSelector) $(FromToSelector.parentNode).removeClass("RangeSelectorDisabled");
      var RangeSelectorAbbrLink = document.getElementById("RangeSelectorAbbrLink");
      if(RangeSelectorAbbrLink) $(RangeSelectorAbbrLink).removeClass("RangeSelectorDisabled");
      MassEval.functions.alertControl("listpages");
      MassEval.functions.alertControl("getstatus");
    },
    getOnePageStatus : function(Q){
      var Input = document.getElementById("PageInput");
      if(!Input) return;
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      MassEval.functions.getThesePagesStatus([ Input.value ], Q.onlymissingeval);
    }, 
    getCategoryStatus : function(Q){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      var CheckBox = document.getElementById("SubCatsCheckBox");
      if(typeof(Q.catindex)==="undefined"){
        var Conditions = MassEval.functions.getFilterConditions();
        if(!Conditions) return;
        MassEval.params.CatListRunning = true;
        MassEval.params.PreviewSaved = {};
        Q.catindex = 0;
        MassEval.params.PageTitleList = [];
        MassEval.params.PageList = [];
        MassEval.params.SubCatList = [];
        var PageFilteredCount = document.getElementById("PageFilteredCount");
        if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
        var FirstCat = document.getElementById("CatInput").value;
        if(!FirstCat) return;
        MassEval.params.SubCatList.push({title:(mw.config.get("wgFormattedNamespaces")[14]+":"+FirstCat),depth:0});
      }
      var catinfo = MassEval.params.SubCatList[Q.catindex];
      if(!catinfo){
        var PageList = MassEval.params.PageTitleList;
        var ChosenPages = [];
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        for(var a=0,l=PageList.length;a<l;a++){
          if(a < from) continue;
          if(a > to) continue;
          ChosenPages.push(PageList[a]);
        }
        MassEval.functions.alertControl("listpages");
        return MassEval.functions.getThesePagesStatus(ChosenPages, (Q.onlymissingeval ? true : false));
      }
      if(MassEval.params.PageTitleList.length > (Q.maxpages-1)) return MassEval.functions.getPageStatus(Q.evaltheme);
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      MassEval.functions.startPageAnalysis();
      var count = (Q.catindex+1)+"/"+MassEval.params.SubCatList.length;
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgPages.split("$count").join(count).split("$cat").join(catinfo.title), "Running");
      MassEval.functions.getAPICategorymembers({
        onlymissingeval : Q.onlymissingeval,
        catindex   : Q.catindex,
        evaltheme  : Q.evaltheme,
        startpages : Q.startpages,
        endpages   : Q.endpages,
        maxpages   : Q.maxpages,
        title      : catinfo.title,
        depth      : catinfo.depth,
        cmprop     : 'title',
        cmdir      : (Q.onlymissingeval ? 'desc' : 'asc'),
        cmsort     : (Q.onlymissingeval ? 'timestamp' : 'sortkey'),
        cmtype     : ((CheckBox && CheckBox.checked) ? 'page|subcat' : 'page'),
        callback   : function(R){
          var CanContinue = MassEval.functions.checkEmergencyStop();
          if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
          var alltitles = Object.keys(R.result);
          if(alltitles.length == 0){
            MassEval.functions.alertControl("listpages");
            MassEval.functions.endPageAnalysis();
            return;
          }
          for(var pi in R.result){
            var pageinfo = R.result[pi];     
            var title = pageinfo.title;
            var ns = parseInt(pageinfo.ns);
            if(ns == 14 && MassEval.params.SubCatList.indexOf(title)===-1 && R.depth<MassEval.params.CurrentMaxSubcatLevel){
              MassEval.params.SubCatList.push({title:title,depth:(R.depth+1)});
            }else if(ns < 2){
              title = MassEval.functions.getMainPage(title);
              if(MassEval.params.PageTitleList.indexOf(title)==-1){
                MassEval.params.PageTitleList.push(title);
              }
            }
          }
          R.catindex++
          MassEval.functions.getCategoryStatus(R);
        }
      });
    },
    getLinksStatus : function(Q){
      var Input = document.getElementById("LinksInput");
      var NSInput = document.getElementById("LinksInputNS");
      if(!Input || !NSInput) return;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      var PageName = MassEval.functions.ucFirst(Input.value);
      var NS = parseInt(NSInput.value);
      Input.value = PageName;
      Q.title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
      Q.result = [];
      Q.onlymissingeval = !!Q.onlymissingeval;
      Q.callback = function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
        var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
        MassEval.params.PageLinksList = [];
        var titles = R.result;
        for(var a=0,l=titles.length;a<l;a++){
          var title = titles[a];
          var OK = true;
          for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
            if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
          }
          if(OK) MassEval.params.PageLinksList.push(title);
        }
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=MassEval.params.PageLinksList.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = MassEval.params.PageLinksList[a];
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
      }
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgLinks.split("$page").join(Q.title), "Running");
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      if(MassEval.params.PageLinksList.length == 0) MassEval.functions.getAPILinks(Q);
      else Q.callback({result:MassEval.params.PageLinksList,onlymissingeval:Q.onlymissingeval});
    }, 
    getLinkshereStatus : function(Q){
      var Input = document.getElementById("LinkshereInput");
      var NSInput = document.getElementById("LinkshereInputNS");
      if(!Input || !NSInput) return;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      var PageName = MassEval.functions.ucFirst(Input.value);
      var NS = parseInt(NSInput.value);
      Q.title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
      Q.result = [];
      Q.onlymissingeval = !!Q.onlymissingeval;
      Q.lhprop = 'title';
      Q.lhnamespace = '0|1';
      Q.lhshow = '!redirect';
      Q.callback = function(R){
        var onlymissingeval = R.onlymissingeval;
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
        var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
        MassEval.params.PageLinkshereList = [];
        var titles = R.result;
        for(var a=0,l=titles.length;a<l;a++){
          var title = titles[a];
          var OK = true;
          for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
            if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
          }
          if(OK) MassEval.params.PageLinkshereList.push(title);
        }
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=MassEval.params.PageLinkshereList.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = MassEval.params.PageLinkshereList[a];
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
      }
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgLinkshere.split("$page").join(Q.title), "Running");
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      if(MassEval.params.PageLinkshereList.length == 0) MassEval.functions.getAPILinkshere(Q);
      else Q.callback({result:MassEval.params.PageLinkshereList,onlymissingeval:Q.onlymissingeval});
    }, 
    getTemplateStatus : function(Q){
      var Input = document.getElementById("TemplateInput");
      if(!Input) return;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      var PageName = MassEval.functions.ucFirst(Input.value);
      Q.title = mw.config.get("wgFormattedNamespaces")[10]+":"+PageName;
      Q.result = [];
      Q.onlymissingeval = !!Q.onlymissingeval;
      Q.einamespace = '0';
      Q.callback = function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
        MassEval.params.PageTemplateList = R.result;
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=MassEval.params.PageTemplateList.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = MassEval.params.PageTemplateList[a];
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);
      }
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgTemplate.split("$template").join(PageName), "Running");
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      if(MassEval.params.PageTemplateList.length == 0) MassEval.functions.getAPIEmbeddedin(Q);
      else Q.callback({result:MassEval.params.PageTemplateList,onlymissingeval:Q.onlymissingeval});
    }, 
    getNewpagesStatus : function(Q){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgNewpages, "Running");
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      var Timestamp = MassEval.functions.getTimeSelectorValue("NewpagesTimeSelector");
      Q.onlymissingeval = !!Q.onlymissingeval;
      MassEval.functions.getAPIRecentchanges({timestamp:Timestamp,onlymissingeval:Q.onlymissingeval,callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
        var titles = R.result;
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=titles.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = titles[a].title;
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);      
      }});
    }, 
    getCreationsStatus : function(Q){
      var Input = document.getElementById("UserInput");
      if(!Input) return;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgCreations.split("$user").join(Input.value), "Running");
      MassEval.functions.startPageAnalysis();
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      var Timestamp = MassEval.functions.getTimeSelectorValue("CreationsTimeSelector");
      Q.onlymissingeval = !!Q.onlymissingeval;
      MassEval.functions.getAPIUsercontribs({timestamp:Timestamp,user:Input.value,onlymissingeval:Q.onlymissingeval,callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
        var titles = R.result;
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=titles.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = titles[a];
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, R.onlymissingeval);      
      }});
    },
    getPrefixesStatus : function(Q){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      Q.Prefix = document.getElementById("PrefixInput").value;
      if(!Q.datas){
        Q.PageList = [];
        Q.datas = { format:'json',action:'query',list:'allpages',
          apprefix : Q.Prefix,
          apnamespace : 0,
          aplimit : MassEval.params.APILimit 
        };
        MassEval.functions.alertControl("listpages", MassEval.texts.AlertMsgPrefixes.split("$1").join(Q.Prefix), "Running");
        MassEval.functions.startPageAnalysis();
        var PageFilteredCount = document.getElementById("PageFilteredCount");
        if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";    
      }
      Q.onlymissingeval = !!Q.onlymissingeval;
      $.ajax({url: mw.util.wikiScript('api'), data: Q.datas,dataType: 'json'
      }).then(function(data) {
        var query = data.query;
        if(query){
          var pages = query.allpages;
          for(var a=0,l=pages.length;a<l;a++){
            var pagedata = pages[a];
            var page = pagedata.title;
            Q.PageList.push(page);
          }
        }
        var cont = data.continue;
        if(cont){
          Q.datas.apcontinue = cont.apcontinue;
          return MassEval.functions.getPrefixesStatus(Q);            
        }
        var titles = Q.PageList;
        var Range = MassEval.functions.getFromToSelectorValues();
        var from = (Range.from-1), to = (Range.to-1);
        var Newlist = [];
        for(var a=0,l=titles.length;a<l;a++){
          if(a < from) continue
          if(a > to) continue;
          var thistitle = titles[a];
          if(thistitle) Newlist.push(thistitle);
          else console.warn("title manquant : "+a);
        }
        MassEval.functions.alertControl("listpages"); 
        MassEval.functions.getThesePagesStatus(Newlist, Q.onlymissingeval);
      });
    },
    getThesePagesStatus : function(titles, onlymissingeval){
      if(!titles || titles.length == 0) return;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      MassEval.functions.startPageAnalysis();
      MassEval.functions.clearBoardList();
      var EvalThemeSelect = document.getElementById('EvalThemeInput');
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(PageFilteredCount) PageFilteredCount.style.visibility = "hidden";
      MassEval.params.PageList = [];
      MassEval.params.PageTitleList = [];
      MassEval.params.SubCatList = [];
      MassEval.params.PreviewSaved ={};
      for(var a=0,l=titles.length;a<l;a++){
        var title = MassEval.functions.getMainPage(titles[a]);
        MassEval.params.PageList.push({title:title,talktitle:MassEval.functions.getTalkPage(title)});
      }
      MassEval.functions.getPageStatus(EvalThemeSelect.value, 0, onlymissingeval);
    },
    getPageStatus : function(evaltheme, index, onlymissingeval){
      if(!index) index = 0;
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
      var page = MassEval.params.PageList[index];
      if(!page){ return MassEval.functions.checkPagesEvalDone(); }
      if(MassEval.params.PreloadPreview){
        MassEval.functions.preloadPage(page.title, index);
        MassEval.functions.preloadPage(page.talktitle, index);
      }
      var count = (index+1)+"/"+MassEval.params.PageList.length;
      MassEval.functions.alertControl("getstatus", MassEval.texts.AlertMsgParams.split("$count").join(count).split("$page").join(page.title), "Running");
      var ReqDatas = {format:'json',action:'query',prop:'revisions|info|links|pageprops',rvprop:'content',rvsection:0,pllimit:1,titles:page.title+"|"+page.talktitle};
      if(MassEval.params.SearchForPortalTag){
        ReqDatas.prop += "|categories";
        ReqDatas.cllimit = MassEval.params.APILimit;
        ReqDatas.clshow = "hidden";
      }
      $.ajax({
        url: mw.util.wikiScript('api'),
        data:ReqDatas,
        success: function(data) {
          var CanContinue = MassEval.functions.checkEmergencyStop();
          if(!CanContinue) return MassEval.functions.checkPagesEvalDone(true);
          var query = data.query;
          if(!query) return MassEval.functions.getPageStatus(evaltheme, (index+1), onlymissingeval);
          var pages = query.pages;
          for(var id in pages){
            var pageinfo = pages[id];
            var title = pageinfo.title;
            var redirect = (pageinfo.redirect === "");
            var missing = (pageinfo.missing === "");
            var wikitexte = "";
            if(!missing) wikitexte = pageinfo.revisions[0]["*"];
            if(title == page.title){
              if(redirect){
                var links = pageinfo.links;
                if(links){
                  var getAllPagesInfos = function(info){
                    var pageinfos = [];
                    var pagedatas = MassEval.params.PageList;
                    for(var a=0,l=pagedatas.length;a<l;a++){
                      pageinfos.push(pagedatas[a][info]);
                    }
                    return pageinfos;
                  };
                  for(var a=0,l=links.length;a<l;a++){
                    var realtitle = links[a].title;
                    var alltitles = getAllPagesInfos("title");
                    if(alltitles.indexOf(realtitle)!==-1) return MassEval.functions.getPageStatus(evaltheme, (index+1));
                    var realtalktitle = MassEval.functions.getTalkPage(realtitle);
                    MassEval.params.PageList[index].redirectfrom = title;
                    MassEval.params.PageList[index].title = realtitle;
                    MassEval.params.PageList[index].talktitle = realtalktitle;
                    return MassEval.functions.getPageStatus(evaltheme, index, onlymissingeval);
                  }
                }
              }else if(missing){
                MassEval.params.PageList[index].pagemissing = 1;
              }else{
                var pageprops = pageinfo.pageprops;
                if(pageprops && pageprops.disambiguation === "") MassEval.params.PageList[index].disambig = true;
                var StubParams = MassEval.functions.getStubParams(wikitexte, evaltheme);
                for(var id in StubParams){
                  MassEval.params.PageList[index][id] = StubParams[id];
                }
                var categories = pageinfo.categories;
                if(categories && categories.length > 0){
                  var CatTemplate = MassEval.params.PortalCatTemplate;
                  var Prefix = CatTemplate.split("$1")[0];
                  var Suffix = CatTemplate.split("$1")[1];
                  var SuffixLength = Suffix.length;
                  MassEval.params.PageList[index].portals = [];
                  for(var a=0,l=categories.length;a<l;a++){
                    var thiscat = categories[a];
                    var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
                    var thisSuffix = pagetitle.substr((pagetitle.length-SuffixLength), SuffixLength);
                    if(pagetitle.indexOf(Prefix)===0 && thisSuffix === Suffix){
                      var portalName = pagetitle.split(Prefix).join("").split(Suffix).join("");
                      MassEval.params.PageList[index].portals.push(portalName);
                    }
                  }
                }
              }
            }else if(title ==  page.talktitle){
              if(missing){
                MassEval.params.PageList[index].talkmissing = 1;
              }else{
                var EvalParams = MassEval.functions.getEvalParams(wikitexte, evaltheme);
                for(var id in EvalParams){
                  MassEval.params.PageList[index][id] = EvalParams[id];
                }
              }
            }
          }
          if(onlymissingeval){
            if(MassEval.functions.setStubEvalDefaultParams(index, evaltheme)){
              MassEval.functions.fillBoardLine(index, evaltheme, true);
              MassEval.functions.checkFilterOptions();
            }
          }else{
            MassEval.functions.fillBoardLine(index, evaltheme, false);
            MassEval.functions.checkFilterOptions();
          }
          MassEval.functions.getPageStatus(evaltheme, (index+1), onlymissingeval);
        }
      });
    },
    setStubEvalDefaultParams : function(index, evaltheme){
      var show = false;
      var DefaultAVT = parseInt(document.getElementById("GlobalAddEvalAVTSelect").value);
      var DefaultIMP = parseInt(document.getElementById("GlobalAddEvalIMPSelect").value);
      var Infos = MassEval.params.PageList[index];
      var BEFORE = "BEF "+JSON.stringify(Infos);
      if(Infos.talkmissing == 1) show = true;
      if(Infos.evalAVT === null || typeof(Infos.evalAVT)==="undefined"){
        if(Infos.stub !== null) MassEval.params.PageList[index].evalAVT = 5;
        else MassEval.params.PageList[index].evalAVT = DefaultAVT;
        show = true;
      }
      if(Infos.evalIMP===null || typeof(Infos.evalIMP)==="undefined"){
        MassEval.params.PageList[index].evalIMP = DefaultIMP;
        show = true;
      }
      if(typeof(Infos.allIMP)==="undefined"){
        MassEval.params.PageList[index].allIMP = {};
        MassEval.params.PageList[index].allIMP[evaltheme] = DefaultIMP;
        show = true;
      }else if(typeof(Infos.allIMP[evaltheme])==="undefined"){
        MassEval.params.PageList[index].allIMP[evaltheme] = DefaultIMP;
        show = true;
      }
      return show;
    },
    checkPagesEvalDone : function(EmergencyStop){
      MassEval.functions.endPageAnalysis();
      MassEval.functions.checkFilterOptions();
      MassEval.functions.updateSortLink();
      MassEval.params.CatListRunning = false;
      if(EmergencyStop) MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
    },
    getStubParams : function(WT, evaltheme){
      var StubParams = {
        stub : null,
        stubWT : ""
      };
      var Reg = new RegExp("\\{\\{ *"+MassEval.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(MassEval.functions.ucFirst(MassEval.params.StubTemplate)) != -1) continue;
            if(thisparam.indexOf(MassEval.functions.lcFirst(MassEval.params.StubTemplate)) != -1) continue;
            if(thisparam.indexOf("=") == -1){
              var stubtheme = MassEval.functions.ucFirst(thisparam);
              if(!StubParams.stub) StubParams.stub = [];
              if(StubParams.stub.indexOf(stubtheme)==-1) StubParams.stub.push(stubtheme);
              var ExistingTheme = (typeof(MassEval.params.StubThemes[MassEval.functions.ucFirst(stubtheme)]) !== "undefined");
              var existingTheme = (typeof(MassEval.params.StubThemes[MassEval.functions.lcFirst(stubtheme)]) !== "undefined");
              if( !ExistingTheme && !existingTheme){
                var adjDatas = MassEval.functions.getAdjDatas(stubtheme);
                if(adjDatas.type === null){
                  MassEval.params.StubThemes[stubtheme] = { };
                }
              }
            }
          }
        }
      }
      StubParams.stubWT = Wikitext;
      return StubParams;
    },
    getEvalParams : function(WT, evaltheme){
      var EvalParams = {
        evalAVT : null,
        evalIMP : null,
        evalWT : "",
        haseval : false
      };
      var Reg = new RegExp("\\{\\{ *"+MassEval.params.EvalTemplate+"[^\\{]*\\}\\}", "ig");
      var matches = WT.match(Reg);
      var Wikitext = "";
      if(matches != null){
        EvalParams.haseval = true
        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=MassEval.params.Avancement.length;avt<avtlen;avt++){
                var thisavt = MassEval.params.Avancement[avt];
                if(AVT == thisavt.wiki.replace(/\W/g, "")) EvalParams.evalAVT = avt;
              }
            } 
          }
          for(var p=0,plen=implicitparams.length;p<plen;p++){
            var thisimplicitparam = implicitparams[p];
            for(var imp=0,implen=MassEval.params.Importance.length;imp<implen;imp++){
              var thisimp = MassEval.params.Importance[imp];
              if(thisimplicitparam.replace(/\W/g, "") == thisimp.wiki.replace(/\W/g, "")){
                var theme = MassEval.functions.getForEvalThemeAlias(implicitparams[(p-1)]);
                if(theme.toLowerCase() == evaltheme.toLowerCase()) EvalParams.evalIMP = imp;
                if(!EvalParams.allIMP) EvalParams.allIMP = {};
                EvalParams.allIMP[theme] = imp;
              }
            }
          }
        }
      }
      for(var theme in EvalParams.allIMP){
        var ExistingTheme = (MassEval.params.EvalThemes.indexOf(MassEval.functions.ucFirst(theme)) === -1);
        var existingTheme = (MassEval.params.EvalThemes.indexOf(MassEval.functions.lcFirst(theme)) === -1);
        if(!ExistingTheme && !existingTheme){
          MassEval.functions.createNewEvalTheme(theme, false);
          var EvalThemeSelect = document.getElementById("EvalThemeInput");
          MassEval.functions.createEvalThemeSelect(EvalThemeSelect, EvalThemeSelect.value);
        }
      }
      EvalParams.evalWT = Wikitext;
      return EvalParams;
    },
    getForEvalThemeAlias : function(theme){
      var UCtheme = MassEval.functions.ucFirst(theme);
      var LCtheme = MassEval.functions.lcFirst(theme);
      if(MassEval.params.EvalThemesAliases[UCtheme]) return MassEval.params.EvalThemesAliases[UCtheme];
      if(MassEval.params.EvalThemesAliases[LCtheme]) return MassEval.params.EvalThemesAliases[LCtheme];
      return theme;
    },
  // ------------------------------- Fonctions pour le chargement des thèmes -------------------------------
    getStubThemes : function(){
      if(Object.keys(MassEval.params.StubThemes).length>0) return MassEval.functions.checkPreliminaryLoadings();
      var lastStubThemes = MassEval.functions.localStorage.getItem("StubThemes");
      var lastStubAdjM = MassEval.functions.localStorage.getItem("StubAdjM");
      var lastStubAdjF = MassEval.functions.localStorage.getItem("StubAdjF");
      if(lastStubThemes && lastStubAdjM && lastStubAdjF){
        MassEval.params.StubThemes = JSON.parse(lastStubThemes);
        MassEval.params.StubAdjM = JSON.parse(lastStubAdjM);
        MassEval.params.StubAdjF = JSON.parse(lastStubAdjF);
        console.info(Object.keys(MassEval.params.StubThemes).length+" thèmes d'ébauche retrouvés, ainsi que "+MassEval.params.StubAdjM.length+" adjectifs masculins et "+MassEval.params.StubAdjF.length+" adjectifs féminins. [localStorage]");
        MassEval.params.StubThemesOK = true;
        return MassEval.functions.checkPreliminaryLoadings();
      }
      var stubthemepage = MassEval.params.StubThemesPage;
      MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
      $.ajax({
        url: mw.util.wikiScript('api'),
        data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:stubthemepage},
        success: function(data){
        var query = data.query;
        var page = query.pages[Object.keys(query.pages)[0]];        
        var Wikitext = page.revisions[0]["*"];
        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 =  MassEval.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 = [];
        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(allP.indexOf(target)!==-1 && typeof(p[al])==-1) p[al] = p[target];          
        }
        MassEval.params.StubAdjM = adjM.sort();
        MassEval.params.StubAdjF = adjF.sort();
        allP = Object.keys(p);
        for(var i=0,l=allP.length;i<l;i++){ allP[i] = MassEval.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[MassEval.functions.lcFirst(key)];
          MassEval.params.StubThemes[key] = P;
        }
        MassEval.functions.localStorage.setItem("StubThemes", JSON.stringify(MassEval.params.StubThemes));
        MassEval.functions.localStorage.setItem("StubAdjM", JSON.stringify(MassEval.params.StubAdjM));
        MassEval.functions.localStorage.setItem("StubAdjF", JSON.stringify(MassEval.params.StubAdjF));
        console.info(allP.length+" thèmes d'ébauche trouvés, ainsi que "+adjM.length+" adjectifs masculins et "+adjF.length+" adjectifs féminins.");
        MassEval.params.StubThemesOK = true;
        MassEval.functions.checkPreliminaryLoadings();
      }});
    },
    getEvalThemes : function(){
      if(MassEval.params.EvalThemes.length>0) return MassEval.functions.checkPreliminaryLoadings();
      var lastEvalThemes = MassEval.functions.localStorage.getItem("EvalThemes");
      var lastEvalThemesCat = MassEval.functions.localStorage.getItem("EvalThemesCat");
      var lastEvalThemesAliases = MassEval.functions.localStorage.getItem("EvalThemesAliases");
      if(lastEvalThemes && lastEvalThemesCat && lastEvalThemesAliases){
        MassEval.params.EvalThemes = JSON.parse(lastEvalThemes);
        MassEval.params.EvalThemesCat = JSON.parse(lastEvalThemesCat);
        MassEval.params.EvalThemesAliases = JSON.parse(lastEvalThemesAliases);
        console.info(MassEval.params.EvalThemes.length+" thèmes d'évaluation retrouvés, ainsi que "+Object.keys(MassEval.params.EvalThemesAliases).length+" alias. [localStorage]");
        MassEval.params.EvalThemesOK = true;
        return MassEval.functions.checkPreliminaryLoadings();
      }
      MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
      MassEval.functions.getAPIAllcategories({
        gacprefix : MassEval.params.EvalCategory,
        callback : function(R){
          var result = R.result;
          var CatList = Object.keys(result);
          for(var a=0,l=CatList.length;a<l;a++){
            var thiscat = result[CatList[a]];
            if(thiscat.missing==="") continue;
            var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
            var title = pagetitle;
            for(var p=0,plen=MassEval.params.EvalCatPrefixes.length;p<plen;p++){
              var EvalCatPrefix = MassEval.params.EvalCatPrefixes[p];
              title = title.split(EvalCatPrefix).join("");
            }
            if(title == pagetitle) continue;
            if(title.indexOf("/")!==-1 && MassEval.params.ManuEvalThemes.indexOf(title) === -1) continue;
            if(MassEval.params.FakeEvalThemes.indexOf(title)!==-1) continue;
            if(MassEval.params.EvalThemes.indexOf(title)!==-1) continue;
            MassEval.params.EvalThemes.push(title);            
          }
          if(MassEval.params.DefaultPortal && MassEval.params.EvalThemes.indexOf(MassEval.params.DefaultPortal)===-1) MassEval.params.EvalThemes.push(MassEval.params.DefaultPortal);
          for(var a=0,l=MassEval.params.MisplacedEvalThemes.length;a<l;a++){
            var thismanutheme = MassEval.params.MisplacedEvalThemes[a];
            if(MassEval.params.EvalThemes.indexOf(thismanutheme)===-1) MassEval.params.EvalThemes.push(thismanutheme);
          }
          MassEval.functions.getEvalThemesCats();
        }
      });
    },
    getEvalThemesCats : function(){
      var Page =  MassEval.params.EvalThemesUsusualCats;
      var DefaultCatTitle =  MassEval.params.EvalThemesDefaultCat;
      var NotDefaultCatTitle = MassEval.params.EvalThemesUnusualCatTemplate;
      $.ajax({
        url: mw.util.wikiScript('api'),
        data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:Page},
        success: function(data){
          var query = data.query;
          var page = query.pages[Object.keys(query.pages)[0]];        
          var Wikitext = page.revisions[0]["*"];
          var Lines = Wikitext.split("\n");
          var SpecialCat = {};
          for(var a=0,l=Lines.length;a<l;a++){
            var Line = Lines[a];
            if(Line.indexOf("=")===-1) continue;
            if(Line.indexOf("#")!==-1) continue;
            var Project = Line.split("=")[0];
            Project = Project.replace(/.*\|/g, "");
            Project = Project.replace(/^ */g, "");
            Project = Project.replace(/ *$/g, "");
            if(MassEval.params.EvalThemes.indexOf(Project)===-1 && MassEval.params.EvalThemes.indexOf(MassEval.functions.lcFirst(Project))===-1){
              MassEval.params.EvalThemes.push(Project);
            }
            var CatTitle = Line.split("=")[1];
            CatTitle = CatTitle.replace(/^ /g, "");
            CatTitle = CatTitle.replace(/ $/g, "");
            SpecialCat[Project] = CatTitle;
          }
          for(var t=0,tlen=MassEval.params.EvalThemes.length;t<tlen;t++){
            var theme = MassEval.params.EvalThemes[t];
            var Theme = MassEval.functions.ucFirst(theme);
            if(typeof(SpecialCat[Theme])!=="undefined") MassEval.params.EvalThemesCat[theme] = NotDefaultCatTitle.split("$1").join(SpecialCat[Theme]);
            else MassEval.params.EvalThemesCat[theme] = DefaultCatTitle.split("$1").join(MassEval.functions.ucFirst(theme));
          }
          MassEval.params.EvalThemes.sort();
          MassEval.functions.getEvalThemesAliases();
        }
      });
    },
    getEvalThemesAliases : function(){
      var Page = MassEval.params.EvalThemesAliasesPage;
      $.ajax({
        url: mw.util.wikiScript('api'),
        data: {format:'json',action:'query',prop:'revisions',rvprop:'content',rvlimit:1,titles:Page},
        success: function(data){
          var query = data.query;
          var page = query.pages[Object.keys(query.pages)[0]];        
          var Wikitext = page.revisions[0]["*"];
          var Lines = Wikitext.split("\n");
          for(var a=0,l=Lines.length;a<l;a++){
            var Line = Lines[a];
            if(Line.indexOf("=")===-1) continue;
            if(Line.indexOf("#")!==-1) continue;
            if(Line.indexOf("}")!==-1) continue;
            if(Line.indexOf("{")!==-1) continue;
            var Aliases = Line.split("=")[0];
            Aliases = Aliases.replace(/^ *\|/g, "");
            Aliases = Aliases.replace(/ *$/g, "");
            Aliases = Aliases.replace(/ +\|/g, "|");
            Aliases = Aliases.replace(/\| +/g, "|");
            Aliases = Aliases.split("|");
            var Theme = Line.split("=")[1];
            Theme = Theme.replace(/^ /g, "");
            Theme = Theme.replace(/ $/g, "");
            for(var al=0,allen=Aliases.length;al<allen;al++){
              var Alias = MassEval.functions.ucFirst(Aliases[al]);
              var alias = MassEval.functions.lcFirst(Aliases[al]);
              MassEval.params.EvalThemesAliases[Alias] = Theme;
              MassEval.params.EvalThemesAliases[alias] = Theme;
            }
          }
          console.info(MassEval.params.EvalThemes.length+" thèmes d'évaluation trouvés, ainsi que "+Object.keys(MassEval.params.EvalThemesAliases).length+" alias.");
          MassEval.functions.localStorage.setItem("EvalThemes", JSON.stringify(MassEval.params.EvalThemes));
          MassEval.functions.localStorage.setItem("EvalThemesCat", JSON.stringify(MassEval.params.EvalThemesCat));
          MassEval.functions.localStorage.setItem("EvalThemesAliases", JSON.stringify(MassEval.params.EvalThemesAliases));
          MassEval.params.EvalThemesOK = true;
          MassEval.functions.checkPreliminaryLoadings();
        }
      });
    },
    createNewEvalTheme : function(theme, category){
      MassEval.params.EvalThemes.push(theme);
      MassEval.params.EvalThemesCat[theme] = category;
      MassEval.functions.localStorage.setItem("EvalThemes", JSON.stringify(MassEval.params.EvalThemes));
      MassEval.functions.localStorage.setItem("EvalThemesCat", JSON.stringify(MassEval.params.EvalThemesCat));
    },
    createEvalThemeSelect : function(Select, defaultoption, addemptyoption){
      if(!Select){
        Select = document.createElement('select');
        Select.className = "IMPtheme";
      }else{
        while(Select.firstChild) Select.removeChild(Select.firstChild);
      }
      $(Select).addClass("EvalThemeSelect");
      var Themes = MassEval.functions.sortTextList(MassEval.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 = MassEval.functions.ucFirst(title);
        opt.value = title;
        if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
        Select.appendChild(opt);
      }
      return Select;
    },
    getPortalList : function(){
      if(MassEval.params.PortalList.length > 0) return MassEval.functions.checkPreliminaryLoadings();
      var lastPortalList = MassEval.functions.localStorage.getItem("PortalList");
      if(lastPortalList){
        MassEval.params.PortalList = JSON.parse(lastPortalList);
        console.info(MassEval.params.PortalList.length+" catégories de portail retrouvées. [localStorage]");
        MassEval.params.PortalListOK = true;
        return MassEval.functions.checkPreliminaryLoadings();
      }
      MassEval.functions.alertControl("getthemes", MassEval.texts.AlertMsgThemes, "Running");
      var CatTemplate = MassEval.params.PortalCatTemplate;
      var Prefix = CatTemplate.split("$1")[0];
      var Suffix = CatTemplate.split("$1")[1];
      var SuffixLength = Suffix.length;
      MassEval.functions.getAPIAllcategories({
        gacprefix : Prefix,
        callback : function(R){
          var result = R.result;
          var CatList = Object.keys(result);
          for(var a=0,l=CatList.length;a<l;a++){
            var thiscat = result[CatList[a]];
            if(thiscat.missing==="") continue;
            var pagetitle = thiscat.title.split(mw.config.get('wgFormattedNamespaces')[14]+':').join("");
            var thisSuffix = pagetitle.substr((pagetitle.length-SuffixLength), SuffixLength);
            if(thisSuffix !== Suffix) continue;
            var portalName = pagetitle.split(Prefix).join("").split(Suffix).join("");
            if(MassEval.params.PortalList.indexOf(portalName)===-1) MassEval.params.PortalList.push(portalName);
          }
          console.info(MassEval.params.PortalList.length+" catégories de portail trouvées.");
          MassEval.functions.localStorage.setItem("PortalList", JSON.stringify(MassEval.params.PortalList));
          MassEval.params.PortalListOK = true;
          MassEval.functions.checkPreliminaryLoadings();
        }
      });
    },
    createPortalSelect : function(defaultvalue){
      var Select = document.getElementById("PortalInput");
      if(!Select){
        Select = document.createElement('select');
        Select.id = "PortalInput";
        Select.name = "PortalInput";
        $(Select).addClass("PortalSelect");
        Select.title = MassEval.texts.Portal;
      }else{
        while(Select.firstChild) Select.removeChild(Select.firstChild);
      }
      var Portals = MassEval.functions.sortTextList(MassEval.params.PortalList);
      if(Portals.length > 0){
        var emptyopt = Select.appendChild(document.createElement('option'));
        emptyopt.innerHTML = "";
        emptyopt.value = "";
        if(typeof(defaultoption)==="undefined") emptyopt.selected = "selected";
      }
      for(var a=0,l=Portals.length;a<l;a++){
        var title = Portals[a];
        var opt = Select.appendChild(document.createElement('option'));
        opt.innerHTML = MassEval.functions.ucFirst(title);
        opt.value = title;
        if(typeof(defaultoption)!=="undefined" && title == defaultoption) opt.selected = "selected";
      }
      MassEval.functions.updatePortalSelect();
      return Select;
    },
    updatePortalSelect : function(){
      var EvalThemeSelect = document.getElementById("EvalThemeInput");
      var PortalSelect = document.getElementById("PortalInput");
      if(!EvalThemeSelect || !PortalSelect) return;
      var EvalTheme = EvalThemeSelect.value;
      var PortalList = MassEval.params.PortalList;
      MassEval.functions.disableThings(["PortalInput"], true);
      PortalSelect.style.borderColor = "";
      if(PortalList.indexOf(MassEval.functions.ucFirst(EvalTheme))!==-1){
        PortalSelect.value = MassEval.functions.ucFirst(EvalTheme);
      }else if(PortalList.indexOf(MassEval.functions.lcFirst(EvalTheme))!==-1){
        PortalSelect.value = MassEval.functions.lcFirst(EvalTheme);
      }else{
        PortalSelect.value = "";
        MassEval.functions.disableThings(["PortalInput"], false);
        PortalSelect.style.borderColor = "red";
      }
    },
    getPortalSelectValue : function(){
      var PortalSelect = document.getElementById("PortalInput");
      if(!PortalSelect) return false;
      return PortalSelect.value;
    },
    getAPIUserInfos : function(){
      var lastTimeCorrection = MassEval.functions.localStorage.getItem("TimeCorrection");
      var lastAPILimit = MassEval.functions.localStorage.getItem("APILimit");
      if(lastTimeCorrection && lastAPILimit){
        MassEval.params.TimeCorrection = parseInt(JSON.parse(lastTimeCorrection));
        console.info("Correction des horaires "+MassEval.params.TimeCorrection+" retrouvée. [localStorage]");
        MassEval.params.APILimit = parseInt(JSON.parse(lastAPILimit));
        console.info("Limite API "+MassEval.params.APILimit+" retrouvée. [localStorage]");
        MassEval.params.UserInfosOK = true;
        return MassEval.functions.checkPreliminaryLoadings();
      }
      $.ajax({url: mw.util.wikiScript('api'),data:{format:'json',action:'query',meta:'userinfo',uiprop:'options|rights'},dataType:'json'}).then(function(data) {
        var query = data.query;
        if(query){
          var userinfo = query.userinfo;
          if(userinfo){
            var options = userinfo.options;
            if(options){
              var timecorrection = options.timecorrection;
              if(timecorrection){
                timecorrection = parseInt(timecorrection.replace(/.*\|/g, ""));  // "Offset|-75"
                if(!isNaN(timecorrection)){
                  MassEval.params.TimeCorrection = timecorrection;
                  console.info("Correction des horaires "+MassEval.params.TimeCorrection+" trouvée.");
                  MassEval.functions.localStorage.setItem("TimeCorrection", MassEval.params.TimeCorrection);
                }
              }
            }
            var rights = userinfo.rights;
            if(rights){
              var apihighlimits = (rights.indexOf("apihighlimits")!==-1);
              if(apihighlimits) MassEval.params.APILimit = 5000;
              else MassEval.params.APILimit = 500;
              console.info("Limite API "+MassEval.params.APILimit+" trouvée.");
              MassEval.functions.localStorage.setItem("APILimit", MassEval.params.APILimit);
            }
          }
        }
        MassEval.params.UserInfosOK = true;
        MassEval.functions.checkPreliminaryLoadings();
      });
    },
    checkPreliminaryLoadings : function(){
      var PARAMS = MassEval.params;
      var EvalThemeSelect = document.getElementById("EvalThemeInput");
      var Cond = PARAMS.LaunchCondition;
      if(PARAMS.EvalThemesOK && PARAMS.PortalListOK && !PARAMS.EvalThemeStuffsOK){
        MassEval.params.EvalThemeStuffsOK = true;
        MassEval.functions.createEvalThemeSelect(EvalThemeSelect, MassEval.params.DefaultPortal);
        MassEval.functions.createPortalSelect(MassEval.params.DefaultPortal);
        MassEval.functions.updateEvalTable(EvalThemeSelect.value);
        MassEval.functions.disableThings(["EvalThemeInput"], false);
      }
      if(PARAMS.EvalThemesOK && PARAMS.OptionsSubPageOK && !PARAMS.OptionsStuffsOK){
        MassEval.params.OptionsStuffsOK = true;
        MassEval.functions.disableThings(["GlobalOptionsInput"], false);
        var taboptionlink = document.getElementById("optionlinkintab");
        if(taboptionlink) $(taboptionlink).removeClass("disabledoptionlink");
      }
      if(PARAMS.StubThemesOK && PARAMS.EvalThemesOK && PARAMS.BeforeStubTemplatesOK && PARAMS.PortalListOK && !PARAMS.DatasStuffsOK){
        MassEval.params.DatasStuffsOK = true;
        var datalinkintab = document.getElementById("datalinkintab");
        if(datalinkintab) $(datalinkintab).removeClass("disableddatlink");
      }
      if(PARAMS.StubThemesOK && PARAMS.EvalThemesOK && PARAMS.PortalListOK && PARAMS.CatSubPageCountOK && PARAMS.UserInfosOK && !PARAMS.AllStuffsOK){
        MassEval.params.AllStuffsOK = true;
        MassEval.functions.disableThings([ "SubCatsCheckBox"], false);
        MassEval.functions.disableThings([ "GlobalVerifInput","GlobalAddEvalInput"], (Cond === 2));
        MassEval.functions.alertControl("getthemes");
        if(Cond === 4) MassEval.functions.getThesePagesStatus([mw.config.get('wgTitle')]);
      }
    },
  // ------------------------------- Fonctions pour le chargement des modèles à mettre avant le bandeau d'ébauche -------------------------------
    getBeforeStubTemplates : function(){
      if(MassEval.params.BeforeStubTemplatesOK) return; 
      var lastBeforeStubTemplates = MassEval.functions.localStorage.getItem("BeforeStubTemplates");
      if(lastBeforeStubTemplates){
        MassEval.params.BeforeStubTemplates = JSON.parse(lastBeforeStubTemplates);
        console.info(MassEval.params.BeforeStubTemplates.length + " modèles pré-{{Ébauche}} trouvés (redirects inclus). [localStorage]");
        MassEval.params.BeforeStubTemplatesOK = true 
        return;
      }
      var Cats = MassEval.params.BeforeStubTemplatesCats;
      for(var a=0,l=Cats.length;a<l;a++){
        var cat = Cats[a];
        MassEval.params.BeforeStubTemplatesReq++
        MassEval.functions.getAPICategorymembers({
          title      : (mw.config.get("wgFormattedNamespaces")[14]+":"+cat),
          cmprop     : 'title',
          cmtype     : 'page',
          callback   : function(R){
            MassEval.params.BeforeStubTemplatesReq--
            var result = R.result;
            for(var pi in R.result){
              var pageinfo = R.result[pi];
              var title = pageinfo.title;
              var ns = parseInt(pageinfo.ns);
              if(ns == 10){
                title = MassEval.functions.getNamespaceInfoFromPage(title, "PageName");
                if(MassEval.params.BeforeStubTemplates.indexOf(title)===-1) MassEval.params.BeforeStubTemplates.push(title);
              }
            }
            if(MassEval.params.BeforeStubTemplatesReq ===0){
              MassEval.functions.getBeforeStubTemplatesRedirects();
            }
          }
        });         
      }
    },
    getBeforeStubTemplatesRedirects : function(){
      var AddNsName = function(t){ return (mw.config.get("wgFormattedNamespaces")[10]+":"+t); }
      var BeforeStubTemplates = MassEval.functions.makeGroupsFromArray(MassEval.params.BeforeStubTemplates, 50, AddNsName);
      for(var a=0,l=BeforeStubTemplates.length;a<l;a++){
        MassEval.params.BeforeStubTemplatesReq++
        MassEval.functions.getAPILinkshere({
          title       : (BeforeStubTemplates[a].join("|")),
          lhshow      : 'redirect',
          lhprop      : 'title',
          lhnamespace : 10,
          callback: function(R){
            MassEval.params.BeforeStubTemplatesReq--
            var result = R.result;
            for(var page in result){
              var pageinfo = result[page];
              var linkshere = pageinfo.linkshere;
              if(linkshere){
                for(var item in linkshere){
                  var iteminfo = linkshere[item];
                  var title = iteminfo.title;
                  var ns = iteminfo.ns;
                  if(ns === 10){
                    title = MassEval.functions.getNamespaceInfoFromPage(title, "PageName");
                    if(MassEval.params.BeforeStubTemplates.indexOf(title)===-1) MassEval.params.BeforeStubTemplates.push(title);
                  }
                }
              }
            }
            if(MassEval.params.BeforeStubTemplatesReq ===0){
              MassEval.params.BeforeStubTemplates.sort();
              console.info(MassEval.params.BeforeStubTemplates.length + " modèles pré-{{Ébauche}} trouvés (redirects inclus).");
             // alert("MassEval.params.BeforeStubTemplates :\n\n" + MassEval.params.BeforeStubTemplates.join("\n")); 
              MassEval.functions.localStorage.setItem("BeforeStubTemplates", JSON.stringify(MassEval.params.BeforeStubTemplates));
              MassEval.params.BeforeStubTemplatesOK = true; 
            }
          }
        });
      }
    },
  // ------------------------------- Fonctions pour l'onglet des données -------------------------------
    openDatasForm : function(){
      var DatasDiv = document.getElementById("fieldsetDatasContainer");
      var DatasFS = document.getElementById("fieldsetDatas");
      if(!DatasDiv || !DatasFS) return;
      if(DatasDiv.style.display != "none"){
        return MassEval.functions.closeDatasForm();
      }else{
        DatasDiv.style.display = "";
        var Legend = DatasFS.appendChild(document.createElement('legend'));
        Legend.innerHTML = MassEval.texts.GoDatasText;
        var P = DatasFS.appendChild(document.createElement('p'));
        P.style.textAlign = "center";
        var ULs = [
          DatasFS.appendChild(MassEval.functions.createEvalUL("evaldataUL")),
          DatasFS.appendChild(MassEval.functions.createStubUL("stubdataUL")),
          DatasFS.appendChild(MassEval.functions.createDiversUL("divdataUL")),
          DatasFS.appendChild(MassEval.functions.createRAZUL("RAZdataUL")) 
        ];
        for(var a=0,l=ULs.length;a<l;a++){
          MassEval.functions.setColumnsWidth(ULs[a].getElementsByTagName('ul')[0]);
        }
        MassEval.functions.createToggleButtons(P, ULs, "Datas");
      }
    },
    createDataSimple : function(UL, Data){
      var LI = UL.appendChild(document.createElement('li'));
      $(LI).addClass('DataLI');
      var Label = LI.appendChild(document.createElement('label'));
      Label.innerHTML = MassEval.texts[("OPTION"+Data)] || Data;
      LI.appendChild(document.createTextNode(' : '));
      var Span = LI.appendChild(document.createElement('span'));
      $(Span).addClass('DataInfo');
      Span.innerHTML = JSON.stringify(MassEval.params[Data]);
    },
    createDataMultiple : function(UL, Data){
      var multiple = MassEval.params[Data];
      var LI = UL.appendChild(document.createElement('li'));
      $(LI).addClass('DataLI');
      var Label = LI.appendChild(document.createElement('label'));
      Label.innerHTML = MassEval.texts[("OPTION"+Data)] || Data;
      LI.appendChild(document.createTextNode(' : '));
      var subUL = LI.appendChild(document.createElement('ul'));
      $(subUL).addClass('DatasubUL');
      for(var id in multiple){
        if(multiple.hasOwnProperty(id)){
          var subLI = subUL.appendChild(document.createElement('li'));
          var SpanWrapper = subLI.appendChild(document.createElement('span'));
          if(typeof(parseInt(id)) !== "number" || (""+parseInt(id)) === "NaN"){
            var Label = SpanWrapper.appendChild(document.createElement('label'));
            Label.innerHTML = MassEval.texts[("OPTION"+id)] || id;
            SpanWrapper.appendChild(document.createTextNode(' : '));
          }
          var Span = SpanWrapper.appendChild(document.createElement('span'));
          $(Span).addClass('DataInfo');
          Span.style.whiteSpace = "nowrap";
          Span.innerHTML = JSON.stringify(multiple[id]);
        }
      }
    },
    createEvalUL : function(ID){
      var Div = document.createElement('div');
      Div.id = ID;
      var UL = Div.appendChild(document.createElement('ul'));
      var Datas = [ 
        {name:"EvalTemplate"},
        {name:"EvalThemes",type:"multiple"},
        {name:"EvalThemesAliasesPage"},
        {name:"EvalThemesAliases",type:"multiple"},
        {name:"EvalCategory"},
        {name:"EvalCatPrefixes"},
        {name:"EvalThemesDefaultCat"},
        {name:"EvalThemesUsusualCats"},
        {name:"EvalThemesUnusualCatTemplate"},
        {name:"EvalCatsPrefixes"},
        {name:"EvalCatsCommonPrefix"},
        {name:"EvalThemesCat",type:"multiple"},
        {name:"MisplacedEvalThemes",type:"multiple"},
        {name:"PortalCatTemplate"},
        {name:"PortalList",type:"multiple"},
        {name:"Avancement",type:"multiple"},
        {name:"Importance",type:"multiple"},
      ];
      for(var a=0,l=Datas.length;a<l;a++){
        if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
        else MassEval.functions.createDataSimple(UL, Datas[a].name);
      }
      return Div;
    },
    createStubUL : function(ID){
      var Div = document.createElement('div');
      Div.id = ID;
      var UL = Div.appendChild(document.createElement('ul'));
      var Datas = [ 
        {name:"StubTemplate"},
        {name:"StubThemesPage"},
        {name:"StubThemes",type:"multiple"},
        {name:"StubAdjM",type:"multiple"},
        {name:"StubAdjF",type:"multiple"},
      ];
      for(var a=0,l=Datas.length;a<l;a++){
        if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
        else MassEval.functions.createDataSimple(UL, Datas[a].name);
      }
      return Div;
    },
    createDiversUL : function(ID){
      var Div = document.createElement('div');
      Div.id = ID;
      var UL = Div.appendChild(document.createElement('ul'));
      MassEval.params.MissingTexts = MassEval.functions.getMissingTexts();
      MassEval.params.UnusedTexts = MassEval.functions.getUnusedTexts();
      var Datas = [ 
        {name:"MissingTexts",type:"multiple"},
        {name:"UnusedTexts",type:"multiple"},
        {name:"BeforeStubTemplatesCats"},
        {name:"BeforeStubTemplates",type:"multiple"},
        {name:"ModesMap",type:"multiple"},
        {name:"CurrentHeights"},
        {name:"SortOptions"},
        {name:"BorderStyles"},
        {name:"SizeUnits"},
        {name:"DivIDsToPreview"},
        {name:"TalkSubPagesToAvoid"},
        {name:"Accents",type:"multiple"},
        {name:"FontFamilies",type:"multiple"},
        {name:"EvalCatAllpages"},
        {name:"EvalCatStubpages"},
        {name:"SpecialpageName"},
        {name:"OptionsSubPage"},
        {name:"TestPage"},
        {name:"APILimit"},
        {name:"TimeCorrection"},
        {name:"localStorageExpiry"},
        {name:"ChangesToMakeDelay"},
      ];
      for(var a=0,l=Datas.length;a<l;a++){
        if(Datas[a].type === "multiple") MassEval.functions.createDataMultiple(UL, Datas[a].name);
        else MassEval.functions.createDataSimple(UL, Datas[a].name);
      }
      return Div;
    },
    createRAZUL : function(ID){
      var Div = document.createElement('div');
      Div.id = ID;
      var UL = Div.appendChild(document.createElement('ul'));
      var Items = MassEval.params.localStorageItems;
      for(var a=0,l=Items.length;a<l;a++){
        var itemname = Items[a];
        var LI = UL.appendChild(document.createElement('li'));
        $(LI).addClass('DataLI');
        var RAZInput = LI.appendChild(MassEval.functions.createInput({type:"button",name:itemname,value:MassEval.texts.GoDatasRAZText,title:MassEval.texts.GoDatasRAZTitle}));
        RAZInput.onclick = function(){
          localStorage.removeItem(this.name);
          localStorage.removeItem((this.name+"_TS"));
          delete MassEval.params.localStorageTimestamps[(this.name+"_TS")];
        }
        var Label = LI.appendChild(document.createElement('label'));
        Label.setAttribute("for", itemname);
        Label.innerHTML = " <code>"+itemname+"</code> : "+(MassEval.texts[("OPTION"+itemname)] || itemname);
        Label.title = MassEval.functions.calculateRemainingTime(MassEval.params.localStorageTimestamps[(itemname+"_TS")]);
        var multiple = MassEval.params[itemname];
        if(typeof(multiple)==="object"){
          var subUL = LI.appendChild(document.createElement('ul'));
          $(subUL).addClass('DatasubUL');
          for(var id in multiple){
            if(multiple.hasOwnProperty(id)){
              var subLI = subUL.appendChild(document.createElement('li'));
              var SpanWrapper = subLI.appendChild(document.createElement('span'));
              if(typeof(parseInt(id)) !== "number" || (""+parseInt(id)) === "NaN"){
                var Label = SpanWrapper.appendChild(document.createElement('label'));
                Label.innerHTML = MassEval.texts[("OPTION"+id)] || id;
                SpanWrapper.appendChild(document.createTextNode(' : '));
              }
              var Span = SpanWrapper.appendChild(document.createElement('span'));
              $(Span).addClass('DataInfo');
              Span.style.whiteSpace = "nowrap";
              Span.innerHTML = JSON.stringify(multiple[id]);
            }
          }
        }else{
          LI.appendChild(document.createTextNode(" : "));
          var Span = LI.appendChild(document.createElement('span'));
          $(Span).addClass('DataInfo');
          Span.innerHTML = JSON.stringify(multiple);
        }
      }
      return Div;
    },
    calculateRemainingTime(timestamp){
      if(typeof(timestamp)!== "number") return false;
      var now = new Date().getTime();
      var remaining = ( (MassEval.params.localStorageExpiry*60*60*1000) - (now-timestamp));
      var Hremaining = Math.floor(remaining / (60*60*1000));
      var Mremaining = Math.floor( (remaining-(Hremaining*60*60*1000)) / (60*1000));
      var template = MassEval.texts.localStorageExpiryT; // "$h heures et $m mimutes",
      return template.split("$h").join(Hremaining).split("$m").join(Mremaining)
    },
    getMissingTexts : function(){
      var missingExplaination = {};
      for(var text in MassEval.texts){
        if(text.indexOf("OPTION")!=-1) continue;
        var opt = "OPTION"+text;
        if(typeof(MassEval.texts[opt])!="string") missingExplaination[('OPTION'+text)] = MassEval.texts[text];
      }
      for(var text in MassEval.styles){
        var opt = "OPTION"+text;
        if(typeof(MassEval.texts[opt])!="string") missingExplaination[('OPTION'+text)] = MassEval.styles[text];
      }
      return missingExplaination;
    },
    getUnusedTexts : function(){
      var NOTunused = ["params","styles","texts","moreparams","evaldataUL","stubdataUL","divdataUL","RAZdataUL","UnusedTexts"];
      var unusedExplaination = {};
      var Texts = MassEval.texts;
      var Styles = MassEval.styles;
      var Params = MassEval.params;
      for(var text in Texts){
        if(text.indexOf("OPTION")===-1) continue;
        var thisExpl = text.substr(6, (text.length-6));
        if(NOTunused.indexOf(thisExpl)!==-1) continue;
        if(typeof( Texts[thisExpl])!=="undefined") continue;
        if(typeof(Styles[thisExpl])!=="undefined") continue;
        if(typeof(Params[thisExpl])!=="undefined") continue;
        unusedExplaination[text] = Texts[text];
      }
      return unusedExplaination;
    },
    setColumnsWidth : function(UL){
      if(!UL) return;
      var subULs = UL.getElementsByTagName('ul');
      for(var a=0,l=subULs.length;a<l;a++){
        var subUL = subULs[a];
        var max = 0;
        var subLIs = subUL.getElementsByTagName('li');
        for(var li=0,lilen=subLIs.length;li<lilen;li++){
          var W = $(subLIs[li].firstChild).width();
          if(W > max) max = W;
        }
        subUL.setAttribute("style", "-webkit-columns:"+(max+5)+"px;-moz-columns:"+(max+5)+"px;columns:"+(max+5)+"px;");
        var toggleLink = subUL.parentNode.insertBefore(MassEval.functions.createLink(null,{text:MassEval.texts.Show,title:MassEval.texts.ShowTip,href:"javascript:;"}), subUL);
        toggleLink.style.marginLeft = "1.5em";
        toggleLink.onclick = function(){
          if(this.innerHTML == MassEval.texts.Show){
            this.nextSibling.style.display = "";
            this.innerHTML = MassEval.texts.Hide;
            this.title = MassEval.texts.HideTip;
          }else{
            this.nextSibling.style.display = "none";
            this.innerHTML = MassEval.texts.Show;
            this.title = MassEval.texts.ShowTip;
          }
        }
        subUL.style.display = "none";
      }
    },
    closeDatasForm : function(){
      var DatasDiv = document.getElementById("fieldsetDatasContainer");
      var DatasFS = document.getElementById("fieldsetDatas");
      if(!DatasDiv || !DatasFS) return;
      DatasDiv.style.display = "none";
      while(DatasFS.firstChild){  DatasFS.removeChild(DatasFS.firstChild); }
    },
  // ------------------------------- Fonctions pour la personnalisation automatique -------------------------------
    getUserSubPage : function() {
      if(MassEval.params.OptionsSubPageOK) return;
      var Page = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
      $.ajax({
        url: mw.util.wikiScript('api'),
        data: { format:'json',action:'query',prop:'revisions|info',rvlimit:1,rvprop:'content',titles:Page},
        success: function(data) {
          var query = data.query;
          if(!query){
            MassEval.params.OptionsSubPageOK = true;
            return MassEval.functions.checkPreliminaryLoadings();
          }
          var pageinfo = query.pages[Object.keys(query.pages)[0]];
          var missing = (pageinfo.missing === "");
          if(missing){
            MassEval.params.OptionsSubPageOK = true;
            return MassEval.functions.checkPreliminaryLoadings();
          } 
          var Text = pageinfo.revisions[0]["*"];
          var CommentStart = MassEval.params.OptionsPageCommentStart;
          var CommentEnd = MassEval.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, "");
              MassEval.params.OptionsMoreParams = MoreParams;
              if(MoreParams) console.info("Trouvé personnalisation supplémentaire.");
              else console.info("Pas trouvé de personnalisation supplémentaire.");
            }
          }
          MassEval.params.OptionsSubPageOK = true;
          MassEval.functions.checkPreliminaryLoadings();
        }
      });
    },
    setDefaultParams : function() {
      MassEval.params.DEFAULTparams = {};
      var EditableParams = MassEval.params.EditableParams;
      for(var a=0,l=EditableParams.length;a<l;a++){
        var paramname = EditableParams[a];
        if(typeof(MassEval.params[paramname])!=="undefined") MassEval.params.DEFAULTparams[paramname] = MassEval.params[paramname];
      }
      MassEval.params.DEFAULTtexts = {};
      var Texts = MassEval.texts;
      for(var textname in Texts){
        MassEval.params.DEFAULTtexts[textname] = Texts[textname];
      }
      MassEval.params.DEFAULTstyles = {};
      var Styles = MassEval.styles;
      for(var stylename in Styles){
        MassEval.params.DEFAULTstyles[stylename] = Styles[stylename];
      }
    },
    getCustomParams : function() {
      var customFunc = ["Lang", "Site", "User"];
      for(var a=0,l=customFunc.length;a<l;a++){
        var funcName = "MassEval_"+customFunc[a]+"Custom";        
        if(typeof(window[funcName])==="function") try{ window[funcName](); }catch(e){ console.warn(funcName+"()\n------\n"+e.message); }
      }
    },
    updateOptions : function(){
      var F = document.getElementById("fieldsetOptions");
      if(!F) return;
      var NewParamText = [];
      var MoreParams = "";
      var ULs = F.getElementsByTagName('ul');
      var foundIssues = [];
      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];
          if($(LI).hasClass("dummyLI")) continue;
          var More = MassEval.functions.getFirstElementByName(LI, ["textarea"], "moreparams");
          if(More){
            MoreParams = More.value;
          }else{
            var Type = MassEval.functions.getFirstElementByName(LI, ["input"], "type");
            var Name = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
            var DefaultNode = MassEval.functions.getFirstElementByName(LI, ["input",], "default");
            var ActualNode = MassEval.functions.getFirstElementByName(LI, ["textarea","select","input"], "actual");
            if(!Type || !Name || !DefaultNode || !ActualNode){
              if(!Type) console.log("item Type manquant : "+type+" "+i);
              if(!Name) console.log("item Name manquant : "+type+" "+i);
              if(!DefaultNode) console.log("item DefaultNode manquant : "+type+" "+i);
              if(!ActualNode) console.log("item ActualNode manquant : "+type+" "+i);              
              continue;
            }
            var Test = MassEval.functions.checkThatModifiedOption(LI, ActualNode, ActualNode.value);
            if(Test) foundIssues.push(Test);
            Type = Type.value;
            Name = Name.value;
            var Actual  = (Type=="boolean" ? ActualNode.checked         : ActualNode.value);
            var Default = (Type=="boolean" ? (DefaultNode.value == "true") : DefaultNode.value);
            if(Type=="string" && (Default.split("/n").length-1) === 0) Actual = Actual.split("/n").join("");
            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("  MassEval.functions.customize('"+type+"','"+Name+"',"+Actual+");\n");
          }
        }
      }
      if(foundIssues.length > 0) return MassEval.functions.alertControl(("foundoptionissue_"+a+"_"+i), foundIssues.join("</br>"), "Warning");
      else MassEval.functions.alertControl(("foundoptionissue_"+a+"_"+i));
      NewParamText = "\n"+NewParamText.join("\n")+'\n\n'+MassEval.params.OptionsPageCommentStart+MoreParams+MassEval.params.OptionsPageCommentEnd;
      NewParamText = MassEval.params.OptionsPageTemplate.split("$1").join(NewParamText);
      // return alert(NewParamText);
      MassEval.functions.saveOptions(NewParamText, MoreParams);
    },
    saveOptions : function(NewParamText, MoreParams){
      var title = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
      MassEval.functions.alertControl("saveoptions", MassEval.texts.AlertMsgSaveParams.split("$page").join(title), "Running");
      $.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: MassEval.texts.SaveParamsResume.split("$docpage").join(MassEval.params.DocPage),
            basetimestamp: "now",
            format: 'json',
            token: data.query.tokens.csrftoken
          },
          dataType: 'json',
          success: function(data){
            var DEFAULTparams = MassEval.params.DEFAULTparams;
            for(var dp in DEFAULTparams){ MassEval.params[dp] = DEFAULTparams[dp]; }
            var DEFAULTstyles = MassEval.params.DEFAULTstyles;
            for(var ds in DEFAULTstyles){ MassEval.styles[ds] = DEFAULTstyles[ds]; }
            var DEFAULTtexts = MassEval.params.DEFAULTtexts;
            for(var dt in DEFAULTtexts){ MassEval.texts[dt] = DEFAULTtexts[dt]; }
            try{
              eval(NewParamText);
              window.MassEval_UserCustom();
              MassEval.functions.setCSSstyles();
            }catch(e){ console.error(e.message); }
            MassEval.params.OptionsMoreParams = MoreParams;
            if(MassEval.params.SearchForPortalTag) $(document.body).removeClass("hideportals");
            else $(document.body).addClass("hideportals");
            MassEval.functions.alertControl("saveoptions");
            MassEval.functions.openOptionsForm(true);
          }
        });
      });
    }, 
    customize : function(type, optname, optvalue){
      if(!type || !optname || typeof(optvalue)==="undefined") return;
      if(typeof(type)!=="string" || typeof(optname)!=="string") return; 
      if(['params','texts','styles'].indexOf(type)===-1) return;
      if(typeof(optvalue)!=="string" && typeof(optvalue)!=="number" && typeof(optvalue)!=="boolean") return;      
      var Default = MassEval.params[("DEFAULT"+type)];
      if(typeof(Default)!=="object") return;
      Default = Default[optname];
      if(typeof(Default)==="undefined") return;
      MassEval[type][optname] = optvalue;
      var p = { texts:"texte",params:"paramètre",styles:"style"};
      var msg = "Personnalisation " + p[type] + " \""+optname+"\" : "
              + (typeof(Default)==="string" ? "\""+Default+"\" → \""+optvalue+"\"" : Default+" → "+optvalue)
      console.info(msg);
    }, 
    unsafeCustomize : function(type, optname, optvalue){
      MassEval[type][optname] = optvalue;
    }, 
    createParamsUL : function(){
      var Div = document.createElement('div');
      Div.id = "params";
      var UL = document.createElement('ul');
      UL.id = "OPTIONULparams";
      UL.className = "optionsUL"; 
      Div.appendChild(UL)
      var ActualParams = MassEval.params;
      var EditableParams = MassEval.params.EditableParams;
      var DEFAULTparams = MassEval.params.DEFAULTparams;
      for(var a=0,l=EditableParams.length;a<l;a++){
        var paramname = EditableParams[a];
        var LI = UL.appendChild(document.createElement('li'));
        $(LI).addClass("OptionparamsLI");
        var defaultparam = DEFAULTparams[paramname];
        var actualparam = ActualParams[paramname];
        var modified = (actualparam !== defaultparam);
        var HiddenName = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:paramname}));
        var HiddenType = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultparam)}));
        var DefaultHidden = LI.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaultparam}));
        var DefaultInput = LI.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",value:MassEval.texts.DefButtonText,
                                                             title:MassEval.texts.DefButtonTitle.split("$1").join(defaultparam)}));
        DefaultInput.onclick = function(){ 
          MassEval.functions.razModifiedOption(this, "params"); 
        }
        var ActualInput;
        if(typeof(defaultparam)==="boolean"){
          ActualInput = LI.appendChild(MassEval.functions.createInput({type:'checkbox',name:"actual",value:actualparam}));
          if(actualparam) ActualInput.checked = "checked";
        }else{
          ActualInput = LI.appendChild(MassEval.functions.createInput({type:'text',name:"actual",value:actualparam}));
          ActualInput.className = ("OptInput" + (typeof(defaultparam) === "number" ? "Nbr" : "Str" ));
        }
        LI.appendChild(ActualInput);
        LI.appendChild(document.createTextNode(" : "));
        var Label = LI.appendChild(document.createElement('label'));
        Label.innerHTML = MassEval.texts[("OPTION"+paramname)] || ("OPTION"+paramname);
        if(modified){
          $(LI).addClass("modifiedoption");
          Label.title = MassEval.texts.OptionModified;
        }else{
          DefaultInput.disabled = "disabled";
        }
        Label.setAttribute('for', paramname);
        if(ActualInput.tagName.toLowerCase() == "input" && ActualInput.type == "checkbox")
          ActualInput.onclick = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
        else if(ActualInput.tagName.toLowerCase() == "input")
          ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
      }
      return Div;
    },
    setInputToSelects : function(){
      var UL = document.getElementById("OPTIONULparams");
      if(!UL) return;
      var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0 );
      var Lis = UL.getElementsByTagName('li');
      var NewActualSelect;
      for(var a=0,l=Lis.length;a<l;a++){
        LI = Lis[a];
        var NameInput = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
        var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
        if(!NameInput || !ActualInput) continue;
        var paramname = NameInput.value;
        var actualparam = ActualInput.value;
        var modified = false;
        if(paramname == "DefaultPortal"){
          NewActualSelect = MassEval.functions.createEvalThemeSelect(null, actualparam, (actualparam === ""));
          modified = true;
        }
        if(modified){
          NewActualSelect.name = "actual";
          NewActualSelect.style.width = ($(ActualInput).width() + MoreWidth)+"px";
          ActualInput.parentNode.insertBefore(NewActualSelect, ActualInput);
          ActualInput.parentNode.removeChild(ActualInput);
          NewActualSelect.onchange = function(){ MassEval.functions.checkModifiedOption(this, "params"); };
        }
      }
    },
    setIconPreview : function(){
      var UL = document.getElementById("OPTIONULparams");
      if(!UL) return;
      var Lis = UL.getElementsByTagName('li');
      for(var a=0,l=Lis.length;a<l;a++){
        LI = Lis[a];
        var NameInput = MassEval.functions.getFirstElementByName(LI, ["input"], "name");
        var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
        if(!NameInput || !ActualInput) continue;
        var paramname = NameInput.value;
        var actualparam = ActualInput.value;
        var suffix = paramname.substr((paramname.length-4), 4);
        if(suffix == "Icon"){
          ActualInput.id = paramname;
          ActualInput.onfocus = function(){
            var ID = this.id;
            var ExistingPreview = document.getElementById("ImagePreview_"+ID);
            if(!ExistingPreview){
              var ExistingPreviewSpan = this.parentNode.insertBefore(document.createElement('span'), this.nextSibling);
              $(ExistingPreviewSpan).addClass("ImagePreviewSpan");
              ExistingPreview = ExistingPreviewSpan.appendChild(document.createElement('img'));
              ExistingPreview.id = "ImagePreview_"+ID;
              ExistingPreview.className = "ImagePreview";
            }
            ExistingPreview.src = (MassEval.params.ImageURL + this.value);
            $(ExistingPreview).fadeIn("fast");
          }
          ActualInput.onkeyup = function(){
            var ID = this.id;
            var ExistingPreview = document.getElementById("ImagePreview_"+ID);
            if(!ExistingPreview){
              var ExistingPreviewSpan = this.parentNode.insertBefore(document.createElement('span'), this.nextSibling);
              $(ExistingPreviewSpan).addClass("ImagePreviewSpan");
              ExistingPreview = ExistingPreviewSpan.appendChild(document.createElement('img'));
              ExistingPreview.id = "ImagePreview_"+ID;
              ExistingPreview.className = "ImagePreview";
              $(ExistingPreview).fadeIn("fast");
            }
            ExistingPreview.src = (MassEval.params.ImageURL + this.value);
            MassEval.functions.checkModifiedOption(this, "params");
          }
          ActualInput.onblur = function(){
            var ID = this.id;
            var ExistingPreview = document.getElementById("ImagePreview_"+ID);
            if(ExistingPreview) $(ExistingPreview).fadeOut("fast");
          }
        }
      }
    },
    createStylesUL : function(){
      var Div = document.createElement('div');
      Div.id = "styles";
      var UL = document.createElement('ul');
      UL.id = "OPTIONULstyles";
      UL.className = "optionsUL";
      Div.appendChild(UL)
      var ActualStyles = MassEval.styles;
      var DEFAULTstyles = MassEval.params.DEFAULTstyles;
      for(var stylename in DEFAULTstyles){
        var modified = false;
        var LI = UL.appendChild(document.createElement('li'));
        $(LI).addClass("OptionstylesLI");
        var defaultstyle = DEFAULTstyles[stylename];
        var actualstyle = ActualStyles[stylename];
        if(actualstyle !== defaultstyle) modified = true;
        var FORM = LI.appendChild(document.createElement('form'));
        FORM.onsubmit = function(){ return false; };
        var HiddenName = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:stylename}));
        var HiddenType = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaultstyle)}));
        var DefaultHidden = FORM.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaultstyle}));
        var DefaultInput = FORM.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",
                           value:MassEval.texts.DefButtonText,title:MassEval.texts.DefButtonTitle.split("$1").join(defaultstyle)}));
        DefaultInput.onclick = function(){
          MassEval.functions.razModifiedOption(this, "styles"); 
        }
        var ActualInput = FORM.appendChild(MassEval.functions.createInput({type:'text',name:"actual",value:actualstyle}));
        ActualInput.className = "OptInputCSS";
        ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "styles"); };
        LI.appendChild(document.createTextNode(" : "));
        var Label = LI.appendChild(document.createElement('label'));
        var SizeUnits = MassEval.params.SizeUnits
        for(var a=0,l=SizeUnits.length;a<l;a++){
          var thisunit = SizeUnits[a];
          if(defaultstyle.indexOf(thisunit)!==-1){
            $(ActualInput).addClass("SizeUnit");
            ActualInput.title = MassEval.texts.SizeUnitTip.split("$units").join(SizeUnits.join(", "));
          }
        }
        Label.innerHTML = MassEval.texts[("OPTION"+stylename)] || ("OPTION"+stylename);
        if(modified){
          $(LI).addClass("modifiedoption");
          Label.title = MassEval.texts.OptionModified;
        }else{
          DefaultInput.disabled = "disabled";
        }
        Label.setAttribute('for', stylename);
      }
      return Div;
    },
    setFontFamilySelector : function(){
      var UL = document.getElementById("OPTIONULstyles");
      if(!UL) return;
      var li = UL.getElementsByTagName('li')[0];
      if(!li) return;
      var Input = MassEval.functions.getFirstElementByName(li, ["input"], "actual");
      if(!Input) return;
      var Select = document.createElement("select");
      var FontFamilies = MassEval.params.FontFamilies;
      for(var fam in FontFamilies){
        var optgroup = Select.appendChild(document.createElement("optgroup"));
        optgroup.setAttribute("label", "— "+fam+" —");
        var Families = FontFamilies[fam].sort();
        for(var a=0,l=Families.length;a<l;a++){
          var thisfam = Families[a];
          if(MassEval.functions.fontTest(thisfam, fam)){
            var opt = Select.appendChild(document.createElement("option"));
            opt.value = thisfam;
            opt.innerHTML = thisfam;
            opt.style.fontFamily = thisfam;
            opt.onmouseover = function(){ $("#FontTester").style.style.fontFamily = this.value; }
          }
        }
      }
      Select.onchange = function(){
        this.nextSibling.style.fontFamily = this.value;
        MassEval.functions.checkModifiedOption(this, "styles");
      }
      Select.value = Input.value;
      Select.name = "actual";
      var Width = Input.clientWidth;
      var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0);
      Select.style.width = (Width+ MoreWidth)+"px";
      Input.parentNode.insertBefore(Select, Input);
      var FontTester = Input.parentNode.insertBefore(document.createElement("div"), Input);
      FontTester.id = "FontTester";
      FontTester.style.display = "none";
      FontTester.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.";
      Select.onfocus = function(){ 
        this.nextSibling.style.fontFamily = Select.value;
        $("#FontTester").fadeIn("fast");
      };
      Select.onblur = function(){ $("#FontTester").fadeOut("fast"); };
      Input.parentNode.removeChild(Input);
    },
    setColorPickers : function(){
      var UL = document.getElementById("OPTIONULstyles");
      if(!UL) return;
      var Lis = UL.getElementsByTagName('li');
      var stylescount = 0;
      for(var a=0,l=Lis.length;a<l;a++){
        LI = Lis[a];
        var DefaultInput = MassEval.functions.getFirstElementByName(LI, ["input"], "default");
        var TextInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
        if(!DefaultInput || !TextInput ) continue;
        var defaultstyle = DefaultInput.value;
        if(defaultstyle.indexOf("#")===0){
          TextInput.title = MassEval.texts.ColorInput;
          var colorpickerDiv = TextInput.parentNode.insertBefore(document.createElement('div'), TextInput.nextSibling);
          colorpickerDiv.id = "Divcolorpicker"+stylescount;
          colorpickerDiv.style.display = "none";
          colorpickerDiv.className = "colorpickerDiv";
          var colorpicker = colorpickerDiv.appendChild(document.createElement('div'));
          colorpicker.id = "colorpicker"+stylescount;
          colorpicker.className = "colorpicker";
          TextInput.id = "Inputcolorpicker"+stylescount;
          $(TextInput).addClass("Inputcolorpicker");
          TextInput.parentNode.id = "Formcolorpicker"+stylescount;
          TextInput.parentNode.onmouseout = function(){
            var ColorpickerID = ("Divcolorpicker" + this.id.split("colorpicker")[1]);
            $("#"+ColorpickerID).stop();
            $("#"+ColorpickerID).fadeOut("fast");
            MassEval.functions.checkModifiedOption(MassEval.functions.getFirstElementByName(this, ["input"], "actual"), "styles"); 
          };
          TextInput.parentNode.onmouseover = function(){
            var ColorpickerID = ("Divcolorpicker" + this.id.split("colorpicker")[1]);
            $("#"+ColorpickerID).stop();
            $("#"+ColorpickerID).fadeIn("fast");
          };
          MassEval.params.ColorPickers[stylescount] = $('#colorpicker'+stylescount).farbtastic('#Inputcolorpicker'+stylescount);
          stylescount++;
        }
      }
    },
    createBorderStyleSelectors : function(){
      var UL = document.getElementById("OPTIONULstyles");
      if(!UL) return;
      var Lis = UL.getElementsByTagName('li');
      var stylescount = 0;
      for(var a=0,l=Lis.length;a<l;a++){
        LI = Lis[a];
        var ActualInput = MassEval.functions.getFirstElementByName(LI, ["input"], "actual");
        MassEval.functions.createBorderStyleSelector(ActualInput);
      }
    },
    createBorderStyleSelector : function(Input){
      if(!Input || !Input.parentNode) return;
      var possibles = MassEval.params.BorderStyles;
      if(possibles.indexOf(Input.value)===-1) return;
      var Select = document.createElement("select");
      Select.name = Input.name;
      for(var a=0,l=possibles.length;a<l;a++){
        var thisstyle = possibles[a];
        var opt = Select.appendChild(document.createElement('option'));
        opt.value = thisstyle;
        opt.innerHTML = thisstyle;
        if(thisstyle === Input.value) opt.selected = "selected";
      }
      var Width = Input.clientWidth;
      var MoreWidth = (MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))] ? 4 : 0);
      Select.style.width = (Width+(MoreWidth ? MoreWidth : 0))+"px"; 
      Select.onchange = function(){ MassEval.functions.checkModifiedOption(this, "styles"); };
      Input.parentNode.insertBefore(Select, Input);
      Input.parentNode.removeChild(Input);      
    },
    createTextsUL : function(){
      var Div = document.createElement('div');
      Div.id = "texts";
      var UL = document.createElement('ul');
      UL.id = "OPTIONULtexts";
      UL.className = "optionsUL";
      Div.appendChild(UL);
      var DEFAULTtexts = MassEval.params.DEFAULTtexts;
      var ActualTexts = MassEval.texts;
      var LIcount = 0;
      for(var textname in DEFAULTtexts){
        LIcount++;
        var modified = false;
        var defaulttext = DEFAULTtexts[textname];
        var rows = defaulttext.split("\n").length;
        var actualtext = ActualTexts[textname];
        var LI = UL.appendChild(document.createElement('li'));
        $(LI).addClass("OptiontextsLI");
        var labelText = MassEval.texts[("OPTION"+textname)];
        if(typeof(labelText)!=="undefined"){
          var Label = LI.appendChild(document.createElement('label'));
          Label.appendChild(document.createTextNode(labelText));
          Label.setAttribute('for', textname);
        }else{
          var strippedtextname = textname.replace(/^OPTION/,"");
          var text = MassEval.texts[strippedtextname];
          var style = MassEval.styles[strippedtextname];
          var param = (MassEval.params.EditableParams.indexOf(strippedtextname) !==-1);
          var ROparam = MassEval.params[strippedtextname];
          if(typeof(text)!=="undefined"){
            var Label = LI.appendChild(document.createElement('label'));
            Label.appendChild(document.createTextNode(MassEval.texts.text));
            Label.setAttribute('for', textname);
          }else if(typeof(style)!=="undefined"){
            var Label = LI.appendChild(document.createElement('label'));
            Label.appendChild(document.createTextNode(MassEval.texts.style));
            Label.setAttribute('for', textname);
          }else if(param){
            var Label = LI.appendChild(document.createElement('label'));
            Label.appendChild(document.createTextNode(MassEval.texts.param));
            Label.setAttribute('for', textname);
          }else if(typeof(ROparam)!=="undefined"){
            var Label = LI.appendChild(document.createElement('label'));
            Label.appendChild(document.createTextNode(MassEval.texts.readonlyparam));
            Label.setAttribute('for', textname);
          }          
        }
        var F = LI.appendChild(document.createElement("form"));
        F.onsubmit = function(){ return false; }
        var HiddenName = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"name",value:textname}));
        var HiddenType = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"type",value:typeof(defaulttext)}));
        if(actualtext !== defaulttext) modified = true;
        var DefaultHidden = F.appendChild(MassEval.functions.createInput({type:'hidden',name:"default",value:defaulttext}));;
        var DefaultInput = F.appendChild(MassEval.functions.createInput({type:'button',name:"defaultB",
                           value:MassEval.texts.DefButtonText,title:MassEval.texts.DefButtonTitle.split("$1").join(defaulttext)}));
        DefaultInput.onclick = function(){
          MassEval.functions.razModifiedOption(this, "texts"); 
        }
        var ActualInput = F.appendChild(MassEval.functions.createInput({type:'textarea',name:"actual",value:actualtext,
                                                           title : (MassEval.texts[("OPTION"+textname)] || MassEval.texts[textname] || textname)}));
        ActualInput.onkeyup = function(){ MassEval.functions.checkModifiedOption(this, "texts"); };
        ActualInput.setAttribute('rows', rows);
        if(modified){
          $(LI).addClass("modifiedoption");
          Label.title = MassEval.texts.OptionModified;
        }else{
          DefaultInput.disabled = "disabled";
        }
      }
      return Div;
    },
    createMoreParamsUL : function(){
      var Div = document.createElement('div');
      Div.id = "moreparams";
      var UL = document.createElement('ul');
      UL.id = "OPTIONULmoreparams";
      UL.className = "optionsUL";
      Div.appendChild(UL);
      var OptionsMoreParams = (MassEval.params.OptionsMoreParams || "");
      var MoreLI = document.createElement('li');
      MoreLI.style.marginTop = "1em";
      MoreLI.style.padding = "2px";
      var TestZone = document.createElement('span');
      var TestButton = MassEval.functions.createInput({type:"button",value:MassEval.texts.TestMoreParamsText,title:MassEval.texts.TestMoreParamsTip});
      TestButton.onclick = function(){ MassEval.functions.testMoreParamsCode(); };
      var TestResult = document.createElement('span');
      TestResult.id = "MoreParamsTestResult";
      TestZone.appendChild(TestButton);
      TestZone.appendChild(TestResult);
      var Textarea = MassEval.functions.createInput({type:"textarea",name:'moreparams',value:OptionsMoreParams,id:'moreparamsTextarea'});
      Textarea.setAttribute('rows', MassEval.params.MoreParamsRows);
      Textarea.style.resize = "vertical";
      if(OptionsMoreParams){
        Textarea.style.color = "red";
        Textarea.title = MassEval.texts.OptionModified;
      }
      MoreLI.appendChild(TestZone);
      MoreLI.appendChild(Textarea);
      UL.appendChild(MoreLI);
      return Div;
    },
    testMoreParamsCode : function(){
      var Textarea = document.getElementById("moreparamsTextarea");
      var TestResultArea = document.getElementById("MoreParamsTestResult");
      if(!Textarea || !TestResultArea ) return false;
      var Code = Textarea.value;
      if(!Code) return true;
      try{
       eval(Code);
       TestResultArea.innerHTML = MassEval.texts.MoreParamsTestOK;
       return false;
      }catch(e){
       TestResultArea.innerHTML = MassEval.texts.MoreParamsTestKO.split("$1").join("<span>" +e.message+ "</span>");
       return e.message;
      }
    },
    openOptionsForm : function(recreate){
      var TROptions = document.getElementById("fieldsetOptionsContainer");
      var OptionsDiv = document.getElementById("fieldsetOptions");
      if(!TROptions || !OptionsDiv) return;
      if(TROptions.style.display != "none" && !recreate){
        return MassEval.functions.closeOptionsForm();
      }else{
        if(recreate) while(OptionsDiv.firstChild){ OptionsDiv.removeChild(OptionsDiv.firstChild);}
        TROptions.style.display = "";
        if(!OptionsDiv.firstChild){
          var Legend = OptionsDiv.appendChild(document.createElement('legend'));
          var OKInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.OptionValidate,title:MassEval.texts.OptionValidateTip,id:"SaveOptionsInput"}));
          OKInput.onclick = function(){
            MassEval.functions.updateOptions();
          }
          var subpagename = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
          var SPTip = MassEval.texts.OptionSubPageTip.split("$page").join(subpagename);
          var SPInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.OptionSubPageText,title:SPTip,id:"lastSPInput"}));
          SPInput.onclick = function(){
            var URL = mw.util.getUrl(subpagename,{'diff':'cur','oldid':'prev'});
            window.open(URL);
          }
          var RAZInput = Legend.appendChild(MassEval.functions.createInput({type:'button',value:MassEval.texts.GlobDefButtonText,id:"GlobalRAZoptionInput"}));
          RAZInput.onclick = function(){
            MassEval.functions.razModifiedOptionsInShownTab();
          }
          var P = OptionsDiv.appendChild(document.createElement('p'));
          P.style.textAlign = "center";
          var ULs = [
            OptionsDiv.appendChild(MassEval.functions.createParamsUL()),
            OptionsDiv.appendChild(MassEval.functions.createStylesUL()),
            OptionsDiv.appendChild(MassEval.functions.createTextsUL()),
            OptionsDiv.appendChild(MassEval.functions.createMoreParamsUL())   
          ];
          MassEval.functions.setInputToSelects();
          MassEval.functions.setIconPreview();
          MassEval.functions.setFontFamilySelector();
          MassEval.functions.createBorderStyleSelectors();
          MassEval.functions.setColorPickers();
          MassEval.functions.createToggleButtons(P, ULs, "Options");
        }
      }
    },
    closeOptionsForm : function(){
      var TROptions = document.getElementById("fieldsetOptionsContainer");
      if(TROptions){
        if(MassEval.params.LaunchCondition !== 2) $(TROptions).slideUp("slow");
        else TROptions.style.display = "none";
      }
    },
    createToggleButtons : function(P, ULs, Type){
      if(!P) return;
      var RAZInput = document.getElementById("GlobalRAZoptionInput");
      var ulcount = 0;
      for(var a=0,l=ULs.length;a<l;a++){
        var thisUL = ULs[a];
        $(thisUL).addClass(Type+"Div");
        var ID = thisUL.id;
        var Input = MassEval.functions.createInput({type:'button',name:ID,value:(MassEval.texts[ID] || ID)});
        Input.onclick = function(){
          MassEval.functions.showThisUL(this, Type);
        }
        if(a>0) Input.style.marginLeft = "0.5em";
        if(ulcount !== MassEval.params[("Displayed"+Type+"UL")]) thisUL.style.display = "none";
        else{
          Input.style.textDecoration = "underline";
          if(RAZInput) RAZInput.title = MassEval.texts.GlobDefButtonTitle.split("$1").join(Input.value);
        }
        P.appendChild(Input);
        ulcount++;
      }     
    },
    showThisUL : function(I, Type){
      var P = I.parentNode;
      var F = document.getElementById("fieldset"+Type);
      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(Type+"Div") || !thisEL.id) continue;
        if(thisEL.id == ELID){
          thisEL.style.display = "";
        }
        else thisEL.style.display = "none";
      }
      var RAZInput = document.getElementById("GlobalRAZoptionInput");
      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";
          MassEval.params[("Displayed"+Type+"UL")] = a;
          if(RAZInput && Type === "Options") RAZInput.title = MassEval.texts.GlobDefButtonTitle.split("$1").join(I.value);
        }else Input.style.textDecoration = "";
      }
    },
    checkModifiedOption : function(actualnode, type){
      if(!type) type = "params";
      var LI = actualnode.parentNode;
      var defaultN = MassEval.functions.getFirstElementByName(LI, ["input"], "defaultB");
      var nameP = MassEval.functions.getFirstElementByName(LI, ["input"], "name").value;
      var typeP = MassEval.functions.getFirstElementByName(LI, ["input"], "type").value;
      var newvalue = actualnode.value;
      if(typeP=="number") newvalue = parseInt(newvalue);
      if(typeP=="boolean") newvalue = actualnode.checked;
      var defparam = MassEval.params[("DEFAULT"+type)][nameP];
      if(defparam === newvalue) defaultN.disabled = "disabled";
      else{
        defaultN.disabled = false;
      }
      var Msg = MassEval.functions.checkThatModifiedOption(LI, actualnode, newvalue);
      if(Msg) MassEval.functions.alertControl("issue_"+nameP, Msg, "Warning");
      else MassEval.functions.alertControl("issue_"+nameP);
    },
    checkThatModifiedOption : function(LI, actualnode, newvalue){
      if($(actualnode).hasClass("SizeUnit")){
        var goodunit = false;
        var SizeUnits = MassEval.params.SizeUnits;
        var reg1 = newvalue.match(new RegExp("^[0-9]*\\.?[0-9]+("+SizeUnits.join("|")+")$"));
        var reg2 = newvalue.match(new RegExp("\\.+[0-9]*\\.+")); 
        if(reg1 !==null && reg2 === null) LI.parentNode.removeAttribute("style");
        else{
          LI.parentNode.style.border = "1px solid red";
          return MassEval.texts.AlertMsgSizeUnit.split("$units").join(SizeUnits.join(", "));
        }
      }else if($(actualnode).hasClass("Inputcolorpicker") ){
        var l = newvalue.length;
        var reg1 = newvalue.match(new RegExp("#[0-9a-fA-F]{6}"));
        var reg2 = newvalue.match(new RegExp("#[0-9a-fA-F]{3}"));
        if((l==7 && reg1 !==null) || (reg2!==null && l==4)) LI.parentNode.removeAttribute("style");
        else{
          LI.parentNode.style.border = "1px solid red";
          return MassEval.texts.AlertMsgColorInput;
        }
      }
      return false;
    },
    razModifiedOption : function(defaultbutton, type, global){
      var Parent = defaultbutton.parentNode;
      var defaultP = MassEval.functions.getFirstElementByName(Parent, ["input"], "default").value;
      var nameP = MassEval.functions.getFirstElementByName(Parent, ["input"], "name").value;
      var typeP = MassEval.functions.getFirstElementByName(Parent, ["input"], "type").value;
      var actualT = MassEval.functions.getFirstElementByName(Parent, ["input","select","textarea"], "actual");
      if(typeP == "boolean"){
        actualT.checked = (defaultP === "true" ? "checked" : false );
      }else{
        actualT.value = defaultP;
        if($(actualT).hasClass("Inputcolorpicker")){
          var index = actualT.id.split("colorpicker")[1];
          $.farbtastic(MassEval.params.ColorPickers[index]).setColor(defaultP);
        }
      }
      if(!global) actualT.focus();
      MassEval.functions.checkModifiedOption(actualT, type);
    },
    razModifiedOptionsInShownTab : function(){
      var FS = document.getElementById("fieldsetOptions");
      if(!FS) return;
      var ULs = FS.getElementsByTagName("ul");
      for(var a=0,l=ULs.length;a<l;a++){
        var ul = ULs[a];
        if(!$(ul).hasClass("optionsUL") || !ul.id || ul.id.indexOf("OPTIONUL")===-1) continue;
        if(ul.parentNode.style.display == "none") continue;
        var type = ul.id.split("OPTIONUL").join("");
        if(type==="Moreparamas"){
          var MoreparamsTextarea = ul.getElementsByTagName('textarea')[0];
          if(MoreparamsTextarea) MoreparamsTextarea.value = "";
        }else{
          var LIs = ul.getElementsByTagName('li');
          for(var b=0,m=LIs.length;b<m;b++){
            var li = LIs[b];
            var defaultbutton = MassEval.functions.getFirstElementByName(li, ["input"], "defaultB");
            if(defaultbutton) MassEval.functions.razModifiedOption(defaultbutton, type, true);
          }
        }
      }
    },
  // ------------------------------- Fonctions pour les suggestions -------------------------------
    newAnalysisID : function(suggestcount){
      var id = MassEval.functions.generateID();
      MassEval.params.SuggestRunning[id] = [];
      for(var a=0,l=suggestcount;a<l;a++){
        MassEval.params.SuggestRunning[id].push(true);
      }
      return id;
    },
    checkAnalysisID : function(id, endrequest){   
      var Suggest =  MassEval.params.SuggestRunning[id];
      if(!Suggest) return true;
      MassEval.params.SuggestRunning[id][endrequest] = true;
      for(var a=0,l=Suggest.length;a<l;a++){
        if(Suggest[a] === false) return false;
      }
      return true;
    },
    createSuggestSelect : function(InputText){
      var Form = document.createElement('form');
      Form.onsubmit = function(){ return false; };
      Form.id = InputText.id + "Form";
      $(Form).addClass("SuggestForm");
      var SuggestSelect = Form.appendChild(document.createElement('select'));
      SuggestSelect.id = InputText.id + "Select";
      SuggestSelect.style.display = "none";
      SuggestSelect.style.zIndex = 5;
      Form.appendChild(InputText);
      return Form;
    },
    updateSuggestionElements : function(titles, OldInputValue, InputID){
      var Input = document.getElementById(InputID);
      var Select = document.getElementById(InputID+"Select");
      if(titles.length == 0){
        return Select.style.display = "none";
      }
      while(Select.firstChild){ Select.removeChild(Select.firstChild); }
      for(var a=0,l=titles.length;a<l;a++){
        var title = titles[a];
        var option = Select.insertBefore(document.createElement('option'), Select.firstChild);
        option.value = title;
        option.innerHTML = title;
        option.onclick = function(){
          MassEval.functions.onSelectClick(this, InputID);
        }
        if(a == 0) option.selected = "selected";
      }
      Select.style.display = "";
      if(titles.length>MassEval.params.SuggestSelectSize){
         var opt = Select.firstChild;
         try{ $(Select).scrollTop((opt.offsetHeight * titles.length)); }catch(e){  }
      }
      var suggestion = titles[0];
/*
      if(suggestion.indexOf(OldInputValue) === 0 && OldInputValue!==suggestion){
        var text = Input.value;
        Input.value = suggestion;
        if(Input.createTextRange){
          var ra = Input.createTextRange();
          ra.moveStart("character", text.length);
          ra.moveEnd("character", suggestion.length);
          ra.select();
        }else if(Input.setSelectionRange){
          Input.setSelectionRange(text.length, suggestion.length);
        }else{
          Input.selectionStart = text.length;
          Input.selectionEnd = suggestion.length;
        }
      }
*/
      if(titles.length == 1 && OldInputValue!==suggestion) MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
      if(titles.length == 1) Select.style.display = "none";
      if(OldInputValue == suggestion) Select.style.display = "none";
      MassEval.functions.setSuggestSelectPosition(InputID);
    },
    setSuggestSelectPosition : function(InputID){
      var Input = document.getElementById(InputID);
      var Select = document.getElementById(InputID+"Select");
      var Options = Select.getElementsByTagName('option');
      var Taille = MassEval.params.SuggestSelectSize;
      if(Options.length < Taille) Taille = Options.length;
      var H = (Taille * 21);
      Select.size = Taille;
      Select.style.height = H + "px" ;
      Select.style.marginTop = "-" + H + "px" ;
      Select.style.marginRight = "-" + ( $(Input.parentNode).width() - $(Input).width() ) + "px" ;
    },
    onSelectClick : function(option, InputID){
      var NewValue = option.value;
      var Input = document.getElementById(InputID);
      Input.value = NewValue;
      option.parentNode.style.display = "none";
      Input.focus();
      MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
    },
  // ------------------------------- Fonctions pour le tableau dans [[Special:MassEval]] -------------------------------
    prepareSpecialpage : function(){
      var Title = document.getElementsByTagName('title')[0];
      var TitleH = document.getElementById('firstHeading');
      if(!TitleH) TitleH = document.getElementById('section_0');
      if(!TitleH) TitleH = document.getElementsByTagName('h1')[0];
      var Content = document.getElementById('mw-content-text');
      if(!Title || !TitleH || !Content) return;
      $(document.body).removeClass("mw-invalidspecialpage");
      Title.innerHTML = MassEval.texts.SpecialpageNameH.split("$1").join(MassEval.texts.SpecialpageName);
      TitleH.innerHTML = MassEval.texts.SpecialpageName;
      while(Content.firstChild){ Content.removeChild(Content.firstChild); }
      var Datas = {
        mode  : "cat",
        title : false
      };
      var wgTitle = mw.config.get("wgTitle");
      if(wgTitle.indexOf(MassEval.params.SpecialpageName+"/")!=-1){
        var params = wgTitle.split(MassEval.params.SpecialpageName+"/")[1];
        var mode = params.match(new RegExp("^mode=[^\/]*"));
        if(mode !== null){
          var thismode  = mode[0].split("mode=").join("");
          var AllModes = Object.keys(MassEval.params.ModesMap);
          if(AllModes.indexOf(thismode)!==-1) Datas.mode = thismode;
          Datas.title = MassEval.functions.getMainPage(params.replace(mode[0], "").replace(/^\//, ""));
        }else{
          Datas.title = MassEval.functions.getMainPage(params);
        }
      }
      MassEval.params.CurrentMode = Datas.mode;
      MassEval.functions.createSpecialpageBoard(Content, Datas);
    },
    updateContentSub : function(selection, NS){
      var contentSub = document.getElementById("contentSub");
      if(!contentSub) return;
      contentSub.style.marginBottom = 0;
      var template = MassEval.texts.contentSubTemplate; // "← $1"
      var Mode = MassEval.params.CurrentMode;
      var link = false;
      if(selection){
        if(Mode == "page"){
          var title = selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "cat"){
          var title = mw.config.get('wgFormattedNamespaces')[14]+":"+selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "links"){
          var title = NS + (NS === "" ? "" : ":") +selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "linkshere"){
          var title = "Special:Whatlinkshere/"+NS + (NS === "" ? "" : ":") +selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "template"){
          var title = mw.config.get('wgFormattedNamespaces')[10]+":"+selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "newpages"){
          var title = "Special:Newpages";
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }else if(Mode == "creations"){
          var title = mw.config.get('wgFormattedNamespaces')[2]+":"+selection;
          link = '<a href="'+mw.util.getUrl(title)+'" title="'+title+'" >'+title+'</a>';
        }
      }
      if(link){
        contentSub.style.visibility = "visible";
        contentSub.innerHTML = template.split("$1").join(link);
      }else{
        contentSub.style.visibility = "hidden";
        contentSub.innerHTML = template;
      }
    },
    createSpecialpageBoard : function(contentNode, Datas){
      $(document.body).addClass('MultiplePagesAnalysis');
      var MassEvalBoard = document.createElement('div');
      MassEvalBoard.id = "MassEvalBoard";
      contentNode.appendChild(MassEvalBoard);
      if(MassEval.params.AddWarning){
        var Caption = MassEvalBoard.appendChild(document.createElement("p"));
        $(Caption).addClass("error");
        Caption.style.textAlign = "center";
        Caption.innerHTML = MassEval.texts.Warning;
      }
      var MainContainer = MassEvalBoard.appendChild(document.createElement('div'));
      MainContainer.id = "MassEvalBoardHead";
      $(MainContainer).addClass("FieldsetContent");
      MassEvalBoard.appendChild(MassEval.functions.createBoardListDiv());
      var EvalFieldset = MainContainer.appendChild(MassEval.functions.createEvalFieldset());  // Thème d'évaluation
      MassEval.functions.setEvalTableSizes();
      var ModesFieldset = MainContainer.appendChild(MassEval.functions.createModesFieldset(Datas.mode));  // Sélecteur de modes
      var ModesContainer = ModesFieldset.firstChild.nextSibling.appendChild(document.createElement('div'));
      var PageFieldset = ModesContainer.appendChild(MassEval.functions.createPageFieldset(Datas.title));  // Mode Page
      var CategoryFieldset = ModesContainer.appendChild(MassEval.functions.createCategoryFieldset(Datas.title));  // Mode Catégorie
      var LinksFieldset = ModesContainer.appendChild(MassEval.functions.createLinksFieldset(Datas.title));  // Mode Links
      var LinkshereFieldset = ModesContainer.appendChild(MassEval.functions.createLinkshereFieldset(Datas.title));  // Mode Linkshere
      var TemplateFieldset = ModesContainer.appendChild(MassEval.functions.createTemplateFieldset(Datas.title));  // Mode Template
      var NewpagesFieldset = ModesContainer.appendChild(MassEval.functions.createNewpagesFieldset());  // Mode Newpages
      var CreationsFieldset = ModesContainer.appendChild(MassEval.functions.createCreationsFieldset(Datas.title));  // Mode Creations
      var PrefixesFieldset = ModesContainer.appendChild(MassEval.functions.createPrefixesFieldset(Datas.title));  // Mode Prefixes
      var ActionFieldset = MainContainer.appendChild(MassEval.functions.createFilterFieldset());  // Filtrage
      MassEval.functions.setFromSelectorAnchor();
      MassEval.functions.setToSelectorAnchor();
      MassEval.functions.setMoveSelectorAnchor();
      MassEval.functions.setFromToSelectorValues();
      var ActionFieldset = MainContainer.appendChild(MassEval.functions.createActionFieldset());  // Actions
      var OptionsInput = document.getElementById("GlobalOptionsInput"); // Options
      var OptionDiv = document.createElement('div');
      OptionDiv.style.display = "none";
      OptionDiv.id = "fieldsetOptionsContainer";
      var OptionFS = document.createElement('fieldset');
      OptionFS.id = "fieldsetOptions";
      $(OptionFS).addClass("NoShowHideLinks");
      OptionDiv.appendChild(OptionFS);
      MassEval.functions.addOptionLinkInSpecialpage();
      if(MassEval.params.SpecialOptionLinkOK){
          MassEvalBoard.appendChild(OptionDiv);
          OptionsInput.style.display = "none";
          OptionDiv.style.display = "none";
      }else{
        OptionsInput.parentNode.appendChild(OptionDiv);
      }
      var DatasDiv = MassEvalBoard.appendChild(document.createElement('div'));    // Données
      DatasDiv.style.display = "none";
      DatasDiv.id = "fieldsetDatasContainer";
      var DatasFS = DatasDiv.appendChild(document.createElement('fieldset'));
      DatasFS.id = "fieldsetDatas";
      $(DatasFS).addClass("NoShowHideLinks");

      var CatInput = document.getElementById("CatInput");  //  Largeurs
      var InputWidth = CatInput.clientWidth+"px";
      var SelectWidth = (CatInput.clientWidth + MassEval.params.OptionSelectWidthPlus[(mw.config.get("skin"))])+"px";
      var TDWidth = (CatInput.clientWidth+10) +"px";
      var IDs = [
        "EvalThemeTD","EvalThemeInput","PortalInput",
        "TDPage","PageInput",
        "TDCat","CatInput",
        "TDLinks","LinksInput","LinksInputNS",
        "TDLinkshere","LinkshereInput","LinkshereInputNS",
        "TDTemplate","TemplateInput",
        "TDNewpages",
        "TDUser","UserInput",
        "TDPrefixes","PrefixInput",
      ];
      for(var a=0,l=IDs.length;a<l;a++){
        var id = IDs[a];
        var N = document.getElementById(id);
        if(!N || !N.tagName) continue;
        var T = N.tagName.toLowerCase();
        if(T === "input") N.style.width = InputWidth;
        if(T === "select") N.style.width = SelectWidth;
        if(T === "td"){
          N.style.width = TDWidth;
          $(N).addClass("TDSelector");
        }
      }
      $("#EvalThemeTD").width(($("#EvalThemeTD").width()+8));
      MassEval.functions.setSynchronizedResizeV([    // ----------- Hauteurs
        "PageInputInfo",
        "CatParentsDiv",
        "CatDaughtersDiv",
        "LinksInputInfo",
        "LinkshereInputInfo",
        "TemplateInputInfo",
        "TemplateDoc",
        "NewpagesInputInfo",
        "UserInputInfo"
      ], 50);
      MassEval.functions.displayNodes(["SPInput"], false);
      MassEval.functions.createShowHideLinks(MassEvalBoard);
      MassEval.params.CatSubPageCountOK = true;
      MassEval.functions.getAPIUserInfos();
      MassEval.functions.getRelevantModeFieldset(Datas.mode);
      MassEval.functions.getEvalThemes();
      MassEval.functions.getStubThemes();
      MassEval.functions.getUserSubPage();
      MassEval.functions.getBeforeStubTemplates();
      MassEval.functions.getPortalList();
    },
    createShowHideLinks : function(Parent){
      if(!Parent) return;
      var Fieldsets = Parent.getElementsByTagName('fieldset');
      for(var a=0,l=Fieldsets.length;a<l;a++){
        var Fieldset = Fieldsets[a];
        if($(Fieldset).hasClass("NoShowHideLinks")) continue;
        var Legend = Fieldset.getElementsByTagName('legend')[0];
        if(!Legend) continue;
        var showhidelink = Legend.appendChild(MassEval.functions.createLink(null,{text:MassEval.texts.Hide,title:MassEval.texts.HideTip,href:"javascript:;"}));
        $(showhidelink).addClass("showhideConfigForm");
        showhidelink.onclick = function(){
          MassEval.functions.clickShowHideLinks(this);
        }
      }
    },
    clickShowHideLinks : function(link){
      var legend = link.parentNode;
      var fieldset = legend.parentNode;
      var nodes = [];
      var Node = legend.nextSibling;
      while(Node){
        if(!Node.tagName || (Node.tagName && Node.tagName.toLowerCase() != 'legend')) nodes.push(Node);
        Node = Node.nextSibling;
        if(!Node) break;
      }
      if(link.title == MassEval.texts.HideTip){
        for(var n=0,nlen=nodes.length;n<nlen;n++){ $(nodes[n]).slideUp(); }
        link.innerHTML = MassEval.texts.Show;
        link.title = MassEval.texts.ShowTip;
      }else{
        for(var n=0,nlen=nodes.length;n<nlen;n++){ $(nodes[n]).slideDown() }
        link.innerHTML = MassEval.texts.Hide;
        link.title = MassEval.texts.HideTip;
      }
    },
  // ------------------------------- Fonctions pour le tableau dans les articles, pages de discussion et sous-pages utilisateur -------------------------------
    createPageBoard : function(){  
      var LaunchCondition = MassEval.params.LaunchCondition;
      var target = document.getElementById("mw-content-text");
      if(!target) return;
      var board = document.getElementById("MassEvalBoard");
      if(board){
        if(board.style.display == "none"){ 
          $(board).slideDown("slow");
        }else{
          $(board).slideUp("slow");
        }
        return 
      }
      $(document.body).addClass('SinglePageAnalysis');
      board = document.createElement("div");
      board.id = "MassEvalBoard";
      target.insertBefore(board, target.firstChild);
      var boardHead = board.appendChild(document.createElement("div"));  
      boardHead.id = "MassEvalBoardHead";
      var CloseButton = boardHead.appendChild(document.createElement("a"));
      CloseButton.id = "CloseButton";
      CloseButton.href = "javascript:MassEval.functions.createPageBoard()";
      CloseButton.title = MassEval.texts.GoCloseTitle;
      var CloseButtonImage = CloseButton.appendChild(document.createElement("img"));
      CloseButtonImage.src = MassEval.params.ImageURL + MassEval.params.CloseIcon;
      $(CloseButtonImage).addClass("ButtonImage MainCloseIcon");
      CloseButtonImage.id = "CloseButtonImage";
      if(MassEval.params.AddWarning){
        var Caption = boardHead.appendChild(document.createElement("p"));
        $(Caption).addClass("error");
        Caption.innerHTML = MassEval.texts.Warning;
      }
      var MainOptions = boardHead.appendChild(document.createElement("div"));
      MainOptions.id = "MassEvalMainOptionsFS";
      var StandardMainOptions = MainOptions.appendChild(document.createElement("div"));
      StandardMainOptions.appendChild(MassEval.functions.createEvalFieldset());
      StandardMainOptions.appendChild(MassEval.functions.createActionFieldset());
      board.appendChild(MassEval.functions.createBoardListDiv());
      var VerifInput = document.getElementById('GlobalVerifInput');
      VerifInput.title = MassEval.texts.GoVerifOne;
      VerifInput.onclick = function(){
        if(LaunchCondition === 4) MassEval.functions.getThesePagesStatus([mw.config.get('wgTitle')]);
        if(LaunchCondition === 5) MassEval.functions.getThesePagesStatus([mw.config.get('wgPageName').split("_").join(" ")]);
      }
      MassEval.functions.displayNodes(["EmergencyStop","LinksActions","GlobalOptionsInput","MassEval_TH6"], false);
      MassEval.params.CatSubPageCountOK = true;
      MassEval.params.UserInfosOK = true;
      MassEval.functions.getEvalThemes();
      MassEval.functions.getStubThemes();
      MassEval.functions.getUserSubPage();
      MassEval.functions.getBeforeStubTemplates();
      MassEval.functions.getPortalList();
    },

  // ------------------------------- Formulaire "Thème d'évaluation" -------------------------------
    createEvalFieldset : function(){
      var LaunchCond = MassEval.params.LaunchCondition;
      var EvalFieldset = document.createElement('fieldset');
      EvalFieldset.id = "fieldsetEval";
      var PortalLabel = document.createElement('legend');
      PortalLabel.innerHTML = MassEval.texts.EvalTheme;
      EvalFieldset.appendChild(PortalLabel);
      var EvalContainer = document.createElement('div');
      $(EvalContainer).addClass("FieldsetContent");
      if(LaunchCond === 2) EvalFieldset.appendChild(EvalContainer);
      var MainEvalTable = EvalContainer.appendChild(document.createElement('table'));
      MainEvalTable.style.width = "100%";
      MainEvalTable.style.marginTop = "-1em";
      var EvalTR = MainEvalTable.appendChild(document.createElement('tr'));
      var EvalSelectTD = EvalTR.appendChild(document.createElement('td'));
      EvalSelectTD.setAttribute("rowspan", 2);
      EvalSelectTD.id = "EvalThemeTD";
      var EvalTableTD = EvalTR.appendChild(document.createElement('td'));
      var EvalTable = EvalTableTD.appendChild(MassEval.functions.createEvalTable());
      var evalinputFS = EvalSelectTD.appendChild(document.createElement('fieldset'));
      evalinputFS.id = "EvalThemeInputfieldset";
      $(evalinputFS).addClass("NoBorderFieldset NoShowHideLinks")
      var evalinputL = evalinputFS.appendChild(document.createElement('legend'));
      evalinputL.innerHTML = MassEval.texts.EvalTheme;
      var EvalThemeSelect = document.createElement('select');
      EvalThemeSelect.id = "EvalThemeInput";
      EvalThemeSelect.name = "EvalThemeInput";
      $(EvalThemeSelect).addClass("EvalThemeSelect");
      EvalThemeSelect.onchange = function(){
        if(MassEval.params.LaunchCondition === 2) MassEval.functions.updateEvalTable(this.value);
        MassEval.functions.updatePortalSelect();
      }
      EvalThemeSelect.title = MassEval.texts.EvalTheme;
      if(LaunchCond !== 2){
        EvalFieldset.appendChild(EvalThemeSelect);
      }else{
        evalinputFS.appendChild(EvalThemeSelect);
      }
      var portalinputFS = EvalSelectTD.appendChild(document.createElement('fieldset'));
      portalinputFS.id = "PortalInputfieldset";
      $(portalinputFS).addClass("NoBorderFieldset NoShowHideLinks")
      var portalinputL = portalinputFS.appendChild(document.createElement('legend'));
      portalinputL.innerHTML = MassEval.texts.Portal;
      var PortalSelect = EvalFieldset.appendChild(MassEval.functions.createPortalSelect());
      if(LaunchCond !== 2){
        EvalFieldset.appendChild(PortalSelect);
      }else{
        portalinputFS.style.margin = "1em 0";
        portalinputFS.appendChild(PortalSelect);
      }
      MassEval.functions.disableThings([ EvalThemeSelect ], true );
      return EvalFieldset;
    },
    createEvalTable : function(){
      var IMP = MassEval.params.Importance;
      var AVT = MassEval.params.Avancement;
      var EvalTable = document.createElement('table');
      EvalTable.id = "EvalTable";
      var TRAVT = EvalTable.appendChild(document.createElement('tr'));
      var TDupdate = TRAVT.appendChild(document.createElement('td'));
      TDupdate.id = "EvalTableUpdateTD";
      TDupdate.style.paddingLeft = "3px";
      TDupdate.style.textAlign = "center";
      TDupdate.setAttribute('rowspan', 3);
      var updateButton = TDupdate.appendChild( MassEval.functions.createInput({type:'button',value:MassEval.texts.UpdateTableEvalText,title:MassEval.texts.UpdateTableEvalTip,id:"EvalTable_update"}));
      updateButton.onclick = function(){
        var EvalThemeSelect = document.getElementById("EvalThemeInput");
        var Theme = EvalThemeSelect.value;
        if(!Theme) return;
        MassEval.functions.updateEvalTable(Theme);
      }
      var TDAVT = TRAVT.appendChild(document.createElement('td'));
      var TRIMP = EvalTable.appendChild(document.createElement('tr'));
      var TDIMP = TRIMP.appendChild(document.createElement('td')); 
      var AVTTable = TDAVT.appendChild(document.createElement('table'));
      AVTTable.id = "EvalTable_AVT";
      AVTTable.style.width = "100%";
      var AVTCaption = AVTTable.appendChild(document.createElement('caption'));
      AVTCaption.innerHTML = MassEval.texts.AVT;
      var TRAVT1 = AVTTable.appendChild(document.createElement('tr'));
      var TRAVT2 = AVTTable.appendChild(document.createElement('tr'));
      for(var a=0,l=AVT.length;a<l;a++){
        var AVTa = AVT[a];
        var TH = TRAVT1.appendChild(document.createElement('th'));
        if(a==0) $(TH).addClass("EvalTableFirstTH");
        var icon = "";
        if(AVTa.icon) icon = '<img alt="'+AVTa.wiki+'" src="'+AVTa.icon+'" class="EvalTableIcon" /> ';
        TH.innerHTML = icon + AVTa.text;
        TH.style.whiteSpace = "nowrap";
        TH.style.backgroundColor = AVTa.color;
        if(AVTa.textcolor) TH.style.color = AVTa.textcolor;
        var TD = TRAVT2.appendChild(document.createElement('td'));
        TD.style.textAlign = "center";
        TD.id = "EvalTable_AVT"+a;
      }
      var TotAVTTH = TRAVT1.appendChild(document.createElement('th'));
      $(TotAVTTH).addClass("EvalTableLastTH");
      TotAVTTH.innerHTML = MassEval.texts.TableEvalTotal;
      var TotAVTTD = TRAVT2.appendChild(document.createElement('td'));
      TotAVTTD.style.textAlign = "center";
      TotAVTTD.style.fontWeight = "bold";
      TotAVTTD.id = "EvalTable_AVTtotal";
      var IMPTable = TDIMP.appendChild(document.createElement('table'));
      IMPTable.id = "EvalTable_IMP";
      IMPTable.style.width = "100%";
      var IMPCaption = IMPTable.appendChild(document.createElement('caption'));
      IMPCaption.innerHTML = MassEval.texts.IMP;
      var TRIMP1 = IMPTable.appendChild(document.createElement('tr'));
      var TRIMP2 = IMPTable.appendChild(document.createElement('tr'));
      for(var a=0,l=IMP.length;a<l;a++){
        var IMPa = IMP[a];
        var TH = TRIMP1.appendChild(document.createElement('th'));
        if(a==0) $(TH).addClass("EvalTableFirstTH");
        TH.innerHTML = IMPa.text;
        TH.style.whiteSpace = "nowrap";
        TH.style.backgroundColor = IMPa.color;
        if(IMPa.textcolor) TH.style.color = IMPa.textcolor;
        var TD = TRIMP2.appendChild(document.createElement('td'));
        TD.style.textAlign = "center";
        TD.id = "EvalTable_IMP"+a;
      }
      var TotIMPTH = TRIMP1.appendChild(document.createElement('th'));
      $(TotIMPTH).addClass("EvalTableLastTH");
      TotIMPTH.innerHTML = MassEval.texts.TableEvalTotal;
      var TotIMPTD = TRIMP2.appendChild(document.createElement('td'));
      TotIMPTD.style.textAlign = "center";
      TotIMPTD.style.fontWeight = "bold";
      TotIMPTD.id = "EvalTable_IMPtotal";
      var EvalCatsTR = EvalTable.appendChild(document.createElement('tr'));
      var EvalCatsTD = EvalCatsTR.appendChild(document.createElement('td'));
      EvalCatsTD.id = "ThemeCatsTD";
      var ThemeCats = EvalCatsTD.appendChild(document.createElement('table'));
      ThemeCats.id = "ThemeCats";
      ThemeCats.style.width = "100%";
      var ThemeCatsCaption = ThemeCats.appendChild(document.createElement('caption'));
      ThemeCatsCaption.innerHTML = MassEval.texts.ThemeCats;
      var ThemeCatsTR = ThemeCats.appendChild(document.createElement('tr'));
      var CatAllpages = ThemeCatsTR.appendChild(document.createElement('td'));
      CatAllpages.id = "CatAllpages";
      CatAllpages.style.visibility = "hidden";
      var CatStubpages = ThemeCatsTR.appendChild(document.createElement('td'));
      CatStubpages.id = "CatStubpages";
      CatStubpages.style.visibility = "hidden";
      var CatMaincat = ThemeCatsTR.appendChild(document.createElement('td'));
      CatMaincat.id = "CatMaincat";
      CatMaincat.style.visibility = "hidden";
      return EvalTable;
    },
    setEvalTableSizes : function(){
      var EvalTableIMP = document.getElementById("EvalTable_IMP");
      var EvalTableAVT = document.getElementById("EvalTable_AVT");
      var TableCats = document.getElementById("ThemeCats");
      var TDIMP = EvalTableIMP.getElementsByTagName('td');
      var TDAVT = EvalTableAVT.getElementsByTagName('td');
      var TDCAT = TableCats.getElementsByTagName('td');
      var SetSize = function(TDs){
        var maxsize = 10;
        for(var a=0,l=TDs.length;a<l;a++){
          var width = TDs[a].clientWidth;
          if(width > maxsize) maxsize = width;
        }
        for(var a=0,l=TDs.length;a<l;a++){
          TDs[a].width = maxsize+"px";
          TDs[a].style.height = "1.5em";
        }
      }
      SetSize(TDIMP);
      SetSize(TDAVT);
      SetSize(TDCAT);
    },
    clearEvalTable : function(){
      var TableAVT = document.getElementById('EvalTable_AVT');
      var TableIMP = document.getElementById('EvalTable_IMP');
      if(TableAVT){
        var TDs = TableAVT.getElementsByTagName('td');
        for(var a=0,l=TDs.length;a<l;a++){
          TDs[a].innerHTML = "";
        }
      }
      if(TableIMP){
        var TDs = TableIMP.getElementsByTagName('td');
        for(var a=0,l=TDs.length;a<l;a++){
          TDs[a].innerHTML = "";
        }
      }
    },
    updateEvalTable : function(EvalTheme){
      if(!EvalTheme) return;
      MassEval.params.EvalTableRequests = 0;
      var Table = document.getElementById('EvalTable');
      if(!Table) return;
      MassEval.functions.clearEvalTable();
      MassEval.functions.disableThings([ "EvalTable_update" ], true);
      MassEval.functions.alertControl("updateevaltable", MassEval.texts.AlertMsgEvals.split("$theme").join(EvalTheme), "Running");
      MassEval.functions.updateCatAllpages(EvalTheme);
      MassEval.functions.updateCatStubpages(EvalTheme);
      MassEval.functions.updateCatMaincat(EvalTheme);
      var catprefix = MassEval.params.EvalThemesCat[EvalTheme];
      if(!catprefix) return MassEval.functions.updateEvalTable2(EvalTheme);
      console.info("updateEvalTable : Requête 1 - thème="+EvalTheme+' - catprefix="'+catprefix+'"');
      MassEval.params.EvalTableRequests++
      MassEval.functions.getAPIAllcategories({
        gacprefix : catprefix,
        theme     : EvalTheme,
        callback  : function(R){
          MassEval.params.EvalTableRequests--
          var result = R.result;
          var CatList = Object.keys(result);
          if(CatList.length === 0) return MassEval.functions.checkCatinfosEvalTable();
          var EvalCatsMatches = MassEval.params.EvalCatsMatches;
          var allcats = {};
          for(var a=0,l=CatList.length;a<l;a++){
            var catinfo = result[CatList[a]];
            if(catinfo.missing==="") continue;
            var thiscattitle = catinfo.title;
            for(var Match in EvalCatsMatches){
              var thismatch = Match;
              if(thiscattitle.indexOf(thismatch)!==-1){
                var params = EvalCatsMatches[thismatch];
                var Type = MassEval.params[(params.param)];
                var ID = params.id;
                for(var v=0,vlen=Type.length;v<vlen;v++){
                  var typeindex = v
                  var thistype = Type[v];
                  var wiki = thistype.wiki;
                  if(wiki==="?") wiki = MassEval.functions.lcFirst(thistype.text);
                  if((thiscattitle+"|").indexOf((thismatch+" "+wiki+"|"))!==-1){
                    allcats[thiscattitle] = {
                      cattitle     : thiscattitle,
                      type         : Type,
                      typeindex    : typeindex,
                      idnode       : ID
                    }                   
                  }
                }
              }
            }
          }
          var catlengths = Object.keys(allcats);
          if(catlengths.length == 0) return  MassEval.functions.checkCatinfosEvalTable();
          var totalIMP = document.getElementById("EvalTable_IMPtotal");
          if(totalIMP) totalIMP.innerHTML = "";
          var totalAVT = document.getElementById("EvalTable_AVTtotal");
          if(totalAVT) totalAVT.innerHTML = "";
          for(var cat in allcats){
            MassEval.functions.setCatinfosEvalTable(allcats[cat]);
          }
        }
      });
    },
    updateEvalTable2 : function(EvalTheme){
      console.info("updateEvalTable : Requête 2 - thème="+EvalTheme);
      MassEval.params.EvalTableRequests++
      MassEval.functions.getAPIAllcategories({
        gacprefix : MassEval.params.EvalCatsCommonPrefix,
        theme : EvalTheme,
        callback : function(R1){
          MassEval.params.EvalTableRequests--
          var allcats = {};
          var result = R1.result;
          if(!result) return MassEval.functions.checkCatinfosEvalTable();
          var alltitles = Object.keys(result);
          if(alltitles.length == 0) return MassEval.functions.checkCatinfosEvalTable();
          var category = false
          for(var a=0,l=alltitles.length;a<l;a++){
            var thiscat = alltitles[a];
            var goodcat = false;
            for(var p=0,plen=MassEval.params.EvalCatsPrefixes.length;p<plen;p++){
              if(thiscat.indexOf(mw.config.get('wgFormattedNamespaces')[14]+":"+MassEval.params.EvalCatsPrefixes[p])===0) goodcat = true;
           }
            if(goodcat && thiscat.indexOf(R1.theme) !== -1) category = thiscat;
          }
          if(!category) return MassEval.functions.checkCatinfosEvalTable();
          MassEval.params.EvalTableRequests++
          MassEval.functions.getAPICategorymembers({
            title    : category,
            cmprop   : 'title',
            cmtype   : 'subcat',
            callback : function(R2){
              MassEval.params.EvalTableRequests--
              var allcats = {};
              var result = R2.result;
              if(!result) return MassEval.functions.checkCatinfosEvalTable();
              var alltitles = Object.keys(result);
              if(alltitles.length == 0) return MassEval.functions.checkCatinfosEvalTable();
              var EvalCatsMatches = MassEval.params.EvalCatsMatches;
              for(var a=0,l=alltitles.length;a<l;a++){
                var thiscattitle = alltitles[a];
                for(var Match in EvalCatsMatches){
                  var thismatch = Match;
                  if(thiscattitle.indexOf(thismatch)!==-1){
                    var params = EvalCatsMatches[thismatch];
                    var Type = MassEval.params[(params.param)];
                    var ID = params.id;
                    for(var v=0,vlen=Type.length;v<vlen;v++){
                      var typeindex = v
                      var thistype = Type[v];
                      var wiki = thistype.wiki;
                      if(wiki==="?") wiki = MassEval.functions.lcFirst(thistype.text);
                      if((thiscattitle+"|").indexOf((thismatch+" "+wiki+"|"))!==-1){
                        allcats[thiscattitle] = {
                          cattitle     : thiscattitle,
                          type         : Type,
                          typeindex    : typeindex,
                          idnode       : ID
                        }                   
                      }
                    }
                  }
                }
              }
              var catlengths = Object.keys(allcats);
              if(catlengths.length == 0) return  MassEval.functions.checkCatinfosEvalTable();
              var totalIMP = document.getElementById("EvalTable_IMPtotal");
              if(totalIMP) totalIMP.innerHTML = "";
              var totalAVT = document.getElementById("EvalTable_AVTtotal");
              if(totalAVT) totalAVT.innerHTML = "";
              for(var cat in allcats){
                MassEval.functions.setCatinfosEvalTable(allcats[cat]);
              }
            }
          });
        }
      });
    },
    setCatinfosEvalTable : function(Infos){
      MassEval.params.EvalTableRequests++
      MassEval.functions.getAPICategoryinfo({
        infos : Infos,
        title : Infos.cattitle.split(mw.config.get('wgFormattedNamespaces')[14]+":").join(""),
        callback : function(R){
          MassEval.params.EvalTableRequests--
          var result = R.result;
          if(!result) return MassEval.functions.checkCatinfosEvalTable();
          var Infos = R.infos;
          var pages = R.result.pages;
          var formattedpages = MassEval.functions.formatNumber(pages);
          var NodeID = "EvalTable_" + Infos.idnode + Infos.typeindex;
          var totalNodeID = "EvalTable_" + Infos.idnode + "total";
          var Node = document.getElementById(NodeID);
          if(!Node) return MassEval.functions.checkCatinfosEvalTable();
          while(Node.firstChild){ Node.removeChild(Node.firstChild); };          
          var link = Node.appendChild(MassEval.functions.createLink(Infos.cattitle,{text:formattedpages}));
          var totalNode = document.getElementById(totalNodeID);
          if(!totalNode) return MassEval.functions.checkCatinfosEvalTable();
          var ActualValue = totalNode.innerHTML.split(" ").join("");          
          ActualValue = (ActualValue ? parseInt(ActualValue) : 0);
          totalNode.innerHTML = MassEval.functions.formatNumber(ActualValue+pages);
          MassEval.functions.addSelectCatOnclickTolink(link, Infos.cattitle.split(mw.config.get('wgFormattedNamespaces')[14]+":").join(""))
          MassEval.functions.checkCatinfosEvalTable();
        }
      });                    
    },  
    checkCatinfosEvalTable : function(){  
      if(MassEval.params.EvalTableRequests===0){
        MassEval.functions.disableThings([ "EvalTable_update" ], false); 
        MassEval.functions.alertControl("updateevaltable");
      }      
    },
    updateCatAllpages : function(evaltheme){
      var CatAllpages = document.getElementById("CatAllpages");
      if(!evaltheme || !CatAllpages) return;
      CatAllpages.style.visibility = "hidden";
      CatAllpages.innerHTML = "?";
      evaltheme = MassEval.functions.ucFirst(evaltheme);
      var Page = MassEval.params.EvalCatAllpages.split("$1").join(evaltheme);
      MassEval.functions.getAPICategoryinfo({title:Page,callback:function(R){
        CatAllpages.innerHTML = "";
        var Link = CatAllpages.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+Page,{text:Page}));
        CatAllpages.style.visibility = "visible";
        MassEval.functions.addSelectCatOnclickTolinks(CatAllpages);
        MassEval.functions.getCatInfoFromLink(Link, Page, true);
      }});
    },
    updateCatStubpages : function(evaltheme){
      var CatStubpages = document.getElementById("CatStubpages");
      if(!evaltheme || !CatStubpages) return;
      CatStubpages.innerHTML = "?";
      CatStubpages.style.visibility = "hidden";
      var Page = MassEval.params.EvalCatStubpages.split("$1").join(MassEval.functions.ucFirst(evaltheme));
      var page = MassEval.params.EvalCatStubpages.split("$1").join(MassEval.functions.lcFirst(evaltheme));
      var CallBack = function(R){
        if(!R.result.missing){
          CatStubpages.innerHTML = "";
          var Link = CatStubpages.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+R.title,{text:R.title}));
          CatStubpages.style.visibility = "visible";
          MassEval.functions.addSelectCatOnclickTolinks(CatStubpages);
          MassEval.functions.getCatInfoFromLink(Link, R.title, true);
        }
      }
      MassEval.functions.getAPICategoryinfo({title:Page,callback:CallBack});
      MassEval.functions.getAPICategoryinfo({title:page,callback:CallBack});
    },
    updateCatMaincat : function(evaltheme){
      var CatMaincat = document.getElementById("CatMaincat");
      if(!evaltheme || !CatMaincat) return;
      CatMaincat.style.visibility = "hidden";
      CatMaincat.innerHTML = "?";
      evaltheme = MassEval.functions.ucFirst(evaltheme);
      MassEval.functions.getAPICategoryinfo({title:evaltheme,callback:function(R){
        CatMaincat.innerHTML = "";
        var Link = CatMaincat.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[14]+":"+evaltheme,{text:evaltheme}));
        CatMaincat.style.visibility = "visible";
        MassEval.functions.addSelectCatOnclickTolinks(CatMaincat);
        MassEval.functions.getCatInfoFromLink(Link, evaltheme, true);
      }});
    },
  // ------------------------------- Formulaire sélecteur de mode -------------------------------
    createModesFieldset : function(){
      var SelectedMode = MassEval.params.CurrentMode;
      var LaunchCond = MassEval.params.LaunchCondition;
      var ModesFieldset = document.createElement('fieldset');
      ModesFieldset.id = "fieldsetModes";
      var PortalLabel = ModesFieldset.appendChild(document.createElement('legend'));
      PortalLabel.innerHTML = MassEval.texts.Modes;
      var EvalContainer = ModesFieldset.appendChild(document.createElement('div'));
      $(EvalContainer).addClass("FieldsetContent");
      var Form = EvalContainer.appendChild(document.createElement('form'));
      Form.onsubmit = function(){ return false; };
      var AllModes = Object.keys(MassEval.params.ModesMap);
      for(var a=0,l=AllModes.length;a<l;a++){
        var Mode = AllModes[a];
        var Text = MassEval.texts[(Mode+"Mode")];
        var Title = MassEval.texts[(MassEval.params.ModesMap[Mode].veriftitle)];

        var Button = Form.appendChild(MassEval.functions.createInput({type:'button',value:Text,title:Title,name:Mode,id:Text}));
        Button.onclick = function(){
          MassEval.functions.getRelevantModeFieldset(this.name);
        }
        if(Mode == SelectedMode) $(Button).addClass("modeselected");
      }
      return ModesFieldset;
    },
    getRelevantModeFieldset : function(Mode){
      console.info("Mode = "+Mode);
      var AllModes = Object.keys(MassEval.params.ModesMap);
      if(AllModes.indexOf(Mode)===-1) return;
      MassEval.params.CurrentMode = Mode;
      var AllModesInfo = MassEval.params.ModesMap;
      for(var mode in AllModesInfo){
        var B = document.getElementById(MassEval.texts[(mode+"Mode")]);
        var FS = document.getElementById(AllModesInfo[mode].id);
        if(!FS || !B) continue;
        if(mode === Mode){
          $(B).addClass("modeselected");
          FS.style.display = "";
        }else{
          $(B).removeClass("modeselected");
          FS.style.display = "none";
        }
      }
      var VerifTitle = MassEval.texts[AllModesInfo[Mode].veriftitle];
      var VerifInput = document.getElementById("GlobalVerifInput");
      if(VerifInput && VerifTitle) VerifInput.title = VerifTitle;
      var AddTitle = MassEval.texts[AllModesInfo[Mode].addtitle];
      var AddInput = document.getElementById("GlobalAddEvalInput");
      if(AddInput && AddTitle) AddInput.title = AddTitle;
      var func = MassEval.functions[AllModesInfo[Mode].updatefunc];
      if(typeof(func) === "function") func();
    },
    getPageInfos : function(OldInputValue, NS, InputID){
      var DIV = document.getElementById(InputID+"Info");
      if(!DIV) return console.log("Manque élément "+InputID+"Info");
      var P = document.getElementById(InputID+"InfoExist");
      if(!P) return console.log("Manque élément "+InputID+"InfoExist");
      P.style.visibility = "hidden";
      var LI = document.getElementById(InputID+"Count");
      if(LI){ 
        var OldLIcontent = LI.innerHTML;
        LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
      }
      var title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+OldInputValue;
      var datas = {format:'json',action:'query',prop:'info',
        titles : title,
        inprop : 'protection|talkid|watched|watchers|visitingwatchers|subjectid',  
      };
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data) {
        var Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          var UL = document.createElement('ul');
          $(UL).addClass("PageInfos");
          var CurrentMode = MassEval.params.CurrentMode;
          var template = CurrentMode+"Exists";
          var linktext = (CurrentMode === "template" ? OldInputValue : title );
          var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(title)+'" title="'+title+'">'+linktext+'</a>';
          P.style.visibility = "hidden";
          var unwantedinfo = ["restrictiontypes","pagelanguagehtmlcode","pagelanguagedir"];
          var pages = data.query.pages;
          if(CurrentMode == "page") MassEval.functions.setFromToSelectorValues(1);
          var exists = true;
          var invalid = false;
          for(var id in pages){
            var pageinfo = pages[id];
            for(var infoname in pageinfo){
              if(unwantedinfo.indexOf(infoname)===-1){
                var infovalue = pageinfo[infoname];
                if(infoname === "missing"){
                  if(infovalue === "") exists = false;
                }else if(infoname == "invalid"){
                  invalid = true;
                }
                var LI = UL.appendChild(document.createElement('li'));
                MassEval.functions.cleanPageUserInfos(LI, infoname, infovalue);
              }
            }
          }
          if(invalid){
            LI.innerHTML = OldLIcontent;
            MassEval.functions.neutralizeLinks(LI);
            P.style.visibility = "visible";
            return;
          }
          while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
          DIV.appendChild(UL);
          if(exists){
            $(P.parentNode).removeClass("pagenoexists");
            template = MassEval.texts[(template+"Yes")];
            MassEval.functions.updateContentSub(OldInputValue, mw.config.get("wgFormattedNamespaces")[NS]);
          }else{
            $(P.parentNode).addClass("pagenoexists");
            template = MassEval.texts[(template+"No")];
            if(CurrentMode == "page") MassEval.functions.setFromToSelectorValues(0);
            MassEval.functions.updateContentSub();
          }
          template = template.split("$page").join('<b>'+link+'</b>');
          P.innerHTML = template;
          MassEval.functions.neutralizeLinks(P);
          P.style.visibility = "visible";
        }
        if(MassEval.functions.checkAnalysisID(id, 0)) MassEval.functions.alertControl("inputanalysis");
      });
    },
    cleanPageUserInfos_checkBoolean : function(infovalue){
      return MassEval.texts[( (infovalue === "") ? "YES" : "NO" )];
    },
    cleanPageUserInfos_checkNamespace : function(infovalue){
      if(infovalue == 0) return MassEval.texts.MainNamespace;
      else return mw.config.get("wgFormattedNamespaces")[infovalue];
    },
    cleanPageUserInfos_checkGender : function(infovalue){
      return MassEval.texts[("INFOgender"+infovalue)]
    },
    cleanPageUserInfos_checkTimestamp : function(infovalue){
     if(!infovalue || infovalue === null) return "";
      var Template = MassEval.texts.TimeDateTemplate;
      infovalue = infovalue.split("Z").join("");
      var time = infovalue.split("T")[1].split(":");
      var date = infovalue.split("T")[0].split("-");
      var Time = new Date(parseInt(date[0]), (parseInt(date[1])-1), parseInt(date[2]), parseInt(time[0]), parseInt(time[1])  );
      Time = new Date(Time.getTime()+(MassEval.params.TimeCorrection*60*1000));      
      Template = Template.split("$min").join(  MassEval.functions.addZero(Time.getMinutes())    );
      Template = Template.split("$h").join(    MassEval.functions.addZero(Time.getHours())   );
      Template = Template.split("$j").join(    Time.getDate()    );
      Template = Template.split("$m").join(    MassEval.texts[("Month"+MassEval.functions.addZero(Time.getMonth()+1)      )]);
      Template = Template.split("$a").join(    Time.getFullYear());
      return Template;
    },
    cleanPageUserInfos_checkUserName : function(infovalue){
      return MassEval.functions.createLink("User:"+infovalue, {text:infovalue});
    },
    cleanPageUserInfos : function(LI, infoname, infovalue){
      var cleanPageUserInfosFuncs = {
        missing          : MassEval.functions.cleanPageUserInfos_checkBoolean,
        pageid           : null,
        ns               : MassEval.functions.cleanPageUserInfos_checkNamespace,
        title            : MassEval.functions.createLink,
        contentmodel     : null,
        pagelanguage     : null,
        touched          : MassEval.functions.cleanPageUserInfos_checkTimestamp,
        lastrevid        : null,
        length           : MassEval.functions.formatNumber,
        protection       : JSON.stringify,
        watched          : MassEval.functions.cleanPageUserInfos_checkBoolean,
        watchers         : MassEval.functions.formatNumber,
        visitingwatchers : MassEval.functions.formatNumber,
        subjectid        : null,
        talkid           : null,
        userid           : null,
        name             : MassEval.functions.cleanPageUserInfos_checkUserName,
        editcount        : MassEval.functions.formatNumber,
        registration     : MassEval.functions.cleanPageUserInfos_checkTimestamp,
        groups           : JSON.stringify,
        gender           : MassEval.functions.cleanPageUserInfos_checkGender
      };
      var infoRealName = MassEval.texts[("INFO"+infoname)] || infoname;
      var Span = LI.appendChild(document.createElement('span'));
      Span.innerHTML = infoRealName + " : ";
      Span.style.fontWeight = "bold";
      var CleanFunc = cleanPageUserInfosFuncs[infoname];
      if(CleanFunc !== null && typeof(CleanFunc)==="function") infovalue = CleanFunc(infovalue);
      if(typeof(infovalue)==="string" || typeof(infovalue)==="number") LI.appendChild(document.createTextNode(infovalue));
      else LI.appendChild(infovalue);
      MassEval.functions.neutralizeLinks(LI);
      return LI;
    },
    getPageSuggestions : function(OldInputValue, NS, InputID){
      var Input = document.getElementById(InputID);
      var Select = document.getElementById(InputID+"Select");
      if(Input.value !== OldInputValue){
        if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getPageSuggestions(Input.value, NS, InputID);
        if(MassEval.functions.checkAnalysisID(id, 1)) MassEval.functions.alertControl("inputanalysis");
        return;
      }
      var datas = {format:'json',action:'query',list:'allpages',
        apprefix : OldInputValue,
        apnamespace : NS,
        apfilterredir : 'nonredirects',
        aplimit  : (MassEval.params.SuggestNumber*2)        
      };
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data) {
        Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          var query = data.query;
          if(query){
            var pages = query.allpages;
            var titles = [];
            for(var a=0,l=pages.length;a<l;a++){
              var pagedata = pages[a];
              var page = pagedata.title;
              if(NS != 10 || page.indexOf(MassEval.params.TemplateDocPage) === -1)  titles.push(MassEval.functions.getNamespaceInfoFromPage(page, "PageName"));
            }
            while(titles.length > MassEval.params.SuggestNumber){ titles.pop(); }
            MassEval.functions.updateSuggestionElements(titles, OldInputValue, InputID);
          }
        }
      });
    },
    getUserSuggestions : function(OldInputValue, InputID){
      var Input = document.getElementById(InputID);
      if(Input.value !== OldInputValue){
        if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getUserSuggestions(Input.value, InputID);
        if(MassEval.functions.checkAnalysisID(id, 1)) MassEval.functions.alertControl("useranalysis");
        return;
      }
      var datas = {format:'json',action:'query',list:'allusers',
        auprefix : OldInputValue,
        aplimit  : MassEval.params.SuggestNumber        
      };
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data) {
        Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          var query = data.query;
          if(query){
            var users = []
            var allusers = query.allusers;
            for(var a=0,l=allusers.length;a<l;a++){
              users.push(allusers[a].name);
            }
            MassEval.functions.updateSuggestionElements(users, OldInputValue, InputID);
          }
        }
      });
    },
    setInfosCount : function(count, LiID, InputValue){
      var LI = document.getElementById(LiID);
      if(!LI) return console.log("Manque élément "+LiID);
      var CurrentMode = MassEval.params.CurrentMode;
      var template = MassEval.texts[(CurrentMode+"Infos")].split("$1").join(MassEval.functions.formatNumber(count));
      if(InputValue) template = template.split("$2").join(InputValue);
      LI.innerHTML = template;
    },
  // ------------------------------- Formulaire "Page" -------------------------------
    createPageFieldset : function(title){  // Mode Page
      if(!title) title = "";
      else{
        var CurrentMode = MassEval.params.CurrentMode;
        if(CurrentMode==="cat") title = mw.config.get("wgFormattedNamespaces")[14] + ":" + title;
        if(CurrentMode==="template") title = mw.config.get("wgFormattedNamespaces")[10] + ":" + title;
        if(CurrentMode==="creations") title = mw.config.get("wgFormattedNamespaces")[2] + ":" + title;
      }
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetPage";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.pageMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDPage = TR.appendChild(document.createElement('td'));
      TDPage.id = "TDPage";
      var FS = TDPage.appendChild(document.createElement("fieldset"));
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = FS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.PageLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'page',id:"PageInput"});
      var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedPage(MassEval.params.KeyUpDelay); };
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'));
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.PageInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "PageInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "PageInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.PageExistsNo;
      Pinfos.style.visibility = "hidden";
      return Fieldset;
    },
    checkSelectedPage : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("PageInput");
      if(!Input) return;
      var PageName = MassEval.functions.ucFirst(Input.value);
      if(!PageName || PageName.length < 1) return;
      var NS = 0;
      Input.value = PageName;
      var funcs = ["getPageSuggestions","getPageInfos"];
      var mainfunc = function(){
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](PageName, NS, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    }, 
  // ------------------------------- Formulaire "Catégorie" -------------------------------

    createCategoryFieldset : function(CatTitle){
      if(!CatTitle) CatTitle = "";
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetCat";
      $(Fieldset).addClass("NoShowHideLinks");
      var CatLabel = Fieldset.appendChild(document.createElement('legend'));
      CatLabel.innerHTML = MassEval.texts.catMode;
      var CategoryContainer = Fieldset.appendChild(document.createElement('div'));
      $(CategoryContainer).addClass("FieldsetContent");
      var Table = CategoryContainer.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR1 = Table.appendChild(document.createElement('tr'));
      var TDCat = TR1.appendChild(document.createElement('td'));
      TDCat.id = "TDCat";
      var CatInput = MassEval.functions.createInput({type:"text",value:CatTitle,name:'cat',id:"CatInput"});
      CatInput.onkeyup = function(){ MassEval.functions.checkSelectedCat(MassEval.params.KeyUpDelay); };
      TDCat.appendChild(MassEval.functions.createSuggestSelect(CatInput));
      var CatSubcatForm = TDCat.appendChild(document.createElement('form'));
      CatSubcatForm.onsubmit = function(){ return false; };
      CatSubcatForm.id = "subcatcheckboxform";
      var PortalListCubCat = CatSubcatForm.appendChild(MassEval.functions.createInput({type:"checkbox",title:MassEval.texts.SubCatTitle.split("$count").join(""),name:'subcats',id:"SubCatsCheckBox"}));
      PortalListCubCat.onclick = function(){ MassEval.functions.getSelectedCatPageCountInSubcats(); }
      var Label = CatSubcatForm.appendChild(document.createElement('label'));
      Label.setAttribute('for', 'subcats');
      Label.innerHTML = MassEval.texts.SubCatTitle.split("$count").join('<span id="pagesinsubcatscount"> </span>');
      var Radioform = TDCat.appendChild(document.createElement('form'));
      Radioform.id = "subcatdepthForm";
      var Radioslabel = Radioform.appendChild(document.createElement('label'));
      Radioslabel.setAttribute('for', 'subcatdepth');
      Radioslabel.innerHTML = MassEval.texts.SubCatDepthText;
      MassEval.params.CurrentMaxSubcatLevel = 1;
      for(var a=1,l=(MassEval.params.MaxSubcatLevel+1);a<l;a++){        
        var RLabel = Radioform.appendChild(document.createElement('label'));
        RLabel.innerHTML = a;
        var Radio = Radioform.appendChild(MassEval.functions.createInput({type:'radio',value:a,title:a,name:'subcatdepth',id:"subcatdepth"+a}));
        Radio.disabled = "disabled";
        Radio.onclick = function(){
          if(this.disabled) return;
          MassEval.params.CurrentMaxSubcatLevel = this.value;
          MassEval.functions.getSelectedCatPageCountInSubcats();
        }
        if(a==1) Radio.checked = "checked";
      }
      var TDFamily = TR1.appendChild(document.createElement('td'));
      TDFamily.setAttribute('rowspan', 2);
      TDFamily.setAttribute('valign', 'top');
      var FamilyTable = TDFamily.appendChild(document.createElement('table'));
      FamilyTable.width = "100%";
      var FamilyTR = FamilyTable.appendChild(document.createElement('tr'));
      var TDParents = FamilyTR.appendChild(document.createElement('td'));
      TDParents.width = "50%";
      TDParents.id = "TDParents";
      TDParents.setAttribute('valign',"top");
      var Pparents = TDParents.appendChild(document.createElement('p'))
      $(Pparents).addClass("InfosP");
      Pparents.innerHTML = MassEval.texts.CatParents;
      var DivParents = TDParents.appendChild(document.createElement('div'));
      DivParents.id = "CatParentsDiv";
      var TDDaughters = FamilyTR.appendChild(document.createElement('td'));
      TDDaughters.id = "TDDaughters";
      TDDaughters.width = "50%";
      TDDaughters.setAttribute('valign',"top");
      var Pdaughters = TDDaughters.appendChild(document.createElement('p'))
      $(Pdaughters).addClass("InfosP");
      Pdaughters.innerHTML = MassEval.texts.CatDaughters;
      var DivDaughters = TDDaughters.appendChild(document.createElement('div'));
      DivDaughters.id = "CatDaughtersDiv";
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDCatInfos = TR2.appendChild(document.createElement('td'));
      TDCatInfos.id = "TDCatInfos";
      $(TDCatInfos).addClass("TDInfos pagenoexists");
      var DivInfos = TDCatInfos.appendChild(document.createElement('div'));
      DivInfos.id = "CatInfosDiv";
      var Pinfos = DivInfos.appendChild(document.createElement('p'));
      Pinfos.id = "Pinfos";
      DivInfos.style.visibility = "hidden";
      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";
      return Fieldset;
    },
    checkSelectedCat : function(delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var CatInput = document.getElementById("CatInput");
      if(!CatInput) return;
      var Cat = MassEval.functions.ucFirst(CatInput.value);
      if(Cat.length<1) return;
      CatInput.value = Cat;
      var funcs = ["PrefixCats","CatInfos","CatParents","CatDaughters","CatPageCountInSubcats"];
      clearTimeout(MassEval.params.SuggestTimeout);
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgCatAnalys.split("$cat").join(Cat), "Running");
        MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
        for(var a=0,l=funcs.length;a<l;a++) MassEval.functions[("getSelected"+funcs[a])](Cat, "CatInput");
      }
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc,delay);
      else mainfunc();
    },
    getSelectedPrefixCats(OldInputValue, InputID){
      var Input = document.getElementById(InputID);
      var Select = document.getElementById(InputID+"Select");
      if(Input.value !== OldInputValue){
        if(Input.value.indexOf(OldInputValue)===0) return MassEval.functions.getSelectedPrefixCats(Input.value, InputID);
        if(MassEval.functions.checkAnalysisID(id, 0)) MassEval.functions.alertControl("selectoranalysis");
        return;
      }
      var datas = {
          action   : 'query',
          list     : 'allcategories',
          acprefix : OldInputValue,
          aclimit  : MassEval.params.SuggestNumber,
          format   : 'json'
      };
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data) {
        Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          var categories = data.query.allcategories;
          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);
          }
          MassEval.functions.updateSuggestionElements(titles, OldInputValue, InputID);
        }
      });
    },
    getSelectedCatInfos : function(Cat){
      var CatInput = document.getElementById("CatInput");
      if(CatInput.value != Cat) return MassEval.functions.updateContentSub();
      var CatInfosDiv = document.getElementById("CatInfosDiv");
      if(!CatInfosDiv) return MassEval.functions.alertControl("selectoranalysis");
      CatInfosDiv.style.visibility = "hidden";
      MassEval.functions.getAPICategoryinfo({
        title : Cat,
        callback : function(R){
          var CatInput = document.getElementById("CatInput");
          if(CatInput.value.indexOf(R.title) ===0){
            var Pinfos = document.getElementById("Pinfos");
            var LIpages = document.getElementById("LIpages");
            var LIsubcats = document.getElementById("LIsubcats");
            var SubCats = document.getElementById("SubCatsCheckBox");
            LIpages.style.visibility = "hidden";
            LIsubcats.style.visibility = "hidden";
            if(R.result.missing){
              $(Pinfos.parentNode.parentNode).addClass("pagenoexists");
              Pinfos.innerHTML = MassEval.texts.CatExistsNo.split("$cat").join('<b>'+R.title+'</b>');
              MassEval.functions.updateContentSub();
            }else{
              $(Pinfos.parentNode.parentNode).removeClass("pagenoexists");
              MassEval.functions.updateContentSub(R.title, mw.config.get('wgFormattedNamespaces')[14]);
              var pages = R.result.pages;
              var subcats = R.result.subcats;
              var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+encodeURIComponent(R.title))+'" title="'+mw.config.get('wgFormattedNamespaces')[14]+":"+R.title+'">'+R.title+'</a>';
              if(MassEval.params.CurrentCatOnSpecialpage == R.title) link = R.title;
              Pinfos.innerHTML = MassEval.texts.CatExistsYes.split("$cat").join('<b>'+link+'</b>');
              LIpages.innerHTML = MassEval.texts.CatPages.split("$1").join(MassEval.functions.formatNumber(pages));
              LIpages.style.visibility = "visible";
              LIsubcats.innerHTML = MassEval.texts.CatCats.split("$1").join(MassEval.functions.formatNumber(subcats));
              LIsubcats.style.visibility = "visible";
            }
            if(!SubCats.checked){
              MassEval.functions.setFromToSelectorValues((R.result.pages ? R.result.pages : 0));
              MassEval.functions.alertControl("selectoranalysis");
            }
            CatInfosDiv.style.visibility = "visible";
          }
          if(MassEval.functions.checkAnalysisID(R.id, 1)) MassEval.functions.alertControl("selectoranalysis");
        }
      });
    },
    createCategoryLinkInList(pageinfo){
      var LI = document.createElement('li');
      var page = pageinfo.title;
      var title = MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
      var span = document.createElement('span');
      $(span).addClass("CategoryTreeToggle");
      span.innerHTML = MassEval.texts.CatButtonClosed;
      LI.appendChild(span);
      LI.appendChild(document.createTextNode(" "));
      LI.appendChild(MassEval.functions.createLink(page,{text:title}));
      if(pageinfo.hidden === ""){
        var abbr = LI.appendChild(document.createElement('abbr'));
        $(abbr).addClass("hiddencaticon");
        abbr.title = MassEval.texts.HiddenCat;
        abbr.innerHTML = '<img class="HiddenCatIcon" src="'+MassEval.params.ImageURL+MassEval.params.HiddenCatIcon+'" />';
      }
      return LI;
    },
    getSelectedCatParents(Cat){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var CatInput = document.getElementById("CatInput");
      if(CatInput.value != Cat) return;
      var CatParentsDiv = document.getElementById("CatParentsDiv");
      while(CatParentsDiv.firstChild){ CatParentsDiv.removeChild(CatParentsDiv.firstChild); }
      MassEval.functions.getAPICategories({
        node     : CatParentsDiv,
        catname  : Cat,
        title    : mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
        callback : function(R){
          var CanContinue = MassEval.functions.checkEmergencyStop();
          if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
          var CatInput = document.getElementById("CatInput");
          if(CatInput.value.indexOf(R.catname)===0){
            while(R.node.firstChild){ R.node.removeChild(R.node.firstChild); }
            var allcats = R.result;
            if(typeof(allcats)=="object"){
              var alltitles = Object.keys(allcats);
              if(alltitles.length > 0){
                var UL = R.node.appendChild(document.createElement('ul'));
                for(var pi in R.result){
                  UL.appendChild(MassEval.functions.createCategoryLinkInList(R.result[pi]));
                }
                MassEval.functions.addSelectCatOnclickTolinks(UL);
                MassEval.functions. getCatInfoFromLinks(UL);
              }
            }
          }
        }
      });
    },
    getSelectedCatDaughters(Cat){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var CatInput = document.getElementById("CatInput");
      if(CatInput.value != Cat) return;
      var CatDaughtersDiv = document.getElementById("CatDaughtersDiv");
      while(CatDaughtersDiv.firstChild){ CatDaughtersDiv.removeChild(CatDaughtersDiv.firstChild); }
      MassEval.functions.getAPICategorymembers({
        node     : CatDaughtersDiv,
        catname  : Cat,
        title    : mw.config.get('wgFormattedNamespaces')[14]+":"+Cat,
        cmtype   : 'subcat',
        callback : function(R){
          var CanContinue = MassEval.functions.checkEmergencyStop();
          if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
          var CatInput = document.getElementById("CatInput");
          if(CatInput.value.indexOf(R.catname)===0){
            while(CatDaughtersDiv.firstChild){ CatDaughtersDiv.removeChild(CatDaughtersDiv.firstChild); }
            var c = 0;
            var UL = R.node.appendChild(document.createElement('ul'));
            for(var pi in R.result){
              UL.appendChild(MassEval.functions.createCategoryLinkInList(R.result[pi]));
              c++
            }
            if(c>0){
              MassEval.functions.addSelectCatOnclickTolinks(UL);
              MassEval.functions. getCatInfoFromLinks(UL);
            }
          }
        }
      });
    },
    addSelectCatOnclickTolinks : function(node){
      var alllinks = node.getElementsByTagName('a');
      for(var a=0,l=alllinks.length;a<l;a++){
        var link = alllinks[a];
        MassEval.functions.addSelectCatOnclickTolink(link, link.innerHTML);
      }
    },
    addSelectCatOnclickTolink : function(link, cattitle, limitation){
      link.onclick = function(){
        if(limitation || $(link).hasClass("new")) return false;
        MassEval.functions.getRelevantModeFieldset("cat");
        var cat = cattitle;
        var Input = document.getElementById("CatInput");
        if(Input){
          Input.value = cat;
          MassEval.functions.checkSelectedCat();
        }
        return false;
      }
      if(!limitation && !$(link).hasClass("new")){
        link.title = MassEval.texts.SelectCat.split("$1").join(cattitle);
      }else{
        if(!$(link).hasClass("new")) link.title = MassEval.texts.TooMuchSubCatsSel.split("$1").join(cattitle).split("$limit").join(MassEval.params.MaxSubCatAllowedSel);
        else link.title = MassEval.texts.CatDoesntExistSel.split("$1").join(cattitle);
        link.style.cursor = "not-allowed";
      }
    },
    getCatInfoFromLinks : function (node, noexpand){
      if(!node) return;
      var links = node.getElementsByTagName('a');
      for(var a=0,l=links.length;a<l;a++){
        MassEval.functions.getCatInfoFromLink(links[a], links[a].innerHTML, noexpand);
      }
    },
    getCatInfoFromLink : function (link, catname, noexpand){
      MassEval.functions.getAPICategoryinfo({
        link : link,
        title : catname,
        callback : function(R){
          var Parent = R.link.parentNode;
          if(R.result.missing === true || !Parent){
            $(link).addClass("new");
            MassEval.functions.addSelectCatOnclickTolink(R.link, R.link.innerHTML);
            return
          }
          var template = MassEval.texts.CatInfos;
          if(!R.result.pages && R.result.subcats) template = MassEval.texts.CatInfosNOP;
          if(R.result.pages && !R.result.subcats) template = MassEval.texts.CatInfosNOC;
          var pages = '<abbr title="'+MassEval.texts.CatInfosPageTip+'">'+MassEval.texts.CatInfosPageText+'</abbr>';
          var subcats = '<abbr title="'+MassEval.texts.CatInfosCatTip+'">'+MassEval.texts.CatInfosCatText+'</abbr>';
          template = template.split("$P").join(pages);
          template = template.split("$C").join(subcats);
          template = template.split("$1").join(MassEval.functions.formatNumber(R.result.pages));
          template = template.split("$2").join(MassEval.functions.formatNumber(R.result.subcats));
          var infospan = Parent.appendChild(document.createElement('span'));
          infospan.innerHTML = template;
          if(R.result.subcats > MassEval.params.MaxSubCatAllowedSel){
            MassEval.functions.addSelectCatOnclickTolink(R.link, R.link.innerHTML, true);
          }
          if(R.result.subcats > 0 && !noexpand){
            var ToggleSpan = Parent.firstChild;
            var ToggleLink = Parent.insertBefore(MassEval.functions.createLink(null, {text:"",title:MassEval.texts.CatButtonExpand,href:"javascript:;"}), ToggleSpan);
            ToggleSpan.parentNode.removeChild(ToggleSpan);
            ToggleLink.appendChild(ToggleSpan);
            ToggleLink.className = ToggleSpan.className;
            ToggleSpan.className = "";
            if(R.result.subcats > MassEval.params.MaxSubCatAllowedExp){              
              ToggleLink.title = MassEval.texts.TooMuchSubCatsExp.split("$1").join(catname).split("$limit").join(MassEval.params.MaxSubCatAllowedExp);
              ToggleLink.style.cursor = "not-allowed";
            }else{
              ToggleLink.onclick = function(){
                var UL = Parent.getElementsByTagName('ul')[0];
                if(UL){
                  if(UL.style.display == "none"){
                    UL.style.display = "";
                    ToggleSpan.innerHTML = MassEval.texts.CatButtonOpened;
                    this.title = MassEval.texts.CatButtonHide;
                  }else{
                    UL.style.display = "none";
                    ToggleSpan.innerHTML = MassEval.texts.CatButtonClosed;
                    this.title = MassEval.texts.CatButtonExpand;
                  }
                }else{
                  MassEval.functions.categorytreeExpand(catname, Parent, this);
                }
              }
            }
          }
        }
      });
    },
    categorytreeExpand : function(catname, LI, ToggleLink){
      if(!LI.parentNode) return;
      MassEval.functions.getAPICategorymembers({
        node     : LI,
        link     : ToggleLink,
        title    : mw.config.get('wgFormattedNamespaces')[14]+":"+catname,
        cmtype   : 'subcat',
        callback : function(R){
          if(!R.node.parentNode || !R.link || !R.link.firstChild) return;
          var UL = R.node.appendChild(document.createElement('ul'));
          for(var pi in R.result){
            var pageinfo = R.result[pi];
            var page = pageinfo.title;
            var title = MassEval.functions.getNamespaceInfoFromPage(page, "PageName");
            var LI = UL.appendChild(document.createElement('li'));
            var span = document.createElement('span');
            $(span).addClass("CategoryTreeToggle");
            span.innerHTML = MassEval.texts.CatButtonClosed;
            LI.appendChild(span);
            LI.appendChild(document.createTextNode(" "));
            LI.appendChild(MassEval.functions.createLink(page,{text:title}));
            if(pageinfo.hidden === ""){
              LI.appendChild(MassEval.functions.createHiddenCatIcon());
            }
          }
          R.link.firstChild.innerHTML = MassEval.texts.CatButtonOpened;
          R.link.title = MassEval.texts.CatButtonHide;
          MassEval.functions.addSelectCatOnclickTolinks(UL);
          MassEval.functions. getCatInfoFromLinks(UL);
        }
      });
    },
    getSelectedCatPageCountInSubcats : function(Cat){
      var catinput = document.getElementById("CatInput");
      var subcatcheckbox = document.getElementById("SubCatsCheckBox");
      var countspan = document.getElementById("pagesinsubcatscount");
      if(!catinput || !subcatcheckbox || !countspan) return MassEval.functions.alertControl("selectoranalysis");;
      if(subcatcheckbox.checked && !subcatcheckbox.disabled){
        MassEval.functions.disableThings(["subcatdepthForm"], false);
        var catname = catinput.value;
        if(!catname){
          countspan.style.display = "none";
          return MassEval.functions.alertControl("selectoranalysis");
        }
        countspan.style.display = "";
        var Hidden = document.getElementById("lastcategorycounted");
        var LHidden = document.getElementById("lastsubcatlevel");
        if( Hidden && Hidden.value == catname && LHidden && LHidden.value == MassEval.params.CurrentMaxSubcatLevel){
          var b = countspan.getElementsByTagName('b')[0];
          if(b){
            var pageCount = parseInt(b.innerHTML.replace(/[^0-9]/g, ""));
            MassEval.functions.setFromToSelectorValues(pageCount);
          }
        }else{
          MassEval.functions.getPageCountInSubcats({start:true,title:catname});
        }
      }else{
        MassEval.functions.disableThings(["subcatdepthForm"], true);
        countspan.style.display = "none";
        MassEval.functions.alertControl("selectoranalysis");
        var LIpages = document.getElementById("LIpages");
        if(LIpages){
          var pageCount = parseInt(LIpages.innerHTML.replace(/[^0-9]/g, ""))
          MassEval.functions.setFromToSelectorValues(pageCount);
        }
      }
    },
    getPageCountInSubcats: function(Q){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      if(Q.start === true){ 
        MassEval.params.SubCatCount = {catlist:[],pagelist:[]};
        MassEval.params.SubCatCountReq = 0;
        Q.maxdepth = MassEval.params.CurrentMaxSubcatLevel;
        Q.currentdepth = 0;
        Q.catname = Q.title;
        Q.title = (mw.config.get('wgFormattedNamespaces')[14]+":"+Q.title);
      }
      MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], true);
      Q.start = false;
      delete Q.datas;
      MassEval.params.SubCatCountReq++;
      Q.cmprop = 'title';
      Q.cmtype = 'page|subcat';
      Q.callback = function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
        var newcatvalue = document.getElementById("CatInput").value;
        if(newcatvalue.indexOf(R.catname)!==0 || R.maxdepth != MassEval.params.CurrentMaxSubcatLevel){
          MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
          return;
        }
        var catstocheck = [];
        for(var pi in R.result){
          var pageinfo = R.result[pi];
          var ns = parseInt(pageinfo.ns);
          var title = pageinfo.title;
          if(ns === 14 && MassEval.params.SubCatCount.catlist.indexOf(title)===-1 && R.currentdepth<MassEval.params.CurrentMaxSubcatLevel){
            MassEval.params.SubCatCount.catlist.push(title);
            catstocheck.push({
              title : title,
              depth : R.currentdepth
            });
          }else if(ns<2 && MassEval.params.SubCatCount.pagelist.indexOf(title)===-1){
            MassEval.params.SubCatCount.pagelist.push(title);
          }
        }
        var TooMuchCats = (catstocheck.length > MassEval.params.MaxSubCatAllowedSel)
        if(!TooMuchCats){
          for(var a=0,l=catstocheck.length;a<l;a++){
            var cattocheck = catstocheck[a];
            MassEval.functions.getPageCountInSubcats({
              title        : cattocheck.title,
              currentdepth : (cattocheck.depth+1),
              catname      : R.catname,
              maxdepth     : R.maxdepth
            });
          }
        }
        MassEval.params.SubCatCountReq--;
        MassEval.functions.setPageCountInSubcats(R, TooMuchCats);
      };
      MassEval.functions.getAPICategorymembers(Q);
    },
    setPageCountInSubcats : function(Q, TooMuchCats){
      var cb = document.getElementById("SubCatsCheckBox");
      var cs = document.getElementById("pagesinsubcatscount");
      if((!cb.checked || TooMuchCats) && cs){
        cs.style.display = "none";
        MassEval.params.CatSubPageCountOK = true;
        MassEval.functions.checkPreliminaryLoadings();
        return;
      }
      var newcatvalue = document.getElementById("CatInput").value;
      if(newcatvalue.indexOf(Q.catname)===0){
        var bold = (MassEval.params.SubCatCountReq == 0);
        var template = MassEval.texts.CatAllPagesCount;
        template = template.split("$1").join(MassEval.functions.formatNumber(MassEval.params.SubCatCount.pagelist.length));
        if(cs){
          template = template.split("$P").join('<abbr title="'+MassEval.texts.CatInfosPageTip+'">'+MassEval.texts.CatInfosPageText+'</abbr>');
          template = (bold ? '<b>'+template+'</b>' : template);
          cs.innerHTML = "("+template+")";
          if(bold){
            var Hidden = cs.appendChild(MassEval.functions.createInput({type:'hidden',value:Q.catname,id:"lastcategorycounted"}));
            var RHidden = cs.appendChild(MassEval.functions.createInput({type:'hidden',value:Q.maxdepth,id:"lastsubcatlevel"}));
            MassEval.functions.disableThings([ "SubCatsCheckBox","subcatdepthForm"], false);
          }
          cs.style.display = "";
        }else if(bold){
          template = "("+template.split("$P").join(MassEval.texts.CatInfosPageTip.toLowerCase())+")";
          cb.title = MassEval.texts.SubCatTitle.split("$count").join(template);
          MassEval.functions.disableThings([ "SubCatsCheckBox" ], false);
          MassEval.params.CatSubPageCountOK = true;
          MassEval.functions.checkPreliminaryLoadings();
          MassEval.functions.alertControl("selectoranalysis");
        }
        MassEval.functions.setFromToSelectorValues(MassEval.params.SubCatCount.pagelist.length);
      }else{
        cs.style.display = "none";
      }
    },
  // ------------------------------- Formulaire "Liens" -------------------------------
    createLinksFieldset : function(title){  // Mode Links
      var DefaultNS = 0;
      if(!title) title = "";
      else{
        var CurrentMode = MassEval.params.CurrentMode;
        if(CurrentMode==="cat") DefaultNS = 14;
        if(CurrentMode==="template") DefaultNS = 10;
        if(CurrentMode==="creations") DefaultNS = 2;
      }
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetLinks";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.linksMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDLinks = TR.appendChild(document.createElement('td'));
      TDLinks.id = "TDLinks";
      var FS = TDLinks.appendChild(document.createElement("fieldset"));
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = FS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.LinksLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'linkshere',id:"LinksInput"});
      var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedLinks(MassEval.params.KeyUpDelay); };
      var NSInput = Form.insertBefore(MassEval.functions.createNamespaceSelect(DefaultNS), Form.firstChild);
      NSInput.onchange = function(){ MassEval.functions.checkSelectedLinks(MassEval.params.KeyUpDelay); };
      NSInput.id = "LinksInputNS";
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'))
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.LinksInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "LinksInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "LinksInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.PageExistsNo;
      Pinfos.style.visibility = "hidden";      
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "LinksInputCount";
      return Fieldset;
    },
    checkSelectedLinks : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("LinksInput");
      var NSInput = document.getElementById("LinksInputNS");
      if(!Input || !NSInput) return;
      var PageName = MassEval.functions.ucFirst(Input.value);
      if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
      var NS = parseInt(NSInput.value);
      Input.value = PageName;
      var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
      var funcs = ["getPageSuggestions","getPageInfos","getLinksCount"];
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgLinks.split("$page").join(Title), "Running");
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](PageName, NS, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    },
    getLinksCount : function(title, NS, InputID){
      MassEval.params.PageLinksList = [];
      var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
      MassEval.functions.getAPILinks({title:Title,result:[],callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
        var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
        var titles = R.result;
        for(var a=0,l=titles.length;a<l;a++){
          var title = titles[a];
          var OK = true;
          for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
            if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
          }
          if(OK) MassEval.params.PageLinksList.push(title);
        }
        var count = MassEval.params.PageLinksList.length;
        MassEval.functions.setInfosCount(count, (InputID+"Count"));
        MassEval.functions.setFromToSelectorValues(count);
        MassEval.functions.alertControl("selectoranalysis");
      }});
    },
  // ------------------------------- Formulaire "Pages liées" -------------------------------
    createLinkshereFieldset : function(title){  // Mode Linkshere
      var DefaultNS = 0;
      if(!title) title = "";
      else{
        var CurrentMode = MassEval.params.CurrentMode;
        if(CurrentMode==="cat") DefaultNS = 14;
        if(CurrentMode==="template") DefaultNS = 10;
        if(CurrentMode==="creations") DefaultNS = 2;
      }
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetLinkshere";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.linkshereMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDLinkshere = TR.appendChild(document.createElement('td'));
      TDLinkshere.id = "TDLinkshere";
      var FS = TDLinkshere.appendChild(document.createElement("fieldset"));
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = FS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.LinkshereLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'linkshere',id:"LinkshereInput"});
      var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedLinkshere(MassEval.params.KeyUpDelay); };
      var NSInput = Form.insertBefore(MassEval.functions.createNamespaceSelect(DefaultNS), Form.firstChild);
      NSInput.onchange = function(){ MassEval.functions.checkSelectedLinkshere(MassEval.params.KeyUpDelay); };
      NSInput.id = "LinkshereInputNS";
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'))
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.LinkshereInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "LinkshereInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "LinkshereInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.PageExistsNo;
      Pinfos.style.visibility = "hidden";
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "LinkshereInputCount";
      return Fieldset;
    },
    checkSelectedLinkshere : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("LinkshereInput");
      var NSInput = document.getElementById("LinkshereInputNS");
      if(!Input || !NSInput) return;
      var PageName = MassEval.functions.ucFirst(Input.value);
      if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
      var NS = parseInt(NSInput.value);
      Input.value = PageName;
      var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+PageName;
      var funcs = ["getPageSuggestions","getPageInfos","getLinkshereCount"];
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgLinkshere.split("$page").join(Title), "Running");
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](PageName, NS, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    }, 
    getLinkshereCount : function(title, NS, InputID){
      var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
      MassEval.params.PageLinkshereList = [];
      MassEval.functions.getAPILinkshere({title:Title,result:[],lhprop:'title',lhnamespace:'0|1',lhshow:'!redirect',callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
        var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
        var Infos = R.result[Title];
        if(Infos){
          var titles = Infos.linkshere;
          if(titles && titles.length > 0){
            for(var a=0,l=titles.length;a<l;a++){
              var title = titles[a].title;
              var OK = true;
              for(var tp=0,tplen=TalkSubPagesToAvoid.length;tp<tplen;tp++){
                if(title.indexOf(TalkSubPagesToAvoid[tp]) !==-1 ) OK = false;
              }
              if(OK) MassEval.params.PageLinkshereList.push(title);
            }
          }
        }
        var count = MassEval.params.PageLinkshereList.length;
        MassEval.functions.setInfosCount(count, (InputID+"Count"));
        MassEval.functions.setFromToSelectorValues(count);
        MassEval.functions.alertControl("selectoranalysis");
      }});
    },
  // ------------------------------- Formulaire "Inclusions" -------------------------------
    createTemplateFieldset : function(title){  // Mode Template
      if(!title) title = "";
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetTemplate";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.templateMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDTemplate = TR.appendChild(document.createElement('td'));
      TDTemplate.id = "TDTemplate";
      var FS = TDTemplate.appendChild(document.createElement("fieldset"));
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = FS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.TemplateLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'template',id:"TemplateInput"});
      var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedTemplate(MassEval.params.KeyUpDelay); };
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'));
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.TemplateInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "TemplateInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TDdoc = InfoTR.appendChild(document.createElement('td'));
      TDdoc.id = "TDtemplatedoc";
      TDdoc.setAttribute('valign',"top");
      var Pdoc = TDdoc.appendChild(document.createElement('p'))
      $(Pdoc).addClass("InfosP");
      Pdoc.innerHTML = MassEval.texts.TemplateDocLabel;
      var Divdoc = TDdoc.appendChild(document.createElement('div'));
      Divdoc.id = "TemplateDoc";
      $(Divdoc).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "TemplateInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.TemplateExistsNo;
      Pinfos.style.visibility = "hidden";
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "TemplateInputCount";
      return Fieldset;
    },
    checkSelectedTemplate : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("TemplateInput");
      if(!Input) return;
      var PageName = MassEval.functions.ucFirst(Input.value);
      if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
      var NS = 10;
      Input.value = PageName;
      var funcs = ["getPageSuggestions","getPageInfos","getEnbeddedinCount","getTemplateDoc"];
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgTemplate.split("$template").join(PageName), "Running");
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](PageName, NS, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    }, 
    getEnbeddedinCount : function(title, NS, InputID){
      MassEval.params.PageTemplateList = [];
      var Title = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title;
      MassEval.functions.getAPIEmbeddedin({title:Title,result:[],einamespace:'0',callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
        var TalkSubPagesToAvoid = MassEval.params.TalkSubPagesToAvoid;
        MassEval.params.PageTemplateList = R.result;
        var count = MassEval.params.PageTemplateList.length;
        MassEval.functions.setInfosCount(count, (InputID+"Count"));
        MassEval.functions.setFromToSelectorValues(count);
        MassEval.functions.alertControl("selectoranalysis");
      }});
    },
    getTemplateDoc : function(title, NS, InputID){
      var DocDiv = document.getElementById("TemplateDoc");
      if(!DocDiv) return;
      while(DocDiv.firstChild){ DocDiv.removeChild(DocDiv.firstChild); }
      var DocTitle = mw.config.get("wgFormattedNamespaces")[NS]+(NS===0 ? "" : ":")+title; // +MassEval.params.TemplateDocPage;
      var URL = mw.util.getUrl(DocTitle);
      $.ajax({url:URL, complete: function(Req){
        while(DocDiv.firstChild){ DocDiv.removeChild(DocDiv.firstChild); }
        var TEMP = document.createElement("div");
        TEMP.style.display = "none";
        TEMP.innerHTML = Req.responseText;
        document.body.appendChild(TEMP);
        var Divs = TEMP.getElementsByTagName('div');
        var IDs = MassEval.params.DivIDsToPreview;
        var noarticletext = false;
        for(var a=0,l=Divs.length;a<l;a++){
          if($(Divs[a]).hasClass("noarticletext")) noarticletext = true;
        }
        if(!noarticletext){
          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) continue;
            DocDiv.appendChild(thisDiv);
            if(thisDiv.id === "catlinks") MassEval.functions.addSelectCatOnclickTolinks(thisDiv);
            else MassEval.functions.neutralizeLinks(thisDiv);
          }
        }
        TEMP.parentNode.removeChild(TEMP);
      }});
    },
  // ------------------------------- Formulaire "Nouvelles pages" -------------------------------
    createNewpagesFieldset : function(){  // Mode Newpages
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetNewpages";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.newpagesMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDNewpages = TR.appendChild(document.createElement('td'));
      TDNewpages.id = "TDNewpages";
      var TimeSelector =  TDNewpages.appendChild(MassEval.functions.createTimeSelector(MassEval.functions.checkSelectedNewpages));
      TimeSelector.id = "NewpagesTimeSelector";
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'));
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.newpagesInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "NewpagesInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      TDInfos.id = "NewpagesExistInfos";
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "NewpagesExist";
      Pinfos.innerHTML = MassEval.texts.newpagesExistsNo;
      Pinfos.style.visibility = "hidden";
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "NewpagesInfos";
      return Fieldset;
    },
    checkSelectedNewpages : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      MassEval.functions.updateContentSub(true);
      var LI = document.getElementById("NewpagesInfos");
      if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
      var Timestamp = MassEval.functions.getTimeSelectorValue("NewpagesTimeSelector");
      MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgNewpages, "Running");
      MassEval.functions.getAPIRecentchanges({timestamp:Timestamp,callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgNewpages, "Stop");
        var titles = R.result;
        var count = Object.keys(titles).length;  
        var P = document.getElementById("NewpagesExist");
        var LI = document.getElementById("NewpagesInfos");
        if(count==0){
          var template = MassEval.texts.newpagesExistsNo;
          $(P.parentNode).addClass("pagenoexists");  
        }else{
          var template = MassEval.texts.newpagesExistsYes;
          $(P.parentNode).removeClass("pagenoexists");        
        }
        P.innerHTML = template;
        P.style.visibility = "visible";
        MassEval.functions.setInfosCount(count, "NewpagesInfos");
        MassEval.functions.setFromToSelectorValues(count);
        var DIV = document.getElementById("NewpagesInputInfo"); 
        while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); }
        var UL = DIV.appendChild(document.createElement('ul'));
        $(UL).addClass("PageInfos");
        for(var a=0,l=titles.length;a<l;a++){
          var title = titles[a].title;
          var timestamp = titles[a].timestamp;
          var LI = UL.appendChild(document.createElement('li'));
          var link = LI.appendChild(MassEval.functions.createLink(title)); 
          link.onclick = function(){ return false; };
          LI.appendChild(document.createTextNode(" : "));
          LI.appendChild(document.createTextNode(MassEval.functions.cleanPageUserInfos_checkTimestamp(timestamp)));     
        }
        MassEval.functions.alertControl("selectoranalysis");
      }});
    },
  // ------------------------------- Formulaire "Créations" -------------------------------
    createCreationsFieldset : function(title){  // Mode Creations
      if(!title) title = "";
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetCreations";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.creationsMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDUser = TR.appendChild(document.createElement('td'));
      TDUser.id = "TDUser";
      var UserFS = TDUser.appendChild(document.createElement("fieldset"));
      $(UserFS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = UserFS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.UserLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'user',id:"UserInput"});
      var Form = UserFS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedCreations(MassEval.params.KeyUpDelay); };
      var TimeSelector =  TDUser.appendChild(MassEval.functions.createTimeSelector(MassEval.functions.checkSelectedCreations));
      TimeSelector.id = "CreationsTimeSelector";
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'));
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.UserInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "UserInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "UserInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.creationsExistsNo;
      Pinfos.style.visibility = "hidden";
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "UserInputCount";
      return Fieldset;
    },
    checkSelectedCreations : function(Delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("UserInput");
      if(!Input) return;
      var PageName = MassEval.functions.ucFirst(Input.value);
      if(!PageName || PageName.length < 1) return MassEval.functions.updateContentSub();
      Input.value = PageName;
      var funcs = ["getUserSuggestions","getUserInfos","getUsercontribsCount"];
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgCreations.split("$user").join(PageName), "Running");
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](PageName, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    },
    getUserInfos : function(OldInputValue, InputID){
      var DIV = document.getElementById(InputID+"Info");
      if(!DIV) return console.log("Manque élément "+InputID+"Info");
      var P = document.getElementById(InputID+"InfoExist");
      if(!P) return console.log("Manque élément "+InputID+"InfoExist");     
      P.style.visibility = "hidden";
      var LI = document.getElementById(InputID+"Count");
      if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
      while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
      var Datas = {format:'json',action:'query',list:'users',
          usprop      : 'blockinfo|groups|editcount|registration|emailable|gender',
          ususers     : OldInputValue
        };
      $.ajax({url: mw.util.wikiScript('api'), data: Datas,dataType: 'json'
      }).then(function(data) {
        var link = '<a href="'+mw.config.get('wgArticlePath').split('$1').join(mw.config.get("wgFormattedNamespaces")[2]+":"+OldInputValue)+'" title="'+mw.config.get("wgFormattedNamespaces")[2]+":"+OldInputValue+'">'+OldInputValue+'</a>';
        var unwantedinfo = [];
        Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          while(DIV.firstChild){ DIV.removeChild(DIV.firstChild); };
          var UL = DIV.appendChild(document.createElement("ul"));
          $(UL).addClass("PageInfos");
          var found = false;
          var query = data.query;
          if(query){
            var user = query.users[0];
            if(user){
              var username = user.name;
              if(username === OldInputValue){
                found = true;
                for(var infoname in user){
                  if(unwantedinfo.indexOf(infoname)===-1){
                    var infovalue = user[infoname];
                    if(infoname === "missing" && infovalue === "") found = false;
                    var LI = UL.appendChild(document.createElement('li'));
                    MassEval.functions.cleanPageUserInfos(LI, infoname, infovalue);
                  }
                }
              }
            }
          }
        }
        if(found){
          var template = MassEval.texts.creationsExistsYes;
          $(P.parentNode).removeClass("pagenoexists");
          MassEval.functions.updateContentSub(OldInputValue);
        }else{
          var template = MassEval.texts.creationsExistsNo;
          $(P.parentNode).addClass("pagenoexists");   
          MassEval.functions.updateContentSub();       
        }
        template = template.split("$page").join('<b>'+link+'</b>');
        P.innerHTML = template;
        MassEval.functions.neutralizeLinks(P);
        P.style.visibility = "visible";
      });
    },
    getUsercontribsCount : function(user, InputID){
      var Timestamp = MassEval.functions.getTimeSelectorValue("CreationsTimeSelector");
      MassEval.functions.getAPIUsercontribs({timestamp:Timestamp,user:user,callback:function(R){
        var CanContinue = MassEval.functions.checkEmergencyStop();
        if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
        var titles = R.result;
        var count = titles.length;   
        MassEval.functions.setInfosCount(count, (InputID+"Count"));     
        MassEval.functions.setFromToSelectorValues(count);
        MassEval.functions.alertControl("selectoranalysis");
      }});
    },
  // ------------------------------- Formulaire "Prefixes" -------------------------------
    createPrefixesFieldset : function(title){
      if(!title) title = "";
      var Fieldset = document.createElement('fieldset');
      Fieldset.id = "fieldsetPrefixes";
      $(Fieldset).addClass("NoShowHideLinks");
      var Label = Fieldset.appendChild(document.createElement('legend'));
      Label.innerHTML = MassEval.texts.prefixesMode;
      var Container = Fieldset.appendChild(document.createElement('div'));
      $(Container).addClass("FieldsetContent");
      var Table = Container.appendChild(document.createElement('table'));
      Table.style.width = "100%";
      var TR = Table.appendChild(document.createElement('tr'));
      var TDPrefixes = TR.appendChild(document.createElement('td'));
      TDPrefixes.id = "TDPrefixes";
      var FS = TDPrefixes.appendChild(document.createElement("fieldset"));
      $(FS).addClass("NoBorderFieldset NoShowHideLinks");
      var Legend = FS.appendChild(document.createElement("legend"));
      Legend.innerHTML = MassEval.texts.PrefixLabel;
      var Input = MassEval.functions.createInput({type:"text",value:title,name:'prefix',id:"PrefixInput"});
      var Form = FS.appendChild(MassEval.functions.createSuggestSelect(Input));
      Input.onkeyup = function(){ MassEval.functions.checkSelectedPrefixes(MassEval.params.KeyUpDelay); };
      var TD = TR.appendChild(document.createElement('td'));
      TD.setAttribute("rowspan", 2);
      TD.setAttribute('valign',"top");
      var InfoTable = TD.appendChild(document.createElement('table'));
      InfoTable.width = "100%";
      var InfoTR = InfoTable.appendChild(document.createElement('tr'));
      var TDinfos = InfoTR.appendChild(document.createElement('td'));
      TDinfos.setAttribute('valign',"top");
      var P = TDinfos.appendChild(document.createElement('p'));
      $(P).addClass("InfosP");
      P.innerHTML = MassEval.texts.prefixesInfosLabel;
      var Div = TDinfos.appendChild(document.createElement('div'));
      Div.id = "PrefixInputInfo";
      $(Div).addClass("PageInfosDiv");
      var TR2 = Table.appendChild(document.createElement('tr'));
      var TDInfos = TR2.appendChild(document.createElement('td'));
      $(TDInfos).addClass("TDInfos pagenoexists");
      var Pinfos = TDInfos.appendChild(document.createElement('p'));
      Pinfos.id = "PrefixInputInfoExist";
      Pinfos.innerHTML = MassEval.texts.prefixesExistsNo;
      Pinfos.style.visibility = "hidden";
      var ULinfos = TDInfos.appendChild(document.createElement('ul'));
      var LIpages = ULinfos.appendChild(document.createElement('li'));
      LIpages.id = "PrefixInputCount";
      return Fieldset;
    },
    checkSelectedPrefixes : function(delay){
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue) return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      var Input = document.getElementById("PrefixInput");
      if(!Input) return;
      var Prefix = MassEval.functions.ucFirst(Input.value);
      if(!Prefix || Prefix.length < 1) return;
      Input.value = Prefix;
      var funcs = ["getPageSuggestions","getPrefixedPageCount"];
      var mainfunc = function(){
        MassEval.functions.alertControl("selectoranalysis", MassEval.texts.AlertMsgPrefixes.split("$1").join(Prefix), "Running");
        for(var a=0,l=funcs.length;a<l;a++){
          MassEval.functions[funcs[a]](Prefix, 0, Input.id);
        }
      }
      clearTimeout(MassEval.params.SuggestTimeout);
      if(typeof(delay)=="number" && delay > 0) MassEval.params.SuggestTimeout = setTimeout(mainfunc, delay);
      else mainfunc();
    },
    getPrefixedPageCount : function(OldInputValue, NS, InputID, pagelist, contvalue){
      var P = document.getElementById("PrefixInputInfoExist");
      var Div = document.getElementById("PrefixInputInfo");
      if(!P || !Div) return MassEval.functions.alertControl("selectoranalysis");
      var LI = document.getElementById("PrefixInputCount");
      if(LI) LI.innerHTML = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
      while(Div.firstChild){ Div.removeChild(Div.firstChild); };
      if(!pagelist) pagelist = [];
      var datas = {format:'json',action:'query',list:'allpages',
        apprefix : OldInputValue,
        apnamespace : NS,
        aplimit : MassEval.params.APILimit       
      };
      if(contvalue) datas.apcontinue = contvalue;
      $.ajax({url: mw.util.wikiScript('api'), data: datas,dataType: 'json'
      }).then(function(data) {
        Input = document.getElementById(InputID);
        if(Input.value.indexOf(OldInputValue)===0){
          var query = data.query;
          if(query){
            var pages = query.allpages;
            for(var a=0,l=pages.length;a<l;a++){
              var pagedata = pages[a];
              var page = pagedata.title;
              pagelist.push(page);
            }
          }
          var cont = data.continue;
          if(cont){
            var apcontinue = cont.apcontinue;
            if(apcontinue) return MassEval.functions.getPrefixedPageCount(OldInputValue, NS, InputID, pagelist, apcontinue);            
          }
          var count = pagelist.length;
          if(count==0){
            var template = MassEval.texts.prefixesExistsNo.split("$1").join(OldInputValue);
            $(P.parentNode).addClass("pagenoexists");  
          }else{
            var template = MassEval.texts.prefixesExistsYes.split("$1").join(OldInputValue);
            $(P.parentNode).removeClass("pagenoexists");        
          }
          P.innerHTML = template;
          P.style.visibility = "visible";
          MassEval.functions.setInfosCount(count, (InputID+"Count"), OldInputValue);
          MassEval.functions.setFromToSelectorValues(count);          
          while(Div.firstChild){ Div.removeChild(Div.firstChild); };
          var UL = Div.appendChild(document.createElement('ul'));
          $(UL).addClass("PageInfos");
          for(var a=0,l=pagelist.length;a<l;a++){
            var t = pagelist[a];
            var LI = UL.appendChild(document.createElement('li'));
            var link = LI.appendChild(MassEval.functions.createLink(t)); 
            link.onclick = function(){ return false; };        
          }          
          MassEval.functions.alertControl("selectoranalysis");
        }
      });
    },
  // ------------------------------- Formulaire "Filtrage" -------------------------------
    createFilterFieldset : function(){
      var SearchFieldset = document.createElement('fieldset');
      SearchFieldset.id = "fieldsetSearch";
      var SearchLegend =  SearchFieldset.appendChild(document.createElement('legend'));
      SearchLegend.innerHTML = MassEval.texts.Search;
      var SearchContainer = SearchFieldset.appendChild(document.createElement('div'));
      $(SearchContainer).addClass("FieldsetContent");
      var SearchForm = SearchContainer.appendChild(document.createElement('form'));
      SearchForm.onsubmit = function(){ return false; };
      SearchForm.id = "EvalSearchForm"; 
      var FromToSelectorContainer = SearchForm.appendChild(document.createElement('div'));
      FromToSelectorContainer.id = "FromToSelectorContainer";
      var FromToSelectorDiv = FromToSelectorContainer.appendChild(document.createElement('div'));
      FromToSelectorDiv.title = MassEval.texts.RangeSelectorTip
      FromToSelectorDiv.id = "FromToSelectorDiv";
      FromToSelectorDiv.style.width = "100%";
      $(FromToSelectorDiv).addClass("RangeSelectorDisabled");
      var FromHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorFrom"}));
      var ToHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorTo"}));
      var CatSizeHidden = SearchForm.appendChild(MassEval.functions.createInput({type:'hidden',value:0,id:"FromToSelectorCatSize"}));
      var FromToSelector = FromToSelectorDiv.appendChild(document.createElement('div'));
      FromToSelector.id = "FromToSelector";
      FromToSelector.style.position = "relative";
      FromToSelector.style.top = 0;
      FromToSelector.style.left = "0%";
      FromToSelector.style.width = "100%";
      var FromDiv = FromToSelector.appendChild(document.createElement('div'));
      FromDiv.id = "FromSelector";
      FromDiv.style.position = "relative";
      FromDiv.style.top = 0;
      FromDiv.style.left = 0;
      var ToDiv = FromToSelector.appendChild(document.createElement('div'));
      ToDiv.id = "ToSelector";
      ToDiv.style.float = "right";
      ToDiv.style.position = "relative";
      ToDiv.style.top = 0;
      ToDiv.style.right = 0;
      var MoveDiv = FromToSelector.appendChild(document.createElement('div'));
      MoveDiv.id = "FromSelectorMove";
      var table = SearchForm.appendChild(document.createElement('table'));
      table.width = "100%";
      var tr = table.appendChild(document.createElement('tr'));
      var tdRange = tr.appendChild(document.createElement('td'));
      var tdFilter = tr.appendChild(document.createElement('td'));
      var tdCounter = tr.appendChild(document.createElement('td'));
      tdRange.width = "125px";
      tdCounter.width = "125px";
      var CounterA = tdRange.appendChild(document.createElement('a'));
      CounterA.href = "javascript:;";
      CounterA.id = "RangeSelectorAbbrLink";
      CounterA.onclick = function (){ 
         if(!$(this).hasClass("RangeSelectorDisabled")) MassEval.functions.razFromToSelector();
      }
      var Counter = CounterA.appendChild(document.createElement('span'));
      var Template = MassEval.texts.RangeSelectorTempl;
      Counter.innerHTML = Template.split("$from").join("<span id='FromSelectorValue'>0</span>").split("$to").join("<span id='ToSelectorValue'>0</span>");
      Counter.id = "RangeSelectorAbbr";
      Counter.title = MassEval.texts.RangeViewerTip;
      var PageFilteredCount = tdCounter.appendChild(MassEval.functions.createLink(null,{text:"",href:"javascript:;",title:MassEval.texts.NotFilteredCount}));
      PageFilteredCount.id = "PageFilteredCount";
      PageFilteredCount.style.visibility = "hidden";
      PageFilteredCount.onclick = function(){ MassEval.functions.razFilterOptions(); };
      var Center = tdFilter.appendChild(document.createElement('center')); 
      Center.id = "FilterOptions";           
      var STUBform = Center.appendChild(document.createElement('span'));
      STUBform.id = "FilterForm_STUB";
      var STUBLabel = STUBform.appendChild(document.createElement('label'));
      STUBLabel.innerHTML = MassEval.texts.STUB + " : ";
      STUBLabel.setAttribute("for", "StubFilterCheckbox");
      var StubParams = [
       { text : MassEval.texts.NO , color: MassEval.params.Avancement[1].color },
       { text : MassEval.texts.YES, color: MassEval.params.Avancement[5].color }
      ];
      for(var a=0,l=StubParams.length;a<l;a++){
        var STUB = StubParams[a];
        var Span = STUBform.appendChild(document.createElement('span'));
        Span.style.backgroundColor = STUB.color;
        var STUBInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:STUB.text,name:"StubFilterCheckbox"}));
        STUBInput.checked = "checked";
        if(a===0) $(Span).addClass('startFilterOption');
        else $(Span).addClass('endFilterOption');
      }
      var ANDORselect1 = Center.appendChild(document.createElement('select'));
      ANDORselect1.id = "ANDORselect1";
      var AND = ANDORselect1.appendChild(document.createElement('option'));
      AND.value = "AND";
      AND.innerHTML = MassEval.texts.SearchAND;
      AND.selected = "selected";
      var OR = ANDORselect1.appendChild(document.createElement('option'));
      OR.value = "OR";
      OR.innerHTML = MassEval.texts.SearchOR;
      var AVTform = Center.appendChild(document.createElement('span'));
      AVTform.id = "FilterForm_AVT";
      var AVTLabel = AVTform.appendChild(document.createElement('label'));
      AVTLabel.innerHTML = MassEval.texts.AVT + " : ";
      AVTLabel.setAttribute("for", "Avancement_Filter");
      var Avancements = MassEval.params.Avancement;
      for(var a=0,l=Avancements.length;a<l;a++){
        var AVT = Avancements[a];
        var Span = AVTform.appendChild(document.createElement('span'));
        Span.style.backgroundColor = AVT.color;
        var AVTInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:AVT.text,name:"Avancement_Filter"}));
        AVTInput.checked = "checked";
        if(a===0) $(Span).addClass('startFilterOption');
      }
      var NoAVTSpan = AVTform.appendChild(document.createElement('span'));
      NoAVTSpan.style.backgroundColor = "black";
      $(NoAVTSpan).addClass('endFilterOption');
      var NoAVTInput = NoAVTSpan.appendChild(MassEval.functions.createInput({type:'checkbox',value:-1,title:MassEval.texts.AVTOptNone,name:"Avancement_Filter"}));
      NoAVTInput.checked = "checked";
      var ANDORselect2 = Center.appendChild(document.createElement('select'));
      ANDORselect2.id = "ANDORselect2";
      var AND = ANDORselect2.appendChild(document.createElement('option'));
      AND.value = "AND";
      AND.innerHTML = MassEval.texts.SearchAND;
      AND.selected = "selected";
      var OR = ANDORselect2.appendChild(document.createElement('option'));
      OR.value = "OR";
      OR.innerHTML = MassEval.texts.SearchOR;
      var IMPform = Center.appendChild(document.createElement('span'));
      IMPform.id = "FilterForm_IMP";
      var IMPLabel = IMPform.appendChild(document.createElement('label'));
      IMPLabel.innerHTML = MassEval.texts.IMP + " : ";
      IMPLabel.setAttribute("for", "Importance_Filter");
      var Importances = MassEval.params.Importance;
      for(var a=0,l=Importances.length;a<l;a++){
        var IMP = Importances[a];
        var Span = IMPform.appendChild(document.createElement('span'));
        Span.style.backgroundColor = IMP.color;
        var IMPInput = Span.appendChild(MassEval.functions.createInput({type:'checkbox',value:a,title:IMP.text,name:"Importance_Filter"}));
        IMPInput.checked = "checked";
        if(a===0) $(Span).addClass('startFilterOption');
      }
      var NoIMPSpan = IMPform.appendChild(document.createElement('span'));
      NoIMPSpan.style.backgroundColor = "black";
      $(NoIMPSpan).addClass('endFilterOption');
      var NoIMPInput = NoIMPSpan.appendChild(MassEval.functions.createInput({type:'checkbox',value:-1,title:MassEval.texts.IMPOptNone,name:"Importance_Filter"}));
      NoIMPInput.checked = "checked";
      var inputs = Center.getElementsByTagName('input');
      for(var a=0,l=inputs.length;a<l;a++){ inputs[a].onclick = function(){ MassEval.functions.checkFilterOptions(); } }
      var selects = Center.getElementsByTagName('select');
      for(var a=0,l=selects.length;a<l;a++){ selects[a].onclick = function(){ MassEval.functions.checkFilterOptions(); } }
      return SearchFieldset;
    },
    setFromToSelectorValues : function(totalpages){
      if(typeof(totalpages) !== "number" || (""+totalpages) === "NaN") return;
      var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
      var FromToSelectorDiv = document.getElementById("FromToSelectorDiv");
      var FromHidden = document.getElementById("FromToSelectorFrom");
      var ToHidden = document.getElementById("FromToSelectorTo");
      var FromToSelector = document.getElementById("FromToSelector");
      var FromSelectorValue = document.getElementById("FromSelectorValue");
      var ToSelectorValue = document.getElementById("ToSelectorValue");
      var RangeSelectorLink = document.getElementById("RangeSelectorAbbrLink");
      if(!CatSizeHidden || !FromToSelectorDiv || !FromHidden || !ToHidden || !FromToSelector || !FromSelectorValue || !ToSelectorValue || !RangeSelectorLink) return;
      if(totalpages===0){
        CatSizeHidden.value = 0;
        FromHidden.value = 0;
        FromSelectorValue.innerHTML = 0;
        ToHidden.value = 0;
        ToSelectorValue.innerHTML = 0;
        $(FromToSelectorDiv).addClass("RangeSelectorDisabled");
        MassEval.functions.disableThings(["GlobalVerifInput","GlobalAddEvalInput"], true);
        RangeSelectorLink.style.visibility = "hidden";
      }else{
        CatSizeHidden.value = totalpages;
        FromHidden.value = 1;
        FromSelectorValue.innerHTML = 1;
        ToHidden.value = totalpages;
        ToSelectorValue.innerHTML = totalpages;
        $(FromToSelectorDiv).removeClass("RangeSelectorDisabled");
        MassEval.functions.disableThings(["GlobalVerifInput","GlobalAddEvalInput"], false);
        RangeSelectorLink.style.visibility = "visible";
      }
      FromToSelector.style.left = "0%";
      FromToSelector.style.width = "100%";      
      $(FromSelectorValue.parentNode).removeClass("NotAllPages");
    },
    updateFromToSelectorValues : function(data){
      var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
      var FromHidden = document.getElementById("FromToSelectorFrom");
      var ToHidden = document.getElementById("FromToSelectorTo");
      var FromToSelector = document.getElementById("FromToSelector");
      var FromSelectorValue = document.getElementById("FromSelectorValue");
      var ToSelectorValue = document.getElementById("ToSelectorValue");
      if(!CatSizeHidden || !FromHidden || !ToHidden || !FromToSelector || !FromSelectorValue || !ToSelectorValue) return;
      var NEWfrom = data.from;
      var NEWto = data.to;
      var Total = parseInt(CatSizeHidden.value);
      if((NEWfrom != 1 || NEWto != Total) && Total !==1) $(FromSelectorValue.parentNode).addClass("NotAllPages");
      else $(FromSelectorValue.parentNode).removeClass("NotAllPages");
      FromHidden.value = NEWfrom;
      FromSelectorValue.innerHTML = NEWfrom;
      ToHidden.value = NEWto;
      ToSelectorValue.innerHTML = NEWto;
    },
    getFromToSelectorValues : function(){
      var Hidden = document.getElementById("FromToSelectorCatSize");
      var FromHidden = document.getElementById("FromToSelectorFrom");
      var ToHidden = document.getElementById("FromToSelectorTo");
      if(!Hidden || !FromHidden || !ToHidden) return null;
      var values =  {
                      from  : parseInt(FromHidden.value),
                      to    : parseInt(ToHidden.value),
                      total : parseInt(Hidden.value)
      };
      return values;
    },
    razFromToSelector : function(){
      var CatSizeHidden = document.getElementById("FromToSelectorCatSize");
      if(!CatSizeHidden) return;
      MassEval.functions.setFromToSelectorValues(parseInt(CatSizeHidden.value));
    },
    getNav : (function () {
      var agt = navigator.userAgent.toLowerCase();
      var is_ie = agt.indexOf("msie") !== -1 && agt.indexOf("opera") === -1;
      return function () {
          return is_ie;
      };
    })(),
    getXmousePosition : function(e){
      var X;
      if(MassEval.functions.getNav()){
        X = parseInt( e.clientX + document.getElementsByTagName('body')[0].scrollLeft );
      }else{
        X = parseInt( e.clientX );
      }
      return X;
    },
    setFromSelectorAnchor : function(){
      var anchorNode = document.getElementById("FromSelector");
      var ElementToMoveAndResize = document.getElementById("FromToSelector");
      if(!anchorNode || !ElementToMoveAndResize) return;
      anchorNode.onmousedown = function(e){
        if(!e) { e = window.event; }
        var totalWidth = parseInt(ElementToMoveAndResize.parentNode.clientWidth);
        var values = MassEval.functions.getFromToSelectorValues();
        var initialX = MassEval.functions.getXmousePosition(e);
        ElementToMoveAndResize.initialX = initialX;        
        ElementToMoveAndResize.Step = (100/values.total);
        ElementToMoveAndResize.initialFrom = (values.from-1);
        ElementToMoveAndResize.initialTo = (values.to+1);
        ElementToMoveAndResize.initialTotal = values.total;
        //console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToMoveAndResize.Step+" | From = "+ElementToMoveAndResize.initialFrom+" | To = "+ElementToMoveAndResize.initialTo);
        $(document.body).addClass("MouseFunctionRunning");
        $(document.body).addClass("ResizeFunctionRunning");
        document.body.onmousemove = function(e){
          if(!e) { e = window.event; }
          var X = MassEval.functions.getXmousePosition(e);
          var PercentMove = parseFloat((X - ElementToMoveAndResize.initialX)/(totalWidth*100)*10000);
          var NewSteps = Math.round(PercentMove/ElementToMoveAndResize.Step);
          var NewLeft = (ElementToMoveAndResize.initialFrom + NewSteps);
          if(NewLeft < 0) NewLeft = 0;
          if(NewLeft > ElementToMoveAndResize.initialTo-2) NewLeft = (ElementToMoveAndResize.initialTo-2);
          var NewWidth = (ElementToMoveAndResize.initialTo - NewLeft -1);
          //console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Step = "+ElementToMoveAndResize.Step+" | From = "+NewLeft+" | To = "+(NewWidth+NewLeft));
          ElementToMoveAndResize.style.width  = (NewWidth*ElementToMoveAndResize.Step) + '%';
          ElementToMoveAndResize.style.left = (NewLeft*ElementToMoveAndResize.Step) + '%';
          MassEval.functions.updateFromToSelectorValues({from:(NewLeft+1),to:(NewLeft+NewWidth)});
        };
        document.body.onmouseup = function(e) {
          document.body.onmousemove = null;
          document.body.onmouseup = null;
          $(document.body).removeClass("MouseFunctionRunning");
          $(document.body).removeClass("ResizeFunctionRunning");
        }; 
      };
      anchorNode.style.cursor = "w-resize";
    },
    setToSelectorAnchor : function(){
      var anchorNode = document.getElementById("ToSelector");
      var ElementToResize = document.getElementById("FromToSelector");
      if(!anchorNode || !ElementToResize) return;
      anchorNode.onmousedown = function(e){
        if(!e) { e = window.event; }
        var totalWidth = parseInt(ElementToResize.parentNode.clientWidth);
        var values = MassEval.functions.getFromToSelectorValues();
        var initialX = MassEval.functions.getXmousePosition(e);
        ElementToResize.initialX = initialX;        
        ElementToResize.Step = (100/values.total);
        ElementToResize.initialFrom = (values.from-1);
        ElementToResize.initialTo = (values.to+1);
        ElementToResize.initialTotal = values.total;
        //console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToResize.Step+" | From = "+ElementToResize.initialFrom+" | To = "+ElementToResize.initialTo);
        $(document.body).addClass("MouseFunctionRunning");
        $(document.body).addClass("ResizeFunctionRunning");
        document.body.onmousemove = function(e){
          if(!e) { e = window.event; }
          var X = MassEval.functions.getXmousePosition(e);
          var PercentMove = parseFloat((X - ElementToResize.initialX)/(totalWidth*100)*10000);
          var NewSteps = Math.round(PercentMove/ElementToResize.Step);
          var NewWidth = ((ElementToResize.initialTo-ElementToResize.initialFrom) -1 + NewSteps);
          if(NewWidth < 1) NewWidth = 1;
          if((NewWidth+ElementToResize.initialFrom) > ElementToResize.initialTotal){
            NewWidth = (ElementToResize.initialTotal - ElementToResize.initialFrom);
          }
          //console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Width = "+NewWidth);
          ElementToResize.style.width  = (NewWidth*ElementToResize.Step) + '%';
          MassEval.functions.updateFromToSelectorValues({from:(ElementToResize.initialFrom+1),to:(ElementToResize.initialFrom+NewWidth)});
        };
        document.body.onmouseup = function(e) {
          document.body.onmousemove = null;
          document.body.onmouseup = null;
          $(document.body).removeClass("MouseFunctionRunning");
          $(document.body).removeClass("ResizeFunctionRunning");
        }; 
      };
      anchorNode.style.cursor = "w-resize";
    },
    setMoveSelectorAnchor : function(){
      var anchorNode = document.getElementById("FromSelectorMove");
      var ElementToMove = document.getElementById("FromToSelector");
      if(!anchorNode || !ElementToMove) return;
      anchorNode.onmousedown = function(e){
        if(!e) { e = window.event; }
        var totalWidth = parseInt(ElementToMove.parentNode.clientWidth);
        var values = MassEval.functions.getFromToSelectorValues();
        var initialX = MassEval.functions.getXmousePosition(e);
        ElementToMove.initialX = initialX;        
        ElementToMove.Step = (100/values.total);
        ElementToMove.initialFrom = (values.from-1);
        ElementToMove.initialTo = values.to;
        ElementToMove.initialTotal = values.total;
        //console.log("# X = "+initialX+" | totalWidth = "+totalWidth+" | Move = 0 | Step = "+ElementToMove.Step+" | From = "+ElementToMove.initialFrom+" | To = "+ElementToMove.initialTo);
        $(document.body).addClass("MouseFunctionRunning");
        $(document.body).addClass("MoveFunctionRunning");
        document.body.onmousemove = function(e){
          if(!e) { e = window.event; }
          var X = MassEval.functions.getXmousePosition(e);
          var PercentMove = parseFloat((X - ElementToMove.initialX)/(totalWidth*100)*10000);
          var NewSteps = Math.round(PercentMove/ElementToMove.Step);
          var NewLeft = (ElementToMove.initialFrom + NewSteps);
          if(NewLeft < 0) NewLeft = 0;
          var NewWidth = ((ElementToMove.initialTo-ElementToMove.initialFrom));
          if((NewWidth+NewLeft) > ElementToMove.initialTotal) NewLeft =  ElementToMove.initialTotal-NewWidth;
          //console.log("* X = "+X+" | totalWidth = "+totalWidth+" | Move = "+NewSteps+" | Step = "+ElementToMove.Step+" | From = "+NewLeft+" | To = "+(NewWidth+NewLeft));
          ElementToMove.style.width  = (NewWidth*ElementToMove.Step) + '%';
          ElementToMove.style.left = (NewLeft*ElementToMove.Step) + '%';
          MassEval.functions.updateFromToSelectorValues({from:(NewLeft+1),to:(NewLeft+NewWidth)});
        };
        document.body.onmouseup = function(e) {
          document.body.onmousemove = null;
          document.body.onmouseup = null;
          $(document.body).removeClass("MouseFunctionRunning");
          $(document.body).removeClass("MoveFunctionRunning");
        }; 
      };
      anchorNode.style.cursor = "move";
    },
    checkFilterOptions : function(data){
      var MassEvalBoardList = document.getElementById("MassEvalBoardList");
      var STUBSelector = document.getElementById("FilterForm_STUB");
      var ANDORselect1 = document.getElementById("ANDORselect1");
      var AVTSelector = document.getElementById("FilterForm_AVT");
      var ANDORselect2 = document.getElementById("ANDORselect2");
      var IMPSelector = document.getElementById("FilterForm_IMP");
      var PageFilteredCount = document.getElementById("PageFilteredCount");
      if(!MassEvalBoardList || !STUBSelector || !ANDORselect1 || !AVTSelector || !ANDORselect2 || !IMPSelector || !PageFilteredCount) return;
      if(!MassEval.functions.getFilterConditions()) return;
      PageFilteredCount.style.visibility = "hidden";
      var TRs = MassEvalBoardList.getElementsByTagName('tr');
      if(TRs.length<2) return;      
      var stubs = [];
      var STUBInputs = STUBSelector.getElementsByTagName("input");
      for(var a=0,l=STUBInputs.length;a<l;a++){
        if(STUBInputs[a].checked) stubs.push(parseInt(STUBInputs[a].value));
      }
      var avts = [];
      var AVTInputs = AVTSelector.getElementsByTagName("input");
      for(var a=0,l=AVTInputs.length;a<l;a++){
        if(AVTInputs[a].checked) avts.push(parseInt(AVTInputs[a].value));
      }
      var imps = [];
      var IMPInputs = IMPSelector.getElementsByTagName("input");
      for(var a=0,l=IMPInputs.length;a<l;a++){
         if(IMPInputs[a].checked) imps.push(parseInt(IMPInputs[a].value));
      }
      var andor1 = ANDORselect1.value;
      var andor2 = ANDORselect2.value;
      var shownpages = 0;
      var totalpages = 0;
      for(var a=1,l=TRs.length;a<l;a++){
        var Classes = TRs[a].className.split(" ");
        var thisstub = ( (Classes.indexOf("stub")!==-1) ? 1 : 0);
        var thisavt = -1;
        for(var c=0,clen=Classes.length;c<clen;c++){ if(Classes[c].indexOf("AVT_")!==-1) thisavt = parseInt(Classes[c].split("AVT_").join("")); }
        var thisimp = -1;
        for(var c=0,clen=Classes.length;c<clen;c++){ if(Classes[c].indexOf("IMP_")!==-1) thisimp = parseInt(Classes[c].split("IMP_").join("")); }
        var foundSTUB = (stubs.indexOf(thisstub) !== -1);
        var foundAVT  = ( avts.indexOf(thisavt)  !== -1);
        var foundIMP  = ( imps.indexOf(thisimp)  !== -1);
        if(MassEval.functions.getFilterResults([foundSTUB, andor1, foundAVT, andor2, foundIMP])){
          $(TRs[a]).removeClass('FilteredLine');
          shownpages++
        }else{
          $(TRs[a]).addClass('FilteredLine');
        }
        totalpages++
      }
      var template = MassEval.texts.FilteredCount;
      var count = template.split("$shown").join(shownpages).split("$total").join(totalpages);
      PageFilteredCount.innerHTML = count;
      if(shownpages !== totalpages) $(PageFilteredCount).addClass("NotAllPages");
      else $(PageFilteredCount).removeClass("NotAllPages");
      PageFilteredCount.style.visibility = "visible";
      if(!data) data = {};
      data.afteroptioncheck = true;
      MassEval.functions.setChangeCancelInputDisabled(data);
    },
    razFilterOptions(){
      var STUBSelector = document.getElementById("FilterForm_STUB");
      var AVTSelector = document.getElementById("FilterForm_AVT");
      var IMPSelector = document.getElementById("FilterForm_IMP");
      if(!STUBSelector || !AVTSelector || !IMPSelector) return;
      var Els = [STUBSelector,AVTSelector,IMPSelector];
      for(var a=0,l=Els.length;a<l;a++){
        var inputs = Els[a].getElementsByTagName('input');
        for(var i=0,ilen=inputs.length;i<ilen;i++){
          inputs[i].checked = "checked";
        }
      }
      MassEval.functions.checkFilterOptions();
    },
    getFilterConditions : function(){
      var STUBSelector = document.getElementById("FilterForm_STUB");
      var AVTSelector = document.getElementById("FilterForm_AVT");
      var IMPSelector = document.getElementById("FilterForm_IMP");
      if(!STUBSelector || !AVTSelector || !IMPSelector) return true;
      var stubs = [];
      var STUBInputs = STUBSelector.getElementsByTagName("input");
      for(var a=0,l=STUBInputs.length;a<l;a++){
        if(STUBInputs[a].checked) stubs.push(parseInt(STUBInputs[a].value));
      }
      var avts = [];
      var AVTInputs = AVTSelector.getElementsByTagName("input");
      for(var a=0,l=AVTInputs.length;a<l;a++){
        if(AVTInputs[a].checked) avts.push(parseInt(AVTInputs[a].value));
      }
      var imps = [];
      var IMPInputs = IMPSelector.getElementsByTagName("input");
      for(var a=0,l=IMPInputs.length;a<l;a++){
         if(IMPInputs[a].checked) imps.push(parseInt(IMPInputs[a].value));
      }
      if(stubs.length == 0 || avts.length == 0 || imps.length == 0){
        if(stubs.length == 0){
          STUBSelector.style.backgroundColor = "red";
          MassEval.functions.alertControl("filtercheckSTUB", MassEval.texts.AlertMsgFilterSTUB, "Warning");
        }else{
          STUBSelector.style.backgroundColor = "transparent";
          MassEval.functions.alertControl("filtercheckSTUB");
        }
        if(avts.length == 0){
          AVTSelector.style.backgroundColor = "red";
          MassEval.functions.alertControl("filtercheckAVT", MassEval.texts.AlertMsgFilterAVT, "Warning");
        }else{
          AVTSelector.style.backgroundColor = "transparent";
          MassEval.functions.alertControl("filtercheckAVT");
        }
        if(imps.length == 0){
          IMPSelector.style.backgroundColor = "red";
          MassEval.functions.alertControl("filtercheckIMP", MassEval.texts.AlertMsgFilterIMP, "Warning");
        }else{
          IMPSelector.style.backgroundColor = "transparent";
          MassEval.functions.alertControl("filtercheckIMP");
        }
        return false;
      }else{
        STUBSelector.style.backgroundColor = "transparent";
        MassEval.functions.alertControl("filtercheckSTUB");
        AVTSelector.style.backgroundColor = "transparent";
        MassEval.functions.alertControl("filtercheckAVT");
        IMPSelector.style.backgroundColor = "transparent";
        MassEval.functions.alertControl("filtercheckIMP");
        return true;
      }
    },
    getFilterResults : function(VARS){
      var table = [
        [true	,"AND"	,false	,"AND"	,false	,false	],
        [true	,"AND"	,false	,"AND"	,true	,false	],
        [true	,"AND"	,true	,"AND"	,false	,false	],
        [true	,"AND"	,true	,"AND"	,true	,true	],
        [false	,"AND"	,false	,"AND"	,false	,false	],
        [false	,"AND"	,false	,"AND"	,true	,false	],
        [false	,"AND"	,true	,"AND"	,false	,false	],
        [false	,"AND"	,true	,"AND"	,true	,false	],
        [true	,"AND"	,false	,"OR"	,false	,false	],
        [true	,"AND"	,false	,"OR"	,true	,true	],
        [true	,"AND"	,true	,"OR"	,false	,true	],
        [true	,"AND"	,true	,"OR"	,true	,true	],
        [false	,"AND"	,false	,"OR"	,false	,false	],
        [false	,"AND"	,false	,"OR"	,true	,true	],
        [false	,"AND"	,true	,"OR"	,false	,false	],
        [false	,"AND"	,true	,"OR"	,true	,true	],
        [true	,"OR"	,false	,"AND"	,false	,true	],
        [true	,"OR"	,false	,"AND"	,true	,true	],
        [true	,"OR"	,true	,"AND"	,false	,true	],
        [true	,"OR"	,true	,"AND"	,true	,true	],
        [false	,"OR"	,false	,"AND"	,false	,false	],
        [false	,"OR"	,false	,"AND"	,true	,false	],
        [false	,"OR"	,true	,"AND"	,false	,false	],
        [false	,"OR"	,true	,"AND"	,true	,true	],
        [true	,"OR"	,false	,"OR"	,false	,true	],
        [true	,"OR"	,false	,"OR"	,true	,true	],
        [true	,"OR"	,true	,"OR"	,false	,true	],
        [true	,"OR"	,true	,"OR"	,true	,true	],
        [false	,"OR"	,false	,"OR"	,false	,false	],
        [false	,"OR"	,false	,"OR"	,true	,true	],
        [false	,"OR"	,true	,"OR"	,false	,true	],
        [false	,"OR"	,true	,"OR"	,true	,true	]
      ];
      for(var a=0,l=table.length;a<l;a++){
        var R = table[a];
        var result = true;
        for(var r=0,rlen=VARS.length;r<rlen;r++){
          if(VARS[r]!==R[r]) result = false;
        }
        if(result) return R[5];
      }
    },
  // ------------------------------- Formulaire "Actions" -------------------------------
   checkEmergencyStop : function(){
     var EmergencyStop = document.getElementById("EmergencyStop");
     if(!EmergencyStop) return true;
     if(EmergencyStop.style.display == "none"){
       MassEval.functions.alertControl("emergencystop");
       return true;
     }
     var CanContinue = (!$(EmergencyStop).hasClass("Pushed"));
     if(!CanContinue) MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopNeeded, "Stop"); 
     return CanContinue;
   },
    createActionFieldset : function(){
      var Texts = MassEval.texts;
      var LaunchCond = MassEval.params.LaunchCondition;
      var ActionsLI = document.createElement('fieldset');
      ActionsLI.id = "fieldsetActions";
      var ActionsLabel = ActionsLI.appendChild(document.createElement('legend'));
      ActionsLabel.innerHTML = Texts.Actions;
      var ActionsContainer = ActionsLI.appendChild(document.createElement('div'));
      $(ActionsContainer).addClass("FieldsetContent");
      var LeftButtons = ActionsContainer.appendChild(document.createElement('div'));
      LeftButtons.id = "LeftButtons";
      var PortalListInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoListText,title:Texts.GoVerifCat,id:"GlobalVerifInput"}));
      PortalListInput.style.fontWeight = "bold";
      PortalListInput.onclick = function(){
        var Mode = MassEval.params.CurrentMode;
        var func = MassEval.functions[MassEval.params.ModesMap[Mode].listfunc];
        if(typeof(func)==="function") func({});
      };
      var LinksActions = LeftButtons.appendChild(document.createElement('div'));
      LinksActions.id = "LinksActions";
      var EmergencyStop = LinksActions.appendChild(MassEval.functions.createLink(null,{text:"",href: "javascript:;",title:Texts.EmergencyStop }));
      EmergencyStop.id = "EmergencyStop";
      EmergencyStop.onclick = function(){
        if($(this).hasClass("Pushed")){
          $(this).removeClass("Pushed");
          MassEval.functions.alertControl("emergencystop");
          MassEval.functions.getRelevantModeFieldset(MassEval.params.CurrentMode);
        }else{
          $(this).addClass("Pushed"); 
          MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopNeeded, "Stop");        
        }
        return false;
      }; 
      var AddEvalInput = LinksActions.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoAddEvalText,title:Texts.GoAddLinks,id:"GlobalAddEvalInput"}));
      if(LaunchCond ===2) AddEvalInput.title = Texts.GoAddCat;
      AddEvalInput.style.fontWeight = "bold";
      AddEvalInput.onclick = function(){
        var AVTSelect = document.getElementById("GlobalAddEvalAVTSelect");
        var IMPSelect = document.getElementById("GlobalAddEvalIMPSelect");
        var Cancel = document.getElementById("GlobalAddEvalCancel");
        if(!AVTSelect || !IMPSelect || !Cancel) return;
        if(AVTSelect.style.display == "none"){
          $(AVTSelect).show("slow");
          $(IMPSelect).show("slow");
          $(Cancel).show("slow");
        }else{
          $(AVTSelect).hide("slow");
          $(IMPSelect).hide("slow");
          $(Cancel).hide("slow");
          var evaltheme = document.getElementById("EvalThemeInput").value;
          var Mode = MassEval.params.CurrentMode;
          var func = MassEval.functions[MassEval.params.ModesMap[Mode].listfunc];
          if(typeof(func)==="function") func({onlymissingeval:true});
        }
      }
      var AddEvalAVTSelect = LinksActions.appendChild(MassEval.functions.createAVTSelect(7, 0, false, true));
      AddEvalAVTSelect.id = "GlobalAddEvalAVTSelect";
      AddEvalAVTSelect.onchange = function(){ MassEval.functions.updateSelectBGcolor(this); }
      AddEvalAVTSelect.title = Texts.AVT;
      var AddEvalIMPSelect = LinksActions.appendChild(MassEval.functions.createIMPSelect(4, "", 0, 0, true));
      AddEvalIMPSelect.id = "GlobalAddEvalIMPSelect";
      AddEvalIMPSelect.onchange = function(){ MassEval.functions.updateSelectBGcolor(this); }
      AddEvalIMPSelect.title = Texts.IMP;
      var AddEvalCancel = LinksActions.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoAddCancelText,title:Texts.GoAddCancelTip,id:"GlobalAddEvalCancel"}));
      AddEvalCancel.onclick = function(){
        var AVTSelect = document.getElementById("GlobalAddEvalAVTSelect");
        var IMPSelect = document.getElementById("GlobalAddEvalIMPSelect");
        var Cancel = document.getElementById("GlobalAddEvalCancel");
        if(!AVTSelect || !IMPSelect || !Cancel) return;
        $(AVTSelect).hide("slow");
        $(IMPSelect).hide("slow");
        $(Cancel).hide("slow");
      }
      MassEval.functions.displayNodes([AddEvalAVTSelect,AddEvalIMPSelect,AddEvalCancel], false);
      var GlobalChangeInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoChangeText,title:Texts.GoChangeTitle.split("$1").join(""),id:"GlobalChangeInput"}));
      GlobalChangeInput.onclick = function(){
        MassEval.functions.processTheseLinesChanges();
      }
      if(!MassEval.params.AllowEdition) GlobalChangeInput.style.fontStyle = "italic";
      var GlobalCancelInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoCancelText,title:Texts.GoCancelTitle.split("$1").join(""),id:"GlobalCancelInput"}));
      GlobalCancelInput.onclick = function(){
        MassEval.functions.cancelAllChanges();
      }
      var ParamsInput = LeftButtons.appendChild(MassEval.functions.createInput({type:"button",value:Texts.GoOptionsText,title:Texts.GoOptionsTitle,id:"GlobalOptionsInput"}));
      MassEval.functions.disableThings([ ParamsInput ], !MassEval.params.OptionsSubPageOK);
      ParamsInput.onclick = function(){
        MassEval.functions.openOptionsForm();
      }
      MassEval.functions.disableThings([ PortalListInput, GlobalChangeInput, GlobalCancelInput ], true);
      var docInput = ActionsContainer.appendChild(MassEval.functions.createInput({type:'button',value:Texts.GoDocText,title:Texts.GoDocTitle,id:"DocInput"}));
      docInput.onclick = function(){
        window.open(MassEval.params.DocURL);
      }
      return ActionsLI;
    },
    createBoardListDiv : function(){
      var T = MassEval.texts;
      var boardListDiv = document.createElement("div");
      boardListDiv.id = "MassEvalBoardListDiv";
      boardListDiv.className = "empty";
      boardListDiv.style.display = "none";
      var boardList = boardListDiv.appendChild(document.createElement("table"));
      boardList.id = "MassEvalBoardList";
      boardList.className = "evaltable centre";
      boardList.width = "100%";
      var TR1 = boardList.appendChild(document.createElement("tr"));
      for(var a=0,l=6;a<l;a++){
        var TH = TR1.appendChild(document.createElement("th"));
        TH.id = "MassEval_TH"+(a+1);
        $(TH).addClass("TH"+(a+1));
        TH.appendChild(document.createTextNode(T[("TH"+a+"text")]));
        var SortLinks = MassEval.functions.createSortLinks(a);
        if(SortLinks) TH.appendChild(SortLinks);        
      }
      if(!MassEval.params.SearchForPortalTag) $(document.body).addClass("hideportals");
      if(MassEval.params.LaunchCondition ===2){
        var bottomlinks = boardListDiv.appendChild(document.createElement("div"));
        bottomlinks.id = "bottomlinks";
        var t = T.bottomlinkstemplate;
        bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.EvalTheme),    title:" ",href:"#fieldsetEval"}));
        bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Modes),        title:" ",href:"#fieldsetModes"}));
        bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Search),       title:" ",href:"#fieldsetSearch"}));
        bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.Actions),      title:" ",href:"#fieldsetActions"}));
        bottomlinks.appendChild(MassEval.functions.createLink(null,{text:t.split("$1").join(T.PageListTable),title:" ",href:"#MassEvalBoardListDiv"}));
      }
      return boardListDiv;
    },
    clearBoardList : function(){      
      var boardList = document.getElementById("MassEvalBoardList");
      var boardListDiv = document.getElementById("MassEvalBoardListDiv");
      if(boardList && boardListDiv){
        while(boardList.getElementsByTagName("tr").length > 1){
          boardList.getElementsByTagName("tr")[1].parentNode.removeChild(boardList.getElementsByTagName("tr")[1]);
          if(boardList.getElementsByTagName("tr").length < 2) break;
        }
        boardListDiv.style.display = "none";
      }
    },
  // ------------------------------- Formulaire "Options de tri" -------------------------------

    createSortLinks : function(thindex){
      var SortOption = MassEval.params.SortOptions[thindex];
      if(typeof(SortOption)==="undefined") return false;
      var Container = document.createElement('div');
      Container.className = "SortLinks";
      var SortTypes = ["UP","DOWN"];
      for(var t=0,tlen=SortTypes.length;t<tlen;t++){
        var SortType = SortTypes[t];
        var Text = MassEval.texts[("Sort"+SortType+"Arrow")];
        var Title = MassEval.texts[(SortOption+SortType)];
        var ThisLink = Container.appendChild(MassEval.functions.createLink(null,{text:Text,title:Title,href:"javascript:;"}));
        ThisLink.className = (SortOption+"_"+SortType);
        ThisLink.onclick = function(){
          MassEval.functions.sortPages(this);
        }
      }
      return Container;
    },
    sortPages : function(Link) {
      var evaltheme = document.getElementById("EvalThemeInput").value;
      if(!evaltheme) return;
      var portaltheme = MassEval.functions.getPortalSelectValue();
      var sortvalue = Link.className;
      var getsortFunc = {
        SortTitle  : function(a,b){ var A = [b[1],a[1]].sort(); return ( A[0] == a[1] ? 1 : -1 ); },
        SortPortal : function(a,b){ return (b[1] - a[1]); },
        SortStub   : function(a,b){ return (b[1] - a[1]); },
        SortAVT    : function(a,b){ return (b[1] - a[1]); },
        SortIMP    : function(a,b){ return (b[1] - a[1]); }
      };
      var getsortParam = {
        SortTitle  : function(p){ return MassEval.functions.deleteAccents(p.title); },
        SortPortal : function(p, a, evaltheme, portaltheme) {
          var count = 0;
          if(p.portals && p.portals.length > 0 ){
            for(var i=0,l=p.portals.length;i<l;i++){
              var portal = p.portals[i];
              count += (portal === portaltheme ? 100 : 1);
            }
          }
          return count;
        },
        SortStub   : function(p){ return (p.stub && p.stub.length > 0 ? p.stub.length : 0); },
        SortAVT    : function(p){ return (typeof(p.evalAVT)=="number" ? (10-p.evalAVT) : -1 ); },
        SortIMP    : function(p, a, evaltheme) {
          var count = 0;
          if(p.allIMP && Object.keys(p.allIMP).length > 0 ){
            for(var theme in p.allIMP){
              count += ( (6-(p.allIMP[theme])) * (6-(p.allIMP[theme])) * (theme === evaltheme ? 100 : 1) );
            }
          }
          return count;
        }
      };
      var down = sortvalue.indexOf("_DOWN")!==-1;
      var type = sortvalue.replace(/_.*/g, "");
      var sortFunc = getsortFunc[type];
      var sortParam = getsortParam[type];
      if(typeof(sortFunc)!=="function" || typeof(sortParam)!=="function") return;
      MassEval.functions.alertControl("sort", MassEval.texts.AlertMsgSort, "Running");
      var NewPageList = [];
      var PageList = MassEval.params.PageList;
      for(var a=0, l=PageList.length;a<l;a++){
        NewPageList.push([ a, sortParam(PageList[a], a, evaltheme, portaltheme) ]);
      }
      NewPageList = NewPageList.sort(sortFunc);
      for(var a=0, l=NewPageList.length;a<l;a++){
        var index = NewPageList[a][0];
        var TR = document.getElementById("IDtr_"+index);
        if(!TR) continue;
      //  TR.title = NewPageList[a][1];
        var target = TR.parentNode;
        target.removeChild(TR);
        if(down) target.appendChild(TR); 
        else target.insertBefore(TR, target.firstChild.nextSibling); 
      }
      MassEval.functions.updateSortLink(Link);
      MassEval.functions.alertControl("sort");
    },
    updateSortLink  : function(Link) {
      var oldLink = document.getElementById("selectedSort");
      if(oldLink) oldLink.removeAttribute("id");
      if(Link) Link.id = "selectedSort";
    },
    createControlElement : function(){
      var ControlElement = document.getElementById("MassEvalControlUL");
        if(!ControlElement){
        ControlElement = document.createElement('ul');
        ControlElement.id = "MassEvalControlUL";
        document.body.appendChild(ControlElement);
        var ControlItem = ControlElement.insertBefore(document.createElement('li'), ControlElement.firstChild);
        ControlItem.className = "MassEvalControlLI";
        ControlItem.id = "MassEvalControlLI_AllOK";
        ControlItem.innerHTML = '<img class="AlertIcon" src="'+MassEval.params.ImageURL + MassEval.params.OKIcon+'" title="'+MassEval.texts.AlertMsgNone+'" />';
      }
      return ControlElement;
    },
    createControlItem : function(id){
      var ControlElement = MassEval.functions.createControlElement();
      var ControlItem = ControlElement.insertBefore(document.createElement('li'), ControlElement.firstChild);
      ControlItem.className = "MassEvalControlLI";
      if(typeof(id)==="string") ControlItem.id = id;
      var ControlItemText = ControlItem.appendChild(document.createElement('span'));
      ControlItemText.className = "MassEvalBoardControlText";
      var ControlItemIcon = ControlItem.appendChild(document.createElement('span'));
      ControlItemIcon.className = "MassEvalBoardControlIcon";
      return {item:ControlItem,text:ControlItemText,icon:ControlItemIcon,OK:document.getElementById("MassEvalControlLI_AllOK")}
    },
    removeControlItem : function(id){
      if(typeof(id)!=="string") return;
      var ControlItem = document.getElementById(id);
      if(ControlItem) ControlItem.parentNode.removeChild(ControlItem);
      var ControlElement = MassEval.functions.createControlElement();
      var RemainingLis = ControlElement.getElementsByTagName("li");
      if(RemainingLis.length === 1) ControlElement.firstChild.style.display = "";
    },
    alertControl : function(id, text, icon){
      MassEval.functions.removeControlItem(id);
      if(typeof(text)=="string"){
        var ControlItem = MassEval.functions.createControlItem(id);
        if(!ControlItem) return;
        var controlText = ControlItem.text;
        var controlIcon = ControlItem.icon;
        var controlOK = ControlItem.OK;
        if(!controlText || !controlIcon || !controlOK) return;
        controlOK.style.display = "none";
        if(icon && MassEval.params[(icon+"Icon")]){
          var link = '<a href="javascript:MassEval.functions.removeControlItem(\''+id+'\');" '+(text ? ('title="'+text+'"') : "")+' >';
          var Icon = '<img class="AlertIcon" src="'+MassEval.params.ImageURL + MassEval.params[(icon+"Icon")]+'" />';
          controlIcon.innerHTML = link + Icon + '</a>';
        }
        controlText.innerHTML = text;
        controlText.style.display = '';
      }
    },
  // ------------------------------- Fonctions pour la création des lignes de tableau -------------------------------
    fillBoardLine : function(index, evaltheme, onlymissingeval){
      var BoardListDiv = document.getElementById("MassEvalBoardListDiv");
      var BoardList = document.getElementById("MassEvalBoardList");
      if(!BoardList || !BoardListDiv) return false;
      if(BoardListDiv.style.display == "none") $(BoardListDiv).slideDown("slow");
      $(BoardListDiv).removeClass("empty");
      var Target = BoardList.getElementsByTagName("tr")[0].parentNode;
      var TR = document.createElement('tr');  
      TR.id = "IDtr_"+index;
      var OldTR = document.getElementById("IDtr_"+index);
      if(OldTR){
        OldTR.parentNode.insertBefore(TR, OldTR);
        OldTR.parentNode.removeChild(OldTR);
      }else{
        Target.appendChild(TR);
      }
      var pagedatas = MassEval.params.PageList[index];
      var title = pagedatas.title;
      var talktitle = pagedatas.talktitle;
      var pagemissing = pagedatas.pagemissing;
      var talkmissing = pagedatas.talkmissing;
      var redirectfrom = pagedatas.redirectfrom;
      var disambig = pagedatas.disambig;
      var portals = pagedatas.portals;
      var stub = pagedatas.stub;
      var evalWT = pagedatas.evalWT;
      var evalAVT = pagedatas.evalAVT;
      var evalIMP = pagedatas.evalIMP;
      var allIMP = pagedatas.allIMP;
      var classes = [];
      if(stub && stub.length > 0) classes.push("stub");
      if(typeof(evalAVT)==="number") classes.push("AVT_"+evalAVT);
      if(typeof(evalIMP)==="number") classes.push("IMP_"+evalIMP);
      if(onlymissingeval) classes.push("Modified");
      TR.className = classes.join(" ");
      var TD1 = document.createElement("td"); // "Page"
      TD1.className = "TD1";
      var TD1Content = TD1.appendChild(document.createElement('div'));
      TD1Content.className = "TD1Content";
      var PageLink = MassEval.functions.createLink((redirectfrom ? redirectfrom : title), {preview:index, class:(redirectfrom ? "mw-redirect" : (pagemissing ? "new" : ""))});
      var TalkPageLink = MassEval.functions.createLink(talktitle, {text:MassEval.texts.TalkText, preview:index, class:(talkmissing ? "new" : "")});
      TD1Content.appendChild(PageLink);
      TD1Content.appendChild(document.createTextNode(" ("));
      TD1Content.appendChild(TalkPageLink);
      TD1Content.appendChild(document.createTextNode(")"));
      if(redirectfrom || disambig) TD1Content.appendChild(document.createTextNode(" — "));
      if(redirectfrom){
        var Rspan = document.createElement('abbr');
        $(Rspan).addClass("pagepropicon");
        var Ricon = '<img class="RedirectIcon" src="'+MassEval.params.ImageURL + MassEval.params.RedirectIcon+'" />';
        Rspan.innerHTML = Ricon;
        Rspan.title = MassEval.texts.RedirectText.split("$page").join(title);
        TD1Content.appendChild(Rspan);
      }
      if(disambig){
        var Dspan = document.createElement('abbr');
        $(Dspan).addClass("pagepropicon");
        Dspan.innerHTML = '<img class="DisambigIcon" src="'+MassEval.params.ImageURL + MassEval.params.DisambigIcon+'" />';
        Dspan.title = MassEval.texts.DisambigTitle;        
        TD1Content.appendChild(Dspan);
      }
      var TD2 = document.createElement("td"); // "Portails"
      TD2.className = "TD2";
      var TD2Content = TD2.appendChild(document.createElement('div'));
      TD2Content.className = "TD2Content";
      if(MassEval.params.SearchForPortalTag && portals && portals.length > 0){
        var PortalUL = TD2Content.appendChild(document.createElement('ul'));
        var SelectedPortal = MassEval.functions.getPortalSelectValue();
        for(var a=0,l=portals.length;a<l;a++){
          var thisportal = portals[a];
          var PortalLabel = document.createElement('li');
          PortalLabel.innerHTML = thisportal;
          if(thisportal === SelectedPortal){
            PortalLabel.style.fontWeight = "bold";
            PortalUL.insertBefore(PortalLabel, PortalUL.firstChild);
          }else{
            PortalUL.appendChild(PortalLabel);
          }
        }
      }else if(!MassEval.params.SearchForPortalTag){
        TD2.style.backgroundColor = "red";
      }
      var TD3 = document.createElement("td"); // "Bandeau d'ébauche"
      TD3.className = "TD3";
      var TD3Content = TD3.appendChild(document.createElement('div'));
      TD3Content.className = "TD3Content";
      if(stub){
        for(var a=0,l=stub.length;a<l;a++){
          TD3Content.appendChild(MassEval.functions.createStubThemeSelect(index, a));
        }
      }
      var AddStubForm = document.createElement('form'); 
      if(stub && stub.length > 5) AddStubForm.style.display = "none";    
      AddStubForm.id = "STUBadd_"+index; 
      var AddStubInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.AddSTUBText,title:MassEval.texts.AddSTUBTitle});
      AddStubInput.onclick = function(){
        MassEval.functions.addOneStubForm(index);
      }
      AddStubForm.appendChild(AddStubInput);
      TD3Content.appendChild(AddStubForm);
      var TD4 = document.createElement("td"); // "Avancement"
      TD4.className = "TD4";
      var TD4Content = TD4.appendChild(document.createElement('div'));
      TD4Content.className = "TD4Content";
      if(typeof(evalAVT)=="number"){
        var AVTselect = TD4Content.appendChild(MassEval.functions.createAVTSelect(evalAVT, index));
        if( ( (stub && stub.length>0) && evalAVT != 5) || ( (!stub || stub.length==0) && evalAVT == 5) ){
          TD3.style.border = "2px solid red";
          TD4.style.border = "2px solid red";
        } 
        if( (disambig && evalAVT != 6) || (!disambig && evalAVT == 6) ){
          TD1.style.border = "2px solid red";
          TD4.style.border = "2px solid red";
        }
      }else{
        var AVTselect = TD4Content.appendChild(MassEval.functions.createAVTSelect(-1, index, true));
      }
      if(onlymissingeval) $(AVTselect).addClass("Modified");
      var TD5 = document.createElement("td"); // "Importances"
      TD5.className = "TD5";
      var TD5Content = TD5.appendChild(document.createElement('div'));
      TD5Content.className = "TD5Content";
      if(typeof(evalIMP)=="number"){
        var IMPselect = TD5Content.appendChild(MassEval.functions.createIMPSelect(evalIMP, evaltheme, index, 0));
        if(onlymissingeval) $(IMPselect).addClass("Modified");
      }
      if(allIMP){
        var count = 1;
        for(var theme in allIMP){
          if(MassEval.functions.ucFirst(theme) == MassEval.functions.ucFirst(evaltheme)) continue;
          var thisimp = allIMP[theme];
          TD5Content.appendChild(MassEval.functions.createIMPSelect(thisimp, theme, index, count));
          count++
        }
      }
      var AddIMPForm = document.createElement('form');   
      AddIMPForm.id = "IMPadd_"+index; 
      var AddIMPInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.AddIMPText,title:MassEval.texts.AddIMPTitle});
      AddIMPInput.onclick = function(){
        MassEval.functions.addOneIMPForm(index);
      }
      AddIMPForm.appendChild(AddIMPInput);
      TD5Content.appendChild(AddIMPForm);
      var TD6 = document.createElement("td"); // "Actions"
      TD6.className = "TD6";
      var TD6Content = TD6.appendChild(document.createElement('div'));
      TD6Content.className = "TD6Content";
      var ChangeInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoChangeOneText,title:MassEval.texts.GoChangeOneTitle,id:"change_"+index});
      $(ChangeInput).addClass("changeinput");
      if(!MassEval.params.AllowEdition) ChangeInput.style.fontStyle = "italic";
      ChangeInput.onclick = function(){
        MassEval.functions.processThatLineChanges(index);
      }
      TD6Content.appendChild(ChangeInput);
      var CancelInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoCancelOneText,title:MassEval.texts.GoCancelOneTitle,id:"cancel_"+index});
      $(CancelInput).addClass("cancelinput");
      CancelInput.onclick = function(){
          MassEval.functions.updateThatLine(index, pagedatas, true, true);
      }
      TD6Content.appendChild(CancelInput); 
      MassEval.functions.disableThings([ ChangeInput, CancelInput ], (!onlymissingeval));
      var ShowHideInput = MassEval.functions.createInput({type:"button",value:MassEval.texts.GoHideOneText,title:MassEval.texts.GoHideOneTitle,id:"showhide_"+index});
      TD6Content.appendChild(ShowHideInput);
      ShowHideInput.onclick = function(){
        MassEval.functions.showhideThisLineContent(this, index);
      }
      var LinksCheckbox = document.getElementById("LinksCheckbox");
      if([4, 5].indexOf(MassEval.params.LaunchCondition) !== -1 && (!LinksCheckbox || !LinksCheckbox.checked)){
        TD6.style.display = "none";
        MassEval.functions.displayNodes(["MassEval_TH6"], false);
      }else{
        MassEval.functions.displayNodes(["MassEval_TH6"], true);
      }
      TR.appendChild(TD1);
      TR.appendChild(TD2);
      TR.appendChild(TD3);
      TR.appendChild(TD4);
      TR.appendChild(TD5);
      TR.appendChild(TD6);
      if(MassEval.params.AutoLaunchPreview) MassEval.functions.previewPage(title, index);
      return TR;
    },
    showhideThisLineContent(button, index){
      var TR = document.getElementById("IDtr_"+index);
      if(!TR) return;
      var previewbuttons = document.getElementById("previewbuttons_"+index);
      var previewDiv = document.getElementById("previewDiv_"+index);
      var changeBTN = document.getElementById("change_"+index);
      var cancelBTN = document.getElementById("cancel_"+index);
      if(button.value == MassEval.texts.GoHideOneText){
        button.value = MassEval.texts.GoShowOneText;
        button.title = MassEval.texts.GoShowOneTitle;
        if(previewbuttons) $(previewbuttons).slideUp("slow");
        if(previewDiv) $(previewDiv).slideUp("slow");
        if(changeBTN) $(changeBTN).slideUp("slow");
        if(cancelBTN) $(cancelBTN).slideUp("slow");
        $("#"+TR.id+" .TD2Content").slideUp("slow");
        $("#"+TR.id+" .TD3Content").slideUp("slow");
        $("#"+TR.id+" .TD4Content").slideUp("slow");
        $("#"+TR.id+" .TD5Content").slideUp("slow");
        $(TR).addClass("HiddenTR");
      }else{
        button.value = MassEval.texts.GoHideOneText;
        button.title = MassEval.texts.GoHideOneTitle;
        if(previewbuttons) $(previewbuttons).slideDown("slow");
        if(previewDiv) $(previewDiv).slideDown("slow");
        if(changeBTN) $(changeBTN).slideDown("slow");
        if(cancelBTN) $(cancelBTN).slideDown("slow");
        $("#"+TR.id+" .TD2Content").slideDown("slow");
        $("#"+TR.id+" .TD3Content").slideDown("slow");
        $("#"+TR.id+" .TD4Content").slideDown("slow");
        $("#"+TR.id+" .TD5Content").slideDown("slow");
        $(TR).removeClass("HiddenTR");
      }
      MassEval.functions.setChangeCancelInputDisabled();
    },
    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 = MassEval.functions.createInput({type:"hidden",id:"adjHidden_"+count+"_"+index});
        form.appendChild(Hidden);
        var HiddenType = MassEval.functions.createInput({type:"hidden",value:type,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 StubAdj";
        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");
          MassEval.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 = MassEval.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 = MassEval.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 = MassEval.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 = MassEval.params.StubThemes[MassEval.functions.lcFirst(strippedtheme)];
            var realtheme2 = MassEval.params.StubThemes[MassEval.functions.ucFirst(strippedtheme)];
            if(typeof(realtheme1) != "undefined"){
              adjDatas.type = thistype;
              adjDatas.adj = thisadj;
              adjDatas.strippedtheme = MassEval.functions.lcFirst(strippedtheme);
              if(!realtheme1.categ) MassEval.params.StubThemes[MassEval.functions.lcFirst(strippedtheme)].categ = catpattern;
            }else if(typeof(realtheme2) != "undefined"){
              adjDatas.type = thistype;
              adjDatas.adj = thisadj;
              adjDatas.strippedtheme = MassEval.functions.ucFirst(strippedtheme);
              if(!realtheme2.categ) MassEval.params.StubThemes[MassEval.functions.ucFirst(strippedtheme)].categ = catpattern;
            }
          }
        }
      }
      return adjDatas;
    },
    createStubThemeSelect : function(index, count){
      var thisstub = MassEval.params.PageList[index].stub[count];
      var STUBthemeDatas = MassEval.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 = MassEval.functions.createInput({type:"hidden",id:"Ébauche_"+count+"_"+index});
      form.appendChild(Hidden); 
      var Select = document.createElement("select");
      Select.name = "Ébauche_"+count+"_"+index;
      Select.className = "StubTheme";
      Select.onchange = function(){
        MassEval.functions.checkStubFormChanged(this, count, index);
      }
      form.appendChild(Select);
      var allthemes = MassEval.functions.sortTextList(Object.keys(MassEval.params.StubThemes));
      for(var a=0,l=allthemes.length;a<l;a++){
        var thistheme = allthemes[a];
        var themedatas = MassEval.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 || MassEval.functions.getStubAdjType(STUBthemeDatas.strippedtheme));
      form.appendChild(MassEval.functions.updateAdjSelect(type, index, count, STUBthemeDatas.adj));
      var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteSTUBText,title:MassEval.texts.DeleteSTUBTitle});
      suplink.onclick = function(){
        var F = this.parentNode;
        thisSelect = F.getElementsByTagName("select")[0];
        F.style.display = "none";
        $(F).addClass("Removed");
        MassEval.functions.checkStubFormNumbers(index);
        MassEval.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 = MassEval.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 = MassEval.functions.createInput({type:"hidden",value:".",id:"Ébauche NEW_"+count+"_"+index});
      form.appendChild(Hidden);
      var Select = document.createElement("select");
      Select.name = "Ébauche NEW_"+count+"_"+index;
      Select.className = "StubTheme";
      $(Select).addClass("Modified");
      var allthemes = MassEval.functions.sortTextList(Object.keys(MassEval.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(){
        MassEval.functions.checkStubFormChanged(this, count, index);
      }
      form.appendChild(Select);
      form.appendChild(MassEval.functions.updateAdjSelect(null, index, count, ""));
      var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteSTUBText,title:MassEval.texts.DeleteSTUBTitle});
      suplink.onclick = function(){
        var F = this.parentNode;
        F.parentNode.removeChild(F);
        MassEval.functions.checkStubFormNumbers(index);
        MassEval.functions.setChangeCancelOneInputDisabled(index);
      }
      form.appendChild(document.createTextNode(" "));
      form.appendChild(suplink);
      AddStubForm.parentNode.insertBefore(form, AddStubForm);
      MassEval.functions.checkStubFormNumbers(index);
      MassEval.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 = MassEval.functions.getStubAdjType(val);
        if(NewType!=null){
          var paramAdj = MassEval.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");
        MassEval.functions.updateAdjSelect(NewType, index, count, def);
        MassEval.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");
      }
      MassEval.functions.setChangeCancelOneInputDisabled(index);
    },
    createIMPSelect : function(evalIMP, evaltheme, index, count, onlyselect){
      var form = document.createElement("form");
      form.onsubmit = function(){ return false; };
      form.id = "IMPform_"+count+"_"+index;
      form.style.whiteSpace = "nowrap";
      form.className = "Eval";
      var Hidden = MassEval.functions.createInput({type:"hidden",id:"IMP_"+count+"_"+index});
      form.appendChild(Hidden); 
      var Label = document.createElement('label');
      Label.setAttribute("for", "Importance "+evaltheme);
      Label.innerHTML = MassEval.functions.ucFirst(evaltheme);
      if(count==0){
        Label.style.fontWeight = "bold";
        Label.className = "evaltheme";
      }
      form.appendChild(Label);
      form.appendChild(document.createTextNode(" : "));
      var Select = document.createElement("select");
      Select.name = "Importance "+evaltheme;
      Select.className = "Importance";
      for(var a=0,l=MassEval.params.Importance.length;a<l;a++){
        var thisimp = MassEval.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;
        else opt.style.color = "black";
        if(a == evalIMP){
          opt.selected = "selected";
          Hidden.value = opt.value;
        }
        Select.appendChild(opt);
      }
      MassEval.functions.updateSelectBGcolor(Select);
      if(onlyselect) return Select;
      Select.onchange = function(){
        MassEval.functions.updateSelectBGcolor(this);
        MassEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
      }
      form.appendChild(Select);
      var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteIMPText,title:MassEval.texts.DeleteIMPTitle});
      suplink.onclick = function(){
        var F = this.parentNode;
        thisSelect = F.getElementsByTagName("select")[0];
        MassEval.functions.disableThings([ thisSelect ], true);
        F.style.display = "none";
        $(F).addClass("Removed");
        MassEval.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");
      MassEval.functions.setChangeCancelOneInputDisabled(index);
    },
    setChangeCancelOneInputDisabled : function(index, data) {
      var TR = document.getElementById("IDtr_"+index);
      if(TR){
        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");
      }
      MassEval.functions.disableThings([ ("change_"+index), ("cancel_"+index) ], dis);
      MassEval.functions.setChangeCancelInputDisabled(data);
    },
    createAVTSelect : function(evalAVT, index, empty, onlyselect){
      var form = document.createElement("form");
      form.onsubmit = function(){ return false; };
      form.style.whiteSpace = "nowrap";
      var Hidden = MassEval.functions.createInput({type:"hidden",id:"AVT_"+index});
      form.appendChild(Hidden); 
      var Select = document.createElement("select");
      Select.name = "Avancement";
      Select.className = "Avancement";
      if(empty){
        var emptyopt = document.createElement('option');
        emptyopt.innerHTML = "";
        emptyopt.value = "?";
        Select.appendChild(emptyopt);
        Hidden.value = "?";
      }
      for(var a=0,l=MassEval.params.Avancement.length;a<l;a++){
        var thisavt = MassEval.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;
        else opt.style.color = "black";
        if(a == evalAVT){
          opt.selected = "selected";
          Hidden.value = a;
        }
        Select.appendChild(opt);
      }
      MassEval.functions.updateSelectBGcolor(Select);
      if(onlyselect) return Select;
      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");
        MassEval.functions.updateSelectBGcolor(this);
        MassEval.functions.setChangeCancelOneInputDisabled(index);
      }
      form.appendChild(Select);      
      return form;
    },
    updateSelectBGcolor : function(Select){
      var val = Select.value;
      var opt = Select.getElementsByTagName('option');
      for(var a=0,l=opt.length;a<l;a++){
        var thisopt = opt[a];
        if(thisopt.value !== val) continue;
        Select.style.backgroundColor = thisopt.style.backgroundColor;
        Select.style.color = thisopt.style.color;
      }
    },
    setChangeCancelInputDisabled : function(data) {
      var BoardList = document.getElementById("MassEvalBoardList");
      var ChangeInput = document.getElementById("GlobalChangeInput");
      var CancelInput = document.getElementById("GlobalCancelInput");
      var ListInput = document.getElementById("GlobalVerifInput");
      var AddInput = document.getElementById("GlobalAddEvalInput");
      if(!BoardList || !ChangeInput || !CancelInput || !ListInput || !AddInput) return;
      var ChangeNumber = 0;
      var TRs = BoardList.getElementsByTagName('tr');
      for(var a=0,l=TRs.length;a<l;a++){
        if($(TRs[a]).hasClass("Modified") && !$(TRs[a]).hasClass("FilteredLine") && !$(TRs[a]).hasClass("HiddenTR")) ChangeNumber++
      }
      if(ChangeNumber > 0){
        ChangeInput.title = MassEval.texts.GoChangeTitle.split("$1").join(ChangeNumber+" ");
        CancelInput.title = MassEval.texts.GoCancelTitle.split("$1").join(ChangeNumber+" ");
        MassEval.functions.disableThings([ ChangeInput, CancelInput ], false);
        if(!data || !(data.afteroptioncheck || data.afteredit) ) MassEval.functions.disableThings([ ListInput, AddInput ], true);
      }else{
        ChangeInput.title = MassEval.texts.GoChangeTitle.split("$1").join("");
        CancelInput.title = MassEval.texts.GoCancelTitle.split("$1").join("");
        MassEval.functions.disableThings([ ChangeInput, CancelInput ], true);
        if(!data || !(data.afteroptioncheck || data.afteredit) ) MassEval.functions.disableThings([ ListInput, AddInput ], false);
      }
      if(data && data.afteredit) MassEval.functions.alertControl("edit");
    },
    cancelAllChanges : function(){
      var BoardList = document.getElementById("MassEvalBoardList");
      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;
        MassEval.functions.updateThatLine(index, MassEval.params.PageList[index], true, true);
      }
    },
    addOneIMPForm : function(index){
      var defaultV = false;
      var defaultP = document.getElementById("EvalThemeInput").value;
      var allIMP = MassEval.params.PageList[index].allIMP;
      var found = false;
      if(typeof(allIMP)=="object"){
        for(var port in allIMP){
          if(port == defaultP) found = true;
        }
      }
      if(!found) defaultV = defaultP;
      var AddIMPForm = document.getElementById("IMPadd_"+index);
      var TD = AddIMPForm.parentNode;
      var count = MassEval.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 = MassEval.functions.createInput({type:"hidden",value:".",id:"IMP_"+count+"_"+index});
      form.appendChild(Hidden); 
      var ThemeSelect = MassEval.functions.createEvalThemeSelect(null,defaultV);
      ThemeSelect.name = "evaltheme";
      ThemeSelect.className = "IMPtheme";
      form.appendChild(ThemeSelect);
      form.appendChild(document.createTextNode(" : "));
      var Select = document.createElement("select");
      Select.name = "Importance NEW";
      Select.className = "Importance";
      for(var a=0,l=MassEval.params.Importance.length;a<l;a++){
        var thisimp = MassEval.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;
        else opt.style.color = "black";
        if(a == (MassEval.params.Importance.length-1)) opt.selected = "selected";
        Select.appendChild(opt);
      }
      MassEval.functions.updateSelectBGcolor(Select);
      Select.onchange = function(){
        MassEval.functions.updateSelectBGcolor(this);
        MassEval.functions.setChangeCancelOneIMPInputDisabled(this, count, index);
      }
      form.appendChild(Select);
      var suplink = MassEval.functions.createInput({type:"button",value:MassEval.texts.DeleteIMPText,title:MassEval.texts.DeleteIMPTitle});
      suplink.onclick = function(){
        var F = this.parentNode;
        F.parentNode.removeChild(F);
        MassEval.functions.setChangeCancelOneInputDisabled(index);
      }
      form.appendChild(document.createTextNode(" "));
      form.appendChild(suplink);
      AddIMPForm.parentNode.insertBefore(form, AddIMPForm);
      MassEval.functions.setChangeCancelOneIMPInputDisabled(Select, count, index);
      ThemeSelect.focus();
    },
  // ------------------------------- Fonctions pour la validation des changements -------------------------------
    processTheseLinesChanges : function(){
      var CancelInput = document.getElementById("GlobalCancelInput");
      var boardList = document.getElementById("MassEvalBoardList");
      MassEval.params.ChangesToMake = [];
      var TRs = boardList.getElementsByTagName("tr");
      for(var a=1,l=TRs.length;a<l;a++){
        var TR = TRs[a];
        if($(TRs[a]).hasClass('FilteredLine') || $(TRs[a]).hasClass('HiddenTR') || !$(TRs[a]).hasClass('Modified')) continue;
        var index = parseInt(TR.id.split("IDtr_").join(""));
        MassEval.params.ChangesToMake.push({id:index,done:false});
      }
      MassEval.functions.processNextLineChanges();
    },
    processNextLineChanges : function(lastindex){
      var ChangesToMake = MassEval.params.ChangesToMake;
      if(typeof(lastindex)==="number"){
        MassEval.functions.checkFilterOptions({afteredit:true});
        MassEval.functions.setChangeCancelOneInputDisabled(lastindex, {afteredit:true});
      }
      var CanContinue = MassEval.functions.checkEmergencyStop();
      if(!CanContinue){
        MassEval.params.ChangesToMake = [];
        MassEval.functions.setChangeCancelInputDisabled();
        MassEval.functions.updateEvalTable(document.getElementById("EvalThemeInput").value);
        return MassEval.functions.alertControl("emergencystop", MassEval.texts.AlertMsgStopDone, "Stop");
      }
      if(MassEval.params.AllowEdition){
        MassEval.functions.disableThings([ "GlobalVerifInput", "GlobalAddEvalInput", "GlobalChangeInput", "GlobalCancelInput"], true);
      }
      var thisChange;
      for(var a=0,l=ChangesToMake.length;a<l;a++){
        thisChange = ChangesToMake[a];
        if(typeof(lastindex)==="number" && thisChange.id === lastindex){
          thisChange.done = true;
          continue;
        }
        if(!thisChange.done){
          if(mw.config.get("wgUserGroups").indexOf("bot")!==-1){
            MassEval.functions.processThatLineChanges(thisChange.id);
          }else{
            setTimeout(function(){ MassEval.functions.processThatLineChanges(thisChange.id); }, MassEval.params.ChangesToMakeDelay);
          }
          return;
        }
      }
      MassEval.params.ChangesToMake = [];
      MassEval.functions.setChangeCancelInputDisabled();
      MassEval.functions.updateEvalTable(document.getElementById("EvalThemeInput").value);
    },
    processThatLineChanges : function(index){
      MassEval.functions.closePreview(index);
      var TR = document.getElementById("IDtr_"+index);
      if(!($(TR).hasClass("Modified"))) return MassEval.functions.processNextLineChanges(index);
      var OldParams = MassEval.params.PageList[index];
      var NewParams = OldParams;
      NewParams.evalAVT = false;
      NewParams.evalIMP = false;
      NewParams.allIMP = {};
      NewParams.evalWT = false;
      NewParams.stub = [];
      NewParams.stubWT = false;
      var ChangeInput = document.getElementById("change_"+index);
      var CancelInput = document.getElementById("cancel_"+index);
      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(MassEval.params.AllowEdition && ["button","text"].indexOf(ThisInput)!=-1) MassEval.functions.disableThings([ ThisInput ], true);
        }
        var Selects = thisForm.getElementsByTagName("select");
        if(MassEval.params.AllowEdition) MassEval.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 = (SelectValue !== "?" ? parseInt(SelectValue) : "?");
          }else if(SelectName == "Importance NEW"){
            var ThemeSelect = Selects[(s-1)];
            var thisevaltheme = ThemeSelect.value;
            if(thisevaltheme != ""){
              talkpageedit = true;
              NewParams.allIMP[thisevaltheme] = parseInt(SelectValue);
              var EvalThemeSelect = document.getElementById("EvalThemeInput");
              if(EvalThemeSelect && EvalThemeSelect.value == thisevaltheme) NewParams.evalIMP = parseInt(SelectValue);
            }
          }else if(SelectName.indexOf("Importance")==0){              
            if($(thisForm).hasClass("Modified")) talkpageedit = true;            
            if($(Label).hasClass("evaltheme")) 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 = MassEval.params.StubThemes[StubTheme];
              var catPattern = StubThemeParams.categ;
              if(catPattern){
                catPattern = MassEval.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 = MassEval.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(MassEval.params.AllowEdition && (talkpageedit || pageedit)){
        var Link = TR.getElementsByTagName('a')[0];
        var IMG = document.createElement('img');
        IMG.width = 14;
        IMG.height = 14;
        IMG.src = MassEval.params.ImageURL + MassEval.params.RunningIcon;
        Link.parentNode.insertBefore(IMG, Link);
        Link.parentNode.insertBefore(document.createTextNode(" "), Link);
      }
      if(talkpageedit){
        NewParams.talkmissing = 0;
        var NewEvalWikitext = "{{"+MassEval.params.EvalTemplate+"\n";
        for(var imp in NewParams.allIMP){
          NewEvalWikitext += "|"+imp+"|"+MassEval.params.Importance[NewParams.allIMP[imp]].wiki+"\n"
        }
        if(NewParams.evalAVT !== "?") NewEvalWikitext += "|avancement="+MassEval.params.Avancement[NewParams.evalAVT].wiki+"\n";
        else NewEvalWikitext += "|avancement=\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";     
          }   
        }
        if(MassEval.params.LaunchCondition === 5 && !OldParams.haseval) NewEvalWikitext += MassEval.params.EvalTemplatNoCat;
        NewEvalWikitext += "}}";
        NewParams.evalWT = NewEvalWikitext;
        if(MassEval.params.AllowEdition){
          MassEval.functions.updatePage(index, OldParams, NewParams, false);
        }else{
          var OldEvalWikitext = ( OldParams.evalWT ? OldParams.evalWT : "");
          alert(MassEval.texts.NoEdition.split("$1").join(OldEvalWikitext).split("$2").join(NewEvalWikitext));
        }
      }
      if(pageedit){
        NewParams.pagemissing = 0;
        var NewStubWikitext = "";
        if(NewParams.stub && NewParams.stub.length > 0 ){
          NewStubWikitext = "{{"+MassEval.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(MassEval.params.AllowEdition){
          MassEval.functions.updatePage(index, OldParams, NewParams, true);
        }else{
          var OldStubWikitext = ( OldParams.stubWT ? OldParams.stubWT : "");
          alert(MassEval.texts.NoEdition.split("$1").join(OldStubWikitext).split("$2").join(NewStubWikitext));
        }
      }
    },
    updatePage : function(index, OldParams, NewParams, main){
      if(main) MassEval.params.StubEditsRunning[index] = true;
      else MassEval.params.EvalEditsRunning[index] = true;  
      var page = (main ? NewParams.title : NewParams.talktitle);
      MassEval.functions.alertControl("edit", MassEval.texts.AlertMsgEdit.split("$page").join(page), "Running");
      $.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 = "now";
          try{ timestamp =  data.query.pages[Object.keys(data.query.pages)[0]].revisions[0].timestamp }catch(e){ }
          var func = (main ? "updateMainPage" : "updateTalkpage");
          var NewWikitext = MassEval.functions[func](OldParams, NewParams, data);
          var summary = MassEval.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) {
            var EditDatas = {
              action: 'edit',
              title: page,
              text: NewWikitext,
              summary: summary.split("$docpage").join(MassEval.params.DocPage).split("$template").join(template),
              basetimestamp: timestamp,
              section: 0,
              watchlist: 'nochange',
              format: 'json',
              token: data.query.tokens.csrftoken
            };
            if(MassEval.params.EditTag && MassEval.params.UserCanTag) EditDatas.tags = MassEval.params.EditTag;
            $.ajax({
              url: mw.util.wikiScript('api'),
              method: 'POST',
              data: EditDatas,
              dataType: 'json',
              success: function(data){
                if(main) MassEval.params.StubEditsRunning[index] = false;
                else MassEval.params.EvalEditsRunning[index] = false;
                if(!MassEval.params.StubEditsRunning[index] && !MassEval.params.EvalEditsRunning[index]){
                  MassEval.functions.updateThatLine(index, NewParams, false, false);
                }
                var ID = false;
                var wgPageName = mw.config.get('wgPageName').split("_").join(" ");
                if(MassEval.params.LaunchCondition === 5 && NewParams.title === wgPageName) ID = (main ? 'ca-nstab-user' : 'ca-talk');
                if(MassEval.params.LaunchCondition === 5 && NewParams.talktitle === wgPageName) ID = (main ? 'ca-nstab-user' : 'ca-talk');
                if(MassEval.params.LaunchCondition === 4 && NewParams.title === mw.config.get('wgTitle')) ID = (main ? 'ca-nstab-main' : 'ca-talk');
                if(ID){
                  var li = document.getElementById(ID);
                  if(li) $(li).removeClass('new');
                }
              }
            });
          });
        }
      });
    },
    updateMainPage : function(OldParams, NewParams, data){
      var OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
      var NewWikitext = "";
      var Reg = new RegExp("\\{\\{ *"+MassEval.params.StubTemplate+"[^\\{]*\\}\\}", "ig");
      var matches = OldWikitext.match(Reg);
      if(matches == null){
        var BeforeStubTemplates = MassEval.params.BeforeStubTemplates;
        var before = "";
        for(var a=0,l=BeforeStubTemplates.length;a<l;a++){
          var DT = BeforeStubTemplates[a];
          var DTReg = new RegExp("\\{\\{ *("+MassEval.functions.ucFirst(DT)+"|"+MassEval.functions.lcFirst(DT)+")[^\\{]*\\}\\}", "g");
          var DTMatches = OldWikitext.match(DTReg);
          if(DTMatches != null){
            for(var m=0,mlen=DTMatches.length;m<mlen;m++){
              var thismatch = DTMatches[m];
              before += thismatch+"\n";
              OldWikitext = OldWikitext.replace(thismatch, "");
            }
          }
        }
        NewWikitext = before + (before ? "\n\n" : "") + 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, "");
      NewWikitext = NewWikitext.split("\n\n\n").join("\n\n");
      return NewWikitext;
    },
    updateTalkpage : function(OldParams, NewParams, data){
      var NewWikitext = "";
      if(OldParams.talkmissing){
        NewWikitext = NewParams.evalWT;
      }else{
        var OldWikitext = "";
        try{ OldWikitext = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"]; }catch(e){ }
        var Reg = new RegExp("\\{\\{ *"+MassEval.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, CancelAction){
      MassEval.params.PageList[index] = NewParams;
      if(!KeepPreview){
        delete MassEval.params.PreviewSaved[NewParams.title];
        delete MassEval.params.PreviewSaved[NewParams.talktitle];
      }
      var evaltheme = document.getElementById("EvalThemeInput").value;
      MassEval.functions.fillBoardLine(index, evaltheme);
      if(!CancelAction) MassEval.functions.processNextLineChanges(index);
      else MassEval.functions.setChangeCancelInputDisabled();
    },
  // ------------------------------- Fonctions pour la prévisualisation -------------------------------
    preloadPage : function(title, index, callback){
      var previewDiv = document.createElement('div');
      previewDiv.id = "previewDiv_"+index;
      $(previewDiv).addClass("previewDiv");
      var URL = mw.util.getUrl(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 = MassEval.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);
        MassEval.functions.neutralizeLinks(previewDiv);
        MassEval.functions.enhancePreview(previewDiv);
        MassEval.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).addClass("previewDiv");
        previewDiv.style.display = "none";    
        TD1.appendChild(previewDiv);
        $(previewDiv).slideDown("slow");    
        var closespan = document.createElement('span');
        closespan.id = "previewbuttons_"+index;
        $(closespan).addClass("previewButtons");
        TD1.insertBefore(closespan, TD1.firstChild);
        var closelink = document.createElement('a');
        closelink.title = MassEval.texts.PreviewClose;
        closelink.innerHTML = '<img class="previewCloseButtonImage PrevCloseIcon" src="'+MassEval.params.ImageURL + MassEval.params.CloseIcon+'" />';
        closelink.href = "javascript:;";
        closelink.onclick = function(){ MassEval.functions.closePreview(index); return false; }
        closespan.appendChild(closelink);
      }
      $(previewDiv).addClass("previewDiv");
      if(MassEval.params.PreviewSaved[title]){
        var SavedpreviewDiv = MassEval.params.PreviewSaved[title];
        previewDiv.parentNode.insertBefore(SavedpreviewDiv, previewDiv);
        previewDiv.parentNode.removeChild(previewDiv);
        $(SavedpreviewDiv).slideDown("slow");   
      }else{
        var RunningIcon = '<img class="RunningIcon" src="'+MassEval.params.ImageURL + MassEval.params.RunningIcon+'" />';
        previewDiv.innerHTML = MassEval.texts.AlertMsgPreview.split("$running").join(RunningIcon);
        MassEval.functions.preloadPage(title, index, MassEval.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;
      console.warn(oldval + " -> " + newval);
      previewDiv.style.maxHeight = newval + "px";
    },
    closePreview : function(index, link){
      var previewDiv = document.getElementById("previewDiv_"+index);
      if(previewDiv){
        $(previewDiv).slideUp("slow", function(){
          this.parentNode.removeChild(this);
          var link = document.getElementById("previewbuttons_"+index);
          if(link) link.parentNode.removeChild(link);
        });  
      }   
    },
  // ------------------------------- Fonctions spéciales utiles seulement au développeur -------------------------------
    addDeveloperLinks : function(){
      var newli = document.getElementById("ca-eval");
      if(!newli){
        var portlet = document.getElementById(MassEval.params.LinkPortletID);
        if(!portlet) return;
        var tabs = portlet.getElementsByTagName('li')[0];
        newli = tabs.parentNode.appendChild(document.createElement('li'));
      }
      //newli.appendChild(MassEval.functions.createLink(null,{text:"[UUT]",href: "javascript:MassEval.functions.getUnusedTexts();",title:"Textes inutilisés"}));
    },
  // ------------------------------- Fonctions pour les liens en haut de page -------------------------------
    addPageLink : function() {
      var portlet = document.getElementById(MassEval.params.LinkPortletID);
      if(!portlet) return;
      var tabs = portlet.getElementsByTagName('li')[0];
      var newli = document.createElement('li');
      newli.id = 'ca-eval';
      tabs.parentNode.appendChild(newli);
      if(MassEval.params.UseTopFormInNS0){
        var link = newli.appendChild(MassEval.functions.createLink(null, {
          text  : MassEval.texts.LinkText,
          title : MassEval.texts.LinkPageTitle,
          href  : "javascript:MassEval.functions.createPageBoard();" 
        }));
      }else{
        var page = "Special:"+MassEval.params.SpecialpageName+"/mode=page/" + mw.config.get( (MassEval.params.LaunchCondition != 5 ? 'wgTitle' : "wgPageName") ).split("_").join(" ");
        var link = newli.appendChild(MassEval.functions.createLink(page, {
          text  : MassEval.texts.LinkText,
          title : MassEval.texts.LinkPageTitle,
        }));
      }
      if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
    },
    addCategoryLink : function() {
      var portlet = document.getElementById(MassEval.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 Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=cat/"+mw.config.get('wgTitle'), {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkCatTitle,
      }));
      if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
    },
    addTemplateLink : function() {
      var portlet = document.getElementById(MassEval.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 Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=template/"+mw.config.get('wgTitle'), {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkTemplateTitle,
      }));
      if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
    },
    addUserLink : function() {
      var portlet = document.getElementById(MassEval.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 User = mw.config.get('wgTitle').split("/")[0];
      var Slink = newli.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=creations/"+User, {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkCreationsTitle,
      }));
      if(MassEval.params.AddDeveloperLinks) MassEval.functions.addDeveloperLinks();
    },
    addNewpagesLink : function(){
      var LI = document.getElementById("ca-nstab-special");
      if(!LI) return;
      var evalli = LI.parentNode.appendChild(document.createElement('li'));
      evalli.id = "ca-nstab-special-eval";
      var evalspan = evalli.appendChild(document.createElement('span'));
      var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=newpages/"+mw.config.get('wgTitle'), {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkNewpagesTitle,
      }));
    },
    addCreationsLink : function(){
      var LI = document.getElementById("ca-nstab-special");
      if(!LI) return;
      var evalli = LI.parentNode.appendChild(document.createElement('li'));
      evalli.id = "ca-nstab-special-eval";
      var evalspan = evalli.appendChild(document.createElement('span'));
      var target = mw.util.getParamValue("target");
      if(target === null) target = mw.config.get('wgTitle').split("Contributions/")[1];
      if(!target) target = mw.config.get('wgUserName');
      var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=creations/"+target, {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkCreationsTitle,
      }));
    },
    addLinkshereLink : function(){
      var portlet = document.getElementById(MassEval.params.LinkPortletID);
      if(!portlet) return;
      var tabs = portlet.getElementsByTagName('li')[0];
      var evalli = tabs.parentNode.appendChild(document.createElement('li'));
      evalli.id = "ca-eval";
      var evalspan = evalli.appendChild(document.createElement('span'));
      var target = mw.util.getParamValue("target");
      var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=linkshere/"+target, {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkLinkshereTitle,
      }));
    },
    addPrefixindexLink : function(){
      var portlet = document.getElementById(MassEval.params.LinkPortletID);
      if(!portlet) return;
      var tabs = portlet.getElementsByTagName('li')[0];
      var evalli = tabs.parentNode.appendChild(document.createElement('li'));
      evalli.id = "ca-eval";
      var evalspan = evalli.appendChild(document.createElement('span'));
      var prefix = mw.util.getParamValue("prefix");
      var evallink = evalspan.appendChild(MassEval.functions.createLink("Special:"+MassEval.params.SpecialpageName+"/mode=prefixes/"+prefix, {
        text  : MassEval.texts.LinkText,
        title : MassEval.texts.LinkPrefixindexTitle,
      }));
    },
    addlinktoSpecialpage : function(){
      var Content = document.getElementById('mw-content-text');
      var Divs = Content.getElementsByTagName('div');
      var count = 0;
      var H2s = Content.getElementsByTagName('h2');
      for(var a=0,l=H2s.length;a<l;a++){
        var id = H2s[a].id;
        if(id == "mw-specialpagesgroup-pagetools") count = a;
      }
      var divcount = -1;
      for(var a=0,l=Divs.length;a<l;a++){
        var Div = Divs[a];
        if(!$(Div).hasClass("mw-specialpages-list")) continue;
        divcount++
        if(divcount != count) continue;
        var UL = Div.getElementsByTagName('ul')[0];
        if(!UL) continue;
        var LI = document.createElement('li');
        UL.appendChild(LI);
        LI.appendChild(MassEval.functions.createLink(mw.config.get('wgFormattedNamespaces')[-1]+":"+MassEval.params.SpecialpageName,{text:MassEval.texts.SpecialpageName}));
      }
    },
    toggleTabsInSpecialpage : function(link){
      var LI = link.parentNode.parentNode;
      if($(LI).hasClass("selected")) return;
      var Parent = LI.parentNode;
      var AllLIs = Parent.getElementsByTagName('li');
      for(var a=0,l=AllLIs.length;a<l;a++){
        var thisLI = AllLIs[a];
        if(thisLI !== LI) $(thisLI).removeClass("selected");
        else $(thisLI).addClass("selected");
      }
      if(LI.id == "ca-nstab-special-options"){
        if( !MassEval.params.EvalThemesOK || !MassEval.params.OptionsSubPageOK ) return;
        MassEval.functions.openOptionsForm();
        MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], false);
        MassEval.functions.closeDatasForm();
      }else if(LI.id == "ca-nstab-special-datas"){
        if(!MassEval.params.StubThemesOK || !MassEval.params.EvalThemesOK || !MassEval.params.BeforeStubTemplatesOK) return;
        MassEval.functions.openDatasForm();
        MassEval.functions.closeOptionsForm();
        MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], false);
      }else{
        MassEval.functions.displayNodes(["MassEvalBoardHead","MassEvalBoardListDiv"], true);
        var MassEvalBoardListDiv = document.getElementById("MassEvalBoardListDiv");
        if(MassEvalBoardListDiv && $(MassEvalBoardListDiv).hasClass("empty")) MassEvalBoardListDiv.style.display = "none";
        MassEval.functions.closeOptionsForm();
        MassEval.functions.closeDatasForm(); 
      }
    },
    addOptionLinkInSpecialpage : function(){
      var SpecialLI = document.getElementById("ca-nstab-special");
      if(SpecialLI){
        var SpecialLink = SpecialLI.getElementsByTagName('a')[0];
        if(SpecialLink){
          if(SpecialLink.parentNode.tagName.toLowerCase() != "span"){
            var specialspan = SpecialLink.parentNode.appendChild(document.createElement('span'));
            specialspan.appendChild(SpecialLink);
          }
          var optionsli = SpecialLI.parentNode.appendChild(document.createElement('li'));
          optionsli.id = "ca-nstab-special-options";
          var optionsspan = optionsli.appendChild(document.createElement('span'));
          var optionslink = optionsspan.appendChild(document.createElement('a'));
          optionslink.innerHTML = MassEval.texts.GoOptionsText;
          optionslink.title = MassEval.texts.GoOptionsTitle;
          optionslink.href = "javascript:;";
          optionslink.id = "optionlinkintab";
          var datasli = SpecialLI.parentNode.appendChild(document.createElement('li'));
          datasli.id = "ca-nstab-special-datas";
          var datasspan = datasli.appendChild(document.createElement('span'));
          var dataslink = datasspan.appendChild(document.createElement('a'));
          dataslink.innerHTML = MassEval.texts.GoDatasText;
          dataslink.title = MassEval.texts.GoDatasTitle;
          dataslink.href = "javascript:;";
          dataslink.id = "datalinkintab";
          dataslink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
          if(!MassEval.params.StubThemesOK || !MassEval.params.EvalThemesOK || !MassEval.params.BeforeStubTemplatesOK)
            $(dataslink).addClass("disableddatlink");
          optionslink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
          SpecialLink.onclick = function(){ MassEval.functions.toggleTabsInSpecialpage(this); return false; }
          if( !MassEval.params.EvalThemesOK || !MassEval.params.OptionsSubPageOK )
            $(optionslink).addClass("disabledoptionlink");
          MassEval.params.SpecialOptionLinkOK = true;
        }    
      }
    },
  // ------------------------------- Fonctions pour le lancement -------------------------------
    launch : function() {
      var LaunchCond = MassEval.params.LaunchCondition;
      var Scripts = [];
      var sustomPage = mw.config.get('wgFormattedNamespaces')[2]+':'+mw.config.get('wgUserName')+MassEval.params.OptionsSubPage;
      var customURL = mw.util.getUrl(sustomPage, {'action':'raw','ctype':'text/javascript'});
      Scripts.push(customURL);
      var ColorPickerJS  = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ColorPicker.js&action=raw&ctype=text/javascript';
      var ColorPickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ColorPicker.css&action=raw&ctype=text/css';
      var ClockPickerJS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ClockPicker.js&action=raw&ctype=text/javascript';
      var ClockPickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/ClockPicker.css&action=raw&ctype=text/css';
      var DatePickerJS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/DatePicker.js&action=raw&ctype=text/javascript';
      var DatePickerCSS = 'https://meta.wikimedia.org/w/index.php?title=User:OldBee/DatePicker.css&action=raw&ctype=text/css';
      if(LaunchCond === 2){
        mw.loader.load(ColorPickerCSS, 'text/css');
        Scripts.push(ColorPickerJS);
        mw.loader.load(ClockPickerCSS, 'text/css');
        Scripts.push(ClockPickerJS);
        mw.loader.load(DatePickerCSS, 'text/css');
        Scripts.push(DatePickerJS);
      } 
      $.when.apply( null, $.map(Scripts, function ( url ) {
        return $.ajax({ url: url, dataType: 'script', cache: true });
      })).done(function(){
        MassEval.functions.setDefaultParams();
        MassEval.functions.getCustomParams();
        var LaunchThis = MassEval.params.LaunchCondition;
        if([2,4,5].indexOf(LaunchThis)!==-1) MassEval.functions.setCSSstyles();
        if(LaunchThis === 1) MassEval.functions.addCategoryLink();
        if(LaunchThis === 2) MassEval.functions.prepareSpecialpage();
        if(LaunchThis === 3) MassEval.functions.addlinktoSpecialpage();
        if(LaunchThis === 4) MassEval.functions.addPageLink();
        if(LaunchThis === 5) MassEval.functions.addPageLink();
        if(LaunchThis === 6) MassEval.functions.addUserLink();
        if(LaunchThis === 7) MassEval.functions.addTemplateLink();
        if(LaunchThis === 10) MassEval.functions.addNewpagesLink();
        if(LaunchThis === 11) MassEval.functions.addCreationsLink();
        if(LaunchThis === 12) MassEval.functions.addLinkshereLink();
        if(LaunchThis === 13) MassEval.functions.addPrefixindexLink();
      }); 
    },
    getLaunchCondition : function() { 
      if(mw.config.get('wgServer') !== '//fr.wikipedia.org') return false;
      var wgTitle = mw.config.get('wgTitle');
      var wgAction = mw.config.get('wgAction');
      var wgNamespaceNumber = mw.config.get('wgNamespaceNumber');
      var wgCanonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName');
      var wgUserName = mw.config.get('wgUserName');
      var LaunchCondition = false;
      if(wgNamespaceNumber == 14 && ["edit","submit"].indexOf(wgAction) == -1) LaunchCondition = 1;
      if(wgNamespaceNumber == -1 && (wgTitle == MassEval.params.SpecialpageName || wgTitle.indexOf(MassEval.params.SpecialpageName+"/") != -1)) LaunchCondition = 2;
      if(wgCanonicalSpecialPageName == "Specialpages") LaunchCondition = 3;
      if([0,1].indexOf(wgNamespaceNumber) != -1 && ["edit","submit"].indexOf(wgAction) == -1) LaunchCondition = 4;
      if([0,1].indexOf(wgNamespaceNumber) != -1 && wgAction == "edit" && document.URL.indexOf("redlink=1") != -1) LaunchCondition = 4;
      if([2,3].indexOf(wgNamespaceNumber) != -1 && wgTitle === wgUserName+MassEval.params.TestPage && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 5;
      if([2,3].indexOf(wgNamespaceNumber) != -1 && wgTitle !== wgUserName+MassEval.params.TestPage && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 6;
      if(wgNamespaceNumber == 10 && ["edit","submit"].indexOf(wgAction) === -1) LaunchCondition = 7;
      if(["Newpages","Recentchanges"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 10;
      if(["Contributions"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 11;
      if(["Whatlinkshere"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 12;
      if(["Prefixindex"].indexOf(wgCanonicalSpecialPageName) !== -1 ) LaunchCondition = 13;

      MassEval.params.LaunchCondition = LaunchCondition;
      console.info("MassEval launch condition = "+LaunchCondition);
      return LaunchCondition;    
    },
  // ------------------------------- Styles CSS -------------------------------
    getCSSstyle : function(stylename) { 
      if(typeof(MassEval.params.DEFAULTstyles[stylename])==="undefined") return "";
      if(typeof(MassEval.styles[stylename])==="undefined") return "";
      return MassEval.styles[stylename];
    },
    setCSSstyles : function() { 
      var getS = MassEval.functions.getCSSstyle;
      if(MassEval.params.ActualStyleTag){
        MassEval.params.ActualStyleTag.parentNode.removeChild(MassEval.params.ActualStyleTag);
      }
      var NewStyles = ""

// Général --------------------------------------------------------


 // Partout 

      + "#MassEvalBoard  input[type=text], #MassEvalBoard  input[type=time]   { background-color:"+getS('ImpTexbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:"+getS('ImpTexbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalBoard  select { background-color:"+getS('ImpTexbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:"+getS('Selectbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalBoard  input[type=button] { background-color:"+getS('ImpButbgc')+";border-radius:"+getS('ImpButbdr')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalBoard  textarea { background-color:"+getS('ImpTexbgc')+";border-radius:"+getS('ImpTexbdr')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalBoard  input[type=button][disabled]  { background-color:"+getS('ImpButDisbgc')+"; }"
      + "#MassEvalBoard  input[type=text][disabled],#MassEvalBoard  input[type=time][disabled]  { background-color:"+getS('ImpTexDisbgc')+"; }"
      + "#MassEvalBoard  select[disabled], #MassEvalBoard  textarea[disabled]  { background-color:"+getS('ImpTexDisbgc')+";cursor:not-allowed !important; }"
      + "#MassEvalBoard select, #MassEvalBoard input[type=button], #MassEvalBoard input[type=checkbox], #MassEvalBoard input[type=radio] { cursor:pointer !important; }"
      + "#MassEvalBoard input[type=button]:disabled { cursor:not-allowed !important; }"
      + "a.disabledoptionlink, a.disableddatlink { color:DimGray !important;cursor:not-allowed !important; }"
      + ".showhideConfigForm { margin-left:0.5em; }"
      + "table.centre { margin: 1em auto; }"
      + "#MassEvalBoardHead a, #MassEvalBoardHead a *, #fieldsetOptions a, #fieldsetOptions a *, .TD1Content a, .TD1Content a * { color:"+getS('Linkscol')+"; }"
      + "#MassEvalBoardHead a.new, #MassEvalBoardHead a.new *, #fieldsetOptions a.new, #fieldsetOptions a.new *, .TD1Content a.new, .TD1Content a.new * { color:red; }"
      + "#MassEvalBoardHead a.mw-redirect, .TD1Content a.mw-redirect { green !important }"
      + "#MassEvalBoardHead abbr, #fieldsetOptions abbr, .TD1Content abbr { text-decoration:none !important; }"
      + "#MassEvalBoardHead, #fieldsetOptions, .TD1Content, .TD2, .TD3, .TD4, .TD5, .TD6, #MassEvalBoard input, #MassEvalBoard select { font-size:"+getS('Mainfs')+"; }"
      + "#MassEvalBoardHead, #fieldsetOptions, .TD1Content, .TD2, .TD3, .TD4, .TD5, .TD6, #MassEvalBoard input, #MassEvalBoard select { font-family:"+getS('Mainff')+"; }"

 // Page spéciale

      + ".ns--1 #MassEvalBoard legend, #fieldsetOptionsContainer legend, #fieldsetSearchContainer legend { padding:0.25em;margin-left:1.5em; }"
      + ".ns--1 #MassEvalBoard fieldset { border-radius:"+getS('BigFSbdr')+"; }"
      + ".ns--1 #MassEvalBoard fieldset { border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";background-color:"+getS('BigFSbgc')+";border-bottom-width:2px;border-right-width:2px; }"
      + ".ns--1 #MassEvalBoardHead { padding:0 1em;padding-bottom:1em;margin:0;margin-bottom:1em; }"
      + ".ns--1 #MassEvalBoardHead fieldset { margin: 0 0 0.5em 0;padding:0 0.5em;padding-top:0; }"
      + ".TDSelector, .TDInfos { border-right:1px "+getS('Innerbds')+" "+getS('Linesbdc')+"; }"

 // Hors page spéciale

      + ".ns-0 #MassEvalBoard, .ns-1 #MassEvalBoard, .ns-2 #MassEvalBoard, .ns-3 #MassEvalBoard { background-color:"+getS('Mainbgc')+";border:1px "+getS('Wrapperbds')+" "+getS('Wrapperbdc')+";margin-bottom:1em;padding:0.5em;border-radius:"+getS('Wrapperbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalMainOptionsFS { padding: 0;margin:0;display:-webkit-flex;display: flex;justify-content:center;align-items:center;flex-wrap: wrap;width:100%;text-align:center; }"
      + "#MassEvalMainOptionsFS legend {  padding:0 0.125em;margin:0 0 0 1em; }"
      + "#MassEvalMainOptionsFS fieldset { display:inline;margin:0 1em 0.5em 1em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#MassEvalBoardHead *, #fieldsetOptions *, .TH1, .TH2, .TH3, .TH4, .TH5, .TH6, .TD1Content *, .TD2 *, .TD3 *, .TD4 *, .TD5 *, .TD6 * { color:"+getS('Maincol')+"; }"
      + "#CloseButton {float:right;margin-bottom:-50px; }"
      + "#CloseButtonImage { border-radius: 0.5em;box-shadow: 2px 2px 5px DimGray; }"

// Images

      + ".EvalTableIcon    { width:"+getS('EvalTableIcowidth')+"; }"
      + ".RunningIcon      { width:"+getS('RunIcowidth'      )+"; }"
      + ".PrevCloseIcon    { width:"+getS('PrevCloseIcowidth')+"; }"
      + ".RedirectIcon     { width:"+getS('RedirectIcowidth' )+"; }"
      + ".DisambigIcon     { width:"+getS('DisambigIcowidth' )+"; }"
      + ".HiddenCatIcon    { width:"+getS('HiddenCatIcowidth')+"; }"
      + ".AlertIcon        { width:"+getS('AlertIcowidth'    )+"; }"
      + ".MainCloseIcon    { width:"+getS('MainCloseIcowidth')+"; }"

// Formulaire Thème d'évaluation --------------------------------------------------------

      + "#EvalThemeInput, #PortalInput { width:"+getS('MainEvalTwidth')+"; }"
      + "#EvalThemeTD { text-align:left; }"
      + ".ns--1 #EvalThemeInput { width:"+getS('SpeImpCatwdth')+"; }"
      + ".ns--1 #PortalInput { width:"+getS('SpeImpCatwdth')+"; }"
      + ".ns--1 #MassEvalBoard .NoBorderFieldset {border:none;background-color:transparent;margin:0;padding:0; }"
      + ".ns--1 #MassEvalBoard .NoBorderFieldset legend { display: block;width:150px;margin: auto;text-align: center; }"

      + "#ThemeCatsTD { text-align:center; }"
      + "#ThemeCats { margin-bottom:0.5em; }"
      + "#ThemeCats td { text-align:center;font-weight: bold;white-space:nowrap;background-color:"+getS('Linesbgc')+"; }"
      + "#EvalTable_AVT td:first-of-type, #EvalTable_IMP td:first-of-type { border:none; }"

      + "#EvalTable {  }"
      + "#EvalTableUpdateTD {  }"
      + "#EvalTable_IMP, #EvalTable_AVT, #ThemeCats { border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-bottom-width:2px;border-right-width:2px;border-radius:"+getS('EvalTbdr')+"; }"

      + ".EvalTableFirstTH { border-top-left-radius:"+getS('EvalTbdr')+"; }"
      + ".EvalTableLastTH { border-top-right-radius:"+getS('EvalTbdr')+"; }"

      + "#EvalTable table, .evaltable { border-spacing:0; }"
      + "#EvalTable caption { font-weight:bold; }"
      + "#EvalTable_IMP th, #EvalTable_AVT th { background-color:"+getS('THListbgc')+";border-left:1px "+getS('Mainbds')+" "+getS('THListbdc')+"; }"
      + "#EvalTable_IMP td, #EvalTable_AVT td { background-color:"+getS('Linesbgc')+";border-left:1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-top:1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
      + "#EvalTable_AVT th:first-of-type, #EvalTable_IMP th:first-of-type { background-color:"+getS('THListbgc')+";border:none; }"
      + "#EvalTable_AVT td:first-of-type, #EvalTable_IMP td:first-of-type { background-color:"+getS('Linesbgc')+";border:none;border-top:1px "+getS('Mainbds')+" "+getS('THListbdc')+"; }"
      + ".hideportals #PortalInput, .hideportals #PortalInputfieldset, .ns--1.hideportals #EvalThemeInputfieldset legend { display:none; }"

// Formulaire Modes --------------------------------------------------------

      + "#fieldsetModes { padding-bottom:0 !important; }"
      + "#fieldsetModes fieldset { padding:0.25em !important; }"
      + "#fieldsetModes fieldset legend { display:none; }"
      + "#fieldsetModes form:first-of-type { text-align:center;margin:0 0 1em 0;}"
      + "#fieldsetModes form:first-of-type input[type='button'] { padding: 0.5em 1em;text-align: center;width:"+getS('ModSelwidth')+";white-space: nowrap;border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:0;border-left:none;background-color:"+getS('ModSelbgc')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#fieldsetModes form:first-of-type input[type='button']:first-of-type { border-left: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-top-left-radius:"+getS('ModSelbdr')+";border-bottom-left-radius:"+getS('ModSelbdr')+"; }"
      + "#fieldsetModes form:first-of-type input[type='button']:last-of-type { border-top-right-radius:"+getS('ModSelbdr')+";border-bottom-right-radius:"+getS('ModSelbdr')+"; }"
      + "#fieldsetModes form:first-of-type input[type='button']:hover { background-color:"+getS('HoverModSelbgc')+"; }"
      + "#fieldsetModes form:first-of-type input.modeselected { background-color:"+getS('ModSelCurrbgc')+"; }"
      + "#fieldsetModes form:first-of-type input.modeselected:hover { background-color:"+getS('HoverModSelCurrbgc')+"; }"

      + "p.InfosP { margin:0 0.5em 0 0.5em;text-align:center;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";font-weight: bold; }"

      + "#CatParentsDiv, #CatDaughtersDiv, .PageInfosDiv { height:"+getS('CatListhght')+";overflow-y:scroll; }"
      + ".TDInfos { border-top:1px "+getS('Innerbds')+" "+getS('Mainbdc')+";padding-left: 0.5em; }"
      + ".pagenoexists b { color:red !important; }"
      + ".pagenoexists b * { color:red !important; }"
      + ".pagenoexists li { visibility:hidden; }"
      + ".TDInfos ul { list-style: circle;margin-left:2em; }"
      + ".TimeSelector {text-align: center; }"
      + ".timeinput { width:"+getS('Timewidth')+";text-align:center; }"
      + ".dateinput { width:"+getS('Datewidth')+";text-align:center; }"
      + ".PageInfos { -webkit-columns:"+getS('PIcolwdth')+"; -moz-columns:"+getS('PIcolwdth')+"; columns:"+getS('PIcolwdth')+";margin-left: 0.25em; }"
      + ".PageInfos li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('PILIbdr')+";background-color:"+getS('PILIbgc')+";border:1px "+getS('Mainbds')+" "+getS('PILIbdc')+"; }"
      + ".PageInfos li:hover, #fieldsetDatas li:hover  { background-color:"+getS('HoverPILIbgc')+";border:1px "+getS('Mainbds')+" "+getS('HoverPILIbdc')+"; }"

// Formulaire Pages --------------------------------------------------------


// Formulaire Catégorie --------------------------------------------------------

      + ".SuggestForm { display:-webkit-flex;display:flex;flex-direction:column; }"
      + "#CatInputForm {  }"
      + ".ns--1 #CatInput, ns--1 #EvalThemeInput { width:"+getS('SpeImpCatwdth')+"; }"
      + ".ns--1 #fieldsetCat input[type=text] { margin-bottom:0.5em; }"
      + "#subcatdepthForm { padding-left:2em; }"
      + "#subcatdepthForm input {margin-right:0.25em; }"
      + "#CatInfosDiv { padding:1em 0; }"
      + "#Pinfos { margin: 0; }"
      + "#TDDaughters { border-left:1px "+getS('Innerbds')+" "+getS('Mainbdc')+"; }"
      + "#CatParentsDiv ul, #CatDaughtersDiv ul {list-style: none;margin-left: 0.25em; }"
      + "#CatParentsDiv ul ul, #CatDaughtersDiv ul ul {list-style: none;margin-left:1em; }"
      + ".hiddencaticon { margin-left:0.5em; }"


// Formulaire Liens --------------------------------------------------------

      + "#LinksTable {  }"

// Formulaire Pages liées --------------------------------------------------------


// Formulaire Inclusions --------------------------------------------------------

      + "#TemplateDoc { font-size:"+getS('TempDocfs')+";margin-left:0.5em; }"
      + "#TDtemplatedoc { border-left:1px "+getS('Innerbds')+" "+getS('Mainbdc')+";width:"+getS('TempDocwidth')+"; }"

// Formulaire Nouvelles pages  --------------------------------------------------------

      + "#NewpagesTimeSelector { margin-bottom:1em !important; }"


// Formulaire Filtrage --------------------------------------------------------

      + "#fieldsetSearch { padding:0.5em !important; }"
      + "#ANDORselect1, #ANDORselect2 { margin-left:2em;margin-right:2em; }"
      + "#SearchResultDisplaySelector { float:right; }"
      + "#FilterForm_STUB, #FilterForm_AVT, #FilterForm_IMP { white-space:nowrap; }"
      + "#FilterForm_STUB span, #FilterForm_AVT span, #FilterForm_IMP span { padding:2px;padding-top:5px;border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+"; }"
      + "#PageFilteredCount { float:right; }"
      + "#RangeSelectorAbbr { float:left; }"
      + "#RangeSelectorAbbr, #PageFilteredCount { border:1px "+getS('FiltAbbrbds')+" "+getS('Mainbdc')+";border-radius:"+getS('FiltAbbrbdr')+";padding:0.05em 0.3em 0em 0.3em;background-color:"+getS('FiltAbbrbgc')+";font-weight:bold;border-bottom-width:2px;border-right-width:2px; }"
      + ".startFilterOption { border-radius: "+getS('FilSelbdr')+" 0 0 "+getS('FilSelbdr')+"; }"
      + ".endFilterOption   { border-radius: 0 "+getS('FilSelbdr')+" "+getS('FilSelbdr')+" 0;     }"
      + ".MouseFunctionRunning * { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }"
      + ".MouseFunctionRunning input[type=text]:focus, .MouseFunctionRunning input[type=time]:focus { -webkit-touch-callout: text; -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; }"
      + ".ResizeFunctionRunning * { cursor:w-resize; }"
      + ".MoveFunctionRunning * { cursor:move; }"
      + "#FromToSelectorContainer { margin-bottom:1em;border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-collapse:collapse;border-radius:1em;border-top-width:2px;border-left-width:2px;overflow:hidden; }"
      + "#FromToSelectorDiv { background-color:"+getS('FiltNSbgc')+"; }"
      + "#FromToSelector { background-color:"+getS('FiltSbgc')+";border-radius:1em;overflow:hidden; }"
      + "#FromSelector { float:left; }"
      + "#ToSelector { float:right; }"
      + "#FromSelector, #ToSelector { width:1em;background-color:" + getS('FiltSbgc') + "; }"
      + "#FromToSelectorContainer, #FromToSelectorDiv, #FromToSelector, #FromSelector, #ToSelector, #FromSelectorMove { height:1em; }"
      + "#FromSelectorMove {margin-left:1em;margin-right:1em; }"
      + "#RangeSelectorAbbrLink *, #PageFilteredCount { color:"+getS('Maincol')+" !important;text-decoration:none !important; }"
      + ".RangeSelectorDisabled #FromToSelector { visibility:hidden; }"
      + ".RangeSelectorDisabled { background-color:"+getS('FiltDISbgc')+" !important; }"
      + ".NotAllPages { border:1px "+getS('FiltAbbrbds')+" "+getS('FiltAbbrMbdc')+" !important;background-color:"+getS('FiltAbbrMbgc')+" !important;border-bottom-width:2px !important;border-right-width:2px !important; }"
      + "#fieldsetSearchContainer { margin-left:0.5em;margin-right:0.5em; }"
      + "#fieldsetSearchContainer #fieldsetSearch { margin:0em 0.5em 0.5em 0.5em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#fieldsetSearchContainer #FromToSelectorContainer { margin:0 0.25em 0.25em 0.25em; }"
      + "#fieldsetSearch select { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; }"

// Formulaire Actions --------------------------------------------------------

      + ".ns--1 #fieldsetActions { padding-bottom:0.75em !important; }"
      + "#GlobalChangeInput, #GlobalOptionsInput, #SPInput, #DocInput { margin-left:1.5em; }"
      + "#GlobalCancelInput { margin-left: 0.125em; }"
      + ".ns--1 #fieldsetActions .FieldsetContent { display:-webkit-flex;display: flex;justify-content: space-between; }"   
      + "#fieldsetActions #LeftButtons { display:inline; }"
      + ".ns--1 #fieldsetActions #LeftButtons { display:-webkit-flex;display:flex; }"
      + "#LinksActions { display:-webkit-flex;display:flex;white-space:nowrap; }"
      + "#EmergencyStop { margin:0 0.75em;width:"+getS('EmStopwidth')+";height:"+getS('EmStopwidth')+";border-radius:50%;border: 3px solid DimGray;box-shadow: 2px 2px 5px DimGray;background: radial-gradient(circle, red , DarkRed) !important; }"
      + "#EmergencyStop.Pushed { border-color:FireBrick;box-shadow:none; }"
      + "#GlobalAddEvalAVTSelect, #GlobalAddEvalIMPSelect { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; } "
      + "#GlobalAddEvalCancel {padding-left:0;padding-right:0; }"

// Tableau des pages --------------------------------------------------------

      + "#MassEvalBoardListDiv { padding:"+getS('LinesTbdr')+";background-color:"+getS('BigFSbgc')+";border: 1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('LinesTbdr')+";overflow:hidden; }"
      + "#MassEvalBoardList { margin:0px;border-collapse:collapse; }"
      + ".TH1, .TH2, .TH3, .TH4, .TH5, .TH6 { background-color:"+getS('THListbgc')+";border:1px "+getS('Mainbds')+" "+getS('THListbdc')+";padding-bottom: 0;padding-top: 0; }"
      + ".TD1, .TD2, .TD3, .TD4, .TD5, .TD6 { background-color:"+getS('Linesbgc')+";border:1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
      + ".TH2 { width:"+getS('TH2width')+"; }"
      + ".TH3 { width:"+getS('TH3width')+"; }"
      + ".TH4 { width:"+getS('TH4width')+"; }"
      + ".TH5 { width:"+getS('TH5width')+"; }"
      + ".TH6 { width:"+getS('TH6width')+"; }"
      + ".SinglePageAnalysis .TD1:hover, .SinglePageAnalysis .TD2:hover, .SinglePageAnalysis .TD3:hover, .SinglePageAnalysis .TD4:hover, .SinglePageAnalysis .TD5:hover, "
      + ".MultiplePagesAnalysis tr:hover .TD1, .MultiplePagesAnalysis tr:hover .TD2, .MultiplePagesAnalysis tr:hover .TD3, .MultiplePagesAnalysis tr:hover .TD4, .MultiplePagesAnalysis tr:hover .TD5, .MultiplePagesAnalysis tr:hover .TD6 { background-color:"+getS('HoverLinesbgc')+"; }"
      + ".FilteredLine { display:none !important; }"
      + ".previewDiv { background-color:"+getS('Prvwbgc')+";font-size:"+getS('Prvwfs')+";height:"+getS('Prvwhght')+";width:100%;overflow-y:scroll;border-top:1px "+getS('Prvwbds')+" "+getS('Linesbdc')+";resize:vertical; }"
      + ".previewButtons { float:right; }"
      + ".previewCloseButtonImage { border-radius: 0.25em; }"
      + ".pagepropicon { margin-right:0.5em; }"
      + ".StubTheme { width:"+getS('StubTwidth')+"; }"
      + ".StubAdj { width:"+getS('StubAwidth')+"; }"
      + ".Avancement { width:"+getS('Avtwidth')+"; }"
      + ".IMPtheme { width:"+getS('ImpTwidth')+"; }"
      + ".Importance { width:"+getS('Impwidth')+"; }"
      + ".TD2Content { text-align:left;padding:0 0.25em; }"
      + ".TD3Content { text-align:right;padding:0 0.25em; }"
      + ".TD4Content { text-align:center;padding:0 0.25em; }"
      + ".TD5Content { text-align:right;padding:0 0.25em; }"
      + ".TD6Content { display:-webkit-flex;display:flex;flex-direction: column;align-content:center;padding:0 0.25em; }"
      + ".SortLinks { float:right;margin-bottom:-2em;display:-webkit-flex;display:flex;flex-direction:column;line-height:90%;font-size:70%;border:1px "+getS('Mainbds')+" "+getS('Sortbdc')+";background-color:"+getS('Sortbgc')+";border-radius:"+getS('Sortbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + ".SortLinks a { color:"+getS('Sortcol')+" !important; }"
      + ".SinglePageAnalysis .SortLinks { visibility:hidden; }"
      + "#selectedSort { visibility:hidden; }"
      + ".hideportals .TH2, .hideportals .TD2 { display:none; }"
      + ".TD2Content ul { list-style:none;margin:0;font-size:"+getS('PortListfs')+";line-height:100%; }"
      + ".TD2Content li { border:1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-radius:0.5em;padding:1px 0.5em;background-color:"+getS('Linesbgc')+" !important;cursor:pointer; }"
      + ".TD2Content li:hover { background-color:"+getS('THListbgc')+" !important; }"
      + ".TD3Content form:hover, .TD5Content form:hover { background-color:"+getS('THListbgc')+" !important; }"

   // Liens du bas
      + "#MassEvalBoard #bottomlinks { display:-webkit-flex;display:flex;align-content:center; }"
      + "#MassEvalBoard #bottomlinks a { width: 20%;background-color:"+getS('Linesbgc')+";border-top: 3px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-bottom: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+";border-left: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+";text-align: center;padding: 1em 0 1em 0;font-size: 120%; }"
      + "#MassEvalBoard #bottomlinks a:last-of-type { border-right: 1px "+getS('Mainbds')+" "+getS('Linesbdc')+"; }"
      + "#MassEvalBoard #bottomlinks a:hover { background-color:"+getS('HoverLinesbgc')+"; }"


// Menu d'options --------------------------------------------------------

      + "#MassEvalBoardHead #fieldsetOptions { margin-top:0;margin-left:1em;margin-right:1em;padding:0.2em;background-color:"+getS('SmallFSbgc')+";border:1px "+getS('Mainbds')+" "+getS('Mainbdc')+";border-radius:"+getS('SmallFSbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + "#fieldsetOptions li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+"; }"
      + "#fieldsetOptions li:hover, #fieldsetDatas li:hover  { background-color:"+getS('HoverOptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('HoverOptLIbdc')+"; }"
      + "#fieldsetOptions textarea { resize:none; }"
      + ".OptInputNbr { width:"+getS('OptNbrwdth')+"; }"
      + ".OptInputStr { width:"+getS('OptStrwdth')+"; }"
      + ".OptInputCSS { width:"+getS('OptStywdth')+"; }"
      + "#fieldsetOptions p { padding-bottom: 0.5em;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";margin-bottom:0.5em;margin-left:2em;margin-right:2em; }"
      + ".ns--1 #fieldsetOptions p { padding-bottom: 1em;border-bottom: 1px "+getS('Innerbds')+" "+getS('Mainbdc')+";margin-bottom:1em;margin-left:2em;margin-right:2em; }"
      + "#OPTIONULparams, #OPTIONULstyles, #OPTIONULtexts { -webkit-columns:"+getS('Optcolwdth')+"; -moz-columns:"+getS('Optcolwdth')+"; columns:"+getS('Optcolwdth')+"; }"
      + "#OPTIONULparams li, #OPTIONULstyles li { display:-webkit-flex;display:flex;align-items:center; }"
      + ".optionsUL { margin-right:1em;margin-left:1em; }"
      + "#OPTIONULtexts li input[type=button] { padding-top:0.5em;padding-bottom:0.8em;margin-bottom:-1em; }"
      + "#OPTIONULtexts li textarea { display:inline;margin:0;position:relative;top:1em;margin-top:-1em; }"
      + "#OPTIONULtexts li label { display:block;margin-left:1em; }"
      + "#OPTIONULtexts li { padding-bottom:1em; }"
      + "#OPTIONULtexts li form { display:-webkit-flex;display:flex;align-content:center; }"
      + ".colorpickerDiv { float: left;position: relative;left:-198px;margin-right:-197px;top:-210px;margin-bottom: -200px !important; }"
      + ".colorpicker { border:1px solid "+getS('Mainbdc')+";background-color:white;border-radius:98px;overflow:hidden;box-shadow: 2px 2px 5px DimGray; }"
      + "#OPTIONULstyles form { display:-webkit-flex;display:flex;align-items:center; }"
      + "#GlobalRAZoptionInput { margin-left:1em; }"
      + "#FontTester { display:inline-block; width:350px;height:210px;position: relative;left:0.25em;margin-right: -366px;margin-bottom: -205px;overflow:hidden;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+";border-bottom-width:2px;border-right-width:2px;text-align:justify;font-family:"+getS('Mainff')+";padding:0.5em;box-shadow: 2px 2px 5px DimGray; }"
      + ".ImagePreviewSpan { float: left;width: 0;height: 0; }"
      + ".ImagePreview { float:left;position:relative;top:10px;height:"+getS('OptImgPrevhght')+";margin-top:-"+getS('OptImgPrevhght')+";background: url('//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png') repeat;border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+";border-bottom-width:2px;border-right-width:2px;box-shadow: 2px 2px 5px DimGray; }"

      + ".modifiedoption { background-color:"+getS('OptLIMbgc')+" !important; }"
      + ".modifiedoption:hover { background-color:"+getS('HoverOptLIMbgc')+" !important; }"
      + ".modifiedoption label { cursor:help; }"
      + "#MoreParamsTestResult { margin-left:1em; }"
      + "#MoreParamsTestResult span { color:red !important; }"

// Menu des données --------------------------------------------------------

      + ".DataInfo {padding:0.1em;border:1px solid grey; }"
      + "#fieldsetDatas li { list-style:none;-webkit-column-span:none;column-span:none;padding-left:0.1em;border-radius:"+getS('OptLIbdr')+";background-color:"+getS('OptLIbgc')+";border:1px "+getS('Mainbds')+" "+getS('OptLIbdc')+"; }"
      + "input[name='RAZdataUL'] { margin-left:2em !important; }"

// Bandeau de message --------------------------------------------------------

      + "#MassEvalControlUL { position:fixed;bottom:0;right:0;margin-3px;list-style:none; }"
      + ".MassEvalControlLI { background-color:"+getS('Alertbgc')+";border:1px "+getS('Alertbds')+" "+getS('Alertbdc')+";border-bottom-width:2px;border-right-width:2px;border-radius:"+getS('Alertbdr')+";margin:1px;padding:5px;text-align:right;display:-webkit-flex;display:flex;align-content: center; }"
      + ".MassEvalBoardControlText { color:"+getS('Alertcol')+";margin-right:1.5em;margin-left:1em;font-size:"+getS('Alertfs')+";font-weight:bold; }"
      + "#MassEvalControlLI_AllOK { cursor:help; }"

// Harmonisation clockpicker / datepicker --------------------------------------------------------

      + ".clockpicker-popover .popover-title { display:none; }"
      + ".clockpicker-plate div.active { color: "+getS('DTpickCSelbdc')+";font-weight:bold; }"
      + ".clockpicker-canvas-bg { fill:none;stroke:none; }"
      + ".clockpicker-canvas-bearing { fill:"+getS('DTpickCSelbdc')+"; }"
      + ".clockpicker-canvas line { stroke:"+getS('DTpickCSelbdc')+"; }"
      + ".clockpicker-canvas-fg { fill:"+getS('DTpickCSelbdc')+"; }"
      + ".datepicker-panel > ul > li.picked { color: "+getS('DTpickCSelbdc')+";font-weight:bold; }"
      + ".datepicker-panel > ul > li.picked, .datepicker-panel > ul > li.picked:hover { border:1px solid "+getS('DTpickCSelbdc')+";height:28px;width:28px;line-height:28px; }"
      + ".datepicker-panel > ul > li.picked { background-color:"+getS('DTpickCSelbgc')+" !important; }"
      + ".clockpicker-plate div.active { background-color:"+getS('DTpickCSelbgc')+" !important;border:1px solid "+getS('DTpickCSelbdc')+"; }"
      + ".datepicker-panel > ul > li { background-color:transparent; }"
      + ".datepicker-panel > ul > li { border-radius:50%; }"
      + ".datepicker-panel > ul > li.highlighted { background-color:transparent;  }"
      + ".datepicker-panel > ul > li:hover { background-color: "+getS('HoverDTpickCbgc')+" !important; }"
      + ".datepicker-panel > ul > li.picked:hover { background-color: "+getS('HoverDTpickCbgc')+"; }"
      + ".clockpicker-plate div.active:hover { background-color:"+getS('HoverDTpickCbgc')+" !important; }"
      + ".clockpicker-tick:hover { background-color: "+getS('HoverDTpickCbgc')+" !important; }"
      + ".datepicker-panel > ul > li.muted, .datepicker-panel > ul > li.muted:hover { color: "+getS('DTpickUnSelcol')+"; }"
      + ".datepicker-panel > ul > li.disabled, .datepicker-panel > ul > li.disabled:hover { background-color:transparent !important;color: "+getS('DTpickDiscol')+"; }"
      + ".popover, .datepicker-dropdown, .datepicker-container { background-color:"+getS('DTpickbgc')+";font-size: 12px; border: 1px solid "+getS('Mainbdc')+";box-shadow: 0 5px 10px rgba(0, 0, 0, .2);border-radius:"+getS('DTpickbdr')+";border-bottom-width:2px;border-right-width:2px; }"
      + ".datepicker-top-left, .datepicker-top-right { border-top-color:"+getS('Mainbdc')+"; }"
      + ".popover { background-color: "+getS('DTpickbgc')+"; }"
      + ".clockpicker-popover .popover-content { background-color:transparent; }"
      + ".clockpicker-plate {background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+"; }"
      + ".datepicker-container { padding:10px; }" 
      + ".datepicker-panel > ul  > li[data-view='month prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
      + ".datepicker-panel > ul > li[data-view='month prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
      + ".datepicker-panel > ul > li[data-view='month current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
      + ".datepicker-panel > ul  > li[data-view='month next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
      + ".datepicker-panel > ul[data-view='week']  { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-bottom-style:"+getS('Innerbds')+";border-top-left-radius:15px;border-top-right-radius:15px;height:28px;margin-top:10px;width:210px; }"
      + ".datepicker-panel > ul[data-view='week'] > li, .datepicker-panel > ul[data-view='week'] > li:hover { background-color: transparent !important; }"
      + ".datepicker-panel > ul[data-view='days'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-top:none;border-radius:0 0 15px 15px;width:210px; }"
      + ".datepicker-panel > ul[data-view='days']  > li { margin:2px;width:26px;height:26px;line-height:26px; }"
      + ".datepicker-panel > ul[data-view='days']  > li.picked { width:24px;height:24px;line-height:24px; }"
      + ".datepicker-panel > ul  > li[data-view='year prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
      + ".datepicker-panel > ul > li[data-view='year prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
      + ".datepicker-panel > ul  > li[data-view='year current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
      + ".datepicker-panel > ul  > li[data-view='year next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
      + ".datepicker-panel > div[data-view='months picker'] ul:first-of-type { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;height:28px;line-height:28px;width:210px; }"
      + ".datepicker-panel > ul[data-view='months'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;width:210px;margin-top:10px; }"
      + ".datepicker-panel > ul[data-view='months']  > li { margin:4px 10px;width:32px;height:32px;line-height:32px; }"
      + ".datepicker-panel > ul[data-view='months']  > li.picked { width:30px;height:30px;line-height:30px; }"
      + ".datepicker-panel > ul  > li[data-view='years prev'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";height:28px;line-height:26px; }"
      + ".datepicker-panel > ul > li[data-view='years prev'] { border-right:none;border-top-right-radius:0;border-bottom-right-radius:0; }"
      + ".datepicker-panel > ul  > li[data-view='years current'] { background-color: "+getS('DTpickCbgc')+";border-top: 1px solid "+getS('Mainbdc')+";border-bottom: 1px solid "+getS('Mainbdc')+";height:28px;border-radius:0; }"
      + ".datepicker-panel > ul  > li[data-view='years next'] { background-color: "+getS('DTpickCbgc')+";border: 1px solid "+getS('Mainbdc')+";border-left:none;height:28px;line-height:26px;border-top-left-radius:0;border-bottom-left-radius:0; }"
      + ".datepicker-panel > div[data-view='years picker'] ul:first-of-type { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;height:28px;line-height:28px;width:210px; }"
      + ".datepicker-panel > ul[data-view='years'] { background-color: "+getS('DTpickCbgc')+";border:1px solid "+getS('Mainbdc')+";border-radius:15px;width:210px;margin-top:10px; }"
      + ".datepicker-panel > ul[data-view='years']  > li { margin:4px 7px;width:38px;height:38px;line-height:38px; }"
      + ".datepicker-panel > ul[data-view='years']  > li.picked { width:36px;height:36px;line-height:36px; }"
      + ".popover.bottom > .arrow, .popover > .arrow::after { border-bottom-color: "+getS('Mainbdc')+" !important;}"
      + ".datepicker-top-left::before, .datepicker-top-left::after, .datepicker-top-right::before, .datepicker-top-right::after { left:18px;top:-22px; }"
      + ".datepicker-container::before, .datepicker-container::after { border:11px solid transparent; }"
      + ".datepicker-top-left::before, .datepicker-top-right::before { border-bottom-color: "+getS('Mainbdc')+"; }"
      + ".datepicker-panel > ul > li, .datepicker-panel > ul > li.disabled, .datepicker-panel > ul > li.disabled:hover, .datepicker-panel > ul > li.muted, .datepicker-panel > ul > li.muted:hover { background-color: transparent; }"

/*
      + ".popover { display: block !important; }" // <-----------------------------------------  garder le conteneur visible pour les tests
      + ".datepicker-container { display: block !important; }" // <----------------------------  garder le conteneur visible pour les tests
*/


// Fancy inputs --------------------------------------------------------
      if(MassEval.params.UseFancyInputs){
        NewStyles += ""

        + "#MassEvalBoard select, #MassEvalBoard input[type='checkbox'], #MassEvalBoard input[type='radio'] { -moz-appearance: none;-webkit-appearance: none;-o-appearance: none;appearance: none; }"

        + "#MassEvalBoard input[type='checkbox'] {width:2.5em;height:1.5em;margin:0;margin-right:0px;margin-left:0px;margin-right:0px;margin-left:0px;margin-right:0.25em;margin-left:0.25em;cursor:pointer;"
        + "border-radius:1.5em;background-color: red;border: 1px solid DimGray;border-bottom-width:3px;border-right-width:3px; }"
        + "#MassEvalBoard input[type='checkbox']::after { content:\"◄\";position: relative;top: -0.10em;color: DarkRed;left:0em;transition:left 0.5s; }"
        + "#MassEvalBoard input[type='checkbox']:disabled::after { color:DimGray; }"
        + "#MassEvalBoard input[type='checkbox']:checked { background-color:Lime; }"
        + "#MassEvalBoard input[type='checkbox']:checked::after { content:\"►\";position: relative;top: -0.10em;color: green;left: 1.375em; }"
        + "#MassEvalBoard input[type='checkbox']:checked:disabled::after { color:DimGray; }"
        + "#MassEvalBoard input[type='checkbox']:disabled { background-color:Gray; }"

        + "#MassEvalBoard input[type='radio'] {width:1em;height: 1em;margin: 0;margin-right: 0px;margin-left: 0px;margin-right: 0px;margin-left: 0px;margin-right: 0.25em;margin-left: 0.25em;cursor:pointer;"
        + "border-radius: 0.75em;background-color: red;border: 1px solid DimGray;border-bottom-width:3px;border-right-width:3px; }"
        + "#MassEvalBoard input[type='radio']:checked { background-color:Lime; }"
        + "#MassEvalBoard input[type='radio']:disabled { background-color:Gray; }"
        + "#MassEvalBoard input[type='radio']:checked:disabled { background-color:LightGrey; }"

        + "#MassEvalBoard select::after { content:\"▼\";position:relative;width:1.5em;height:1.5em;border:1px solid Gray;background-color:silver;color:black; }"


      }
      MassEval.params.ActualStyleTag = mw.loader.addStyleTag(NewStyles);
    }
  }
}
  // ------------------------------- Lancement -------------------------------
if( MassEval.functions.getLaunchCondition()){
    mw.loader.using(['mediawiki.util', 'mediawiki.api'], function(){ 
      $(MassEval.functions.launch); 
    });
}

//</source></noinclude>