MediaWiki:Gadget-PaStec.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
#Author Argos42 (base), Orlodrim, Dr Brains, Automatik and Gratus
Some code from LiveRC was used in this version
Rewrite by Dr Brains
Installation : Préférences > Gadgets > PaStec
Documentation : Projet:Scripts et gadgets/Notices/PaStec (https://fr.wikipedia.org/wiki/Projet:Scripts_et_gadgets/Notices/PaStec)
{{Catégorisation JS|PaStec}}
La ligne suivante garantit que cette page apparaît dans la liste des inclusions du Modèle:Annonces PaStec :
{{Annonces PaStec}}
En réalité, le modèle est utilisé en interne, par substitution.
== Activation ==
<syntaxhighlight lang="javascript"> */
window.PaStec_DebugMode = false;
window.PaStec_Enabled = {
"PaSDelete" : true,
"PaSSI" : true,
"PaSUnwikify" : true,
"PaSKeep" : true,
"PaSMerge" : true,
"PaSMove" : true,
"PaSRedirect" : true,
"PaSInit" : true,
"PaSWarnUser" : true,
"PaSWarnProject" : true,
"PaSMessage" : true,
"AskSILink" : true,
"LeftPanelLinks" : true
};
/* </syntaxhighlight>
== Paramètres personnalisables ==
=== Couleur des boutons ===
<syntaxhighlight lang="javascript"> */
window.PaStec_ButtonColors = {
PaSDelete : "#FF8080",
PaSUnwikify : "#FF8080",
PaSKeep : "#90FF80",
PaSMerge : "#BE66CC",
PaSMove : "#D3D3D3",
PaSRedirect : "#DDFFDD",
PaSSI : "#FF8080",
PaSInit : "DarkOrange",
PaSWarnUser : "orange",
PaSWarnProject : "orange",
PaSMessage : "yellow"
};
/* </syntaxhighlight>
=== Options pour SI ===
<syntaxhighlight lang="javascript"> */
window.PaStec_SIoptions = {
"G1" : "Page manifestement aberrante",
"G2" : "«\xA0Bac à sable\xA0»",
"G3" : "Vandalisme ou canular manifeste",
"G4" : "Recréation d'une page supprimée à la suite d'un débat d'admissibilité",
"G5" : "Page créée par un contributeur banni ou bloqué",
"G6" : "Suppression technique",
"G7" : "Suppression à la demande de l'auteur",
"G8" : "Page liée à une page inexistante ou supprimée",
"G10" : "Page dont le seul but est de diffamer, menacer, intimider ou harceler leur sujet, ou une quelconque autre entité",
"G11" : "Publicité ou promotion manifeste",
"G12" : "Violation manifeste des droits d'auteur",
"A1" : "Article sans sujet clair",
"A2" : "Article en langue étrangère",
"A3" : "Article sans contenu",
"A5" : "Article transféré à un autre wiki",
"A10" : "Article récemment créé qui doublonne un article existant",
"A11" : "Article ne répondant pas aux critères d'admissibilité",
"A12" : "Travail inédit manifeste",
"C1" : "Catégorie vide depuis au moins quatre jours",
"C2" : "Renommage ou fusion (catégorie)",
"U1" : "Demande de l'utilisateur (PU)",
"U2" : "Utilisateur inexistant",
"P2" : "Portail quasi-vide"
};
/* </syntaxhighlight>
=== Pages de discussion projet spéciales ===
<syntaxhighlight lang="javascript"> */
window.PaStec_ProjectSpecialTalkPage = [];
/* </syntaxhighlight>
=== Textes ===
<syntaxhighlight lang="javascript"> */
window.PaStec_Texts = {
// Divers / Non classés
ScriptName : "PaStec",
commentTag : "[[Projet:Scripts et gadgets/Notices/PaStec|PaStec]]\xA0: ",
DocURL : "//fr.wikipedia.org/wiki/Projet:Scripts_et_gadgets/Notices/PaStec",
DocText : "documentation",
Flow : "IMPORTANT\xA0: Cette fonction est désormais compatible avec les pages de discussion Flow. Le script ne pouvant plus détecter si les messages sont déposés, merci de vérifier votre historique de contributions.",
// Erreurs
PaSDisabled : "Fonction désactivée pour maintenance",
ReplaceFailed : "Échec du remplacement dans $1",
URLFailed : "Échec pour URL $1",
APIFailed : "Erreur API\xA0: $1",
ErrorConflict : "La page a été modifiée depuis son chargement. La dernière édition a été faite par $user avec le commentaire «\xA0$comment\xA0». Voulez-vous vraiment effectuer la clôture\xA0?",
SIPaSErrorExists : "Erreur\xA0: la page existe.",
// Menu PaS
PaSLegend : "<big>Formulaire de <b>$1</b></big> <small>($2)</small> [$3]",
PaSLegendHide : "masquer",
PaSLegendShow : "afficher",
PaSPanelReason : "Raison",
RemoveItem : "Supprimer cet élément",
AddItem : "Ajouter un élément",
Validate : "Valider",
PaSAlertMissingParam : "Certains champs doivent obligatoirement être renseignés",
PaSWelcome : "(hidden)",
PaSWelcomeLegend : "(hidden)",
PaSDelete : "SUPPRIMER",
PaSDeleteLegend : "Clôturer le débat d'admissibilité en suppression",
PaSDeleteReasonDef : "{{HC}}",
PaSPanelAskSI : "Effectuer une requête de Suppression Immédiate",
PaSPanelDelete : "Supprimer la page, la page de discussion associée et les éventuelles redirections",
PaSSI : "SI",
PaSSILegend : "Clôturer le débat d'admissibilité à la suite d'une SI",
PaSDerRedir : "Supprimer les redirections",
PaSUnwikify : "Déwikifier",
PaSUnwikifyLegend : "Supprimer les liens vers la page",
PaSUnwikifyRunning : "Modification de «\xA0$1\xA0»",
PaSUnwikifySummary : "Résumé de modification\xA0: $1",
PaSKeep : "CONSERVER",
PaSKeepLegend : "Clôturer le débat d'admissibilité en conservation",
PASkeepReasonDef : "Admissible",
PaSMerge : "FUSIONNER",
PaSMergeLegend : "Clôturer le débat d'admissibilité en fusion",
PaSMergeReasonDef : "Consensus pour une fusion",
PaSMergeRequest : "Faire une requête de fusion",
PaSMergePages : "Pages à fusionner",
PaSMove : "RENOMMER",
PaSMoveLegend : "Clôturer le débat d'admissibilité en renommage",
PaSMoveReasonDef : "Consensus pour un renommage",
PaSMoveDo : "Renommer la page",
PaSMoveAsk : "Demander le renommage de la page",
PaSMoveNo : "Ne rien faire",
PaSMoveNewPage : "Nouveau titre de la page",
PaSRedirect : "REDIRECTION",
PaSRedirectLegend : "Clôturer le débat d'admissibilité en redirection",
PaSRedirectReasonDef : "Consensus pour une redirection",
PaSRedirectDo : "Créer la redirection",
PaSRedirectTitle : "Titre de la page cible",
PaSInit : "Initialiser le débat",
PaSInitLegend : "Initialiser le débat d'admissibilité",
PaSInitDefinition : "Thème de la page",
PaSWarnUser : "Avertir utilisateurs",
PaSWarnUserLegend : "Avertir des utilisateurs du débat d'admissibilité",
PaSHideBots : "Masquer les bots",
PaSShowBots : "Afficher les bots",
PaSHideIPs : "Masquer les IP",
PaSShowIPs : "Afficher les IP",
Creator : "créateur",
NbEdits : "$user\xA0: $edits {{PLURAL:$edits|édition|éditions}} <small>(dernière = $last)</small>",
PaSCheckUsersToWarn : "Sélectionner les utilisateurs à avertir",
PaSWarnProject : "Avertir projets",
PaSWarnProjectLegend : "Avertir des projets du débat d'admissibilité",
PaSWarnProjectProjects : "Sélectionner les projets à avertir",
PaSMessage : "Message",
PaSMessageLegend : "Envoyer un message au(x) développeur(s)",
PaSMessageText : "Texte du message",
PaSMessageTarget : "Page(s) cible(s) du message",
PasWLH_links : "Liens $1\xA0:",
PasWLH_redirects : "Redirections $1\xA0:",
PasWLH_doubleredirects : "Doubles redirections $1\xA0:",
PasWLH_embeddedin : "Inclusions $1\xA0:",
PasWLH_imageusage : "Usages du fichier $1\xA0:",
PasWLH_categorymembers : "Pages dans la catégorie $1\xA0:",
PasWLH_Refresh : "(rafraîchir)",
PasWLH_NextPage : "Page suivante",
// Paramètres pour les requêtes
// Pages
PaSMainPageName : "Wikipédia:Débat d'admissibilité",
SIPageName : "Wikipédia:Demande de suppression immédiate",
MovePageName : "Wikipédia:Demande de renommage",
DoMergeMainPageName : "Wikipédia:Fusion technique",
// Commentaires de modifications
MovePageComment : "$1 clôture débat d'admissibilité (retrait bandeau «\xA0Admissibilité\xA0») ([[:$2|Voir]])",
MoveMainPageComment : "",
MergePaSComment : "Ajout bandeau «\xA0Clôture\xA0» ([[:$1|Voir]]",
DoMergeMainPageComment : "Demande de fusion → [[:$1]] et [[:$2]] ([[:$3|Voir]]",
DoMergePage1Comment : "Clôture en fusion avec [[:$1]] — Remplacement {{Admissibilité}} par {{À fusionner}} ([[:$2|Voir]])",
DoMergePagesComment : "Fusion technique avec [[:$1]] — Ajout du bandeau «\xA0À fusionner\xA0» ([[:$2|Voir]])",
RedirectPageComment : "Tranformation en redirection vers [[:$1]] - Décision débat d'admissibilité ([[:$2|Voir]])",
RedirectCorrComment : "Correction double redirection vers [[:$1]] - Décision débat d'admissibilité ([[:$2|Voir]])",
SIPaSComment : "Ajout bandeau «\xA0Clôture\xA0» ([[:$1|Voir]])",
MessageComment : "Message",
KirMainComment : "[[:$page]]\xA0: proposition à la suppression ([[:$delpage|Voir]])",
KirPageComment : "Ajout bandeau «\xA0Admissibilité\xA0» / retrait bandeau(x) ",
WarnComment : "L'admissibilité de l'article «\xA0[[:$page]]\xA0» est débattue",
TagComment : "$page $type (ajout bandeau «\xA0Clôture\xA0») ([[:$delpage|Voir]])",
PASaskSIComment : "Demande de suppression immédiate → [[:$page]] ([[:$delpage|Voir]])",
PASstoreComment : "[[:$page]]\xA0: $type (archivage) ([[:$delpage|Voir]])",
PASkeepTalkComment : "$page conservation (ajout bandeau «\xA0Page conservée\xA0») ([[:$delpage|Voir]])",
PASkeepPageComment : "$page conservation (retrait bandeau «\xA0Admissibilité\xA0») ([[:$delpage|Voir]])",
AskSImainComment : "Demande de suppression immédiate → [[:$page]]",
AskSIpageComment : "Suppression immédiate $reason (ajout bandeau)",
DelRedirComment : "Redirection cassée après suppression de sa cible ([[:$1|Voir]])",
DeleteComment : "[[:$delpage|Décision débat d'admissibilité]]",
RemoveLinkComment : "Retrait du lien vers la page «\xA0$1\xA0» supprimée à la suite d'un débat d'admissibilité ([[:$2|Voir]])",
RemoveCatComment : "Retrait de la catégorie «\xA0$1\xA0» supprimée à la suite d'un débat d'admissibilité ([[:$2|Voir]])",
RemoveFileComment : "Retrait du fichier «\xA0$1\xA0» supprimé à la suite d'un débat d'admissibilité ([[:$2|Voir]])",
// Headers
PASkeepHeader : "Clôture en conservation",
DeleteHeader : "Clôture en suppression",
DeleteAskHeader : "Clôture en suppression + demande de SI",
DeleteDoHeader : "Clôture en suppression + suppressions",
MoveHeader : "Clôture en renommage",
MoveAskHeader : "Clôture en renommage + demande de renommage(s)",
MoveDoHeader : "Clôture en renommage + renommage(s)",
MergeHeader : "Clôture en fusion",
DoMergeHeader : "Clôture en fusion + requête sur WP:PAF",
RedirectHeader : "Clôture en redirection",
RedirectDoHeader : "Clôture en redirection + création redirection",
SIHeader : "Clôture suite à SI",
KirHeader : "Proposition de la page à la suppression",
WarnUserHeader : "Avertissement contributeur",
WarnProjectHeader : "Avertissement projet",
MessageHeader : "Message",
running : "Traitement en cours, veuillez patienter.",
maybeerror : "Si ce message persiste, une erreur a du survenir.",
isProtected : "La page «\xA0$1\xA0» est protégée, non modifiable",
cannotUnwikify : "Aucune modification ne peut être apportée à la page «\xA0$1\xA0»",
UnwikifyHeader : "Validation des modifications de la page «\xA0$1\xA0»",
PaSdone : "Opération terminée",
// Modèles
DeleteTemplate : "{{Admissibilité}}\n",
DeleteTemplateNI : "<noinclude>{{Admissibilité|note=ok}}</noinclude>",
MergeTemplate : "{{Article fusionné|$reason. Clôture en fusion de [[:$1]] et [[:$2]].|2=~~~~}}",
DoMergeMainPageTemplate : "== [[:$1]] et [[:$2]] ==\n\nDemande de fusion décidée lors d'un [[Wikipédia:Débat d'admissibilité|débat d'admissibilité]] [[:$3|('''Voir la décision''')]]. Ceci n'est pas une demande de vote pour ou contre la fusion (la décision a déjà été prise lors du débat d'admissibilité) mais uniquement une demande pour qu'un tiers effectue la fusion. --~~~~ ",
DoMergePagesTemplate : "{{Fusion technique|$1|$2}}",
MoveMainTemplate : "{{subst:Demande de renommage| $old | $new | [[:$delpage|Décision débat d'admissibilité]] }}",
SIPaSTemplate : "{{Article supprimé en SI}}",
MessageTemplate : "== Message de ~~~ ==\n\nMessage écrit le ~~~~~<br>$1",
WarnTemplate : "{{subst:Avertissement débat d'admissibilité (Flow)|$page}}",
TagTemplate : "{{$type|$reason|2=~~~~}}",
PASaskSITemplate : "== {{a'|$page}} ==\n\n* '''Motif''' : Clôture en suppression du [[:$delpage|débat portant sur l'admissibilité de cette page]]. Merci.\n* '''Demandée''' par ~~~~",
PASkeepTalkTemplate : "{{Page conservée|date={{subst:Aujourd'hui}}}}",
KirMainTemplate : "*{{L|$page}} ($definition)",
AskSIpage_Template : "{{Suppression Immédiate|$reason|utilisateur=~~~}}",
AskSImain_Template : "== {{a'|$page}} ==\n\n* '''Motif''' : {{Utilisateur:Gratus/PaStec/motif SI|$reason}}\n* '''Demandée''' par ~~~~",
// Types PaS
MovePaSType : "Article renommé",
RedirectPaSType : "Article transformé en redirection",
PASkeepPaSType : "Article conservé",
DeletePaSType : "Article supprimé",
// Types page centrale
MoveMainType : "renommage",
MergeMainType : "fusion",
RedirectMainType : "transformation en redirection",
SIMainType : "suppression immédiate",
PASkeepMainType : "conservation",
DeleteMainType : "suppression",
// Cibles
SIPaSTarget : "=== Discussions ===",
MergePaSTarget : "=== Discussions ===",
TagTarget : "=== Discussions ===",
KirMainTarget : "{{En-tête section Débat d'admissibilité|$day|$month|$year}}",
// Archivage PaS
PASstoreRegExp : "(.*$escpage$(.*))\n((.*)((\n.*?)*)Requ.tes trait.es}}(.*\n))",
PASstoreTemplate : "$3$1 : $type ~~~~\n",
// Liens dans le menu de gauche
PaStodo1Title : "Débats d'admissibilité à traiter",
PaStodo1Text : "Débats d'admissibilité 7\xA0jours",
PaStodo2Title : "Débats d'admissibilité à traiter après prolongation",
PaStodo2Text : "Débats d'admissibilité 14\xA0jours",
InitPaSTitle : "Initialiser un débat d'admissibilité",
InitPaSText : "Initialiser débat d'admissibilité",
InitPaSURL : "$1/Admissibilité&action=edit&editintro=Modèle:Admissibilité/initialise/intro&preload=Modèle:Initialiser_Débat_d'admissibilité",
// Demande de SI
AskSI : "Demander SI",
AskSIConfirm : "Souhaitez-vous vraiment demander la suppression immédiate\xA0?\n* page = $1\n* motif = $2",
AskSICheckContribs : "Vérifiez vos contributions pour voir si le script a fonctionné correctement.",
// Edit tests
EditTest_redirect : "La page suivante est une redirection\xA0: $1",
EditTest_nobot : "La page suivante n'accepte pas les modifications effectuées par les robots\xA0: $1",
EditTest_nopastec : "La page suivante n'accepte pas les modifications effectuées par PaStec\xA0: $1"
};
/* </syntaxhighlight>
=== Autres ===
<syntaxhighlight lang="javascript"> */
// RegExp modèle {{Admissibilité}} et alias à supprimer en cas de conservation de la page
window.PaStec_DeleteTemplatePattern = "\{\{ *([Aa]dmissibilit(e|é)|[Ss]u(p|pp)ression|[Àà] supprimer|[Ee]n [Pp]àS|[Pp]roposé à la suppression)[^{}]*\}\}";
// attention à l'ordre dans cette regex, il faut chercher en premier le cas avec avec les "noinclude"
window.PaStec_RemoveDeleteTemplateRegExp = new RegExp("<noinclude>\s*" + PaStec_DeleteTemplatePattern + "\s*<\/noinclude>\n?" + "|" + PaStec_DeleteTemplatePattern + "\n?");
window.PaStec_ReplaceDeleteTemplateRegExp = new RegExp(PaStec_DeleteTemplatePattern);
// RegExp modèle {{Admissibilité à vérifier}} et équivalents à supprimer lors d'une proposition de suppression
window.PaStec_AdmitTemplatePattern = "\{\{ *([Aa]dmissibilit(e|é) à vérifier|[Vv]érifiabilité|[Nn]otoriété)[^{}]*\}\}";
// même remarque que plus haut, concernant l'ordre dans la regex
window.PaStec_RemoveAdmitTemplateRegExp = new RegExp("<noinclude>\s*" + PaStec_AdmitTemplatePattern + "\s*<\/noinclude>\n?" + "|" + PaStec_AdmitTemplatePattern + "\n?");
window.PaStec_ReplaceAdmitTemplateRegExp = new RegExp(PaStec_AdmitTemplatePattern);
// RegExp des catégories de bots
window.PaStec_BotCatRegExp = /Catégorie:Wikipédia:Bot/g;
// Test d'édition
window.PaStec_EditTests = [
{regexp: /^\s*#REDIRECT/i, message: window.PaStec_Texts.EditTest_redirect},
{regexp: /\{\{ *nobots *\}\}/i, message: window.PaStec_Texts.EditTest_nobot},
{regexp: /\{\{ *bots *\| *deny *= *([^{}|]*, *)?P[àa]Stec *[,}]/i, message: window.PaStec_Texts.EditTest_nopastec}
];
// Groupes nécessaires par droit
window.PaStec_NeededGroup = {
"applychangetags" : [ "user" ],
"apihighlimit" : [ "bot", "sysop" ],
"move" : [ "autoconfirmed" ],
"delete" : [ "sysop" ]
};
// Balisage
window.PaStec_tagName = (mw.config.get('wgWikiID') === "frwiki" ? "PaStec" : "");
// Pdd des développeurs
window.PaStec_DevTalkPages = [
"Discussion Projet:Scripts et gadgets/Notices/PaStec",
"Utilisateur:Gratus/PaStec/Message"
];
// Espaces de noms par défaut pour les requêtes de pages liées
window.PaStec_WLH_BLDefaultNamespaces = [0, 4, 6, 10, 12, 14, 100];
window.PaStec_WLH_EIDefaultNamespaces = false;
window.PaStec_WLH_IUDefaultNamespaces = false;
// Autres options
window.PaStec_AutoHideMenu = false;
window.PaStec_InputSize = 40;
window.PaStec_Suggestions_suggestsize = 5;
window.PaStec_Suggestions_requestlimit = 15;
window.PaStec_CaseSensitive = false;
window.Pastec_seil = 3 ;
/* </syntaxhighlight>
== Styles CSS ==
<syntaxhighlight lang=javascript> */
mw.loader.addStyleTag(""
+ "#AskSISpan { float: right;margin-top: 0.2em; } "
+ "#PaStec_PanelButtons { text-align:center;margin:0; } "
+ ".PaStec_TabButtons { margin:0;margin-bottom:0.5em; } "
+ ".PaStec_PanelButton, .PaStec_ActionButton { margin:1px;margin-right:5px;padding:1px 5px;border-radius:5px; } "
+ ".PaStec_ActionButtonValidate { margin-right:10px;font-weight:bold; } "
+ "#PaStec_PaSWelcomeInput { display:none; } "
+ "#PaStec_PaSWelcomeButtons { display:none; } "
+ "#PaStec_PaSWelcomeFieldset .PaStec_PanelContent { background: url('//upload.wikimedia.org/wikipedia/commons/e/ea/PaStec_logo_%282023%29.svg') center center / 600px no-repeat scroll #EEEEEE;margin-top:1.3em;margin-bottom:1.3em; } "
+ "#PaStec_PaSWelcomeFieldset legend { display:none; } "
+ "#PaStec_PaSWelcomeFieldset { padding-top:1em;margin-top:1.2em; } "
+ ".PaStec_Fieldset { text-align:left;margin-top:0; } "
+ ".PaStec_PanelContent { border:1px solid #2F6FAB;background:#EEEEEE;padding:1em;height:300px;overflow-y:auto; } "
+ ".PaStec_PanelControl { text-align:center; } "
+ ".PaStec_ResizeAnchor { min-height:20px;font-weight:bold;text-align:center;padding:2px;cursor:n-resize;border:1px solid #2F6FAB;background:#CCCCCC; } "
+ ".MouseMoveFunctionRunning * { -webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;cursor:n-resize; } "
+ ".showmenu { display:none; } "
+ ".hidemenu { display:inline; } "
+ ".MenuHidden .showmenu { display:inline; } "
+ ".MenuHidden .hidemenu, .MenuHidden div { display:none; } "
+ "#PaStec_PaSMessageInput { margin-left:1em; } "
+ "#PaStec_PaSInitInput { margin-right:1em; } "
+ ".PaStec_Fieldset form { border:1px solid #DDDDDD;padding:2px;margin:2px; } "
+ ".PaStec_Fieldset form:hover { border:1px solid #CCCCCC;background-color:#DDDDDD; } "
+ ".PaStec_Fieldset form.mandatory { border:1px solid IndianRed;background-color:LightSalmon; } "
+ ".PaStec_Fieldset form.mandatory:hover { border:1px solid FireBrick;background-color:DarkSalmon; } "
+ ".PaStec_Fieldset ul, .PaStec_Fieldset ol { list-style-type:none;margin:0; } "
+ ".PaStec_Fieldset li { margin-right:1em; } "
+ "#UserListOL, #ProjectListOL { margin-left:2.5em;column-count:3; } "
+ "#UserListOL li, #ProjectListOL li { display:block !important; } "
+ ".PaStec_WhatlinkshereList li { display:inline !important;white-space:nowrap; } "
// + ".aa-bloc-tete { display:none; } "
+ "#hideipbutton { display:inline !important; } "
+ "#showipbutton { display:none !important; } "
+ ".iphidden #hideipbutton { display:none !important; } "
+ ".iphidden #showipbutton { display:inline !important; } "
+ ".iphidden #UserListOL li.ip { display:none !important; } "
+ "#hidebotbutton { display:inline !important; } "
+ "#showbotbutton { display:none !important; } "
+ ".bothidden #hidebotbutton { display:none !important; } "
+ ".bothidden #showbotbutton { display:inline !important; } "
+ ".bothidden #UserListOL li.bot { display:none !important; } "
+ ".PaStec_WhatlinkshereList a.modified { text-decoration:underline;text-decoration-color:DarkGreen; } "
+ ".PaStec_WhatlinkshereList a.unmodified { text-decoration:underline;text-decoration-color:Orange;text-decoration-style:wavy; } "
+ ".PaStec_WhatlinkshereList a.cannotmodify { text-decoration:underline;text-decoration-color:red;text-decoration-style:wavy; } "
+ ".PaStec_WhatlinkshereList #currentdiff_PaSUnwikify { color:black !important;text-decoration:underline;font-weight:bold; } "
+ "#PaStec_PaSUnwikifyFieldset .PaStec_Whatlinkshere_redirects { display:none; } "
+ ".PaStec_EmptyDiffPreview { display:none; } "
+ ".PaStec_DiffPreview #editform { display:none; } "
+ ".PaStec_DiffPreview { background-color:#FFFFFF;font-size:90%;border:1px solid #DDDDDD;padding:2px;padding-bottom:10px;margin:2px; } "
+ ".PaStec_DiffPreview h2 { text-align:center;padding-top: 0.25em;margin-bottom:0; } "
+ ".PaStec_DiffPreview .summarydiv { text-align:center;border-bottom:1px solid #AAA;margin-top:0;padding:0.15em;font-weight:bold; } "
+ ".PaStec_DiffPreview .summaryspan { font-family: monospace,monospace;font-weight:normal !important; } "
+ ".PaStec_DiffPreview table.diff { border:none;border-spacing:0px;margin:0;width:100%;table-layout:fixed; } "
+ ".PaStec_DiffPreview table.diff td { padding:0.1em 0.5em; } "
+ ".PaStec_DiffPreview table.diff td.diff-marker { padding:0.25em; } "
+ ".PaStec_DiffPreview table.diff col.diff-marker { width:2%; } "
+ ".PaStec_DiffPreview table.diff col.diff-content { width:48%; } "
+ ".PaStec_DiffPreview table.diff td div { word-wrap:break-word; } "
+ ".PaStec_DiffPreview td.diff-otitle, .PaStec_DiffPreview td.diff-ntitle { text-align:center; } "
+ ".PaStec_DiffPreview td.diff-lineno { font-weight:bold; } "
+ ".PaStec_DiffPreview td.diff-marker { text-align:right;font-weight:bold;font-size:1.25em;line-height:1.2; } "
+ ".PaStec_DiffPreview td.diff-addedline, .PaStec_DiffPreview td.diff-deletedline, .PaStec_DiffPreview td.diff-context { font-size:88%;line-height:1.2;vertical-align:top;white-space:-moz-pre-wrap;white-space:pre-wrap;border-style:solid;border-width:1px 1px 1px 4px;border-radius:0.33em; } "
+ ".PaStec_DiffPreview td.diff-addedline { border-color:#a3d3ff; } "
+ ".PaStec_DiffPreview td.diff-deletedline { border-color:#ffe49c; } "
+ ".PaStec_DiffPreview td.diff-context { background:#f9f9f9;border-color:#e6e6e6;color:#333333; } "
+ ".PaStec_DiffPreview .diffchange { font-weight:bold;text-decoration:none; } "
+ ".PaStec_DiffPreview td.diff-addedline .diffchange, .PaStec_DiffPreview td.diff-deletedline .diffchange { border-radius:0.33em;padding:0.1em; } "
+ ".PaStec_DiffPreview td.diff-addedline .diffchange { background:#d8ecff; } "
+ ".PaStec_DiffPreview td.diff-deletedline .diffchange { background:#feeec8; } "
);
/* </syntaxhighlight>
== Chargement et appel des personnalisations ==
<syntaxhighlight lang=javascript> */
window.PaStec_CustomDone = false;
window.PaStec_getCustomParams = function(){
if(PaStec_CustomDone) return;
PaStec_CustomDone = true;
if(typeof(PaStec_LangCustom) === "function") try{ PaStec_LangCustom(); }catch(e){ }
if(typeof(PaStec_SiteCustom) === "function") try{ PaStec_SiteCustom(); }catch(e){ }
if(typeof(PaStec_UserCustom) === "function") try{ PaStec_UserCustom(); }catch(e){ }
};
window.PaStec_Load = function(func){
if(typeof(func) === "function"){
mw.loader.using(["site", "user","mediawiki.util","mediawiki.api"], function(){ $( function(){
PaStec_getCustomParams();
func();
});});
}
};
/* </syntaxhighlight>
== Fonctions utilitaires ==
=== Ajax ===
<syntaxhighlight lang=javascript> */
window.PaStec_ajax = {
http: function(bundle) {
// mandatory: bundle.url
// optional: bundle.async
// optional: bundle.method
// optional: bundle.headers
// optional: bundle.data
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
// optional: bundle.retry //Argos42
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
PaStec_ajax.httpComplete(xmlhttp,bundle);
}
};
xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async === false ? false : true);
if (bundle.headers) {
for (var field in bundle.headers) {
try {
xmlhttp.setRequestHeader(field,bundle.headers[field]);
} catch(err) { }
}
}
xmlhttp.send(bundle.data ? bundle.data : null);
return xmlhttp;
},
httpComplete: function(xmlhttp, bundle) {
if (xmlhttp.status == 200 || xmlhttp.status == 302) {
if (bundle.onSuccess) bundle.onSuccess(xmlhttp, bundle);
} else if (bundle.onFailure) {
if (bundle.retry) { // je sais jamais comment marche JS
bundle.retry--;
PaStec_ajax.http(bundle);
document.title = "§"+document.title;
} else {
bundle.onFailure(xmlhttp, bundle);
}
} else {
// A activer en debug mode ?
// alert(xmlhttp.status+xmlhttp.responseText);
}
}
};
/* </syntaxhighlight>
=== Edition PDD (flow) ===
<syntaxhighlight lang=javascript> */
window.PaStec_editPdd = function(titre,page) {
PaStec_actionsLeft++;
new mw.Api().get({
action : 'query',
format : 'json',
titles : titre,
prop : 'revisions',
rvprop : 'content'
}).then(function(data) {
for(var pageid in data.query.pages) break;
var contenu = data.query.pages[pageid].revisions[0]['*'];
for (var i = 0; i < PaStec_EditTests.length; i++) {
if (PaStec_EditTests[i].regexp.test(contenu)) {
PaStec_actionsLeft--;
alert(PaStec_EditTests[i].message.replace(/\$1/g, titre));
return;
}
}
PaStec_editPdd2(titre,page);
});
};
window.PaStec_editPdd2 = function(titre,page) {
mw.loader.using( [ 'mediawiki.Title', 'mediawiki.messagePoster' ], function () {
var title = new mw.Title( titre );
var posterPromise = mw.messagePoster.factory.create( title );
// DEBUG -- console.log('titre:',titre,'title:',title,'posterPromise:',posterPromise);
posterPromise.done( function ( poster ) {
var subject = PaStec_Texts.WarnComment.split("$page").join(page);
var body = PaStec_Texts.WarnTemplate.split("$page").join(page);
// pour ne pas avoir d'espace insécable "en dur" dans le wikitexte
// (WarnComment était auparavant pour le résumé de modif, maintenant il sert aussi pour le titre de section)
subject = subject.replace(/\xA0/g, ' ');
var options = {};
var Tag = PaStec_gettag();
if (Tag) {
options.tags = Tag;
}
poster.post( subject, body, options );
} );
} );
};
/*</syntaxhighlight>
=== Edition d'une page (1) ===
<syntaxhighlight lang=javascript> */
window.PaStec_editPage = function(page, pattern, replace, comment, canCreatePage) {
PaStec_actionsLeft++;
new mw.Api().get({
action : 'query',
format : 'json',
titles : page,
prop : 'revisions',
rvprop : 'content'
}).then(function(data) {
for(var pageid in data.query.pages) break;
var contenu = data.query.pages[pageid].revisions[0]['*'];
for (var i = 0; i < PaStec_EditTests.length; i++) {
if (PaStec_EditTests[i].regexp.test(contenu)) {
PaStec_actionsLeft--;
alert(PaStec_EditTests[i].message.replace(/\$1/g, page));
return;
}
}
PaStec_editPageWithoutTests(page, pattern, replace, comment, canCreatePage);
});
};
/* </syntaxhighlight>
=== Edition d'une page (2) ===
<syntaxhighlight lang=javascript> */
window.PaStec_editPageWithoutTests = function(page, pattern, replace, comment, canCreatePage) {
PaStec_actionsLeft++;
var request = mw.util.wikiScript('api')
+ '?format=xml'
+ '&action=query'
+ '&prop=revisions'
+ '&meta=tokens&type=csrf&curtimestamp=true'
+ '&rvprop=timestamp|content'
+ '&titles=' + encodeURIComponent(page);
PaStec_ajax.http({
retry:3,
url: request,
onSuccess: PaStec_doEditpage,
onFailure: PaStec_failureAlert,
page : page,
comment: comment,
pattern: pattern,
replace: replace,
canCreatePage: canCreatePage
});
};
window.PaStec_doEditpage = function(xmlreq, data) {
//data.page //page to edit
//data.comment //modification comment
//data.pattern //search pattern
// for pattern
// "*" replaces the page content with data.replace
// "<" adds data.replace to the beginning of the page
// ">" adds data.replace to the end of the page
//data.replace //replacing string
try {
var apiNode = xmlreq.responseXML.getElementsByTagName('api')[0];
var page = xmlreq.responseXML.getElementsByTagName('page')[0];
var token = xmlreq.responseXML.getElementsByTagName('tokens')[0].getAttribute('csrftoken');
var lrev = page.getElementsByTagName('rev');
var oldtext = "", basetimestamp = "";
if (lrev.length > 0) {
oldtext = lrev[0].textContent;
basetimestamp = '&basetimestamp=' + encodeURIComponent(lrev[0].getAttribute('timestamp'));
}
var newtext;
if (data.pattern == "*") newtext = data.replace;
else if (data.pattern == ">") newtext = oldtext + data.replace;
else if (data.pattern == "<") newtext = data.replace + oldtext;
else {
newtext = oldtext.replace(data.pattern, data.replace);
if (oldtext == newtext) {
alert(PaStec_Texts.ReplaceFailed.split("$1").join(data.page));
return; //replace failed
}
}
// Clean up leftover trailing newlines on various cases:
// - Remove top template that was the only one
// - Add message on new page
newtext = newtext.replace(/^\n+/, '');
var Tag = PaStec_gettag();
var requestEditData = ''
+ 'title=' + encodeURIComponent(data.page)
+ '&text=' + encodeURIComponent(newtext)
+ '&token=' + encodeURIComponent(token)
+ '&summary=' + encodeURIComponent( (Tag ? '' : PaStec_Texts.commentTag) + data.comment)
+ '&starttimestamp=' + encodeURIComponent(apiNode.getAttribute('curtimestamp'))
+ '&watchlist=nochange' + basetimestamp;
if(Tag) requestEditData += "&tags="+encodeURIComponent(Tag);
var headers = [];
headers['Content-Type'] = 'application/x-www-form-urlencoded';
PaStec_ajax.http({
retry:3,
url: mw.util.wikiScript('api') + '?format=xml&action=edit' + (data.canCreatePage ? '' : '&nocreate=1'),
method: "POST",
headers: headers,
data: requestEditData,
onFailure: PaStec_failureAlert,
onSuccess:PaStec_confirmExecuted
});
} catch(error) {
alert(error+" : "+data.page );
}
};
/* </syntaxhighlight>
=== Renommage d'une page ===
<syntaxhighlight lang=javascript> */
window.PaStec_movePage = function(title, newtitle, reason) {
PaStec_actionsLeft++;
var request = mw.util.wikiScript('api')
+ '?format=xml'
+ '&action=query'
+ '&meta=tokens&type=csrf';
PaStec_ajax.http({
retry : 3,
url : request,
onSuccess : PaStec_movePageStep2,
onFailure : PaStec_failureAlert,
title : title,
reason : reason,
newtitle : newtitle
});
};
window.PaStec_movePageStep2 = function(xmlreq, data) {
var token = xmlreq.responseXML.getElementsByTagName('tokens')[0].getAttribute('csrftoken');
var request = mw.util.wikiScript('api') + '?format=xml&action=move';
var Tag = false; // PaStec_gettag(); // FIXME : add a tag on a logevent action (T97720)
var requestData = ''
+ 'from=' + encodeURIComponent(data.title)
+ '&to=' + encodeURIComponent(data.newtitle)
+ '&reason=' + encodeURIComponent(data.reason)
+ '&movetalk=1'
+ '&watchlist=nochange'
+ '&token=' + encodeURIComponent(token);
if(Tag) requestData += "&tags="+encodeURIComponent(Tag);
var headers = [];
headers['Content-Type'] = 'application/x-www-form-urlencoded';
PaStec_ajax.http({
retry : 3,
url : request,
onSuccess : PaStec_confirmExecuted,
onFailure : PaStec_failureAlert,
method : "POST",
headers : headers,
data : requestData
});
};
/* </syntaxhighlight>
=== Suppression d'une page ===
<syntaxhighlight lang=javascript> */
window.PaStec_deletePage = function(title, reason) {
PaStec_actionsLeft++;
var request = mw.util.wikiScript('api')
+ '?format=xml'
+ '&action=query'
+ '&meta=tokens&type=csrf';
PaStec_ajax.http({
retry : 3,
url : request,
onSuccess : PaStec_deletePageStep2,
onFailure : PaStec_failureAlert,
title : title,
reason : reason
});
};
window.PaStec_deletePageStep2 = function(xmlreq, data) {
var token = xmlreq.responseXML.getElementsByTagName('tokens')[0].getAttribute('csrftoken');
var request = mw.util.wikiScript('api') + '?format=xml&action=delete';
var Tag = false; // PaStec_gettag(); // FIXME : add a tag on a logevent action (T97720)
var requestData = ''
+ 'title=' + encodeURIComponent(data.title)
+ '&token=' + encodeURIComponent(token)
+ '&reason=' + encodeURIComponent(data.reason)
+ '&watchlist=nochange';
if(Tag) requestData += "&tags="+encodeURIComponent(Tag);
var headers = [];
headers['Content-Type'] = 'application/x-www-form-urlencoded';
PaStec_ajax.http({
retry : 3,
url : request,
onSuccess : PaStec_confirmExecuted,
onFailure : PaStec_failureAlert,
method : "POST",
headers : headers,
data : requestData
});
};
/* </syntaxhighlight>
=== Divers ===
<syntaxhighlight lang=javascript> */
window.PaStec_gettag = function(){
if(!PaStec_tagName || !PaStec_UserCanDo("applychangetags")) return false;
if(PaStec_UserCanDo("applychangetags")) return PaStec_tagName;
return false;
};
window.PaStec_UserCanDo = function(action){
var Groups = PaStec_NeededGroup[action];
var UserGroups = mw.config.get('wgUserGroups');
for(var a=0,l=Groups.length;a<l;a++){
if(UserGroups.indexOf(Groups[a]) !== -1) return true;
}
return false;
};
window.PaStec_failureAlert = function(xmlreq, data) {
alert(window.PaStec_Texts.URLFailed.split("$1").join(data.page));
};
window.PaStec_confirmExecuted = function(xmlreq, data) {
//check that the API did not returned errors :
var error = xmlreq.responseXML.getElementsByTagName('error')[0];
if( error ){
if( data.retry ){
data.retry--;
PaStec_ajax.http(data);
document.title = "§"+document.title;
} else {
alert(PaStec_Texts.APIFailed.split("$1").join(error.getAttribute('info')));
}
} else if (!--PaStec_actionsLeft) {
var type = PaStec_RunningRequests;
PaStec_fillControl(type, PaStec_Texts.PaSdone);
document.title = document.title.replace(/^[\§\*]*/g, "");
} else {
document.title = "*" + document.title;
}
};
// escape regexp :
window.PaStec_RegEscape = function(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
window.PaStec_Plural = function(Text){
var PluralRegExp = new RegExp("\\{\\{PLURAL[^\\}]+\\}\\}", "ig");
var Matches = Text.match(PluralRegExp);
if(Matches!=null){
for(var b=0,m=Matches.length;b<m;b++){
var Match = Matches[b];
var Params = Match.split('}}').join('').split('|');
var thisnumber = parseInt(Params[0].replace(/[^0-9]/g, ""));
var Result = "";
if(thisnumber > 1){
Result = Params[2];
}else{
Result = Params[1];
}
if(!Result) Result = "";
Text = Text.replace(Match, Result);
}
}
return Text;
};
String.prototype.PaStec_ucFirst = function () {
return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
};
String.prototype.PaStec_lcFirst = function () {
return this.substr(0,1).toLowerCase() + this.substr(1,this.length);
};
//Fonctions de manipulation de pages
window.PaStec_getPageName = function(){
var nsnb = mw.config.get('wgNamespaceNumber');
return ((nsnb-1)===0 ? "" : mw.config.get( 'wgFormattedNamespaces' )[(nsnb-1)] + ":" ) + mw.config.get( 'wgTitle' ).replace(/\/Admissibilité$/, "");
};
window.PaStec_getDiscussionPageName = function(){
return mw.config.get( 'wgPageName' ).replace(/\/Admissibilité$/, "");
};
window.PaStec_UserIsIP = function(user) {
var regexpIP4 = /^\d{1,3}\.\d{1,3}.\d{1,3}.\d{1,3}$/;
var regexpIP6 = /\w{1,4}\:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/;
if (regexpIP4.exec(user)) return "V4";
else if (regexpIP6.exec(user)) return "V6";
else return false;
};
window.PaStec_createUserLink = function(user) {
var prefix = mw.config.get( 'wgFormattedNamespaces' )[2] + ":";
if (PaStec_UserIsIP(user)) prefix = "Special:Contributions/";
return PaStec_createLink({page:(prefix+user), text:user});
};
window.PaStec_getProjectTalkPage = function(project) {
if (typeof(PaStec_TalkPagesMap[project]) !== 'undefined') {
return PaStec_TalkPagesMap[project];
} else {
return mw.config.get('wgFormattedNamespaces')[103] + ':' + project;
}
};
window.PaStec_createProjectLink = function(project){
var target = PaStec_getProjectTalkPage(project);
return target !== '' ? PaStec_createLink({page: target, text: project}) : false;
};
window.PaStec_getNamespaceInfoFromPage = function(Page, ToReturn){
if(!ToReturn || !Page) ToReturn = false;
var NamespaceNumber = 0;
var NamespaceName = "";
var PageName = Page;
var Found = false;
for(var NS in mw.config.get('wgFormattedNamespaces')){
if(Found) continue;
var ThisNamespaceName = mw.config.get( 'wgFormattedNamespaces' )[NS];
if(ThisNamespaceName==="") continue;
var NamespaceNameRegExp = new RegExp("^("+ThisNamespaceName.PaStec_ucFirst()+"|"+ThisNamespaceName.PaStec_lcFirst()+"):", "ig");
var Matches = Page.match(NamespaceNameRegExp);
if(Matches!=null && Matches.length == 1){
NamespaceNumber = parseInt(NS);
NamespaceName = ThisNamespaceName;
PageName = Page.replace(NamespaceNameRegExp, "");
Found = true;
continue;
}
}
if(ToReturn==="NamespaceName") return NamespaceName;
if(ToReturn==="PageName") return PageName;
return NamespaceNumber;
};
window.PaStec_createLink = function(Args){
var Path = mw.config.get('wgServer') + ( Args.more ? mw.config.get('wgScript') + "?title=$1" : mw.config.get('wgArticlePath'));
var Link = '<a '
+ (typeof(Args.classes)=="object" && Args.classes.length > 0 ? 'class="'+Args.classes.join(" ")+'" ' : '')
+ (typeof(Args.target) != "undefined" ? 'target="'+Args.target+'" ' : ( Args.url && Args.url.indexOf("javascript:") === 0 ? '' : 'target="_blank" '))
+ 'href="'+ (typeof(Args.url) != "undefined" ? Args.url : Path.split('$1').join(encodeURIComponent(Args.page)) + (Args.more ? Args.more : '')) + '" '
+ 'title="'+(Args.title ? Args.title : (Args.page ? Args.page : "") )+'"'
+ '>'+(Args.text ? Args.text : Args.page )+'</a>';
return Link;
};
window.PaStec_getDateFromTimestamp = function(ts){
ts = ts.split("T")[0];
ts = ts.split("-");
return (ts[2] + "/" + ts[1] + "/" + ts[0]);
};
/* </syntaxhighlight>
== Lien pour les non-sysop pour demander une SI ==
<syntaxhighlight lang=javascript> */
window.PaStec_AskSILink = function(){
if (mw.config.get('wgNamespaceNumber') >= 0) {
if(!PaStec_UserCanDo("delete") || PaStec_DebugMode){
if(!PaStec_Enabled.AskSILink && !PaStec_DebugMode) return;
mw.util.addPortletLink('p-cactions', 'javascript:void(PaStec_AskForSI())', PaStec_Texts.AskSI, 'ca-pastec-si');
}
}
};
PaStec_Load(PaStec_AskSILink);
window.PaStec_AskForSI = function(){
var OldSpan = document.getElementById("AskSISpan");
if(OldSpan){
OldSpan.parentNode.removeChild(OldSpan);
return;
}
var H = document.getElementById('firstHeading');
if(!H) H = document.getElementsByTagName('h1')[0];
if(!H) return;
var Span = document.createElement('span');
Span.id = "AskSISpan";
var select = document.createElement('select');
select.name = "cars";
select.onchange = function(){ PaStec_deletepageAction(this.value); return false; };
for(var optionname in PaStec_SIoptions){
var optiontext = optionname + " - " + PaStec_SIoptions[optionname];
var option = document.createElement('option');
option.value = optionname;
option.innerHTML = optiontext;
select.appendChild(option);
}
Span.appendChild(select);
H.appendChild(Span);
};
window.PaStec_deletepageAction = function(motif) {
var page = mw.config.get('wgPageName');
if(!confirm(PaStec_Texts.AskSIConfirm.split("$1").join(page).split("$2").join(motif))){
return;
}
PaStec_editPage(
page,
"<",
PaStec_Texts.AskSIpage_Template.split("$reason").join(motif).split("$page").join(page)+"\n",
PaStec_Texts.AskSIpageComment.split("$reason").join(motif).split("$page").join(page)
);
PaStec_editPage(
PaStec_Texts.SIPageName,
">",
"\n\n" + PaStec_Texts.AskSImain_Template.split("$reason").join(motif).split("$page").join(page),
PaStec_Texts.AskSImainComment.split("$reason").join(motif).split("$page").join(page)
);
alert (PaStec_Texts.AskSICheckContribs);
};
/* </syntaxhighlight>
== Liens pour consulter les PaS ou initier la PaS de la page courante ==
<syntaxhighlight lang=javascript> */
window.PaStec_getPastDate = function(days){
var months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
var minus = days * 24 * 60 * 60 * 1000;
var Now = (new Date()).getTime();
var PastDate = new Date(Now-minus);
var text = "#"+PastDate.getDate()+"_"+ months[PastDate.getMonth()];
return text;
};
window.PaStec_LeftPanelLinks = function() {
var a = document.getElementById("p-navigation");
if(a){
var b = a.getElementsByTagName("ul");
if(b.length > 0){
if(!PaStec_Enabled.LeftPanelLinks && !PaStec_DebugMode) return;
var initURL = PaStec_Texts.InitPaSURL;
var Title = mw.config.get( 'wgTitle' ).replace(/\/Admissibilité$/, "");
var NSnumber = mw.config.get( 'wgNamespaceNumber');
if(NSnumber % 2 == 0) NSnumber = (NSnumber+1);
initURL = initURL.split("$1").join(encodeURIComponent(mw.config.get('wgFormattedNamespaces')[NSnumber]+":"+Title));
b[0].innerHTML = b[0].innerHTML
+ '<li class="mw-list-item"><span id="n-pas7" title="'+PaStec_Texts.PaStodo1Title+'">'
+ '<a href="//fr.wikipedia.org/wiki/'+encodeURIComponent(PaStec_Texts.PaSMainPageName)+PaStec_getPastDate(8)+'">'+PaStec_Texts.PaStodo1Text+'</a>'
+ '</span></li>'
+ '<li class="mw-list-item"><span id="n-pas14" title="'+PaStec_Texts.PaStodo2Title+'">'
+ '<a href="//fr.wikipedia.org/wiki/'+encodeURIComponent(PaStec_Texts.PaSMainPageName)+PaStec_getPastDate(15)+'">'+PaStec_Texts.PaStodo2Text+'</a>'
+ '</span></li>';
if (mw.config.get('wgNamespaceNumber') >= 0) {
b[0].innerHTML = b[0].innerHTML
+ '<li class="mw-list-item"><span id="n-pasi" title="'+PaStec_Texts.InitPaSTitle+'">'
+ '<a href="//fr.wikipedia.org/w/index.php?title='+initURL+'">'+PaStec_Texts.InitPaSText+'</a>'
+ '</span></li>';
}
}
}
};
PaStec_Load(PaStec_LeftPanelLinks);
/* </syntaxhighlight>
== Menu de la sous-page <code>/Admissibilité</code> ==
=== Fonctions annexes ===
==== Création d'un nouvel onglet ====
<syntaxhighlight lang=javascript> */
window.PaStec_CreateNewMenuPanel = function(type, mainbutton){
var MainFieldSet = document.getElementById("PaStec_MainContainer");
var Buttons = document.getElementById("PaStec_PanelButtons");
if(!MainFieldSet || !Buttons) return false;
var button = PaStec_CreateInput("PaStec_"+type+"Input", PaStec_Texts[type], "button", false, false, PaStec_ToggleMenuPanel);
button.id = "PaStec_"+type+"Input";
button.className = "PaStec_PanelButton";
button.style.background = PaStec_ButtonColors[type];
if(mainbutton){
button.style.fontWeight = "bold";
button.style.textDecoration = "underline";
}
Buttons.appendChild(button);
var fieldset = document.createElement('fieldset');
fieldset.id = "PaStec_"+type+"Fieldset";
fieldset.className = "PaStec_Fieldset";
var legend = document.createElement('legend');
legend.innerHTML = PaStec_Texts[(type+"Legend")];
fieldset.appendChild(legend);
var PanelControl = document.createElement('div');
PanelControl.className = "PaStec_PanelControl";
PanelControl.id = "PaStec_Panel"+type+"Control";
fieldset.appendChild(PanelControl);
var ButtonsP = document.createElement('p');
ButtonsP.id = "PaStec_"+type+"Buttons";
ButtonsP.className = "PaStec_TabButtons";
var OKbutton = PaStec_CreateInput("PaStec_"+type+"Action", PaStec_Texts.Validate, "button", false, false, function(){ PaStec_ValidateMenuPanel(type); });
OKbutton.className = "PaStec_ActionButton PaStec_ActionButtonValidate";
OKbutton.style.background = PaStec_ButtonColors[type];
ButtonsP.appendChild(OKbutton);
fieldset.appendChild(ButtonsP);
var PanelContent = document.createElement('div');
PanelContent.className = "PaStec_PanelContent";
fieldset.appendChild(PanelContent);
MainFieldSet.appendChild(fieldset);
return PanelContent;
};
/* </syntaxhighlight>
==== Sélection d'un onglet ====
<syntaxhighlight lang=javascript> */
window.PaStec_ToggleMenuPanel = function(Input){
var Id = "";
if(Input) Id = Input.id.split("Input").join("Fieldset");
var Onglets = document.getElementById("PaStec_PanelButtons").getElementsByTagName("input");
var Fieldsets = document.getElementById("PaStec_MainContainer").getElementsByClassName("PaStec_Fieldset");
for(var a=0,l=Fieldsets.length;a<l;a++){
if(!Onglets[a]) continue;
if(Id){
Onglets[a].style.border = ((Id == Fieldsets[a].id)? "2px solid black" : "2px solid Gainsboro");
Fieldsets[a].style.display = ((Id == Fieldsets[a].id)? "" : "none");
}else{
Onglets[a].style.border = ((a==0)? "2px solid black" : "2px solid Gainsboro");
Fieldsets[a].style.display = ((a==0)? "" : "none");
}
}
};
/* </syntaxhighlight>
==== Gestion de la hauteur des onglets ====
<syntaxhighlight lang=javascript> */
window.PaStec_SetMenuPanelHeightsTimeout = false;
window.PaStec_SetMenuPanelHeights = function(){
var MainFieldSet = document.getElementById("PaStec_MainContainer");
if(!MainFieldSet) return;
var HeightFound = false;
var FieldSets = MainFieldSet.getElementsByTagName('fieldset');
for(var b=0,m=FieldSets.length;b<m;b++){
if(FieldSets[b].style.display == "none") continue;
var MenuPart = FieldSets[b].getElementsByClassName('PaStec_PanelContent')[0];
if(!MenuPart) continue;
var StyleHeight = MenuPart.style.height;
if(StyleHeight) HeightFound = StyleHeight;
}
if(HeightFound){
var MenuParts = MainFieldSet.getElementsByClassName('PaStec_PanelContent');
for(var a=0,l=MenuParts.length;a<l;a++) MenuParts[a].style.height = HeightFound;
}
if(PaStec_SetMenuPanelHeightsTimeout) clearTimeout(PaStec_SetMenuPanelHeightsTimeout);
PaStec_SetMenuPanelHeightsTimeout = setTimeout("PaStec_SetMenuPanelHeights()", 500);
};
/* </syntaxhighlight>
==== Redimensionnement du menu ====
<syntaxhighlight lang=javascript> */
window.PaStec_GetMousePosition = function(event){
return { "X": parseInt(event.clientX), "Y": parseInt(event.clientY) };
};
window.PaStec_GetScreenHeight = function(){
return window.innerHeight;
};
window.PaStec_SetVerticalResizeZone = function(anchorNode, ToResizeNodes, containerNode, invert){
if((!anchorNode)||(!ToResizeNodes)) return;
invert = (invert===true ? -1 : 1);
anchorNode.onmousedown = function(event){
if(!event) { event = window.event; }
var positionSouris_Y = (PaStec_GetMousePosition(event)["Y"] * invert);
var MaxHeight = PaStec_GetScreenHeight();
for(var a=0;a<ToResizeNodes.length;a++){
ToResizeNodes[a].initialHeight = parseInt( (MaxHeight-positionSouris_Y) - ToResizeNodes[a].offsetHeight );
}
document.body.classList.add("MouseMoveFunctionRunning");
document.body.onmousemove=function(event) {
if(!event) { event = window.event; }
var positionSouris_Y = (PaStec_GetMousePosition(event)["Y"] * invert);
var MaxHeight = PaStec_GetScreenHeight();
var HeightLimit = false;
for(var a=0;a<ToResizeNodes.length;a++){
var NewHeight = parseInt((MaxHeight-positionSouris_Y) - ToResizeNodes[a].initialHeight);
if(NewHeight>MaxHeight) HeightLimit = true;
}
if(HeightLimit) return;
for(var a=0;a<ToResizeNodes.length;a++){
var Element = ToResizeNodes[a];
if(!Element) continue;
var NewHeight = parseInt((MaxHeight-positionSouris_Y) - Element.initialHeight);
NewHeight = (NewHeight>0 ? NewHeight : 1);
if(Element.tagName && (Element.tagName.toLowerCase()=="iframe" || Element.tagName.toLowerCase()=="img")){
Element.height = NewHeight;
}else{
Element.style.height = NewHeight + 'px';
}
}
};
document.body.onmouseup = function(event) {
document.body.onmousemove = null;
document.body.onmouseup = null;
document.body.classList.remove("MouseMoveFunctionRunning");
};
};
anchorNode.style.display = "";
};
/* </syntaxhighlight>
==== Affichage/Masquage du menu ====
<syntaxhighlight lang=javascript> */
window.PaStec_ShowHideMenu = function(show){
var Menu = document.getElementById("PaStec_MainFieldset");
if(!Menu) return;
if(show){
Menu.classList.remove("MenuHidden");
}else{
Menu.classList.add("MenuHidden");
}
};
/* </syntaxhighlight>
==== Récupération de la liste des auteurs ====
<syntaxhighlight lang=javascript> */
window.PaStec_Authors = {};
window.PaStec_Creator = null;
window.PaStec_getArticleAuthors = function(rvcontinue, callback) {
if (!rvcontinue) rvcontinue = "";
var page = PaStec_getPageName();
var APIlimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var request = mw.util.wikiScript('api') + '?format=xml&action=query'
+ '&prop=revisions&rvprop=user|timestamp'
+ '&rvlimit=' + APIlimit
+ rvcontinue
+ '&titles=' + encodeURIComponent(page)
+ '&continue=';
PaStec_ajax.http({retry:3,url: request, onSuccess:PaStec_getArticleAuthorsRunning, CallBack:callback, onFailure: PaStec_failureAlert});
};
window.PaStec_getArticleAuthorsRunning = function(Req, data) {
var ObjectXML = Req.responseXML;
var Revs = ObjectXML.getElementsByTagName("rev");
var user;
for (var a=0, l=Revs.length; a<l; a++) {
var rev = Revs[a];
user = rev.getAttribute("user");
if (!user) continue; // nom d'utilisateur masqué
else PaStec_Creator = user;
if(typeof PaStec_Authors[user] === "undefined"){
PaStec_Authors[user] = {};
PaStec_Authors[user].last = PaStec_getDateFromTimestamp(rev.getAttribute("timestamp"));
PaStec_Authors[user].editcount = 1;
if(user.match(/bot$/i) !== null ) PaStec_Authors[user].maybebot = true; // Assuming it is a bot (old bots may have lost their status)
}else{
PaStec_Authors[user].editcount = PaStec_Authors[user].editcount + 1;
}
if(PaStec_UserIsIP(user)) PaStec_Authors[user].ip = true;
}
var QueryContinue = ObjectXML.getElementsByTagName("continue")[0];
if(QueryContinue) {
var rvcontinue = "&rvcontinue=" + encodeURIComponent( QueryContinue.getAttribute("rvcontinue") );
PaStec_getArticleAuthors(rvcontinue, data.CallBack);
} else {
var authorlist = [];
for(var user in PaStec_Authors){
if(PaStec_Authors[user].ip !== true) authorlist.push(user);
}
PaStec_getArticleBotAuthors(authorlist, data.CallBack);
}
};
window.PaStec_getArticleBotAuthors = function(authorlist, callback){
if(authorlist.length === 0){
authorlist = [];
for(var user in PaStec_Authors){
if(PaStec_Authors[user].ip !== true && PaStec_Authors[user].bot !== true) authorlist.push(user);
}
return PaStec_getArticleMaybeBotAuthors(authorlist, callback);
}
var APIlimit = ( PaStec_UserCanDo("apihighlimit") ? 500 : 50);
var newauthorlist = [];
var thisauthorlist = [];
for(var a=0,l=authorlist.length;a<l;a++){
if(a>(APIlimit-1)) newauthorlist.push(authorlist[a]);
else thisauthorlist.push(encodeURIComponent(authorlist[a]));
}
var URL = mw.util.wikiScript('api') + '?format=xml&action=query' +
'&list=users&usprop=groups&ususers='+thisauthorlist.join("|");
PaStec_ajax.http({retry:3,url: URL, onSuccess:PaStec_getArticleBotAuthorsRunning, CallBack:callback, furtherauthors:newauthorlist, onFailure: PaStec_failureAlert});
};
window.PaStec_getArticleBotAuthorsRunning = function(Req, data){
var ObjectXML = Req.responseXML;
var Users = ObjectXML.getElementsByTagName("user");
for(var a=0,l=Users.length;a<l;a++){
var username = Users[a].getAttribute("name");
var groups = Users[a].getElementsByTagName('g');
for(var g=0,glen=groups.length;g<glen;g++){
if(groups[g].firstChild.nodeValue == "bot") PaStec_Authors[username].bot = true;
}
}
PaStec_getArticleBotAuthors(data.furtherauthors, data.CallBack);
};
window.PaStec_getArticleMaybeBotAuthors_Remaining = 0;
window.PaStec_getArticleMaybeBotAuthors = function(authorlist, callback){
if(authorlist.length === 0) return callback();
PaStec_getArticleMaybeBotAuthors_Remaining = authorlist.length;
var APIlimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
for(var a=0,l=authorlist.length;a<l;a++){
var user = authorlist[a];
var request = mw.util.wikiScript('api') + '?format=xml&action=query'
+ '&prop=categories'
+ '&cllimit=' + APIlimit
+ '&titles=' + mw.config.get('wgFormattedNamespaces')[2]+":"+encodeURIComponent(user)
+ '&continue=';
PaStec_ajax.http({retry:3,url: request, onSuccess:PaStec_getArticleMaybeBotAuthorsRunning, CallBack:callback, user:user, onFailure: PaStec_failureAlert});
}
};
window.PaStec_getArticleMaybeBotAuthorsRunning = function(Req, data){
var ObjectXML = Req.responseXML;
var Cats = ObjectXML.getElementsByTagName("cl");
for(var a=0,l=Cats.length;a<l;a++){
var title = Cats[a].getAttribute("title");
if(title.match(PaStec_BotCatRegExp) !== null) PaStec_Authors[data.user].bot = true;
}
PaStec_getArticleMaybeBotAuthors_Remaining--;
if(PaStec_getArticleMaybeBotAuthors_Remaining === 0) data.CallBack();
};
window.PaStec_getAuthorType = function(user){
var types = [];
if(PaStec_Authors[user].bot === true) types.push('<small>(bot)</small>');
if(PaStec_Authors[user].maybebot === true && PaStec_Authors[user].bot !== true) types.push('<small>(bot?)</small>');
if(PaStec_Authors[user].ip === true) types.push('<small>(IP)</small>');
if(user === PaStec_Creator) types.push('<small style="color:red;"><b>($creator)</b></small>');
if(types.length >0) return " "+types.join(" ");
return "";
};
/* </syntaxhighlight>
==== Récupération de la liste des projets ====
<syntaxhighlight lang=javascript> */
window.PaStec_Projects = [];
window.PaStec_TalkPagesMap = {};
// Remplit PaStec_TalkPagesMap avec la page de discussion associée à chaque élément de projects.
// Ne recalcule pas les valeurs précédemment obtenues.
window.PaStec_populateTalkPagesMap = function(projects, callback) {
var textToParse = '';
for (var i = 0; i < projects.length; i++) {
var project = projects[i];
if (typeof(PaStec_TalkPagesMap[project]) !== 'undefined') continue;
textToParse += project + '|{{subst:Annonces PaStec|' + project + '}}\n';
}
if (textToParse === '') {
callback();
return;
}
var api = new mw.Api();
api.get({'action': 'parse', 'contentmodel': 'wikitext', 'text': textToParse, 'prop': 'text',
'onlypst': '1'}).done(function(parseResult) {
var parseResultLines = parseResult['parse']['text']['*'].split('\n');
for (var i = 0; i < parseResultLines.length; i++) {
var fields = parseResultLines[i].split('|');
if (fields.length >= 2 && !/[<>"]/.test(fields[1])) {
PaStec_TalkPagesMap[fields[0]] = fields[1];
}
}
callback();
});
};
window.PaStec_getArticleProjects = function(tlcontinue, callback) {
if (!tlcontinue) tlcontinue = "";
var page = PaStec_getPageName();
var APIlimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var request = mw.util.wikiScript('api') + '?format=xml&action=query'
+ '&prop=templates&tlnamespace=10'
+ '&tllimit=' + APIlimit
+ '&titles=' + encodeURIComponent(page)
+ tlcontinue
+ '&continue=';
PaStec_ajax.http({retry:3,url: request, onSuccess:PaStec_getArticleProjectsRunning, CallBack:callback, onFailure: PaStec_failureAlert});
};
window.PaStec_getArticleProjectsRunning = function(Req, data){
var ObjectXML = Req.responseXML;
var Templates = ObjectXML.getElementsByTagName("tl");
for(var a=0,l=Templates.length;a<l;a++){
var title = Templates[a].getAttribute("title");
if(title.match(/Modèle:Portail /) !== null){
title = title.replace(/Modèle:Portail /, "").PaStec_ucFirst();
if(PaStec_Projects.indexOf(title) === -1) PaStec_Projects.push(title);
}
}
var QueryContinue = ObjectXML.getElementsByTagName("continue")[0];
if(QueryContinue) {
var tlcontinue = "&tlcontinue=" + encodeURIComponent( QueryContinue.getAttribute("tlcontinue") );
PaStec_getArticleProjects(tlcontinue, data.CallBack);
} else {
PaStec_populateTalkPagesMap(PaStec_Projects, data.CallBack);
}
};
/* </syntaxhighlight>
==== Récupération des pages liées et des pages de la catégorie ====
<syntaxhighlight lang=javascript> */
window.PaStec_GetWhatlinkshereRunning = 0;
window.PaStec_WhatlinkshereLists = {"links":[],"redirects":[],"doubleredirects":[],"embeddedin":[],"imageusage":[],"categorymembers":[]};
window.PaStec_getAllNamespaces = function(){
var NSList = [];
for(var nsnumber in mw.config.get('wgFormattedNamespaces')){
nsnumber = parseInt(nsnumber);
if(nsnumber > -1) NSList.push(nsnumber);
}
return NSList;
};
window.PaStec_GetWhatlinkshere_Addpage = function(title, type){
if(PaStec_WhatlinkshereLists[type].indexOf(title)===-1) PaStec_WhatlinkshereLists[type].push(title);
};
window.PaStec_ClearDiff = function(type){
if(!type){
$(".PaStec_DiffPreview").each(function(_, Diff){
while(Diff.firstChild){ Diff.removeChild(Diff.firstChild); }
if(!Diff.classList.contains("PaStec_EmptyDiffPreview")) Diff.classList.add("PaStec_EmptyDiffPreview");
});
}else{
var Diff = document.getElementById("PaStec_DiffPreview_"+type);
if(!Diff) return null;
while(Diff.firstChild){ Diff.removeChild(Diff.firstChild); };
if(!Diff.classList.contains("PaStec_EmptyDiffPreview")) Diff.classList.add("PaStec_EmptyDiffPreview");
return Diff;
}
};
window.PaStec_GetWhatlinkshere = function(Page, Continues, redirectrequest){
if(!Continues && !redirectrequest){
PaStec_WhatlinkshereLists = {"links":[],"redirects":[],"doubleredirects":[],"embeddedin":[],"imageusage":[],"categorymembers":[]};
PaStec_UpdateWhatlinkshereLists();
$(".PaStec_DiffPreview").each(function(_, Diff){
while(Diff.firstChild){ Diff.removeChild(Diff.firstChild); }
});
}
if(!Page) Page = PaStec_getPageName();
PaStec_GetWhatlinkshereRunning++;
var isfile = (Page.indexOf(mw.config.get('wgFormattedNamespaces')[6]+":") === 0);
var iscat = (Page.indexOf(mw.config.get('wgFormattedNamespaces')[14]+":") === 0);
var list = ['backlinks', 'embeddedin'];
if(isfile) list.push('imageusage');
if(iscat) list.push('categorymembers');
var Namespaces = PaStec_getAllNamespaces().join("|");
var APILimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var queryopt = {
action : 'query',
list : list,
bllimit : APILimit,
blnamespace : (Array.isArray(PaStec_WLH_BLDefaultNamespaces) ? PaStec_WLH_BLDefaultNamespaces : Namespaces),
bltitle : Page,
eilimit : APILimit,
einamespace : (Array.isArray(PaStec_WLH_EIDefaultNamespaces) ? PaStec_WLH_EIDefaultNamespaces : Namespaces),
eititle : Page
};
if(isfile){
queryopt.iulimit = APILimit;
queryopt.iunamespace = (Array.isArray(PaStec_WLH_IUDefaultNamespaces) ? PaStec_WLH_IUDefaultNamespaces : Namespaces);
queryopt.iutitle = Page;
}
if(iscat){
queryopt.cmlimit = APILimit;
queryopt.cmnamespace = Namespaces;
queryopt.cmtitle = Page;
}
if(Continues && Continues.blcontinue) queryopt.blcontinue = Continues.blcontinue;
if(Continues && Continues.eicontinue) queryopt.eicontinue = Continues.eicontinue;
if(Continues && Continues.iucontinue) queryopt.iucontinue = Continues.iucontinue;
if(Continues && Continues.cmcontinue) queryopt.cmcontinue = Continues.cmcontinue;
queryopt["continue"] = "";
var api = new mw.Api();
api.get(queryopt).then( function(data) {
PaStec_GetWhatlinkshereRunning--;
if(data.query.backlinks){
var AllBL = data.query.backlinks;
var BL = AllBL.length;
for(var a=0,l=BL;a<l;a++){
var thispagetitle = AllBL[a].title;
var thispageredirect = (AllBL[a].redirect === "");
if(thispageredirect){
PaStec_GetWhatlinkshere_Addpage(thispagetitle, "redirects");
if(redirectrequest) PaStec_GetWhatlinkshere_Addpage(thispagetitle, "doubleredirects");
PaStec_GetWhatlinkshere(thispagetitle, false, true);
}else{
PaStec_GetWhatlinkshere_Addpage(thispagetitle, "links");
}
}
}
if(data.query.embeddedin) {
var AllEI = data.query.embeddedin;
var EI = AllEI.length;
for(var a=0,l=EI;a<l;a++){
var thispagetitle = AllEI[a].title;
PaStec_GetWhatlinkshere_Addpage(thispagetitle, "embeddedin");
}
}
if(data.query.imageusage) {
var AllIU = data.query.imageusage;
var IU = AllIU.length;
for(var a=0,l=IU;a<l;a++){
var thispagetitle = AllIU[a].title;
PaStec_GetWhatlinkshere_Addpage(thispagetitle, "imageusage");
}
}
if(data.query.categorymembers) {
var AllCM = data.query.categorymembers;
var CM = AllCM.length;
for(var a=0,l=CM;a<l;a++){
var thispagetitle = AllCM[a].title;
PaStec_GetWhatlinkshere_Addpage(thispagetitle, "categorymembers");
}
}
var RequeteContinue = {};
var ContinueNode = data["continue"];
var MustContinue = false;
if(ContinueNode){
if(ContinueNode.blcontinue){
RequeteContinue.blcontinue = ContinueNode.blcontinue;
MustContinue = true;
}
if(ContinueNode.eicontinue){
RequeteContinue.eicontinue = ContinueNode.eicontinue;
MustContinue = true;
}
if(ContinueNode.iucontinue){
RequeteContinue.iucontinue = ContinueNode.iucontinue;
MustContinue = true;
}
if(ContinueNode.cmcontinue){
RequeteContinue.cmcontinue = ContinueNode.cmcontinue;
MustContinue = true;
}
}
if(MustContinue){
PaStec_GetWhatlinkshere(Page, RequeteContinue, redirectrequest);
}else if(PaStec_GetWhatlinkshereRunning === 0){
PaStec_UpdateWhatlinkshereLists();
}
});
};
window.PaStec_CreateWhatlinkshereList = function(ListsToCreate, Container){
for(var type in PaStec_WhatlinkshereLists){
if(ListsToCreate.indexOf(type) === -1) continue;
var FORM = document.createElement('form');
FORM.className = "PaStec_Whatlinkshere_"+type;
FORM.style.display = "none";
var label = document.createElement('label');
var RefreshLink = PaStec_createLink({text:PaStec_Texts.PasWLH_Refresh,url:"javascript:PaStec_GetWhatlinkshere();",target:"_self"});
label.innerHTML = PaStec_Texts[("PasWLH_"+type)].split("$1").join("<small><sup>"+RefreshLink+"</sup></small>");
FORM.appendChild(label);
Container.appendChild(FORM);
}
};
window.PaStec_UpdateWhatlinkshereLists = function(){
PaStec_ClearDiff();
var Whatlinkshere = PaStec_WhatlinkshereLists;
for(var type in PaStec_WhatlinkshereLists){
var PageList = PaStec_WhatlinkshereLists[type];
var Nodes = document.getElementsByClassName("PaStec_Whatlinkshere_"+type);
for(var a=0,l=Nodes.length;a<l;a++){
var FORM = Nodes[a];
var UL = FORM.getElementsByTagName('ul')[0];
if(!UL){
UL = document.createElement('ul');
FORM.appendChild(UL);
}
while(UL.firstChild){ UL.removeChild(UL.firstChild); };
if(PageList.length === 0){
FORM.style.display = "none";
continue;
}else{
FORM.style.display = "";
var builder = document.createDocumentFragment();
for(var p=0,plen=PageList.length;p<plen;p++){
if(p>0){
builder.appendChild(document.createTextNode(' '));
}
var newli = document.createElement('li');
builder.appendChild(newli);
var thispage = PageList[p];
var link = document.createElement('a');
link.target = "_blank";
link.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split("$1").join(thispage) + "?redirect=no";
if(type !== "redirects"){
link.onclick = function(){
PaStec_CheckThisPage(this);
return false;
};
}
link.title = thispage;
link.innerHTML = thispage;
newli.appendChild(link);
var input = document.createElement('input');
input.type = "hidden";
input.name = type;
input.value = thispage;
newli.appendChild(input);
}
UL.appendChild(builder);
}
}
}
};
/* </syntaxhighlight>
==== Suggestions ====
<syntaxhighlight lang=javascript> */
window.PaStec_CreateAddItemLink = function(inputname){
var Link = document.createElement('a');
Link.innerHTML = "(+)";
Link.title = PaStec_Texts.AddItem;
Link.href = "javascript:;";
Link.onclick = function(){
var parent = this.parentNode;
if(!parent) return false;
var NewLi = document.createElement('li');
var Input = PaStec_CreateInput(inputname, "", "text", false, false, false, PaStec_getSuggestions);
NewLi.appendChild(Input);
NewLi.appendChild(document.createTextNode(" "));
NewLi.appendChild(PaStec_CreateRemoveParentLink());
parent.parentNode.insertBefore(NewLi, parent);
Input.focus();
return false;
};
return Link;
};
window.PaStec_Suggestions_Zindex = 5000;
window.PaStec_Suggestions_currentID = 0;
window.PaStec_Suggestions_requestrunning = {};
window.PaStec_getSuggestionID = function(el){
var id = el.id;
if(!id) return false;
return parseInt(id.replace(/[^0-9]/g, ""));
};
window.PaStec_getSuggestions = function(input){
var ID = PaStec_getSuggestionID(input);
if(!ID){
ID = PaStec_Suggestions_currentID++;
input.id = "SuggestInput_"+ID;
var select = document.createElement('select');
select.id = "SuggestSelect_"+ID;
select.style.display = "none";
select.style.position = "relative" ;
select.style.width = input.offsetWidth + "px" ;
select.style.top = parseInt(input.offsetHeight) + "px";
select.style.marginBottom = "0px" ;
select.style.marginLeft = "-" + input.offsetWidth + "px" ;
select.onkeyup = PaStec_KeypressedOnSuggestionList;
input.parentNode.insertBefore(select, input.nextSibling);
}
if(PaStec_Suggestions_requestrunning[ID] === true) return;
PaStec_Suggestions_requestrunning[ID] = true;
var type = input.name;
if(type === "pages" || type === "target" || type === "newtitle") PaStec_getPageSuggestions(ID);
if(type === "user") PaStec_getUserSuggestions(ID);
if(type === "project") PaStec_getProjectSuggestions(ID);
};
window.PaStec_showSuggestions = function(titles, Index){
PaStec_Suggestions_requestrunning[Index] = false;
var Text = document.getElementById("SuggestInput_"+Index);
var List = document.getElementById("SuggestSelect_"+Index);
if(!Text || !List) return;
if(titles.length === 0){
List.style.display = "none";
return ;
}
if(titles[0] === PaStec_formatTextValue(Text.value)){
List.style.display = "none";
return ;
}
List.style.display = "inline";
var TailleListe = PaStec_Suggestions_suggestsize;
if(titles.length < TailleListe) TailleListe = titles.length;
var listh = TailleListe * 20 ;
List.style.height = listh + "px" ;
List.size = TailleListe;
while(List.firstChild) List.removeChild(List.firstChild);
for(var i = 0,l=titles.length;i<l;i++){
var opt = document.createElement("option");
opt.appendChild(document.createTextNode(titles[i])) ;
opt.onclick = function(){
PaStec_SuggestionReplace(PaStec_getSuggestionID(this.parentNode));
};
opt.value = titles[i];
List.appendChild(opt) ;
}
List.style.marginBottom = "-" + (listh + parseInt(Text.offsetHeight)) + "px" ;
List.style.zIndex = PaStec_Suggestions_Zindex++;
var NewValue = PaStec_formatTextValue(Text.value);
if(titles[0].indexOf(NewValue) !== 0) PaStec_getSuggestions(Text);
};
window.PaStec_KeypressedOnSuggestionList = function(e){
if (!e) var e = window.event;
if (e.keyCode != 13) return;
PaStec_SuggestionReplace(PaStec_getSuggestionID(this));
};
window.PaStec_SuggestionReplace = function(Index){
var Text = document.getElementById("SuggestInput_"+Index);
var List = document.getElementById("SuggestSelect_"+Index);
if(!Text || !List) return;
var TextValue = Text.value;
var Options = List.getElementsByTagName('option');
for(var a=0;a<Options.length;a++){
if(Options[a].selected){
var ListValue = Options[a].value;
Text.value = ListValue;
PaStec_getSuggestions(Text);
Text.focus();
return;
}
}
};
window.PaStec_formatTextValue = function(text){
text = text.replace(/\u200E|\u200F|\u202A|\u202B|\u202C|\u202D|\u202E/g, '');
text = text.PaStec_ucFirst();
return text;
};
window.PaStec_getPageSuggestions = function(Index){
var Input = document.getElementById("SuggestInput_"+Index);
if(!Input) return;
var text = Input.value;
if(!text) return PaStec_showSuggestions([], Index);
text = PaStec_formatTextValue(text);
Input.value = text;
var APILimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var limit = PaStec_Suggestions_requestlimit;
if(limit > APILimit) limit = APILimit;
var queryopt = {
action : 'query',
list : 'allpages',
aplimit : limit,
apfilterredir : 'nonredirects',
apprefix : text,
"continue" : ""
};
var api = new mw.Api();
api.get(queryopt).then( function(data) {
var titles = [];
var pages = data.query.allpages;
if(!pages) PaStec_showSuggestions(titles, Index);
for(var a=0,l=pages.length;a<l;a++){
var thistitle = pages[a].title;
if(titles.indexOf(thistitle) === -1) titles.push(thistitle);
}
PaStec_showSuggestions(titles, Index);
});
};
window.PaStec_getUserSuggestions = function(Index){
var Input = document.getElementById("SuggestInput_"+Index);
if(!Input) return;
var text = Input.value;
if(!text) return PaStec_showSuggestions([], Index);
text = PaStec_formatTextValue(text);
Input.value = text;
var APILimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var limit = PaStec_Suggestions_requestlimit;
if(limit > APILimit) limit = APILimit;
var queryopt = {
action : 'query',
list : 'allusers',
aulimit : limit,
auexcludegroup : 'bot',
auprefix : text,
"continue" : ""
};
var api = new mw.Api();
api.get(queryopt).then( function(data) {
var titles = [];
var users = data.query.allusers;
if(!users) PaStec_showSuggestions(titles, Index);
for(var a=0,l=users.length;a<l;a++){
var thisuser = users[a].name;
if(titles.indexOf(thisuser) === -1) titles.push(thisuser);
}
PaStec_showSuggestions(titles, Index);
});
};
window.PaStec_getProjectSuggestions = function(Index){
var Input = document.getElementById("SuggestInput_"+Index);
if(!Input) return;
var text = Input.value;
text = PaStec_formatTextValue(text);
if(!text) return PaStec_showSuggestions([], Index);
Input.value = text;
var APILimit = ( PaStec_UserCanDo("apihighlimit") ? 5000 : 500);
var limit = (PaStec_Suggestions_requestlimit * 20);
if(limit > APILimit) limit = APILimit;
var queryopt = {
action : 'query',
list : 'allpages',
aplimit : limit,
apfilterredir : 'nonredirects',
apnamespace : 103,
apprefix : text,
"continue" : ""
};
var api = new mw.Api();
api.get(queryopt).then( function(data) {
var NS = mw.config.get('wgFormattedNamespaces')[103];
var titles = [];
var pages = data.query.allpages;
if(!pages) PaStec_showSuggestions(titles, Index);
for(var a=0,l=pages.length;a<l;a++){
var thistitle = pages[a].title;
if(thistitle.indexOf("/") !== -1) continue;
thistitle = thistitle.split(NS+":").join("");
if(titles.indexOf(thistitle) === -1 && titles.length < PaStec_Suggestions_requestlimit) titles.push(thistitle);
}
PaStec_showSuggestions(titles, Index);
});
};
/* </syntaxhighlight>
==== Autres ====
<syntaxhighlight lang=javascript> */
window.PaStec_CreateInput = function(name, value, type, checked, disabled, onclick, onkeyup){
var Input = document.createElement('input');
Input.type = type;
Input.name = name;
Input.value = value;
if(type === "text") Input.size = (PaStec_InputSize || 30);
if(checked) Input.checked = "checked";
if(disabled) Input.disabled = "disabled";
if(onclick){
Input.onclick = function(){ onclick(this); };
Input.onselect = function(){ onclick(this); };
}
if(onkeyup){
Input.onkeyup = function(){ onkeyup(this); };
}
return Input;
};
window.PaStec_CreateLabel = function(For, text){
var Label = document.createElement('label');
Label.setAttribute('for', For);
Label.innerHTML = text;
return Label;
};
window.PaStec_CreateRemoveParentLink = function(){
var Link = document.createElement('a');
Link.innerHTML = "(-)";
Link.title = PaStec_Texts.RemoveItem;
Link.href = "javascript:;";
Link.onclick = function(){
var parent = this.parentNode;
if(parent) parent.parentNode.removeChild(parent);
return false;
};
return Link;
};
window.PaStec_DisableForms = function(Container){
if(!Container) Container = document.getElementById("PaStec_MainContainer");
var Forms = Container.getElementsByTagName('form');
for(var a=0,l=Forms.length;a<l;a++){
Forms[a].onsubmit = function(){ return false; };
}
};
/* </syntaxhighlight>
=== Création du menu ===
==== Création des onglets ====
<syntaxhighlight lang=javascript> */
window.PaStec_CreateMenuPanelFunctions = {
"PaSWelcome" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSWelcome", true);
if(!PanelContent) return;
},
/* </syntaxhighlight>
===== Clôture en suppression =====
<syntaxhighlight lang=javascript> */
"PaSDelete" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSDelete", true);
if(!PanelContent) return;
var ReasonForm = document.createElement('form');
var ReasonInput = PaStec_CreateInput("reason", PaStec_Texts.PaSDeleteReasonDef, "text");
var ReasonLabel = PaStec_CreateLabel("reason", PaStec_Texts.PaSPanelReason);
ReasonForm.appendChild(ReasonLabel);
ReasonForm.appendChild(document.createTextNode(" : "));
ReasonForm.appendChild(document.createElement("br"));
ReasonForm.appendChild(ReasonInput);
PanelContent.appendChild(ReasonForm);
var ActionForm = document.createElement('form');
ActionForm.appendChild(PaStec_CreateInput("action", "AskSI", "radio", !PaStec_UserCanDo("delete") ));
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action_AskSI", PaStec_Texts.PaSPanelAskSI));
ActionForm.style.display = "none";
PanelContent.appendChild(ActionForm);
if(PaStec_UserCanDo("delete")){
ActionForm.style.display = "";
ActionForm.appendChild(document.createElement("br"));
ActionForm.appendChild(PaStec_CreateInput("action", "Delete", "radio", true) );
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action_Delete", PaStec_Texts.PaSPanelDelete));
var RedirectsList = document.createElement('div');
RedirectsList.className = "PaStec_WhatlinkshereList";
PanelContent.appendChild(RedirectsList);
PaStec_CreateWhatlinkshereList(["redirects"], RedirectsList);
}
},
/* </syntaxhighlight>
===== Clôture suite à SI =====
<syntaxhighlight lang=javascript> */
"PaSSI" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSSI", true);
if(!PanelContent) return;
if(PaStec_UserCanDo("delete")){
var ActionForm = document.createElement('form');
ActionForm.appendChild(PaStec_CreateInput("action", "DelRedir", "checkbox", true ));
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action_AskSI", PaStec_Texts.PaSDerRedir));
PanelContent.appendChild(ActionForm);
var RedirectsList = document.createElement('div');
RedirectsList.className = "PaStec_WhatlinkshereList";
PanelContent.appendChild(RedirectsList);
PaStec_CreateWhatlinkshereList(["redirects"], RedirectsList);
}
},
/* </syntaxhighlight>
===== Déwikification =====
<syntaxhighlight lang=javascript> */
"PaSUnwikify" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSUnwikify");
if(!PanelContent) return;
var ButtonsP = document.getElementById("PaStec_PaSUnwikifyButtons");
if(ButtonsP){
var Nextbutton = PaStec_CreateInput("PaStec_PaSUnwikifyNextPage", PaStec_Texts.PasWLH_NextPage, "button", false, false, function(){ PaStec_CheckNextPage("PaSUnwikify"); });
Nextbutton.className = "PaStec_ActionButton";
ButtonsP.appendChild(Nextbutton);
}
var WhatlinkshereLists = document.createElement('div');
WhatlinkshereLists.className = "PaStec_WhatlinkshereList";
PanelContent.appendChild(WhatlinkshereLists);
PaStec_CreateWhatlinkshereList("redirects", WhatlinkshereLists);
if(PaStec_getPageName().indexOf(mw.config.get('wgFormattedNamespaces')[6]+":") === 0) PaStec_CreateWhatlinkshereList("imageusage", WhatlinkshereLists);
else if(PaStec_getPageName().indexOf(mw.config.get('wgFormattedNamespaces')[14]+":") === 0) PaStec_CreateWhatlinkshereList("categorymembers", WhatlinkshereLists);
else PaStec_CreateWhatlinkshereList("links", WhatlinkshereLists);
var DiffPreview = document.createElement('div');
DiffPreview.id = "PaStec_DiffPreview_PaSUnwikify";
DiffPreview.className = "PaStec_DiffPreview PaStec_EmptyDiffPreview";
PanelContent.appendChild(DiffPreview);
},
/* </syntaxhighlight>
===== Clôture en conservation =====
<syntaxhighlight lang=javascript> */
"PaSKeep" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSKeep", true);
if(!PanelContent) return;
var ReasonForm = document.createElement('form');
var ReasonInput = PaStec_CreateInput("reason", PaStec_Texts.PASkeepReasonDef, "text");
var ReasonLabel = PaStec_CreateLabel("reason", PaStec_Texts.PaSPanelReason);
ReasonForm.appendChild(ReasonLabel);
ReasonForm.appendChild(document.createTextNode(" : "));
ReasonForm.appendChild(document.createElement("br"));
ReasonForm.appendChild(ReasonInput);
PanelContent.appendChild(ReasonForm);
},
/* </syntaxhighlight>
===== Clôture en fusion =====
<syntaxhighlight lang=javascript> */
"PaSMerge" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSMerge", true);
if(!PanelContent) return;
var ReasonForm = document.createElement('form');
var ReasonInput = PaStec_CreateInput("reason", PaStec_Texts.PaSMergeReasonDef, "text");
var ReasonLabel = PaStec_CreateLabel("reason", PaStec_Texts.PaSPanelReason);
ReasonForm.appendChild(ReasonLabel);
ReasonForm.appendChild(document.createTextNode(" : "));
ReasonForm.appendChild(document.createElement("br"));
ReasonForm.appendChild(ReasonInput);
PanelContent.appendChild(ReasonForm);
var OtherPagesForm = document.createElement('form');
var OtherPagesLabel = PaStec_CreateLabel("pages", PaStec_Texts.PaSMergePages);
var OL = document.createElement('ol');
var Page1LI = document.createElement('li');
Page1LI.appendChild(PaStec_CreateInput("pages", PaStec_getPageName(), "text", false, true));
var Page2LI = document.createElement('li');
Page2LI.appendChild(PaStec_CreateInput("pages", "", "text", false, false, false, PaStec_getSuggestions));
OL.appendChild(Page1LI);
OL.appendChild(Page2LI);
var MoreLi = document.createElement('li');
MoreLi.appendChild(PaStec_CreateAddItemLink("pages"));
OL.appendChild(MoreLi);
OtherPagesForm.appendChild(OtherPagesLabel);
OtherPagesForm.appendChild(document.createTextNode(" : "));
OtherPagesForm.appendChild(OL);
PanelContent.appendChild(OtherPagesForm);
var RequestForm = document.createElement('form');
RequestForm.appendChild(PaStec_CreateInput("makerequest", "1", "checkbox", true) );
RequestForm.appendChild(document.createTextNode(" : "));
RequestForm.appendChild(PaStec_CreateLabel("makerequest", PaStec_Texts.PaSMergeRequest));
PanelContent.appendChild(RequestForm);
},
/* </syntaxhighlight>
===== Clôture en renommage =====
<syntaxhighlight lang=javascript> */
"PaSMove" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSMove", true);
if(!PanelContent) return;
var ReasonForm = document.createElement('form');
var ReasonInput = PaStec_CreateInput("reason", PaStec_Texts.PaSMoveReasonDef, "text");
var ReasonLabel = PaStec_CreateLabel("reason", PaStec_Texts.PaSPanelReason);
ReasonForm.appendChild(ReasonLabel);
ReasonForm.appendChild(document.createTextNode(" : "));
ReasonForm.appendChild(document.createElement("br"));
ReasonForm.appendChild(ReasonInput);
PanelContent.appendChild(ReasonForm);
var ActionForm = document.createElement('form');
var inputtype = (PaStec_UserCanDo("move") ? "radio" : "checkbox" );
if(PaStec_UserCanDo("move")){
ActionForm.appendChild(PaStec_CreateInput("action", "Move", inputtype, true) );
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action", PaStec_Texts.PaSMoveDo));
ActionForm.appendChild(document.createElement("br"));
ActionForm.appendChild(PaStec_CreateInput("action", "Ask", inputtype) );
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action", PaStec_Texts.PaSMoveAsk));
ActionForm.appendChild(document.createElement("br"));
ActionForm.appendChild(PaStec_CreateInput("action", "", inputtype) );
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action", PaStec_Texts.PaSMoveNo));
}else{
ActionForm.appendChild(PaStec_CreateInput("action", "Move", inputtype, true) );
ActionForm.appendChild(document.createTextNode(" : "));
ActionForm.appendChild(PaStec_CreateLabel("action", PaStec_Texts.PaSMoveAsk));
}
PanelContent.appendChild(ActionForm);
var NewPageForm = document.createElement('form');
var NewPageInput = PaStec_CreateInput("newtitle", "", "text", false, false, false, PaStec_getSuggestions);
var NewPageLabel = PaStec_CreateLabel("newtitle", PaStec_Texts.PaSMoveNewPage);
NewPageForm.appendChild(NewPageLabel);
NewPageForm.appendChild(document.createTextNode(" : "));
NewPageForm.appendChild(document.createElement("br"));
NewPageForm.appendChild(NewPageInput);
PanelContent.appendChild(NewPageForm);
var DoubleRedirectList = document.createElement('div');
DoubleRedirectList.className = "PaStec_WhatlinkshereList";
PanelContent.appendChild(DoubleRedirectList);
PaStec_CreateWhatlinkshereList(["redirects"], DoubleRedirectList);
if(!PaStec_UserCanDo("move")) DoubleRedirectList.style.display = "none";
},
/* </syntaxhighlight>
===== Clôture en redirection =====
<syntaxhighlight lang=javascript> */
"PaSRedirect" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSRedirect", true);
if(!PanelContent) return;
var ReasonForm = document.createElement('form');
ReasonForm.appendChild(PaStec_CreateLabel("reason", PaStec_Texts.PaSPanelReason));
ReasonForm.appendChild(document.createTextNode(" : "));
ReasonForm.appendChild(document.createElement("br"));
ReasonForm.appendChild(PaStec_CreateInput("reason", PaStec_Texts.PaSRedirectReasonDef, "text"));
PanelContent.appendChild(ReasonForm);
var RequestForm = document.createElement('form');
RequestForm.appendChild(PaStec_CreateInput("makeredir", "1", "checkbox", true) );
RequestForm.appendChild(document.createTextNode(" : "));
RequestForm.appendChild(PaStec_CreateLabel("makeredir", PaStec_Texts.PaSRedirectDo));
PanelContent.appendChild(RequestForm);
var TargetForm = document.createElement('form');
TargetForm.appendChild(PaStec_CreateLabel("target", PaStec_Texts.PaSRedirectTitle));
TargetForm.appendChild(document.createTextNode(" : "));
TargetForm.appendChild(document.createElement("br"));
TargetForm.appendChild(PaStec_CreateInput("target", "", "text", false, false, false, PaStec_getSuggestions));
PanelContent.appendChild(TargetForm);
var DoubleRedirectList = document.createElement('div');
DoubleRedirectList.className = "PaStec_WhatlinkshereList";
PanelContent.appendChild(DoubleRedirectList);
PaStec_CreateWhatlinkshereList(["redirects"], DoubleRedirectList);
},
/* </syntaxhighlight>
===== Initialisation PaS =====
<syntaxhighlight lang=javascript> */
"PaSInit" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSInit");
if(!PanelContent) return;
var Input = document.getElementById("PaStec_PaSInitInput");
if(Input) Input.parentNode.insertBefore(document.createElement("br"), Input);
var DefinitionForm = document.createElement('form');
var DefinitionInput = PaStec_CreateInput("definition", "", "text");
var DefinitionLabel = PaStec_CreateLabel("definition", PaStec_Texts.PaSInitDefinition);
DefinitionForm.appendChild(DefinitionLabel);
DefinitionForm.appendChild(document.createTextNode(" : "));
DefinitionForm.appendChild(document.createElement("br"));
DefinitionForm.appendChild(DefinitionInput);
PanelContent.appendChild(DefinitionForm);
},
/* </syntaxhighlight>
===== Avertissement utilisateurs =====
<syntaxhighlight lang=javascript> */
"PaSWarnUser" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSWarnUser");
if(!PanelContent) return;
var Fieldset = PanelContent.parentNode;
Fieldset.classList.add("iphidden");
Fieldset.classList.add("bothidden");
PanelContent.innerHTML = '<span class="error">'+PaStec_Texts.running+'</span>';
PaStec_getArticleAuthors("", function(){
PanelContent.innerHTML = '';
var UserListForm = document.createElement('form');
PanelContent.appendChild(UserListForm);
var UserListLabel = PaStec_CreateLabel("user", PaStec_Texts.PaSCheckUsersToWarn);
UserListForm.appendChild(UserListLabel);
UserListForm.appendChild(document.createTextNode(" : "));
var UserListOL = document.createElement('ol');
UserListOL.id = "UserListOL";
UserListForm.appendChild(UserListOL);
var foundip = false;
var foundbot = false;
for(var user in PaStec_Authors){
var UserLi = document.createElement('li');
var userinfos = PaStec_Authors[user];
UserLi.classList.add("author");
var isCreator = (user === PaStec_Creator || false);
if(userinfos.ip){ UserLi.classList.add("ip"); foundip = true; }
if(userinfos.bot){ UserLi.classList.add("bot"); foundbot = true; }
if(isCreator) UserLi.classList.add("creator");
var typetext = PaStec_getAuthorType(user);
var editcount = userinfos.editcount;
var LabelText = PaStec_Texts.NbEdits;
LabelText = LabelText.split("$user").join(PaStec_createUserLink(user) + typetext);
LabelText = LabelText.split("$creator").join(PaStec_Texts.Creator);
LabelText = LabelText.split("$edits").join(editcount);
LabelText = LabelText.split("$last").join(PaStec_Authors[user].last);
LabelText = PaStec_Plural(LabelText);
var Checked = true;
if( (userinfos.ip || userinfos.maybebot || userinfos.editcount < Pastec_seil || userinfos.bot) && !isCreator) Checked = false;
var Disabled = (userinfos.bot || false);
UserLi.appendChild(PaStec_CreateInput("user", user, "checkbox", Checked, Disabled));
UserLi.appendChild(document.createTextNode(" "));
UserLi.appendChild(PaStec_CreateLabel("user", LabelText));
UserListOL.appendChild(UserLi);
}
var MoreLi = document.createElement('li');
MoreLi.appendChild(PaStec_CreateAddItemLink("user"));
UserListOL.appendChild(MoreLi);
var Target = document.getElementById("PaStec_PaSWarnUserButtons");
if(Target && foundbot){
var HideBotButton = PaStec_CreateInput("", PaStec_Texts.PaSHideBots, "button", false, false, function(){
if(!Fieldset.classList.contains("bothidden")) Fieldset.classList.add("bothidden");
});
HideBotButton.id = "hidebotbutton";
HideBotButton.className = "PaStec_ActionButton";
Target.appendChild(HideBotButton);
var ShowBotButton = PaStec_CreateInput("", PaStec_Texts.PaSShowBots, "button", false, false, function(){
if(Fieldset.classList.contains("bothidden")) Fieldset.classList.remove("bothidden");
});
ShowBotButton.id = "showbotbutton";
ShowBotButton.className = "PaStec_ActionButton";
Target.appendChild(ShowBotButton);
}
if(Target && foundip){
var HideIPButton = PaStec_CreateInput("", PaStec_Texts.PaSHideIPs, "button", false, false, function(){
if(!Fieldset.classList.contains("iphidden")) Fieldset.classList.add("iphidden");
});
HideIPButton.id = "hideipbutton";
HideIPButton.className = "PaStec_ActionButton";
Target.appendChild(HideIPButton);
var ShowIPButton = PaStec_CreateInput("", PaStec_Texts.PaSShowIPs, "button", false, false, function(){
if(Fieldset.classList.contains("iphidden")) Fieldset.classList.remove("iphidden");
});
ShowIPButton.id = "showipbutton";
ShowIPButton.className = "PaStec_ActionButton";
Target.appendChild(ShowIPButton);
}
});
},
/* </syntaxhighlight>
=====Avertissement projets =====
<syntaxhighlight lang=javascript> */
"PaSWarnProject" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSWarnProject");
if(!PanelContent) return;
var ProjectListForm = document.createElement('form');
PanelContent.appendChild(ProjectListForm);
var ProjectListLabel = PaStec_CreateLabel("project", PaStec_Texts.PaSWarnProjectProjects);
ProjectListForm.appendChild(ProjectListLabel);
ProjectListForm.appendChild(document.createTextNode(" : "));
var ProjectListOL = document.createElement('ol');
ProjectListOL.id = "ProjectListOL";
ProjectListForm.appendChild(ProjectListOL);
ProjectListOL.innerHTML = '<li><span class="error">'+PaStec_Texts.running+'</span></li>';
PaStec_getArticleProjects(false, function(){
ProjectListOL.innerHTML = '';
var Projects = PaStec_Projects;
for(var a=0,l=Projects.length;a<l;a++){
var Project = Projects[a];
var ProjectLi = document.createElement('li');
var ProjectLink = PaStec_createProjectLink(Project);
ProjectLi.appendChild(PaStec_CreateInput("project", Project, "checkbox", ProjectLink !== false));
ProjectLi.appendChild(document.createTextNode(" "));
ProjectLi.appendChild(PaStec_CreateLabel("project", ProjectLink ? ProjectLink :
'<span style="text-color:gray;"><s>' + Project + '</s> <small>(pas d\'annonce de débat d\'admissibilité)</small></span>'));
ProjectListOL.appendChild(ProjectLi);
}
var MoreLi = document.createElement('li');
MoreLi.appendChild(PaStec_CreateAddItemLink("project"));
ProjectListOL.appendChild(MoreLi);
});
},
/* </syntaxhighlight>
===== Message =====
<syntaxhighlight lang=javascript> */
"PaSMessage" : function(){
var PanelContent = PaStec_CreateNewMenuPanel("PaSMessage");
if(!PanelContent) return;
var TargetForm = document.createElement('form');
var TargetLabel = PaStec_CreateLabel("target", PaStec_Texts.PaSMessageTarget);
TargetForm.appendChild(TargetLabel);
TargetForm.appendChild(document.createTextNode(" : "));
TargetForm.appendChild(document.createElement("br"));
var TargetUL = document.createElement('ul');
TargetForm.appendChild(TargetUL);
for(var a=0,l=PaStec_DevTalkPages.length;a<l;a++){
var Target = PaStec_DevTalkPages[a];
var LI = document.createElement('li');
LI.appendChild(PaStec_CreateInput("target", Target, "text", false, true));
TargetUL.appendChild(LI);
}
PanelContent.appendChild(TargetForm);
var MessageForm = document.createElement('form');
var MessageField = document.createElement('textarea');
MessageField.setAttribute("rows", "8");
MessageField.name = "message";
var MessageLabel = PaStec_CreateLabel("message", PaStec_Texts.PaSMessageText);
MessageForm.appendChild(MessageLabel);
MessageForm.appendChild(document.createTextNode(" : "));
MessageForm.appendChild(MessageField);
PanelContent.appendChild(MessageForm);
}
};
/* </syntaxhighlight>
==== Mise en place du menu ====
<syntaxhighlight lang=javascript> */
window.PaStec_actionsLeft = 0; //compteur global
window.PaStec_CreatePaSMenu = function(){
if((mw.config.get('wgNamespaceNumber') % 2 !== 0) && (mw.config.get('wgTitle').match(/\/Admissibilité$/) !== null) ) { //PàS
if (!document.getElementById('talkpageheader')) {
$('<div class="mw-talkpageheader"><div id="talkpageheader"></div></div>').prependTo('#mw-content-text');
}
var TalkHeader = document.getElementById('talkpageheader');
var Fieldset = document.createElement('fieldset');
Fieldset.id = "PaStec_MainFieldset";
var Legend = document.createElement('legend');
var ShowHideLinks = ""
+ PaStec_createLink({url:"javascript:PaStec_ShowHideMenu(true);", text:PaStec_Texts.PaSLegendShow,classes:["showmenu"]})
+ PaStec_createLink({url:"javascript:PaStec_ShowHideMenu(false);",text:PaStec_Texts.PaSLegendHide,classes:["hidemenu"]});
var docLink = PaStec_createLink({url:PaStec_Texts.DocURL,text:PaStec_Texts.DocText});
Legend.innerHTML = PaStec_Texts.PaSLegend.split("$1").join(PaStec_Texts.ScriptName).split("$2").join(docLink).split("$3").join(ShowHideLinks);
Fieldset.appendChild(Legend);
var MainDiv = document.createElement('div');
MainDiv.id = "PaStec_MainContainer";
Fieldset.appendChild(MainDiv);
var PanelButtonsP = document.createElement('p');
PanelButtonsP.id = "PaStec_PanelButtons";
MainDiv.appendChild(PanelButtonsP);
TalkHeader.insertAdjacentElement('afterend', Fieldset);
for(var func in PaStec_CreateMenuPanelFunctions){
if(typeof(PaStec_CreateMenuPanelFunctions[func]) === "function" && ( func === "PaSWelcome" || PaStec_Enabled[func] === true || PaStec_DebugMode === true) )
PaStec_CreateMenuPanelFunctions[func]();
}
var ResizeAnchor = document.createElement('div');
ResizeAnchor.classList.add("PaStec_ResizeAnchor");
Fieldset.appendChild(ResizeAnchor);
PaStec_SetVerticalResizeZone(
ResizeAnchor,
$(Fieldset).find(".PaStec_PanelContent").toArray(),
MainDiv,
true
);
PaStec_DisableForms();
PaStec_ToggleMenuPanel();
PaStec_SetMenuPanelHeightsTimeout = setTimeout("PaStec_SetMenuPanelHeights()", 500);
PaStec_GetWhatlinkshere();
if(PaStec_AutoHideMenu) PaStec_ShowHideMenu(false);
}
};
PaStec_Load(PaStec_CreatePaSMenu);
/* </syntaxhighlight>
=== Validation du menu ===
==== Vérification des paramètres ====
<syntaxhighlight lang=javascript> */
window.PaStec_ValidateNeededParams = {
"PaSDelete" : [
{ name : "reason", mandatory : 1 },
{ name : "action", mandatory : 1 },
{ name : "redirects", mandatory : 0 }
],
"PaSSI" : [
{ name : "action", mandatory : 0 },
{ name : "redirects", mandatory : 0 }
],
"PaSUnwikify" : [
{ name : "redirects", mandatory : 0 },
{ name : "links", mandatory : 0 },
{ name : "imageusage", mandatory : 0 },
{ name : "categorymembers", mandatory : 0 }
],
"PaSKeep" : [
{ name : "reason", mandatory : 1 }
],
"PaSMerge" : [
{ name : "reason", mandatory : 1 },
{ name : "pages", mandatory : 2 },
{ name : "makerequest", mandatory : 0 }
],
"PaSMove" : [
{ name : "reason", mandatory : 1 },
{ name : "action", mandatory : 0 },
{ name : "newtitle", mandatory : 1, onlyif : "action" },
{ name : "redirects", mandatory : 0 }
],
"PaSRedirect" : [
{ name : "reason", mandatory : 1 },
{ name : "makeredir", mandatory : 0 },
{ name : "target", mandatory : 1, onlyif : "makeredir" },
{ name : "redirects", mandatory : 0 }
],
"PaSInit" : [
{ name : "definition", mandatory : 1 }
],
"PaSWarnUser" : [
{ name : "user", mandatory : 1 }
],
"PaSWarnProject" : [
{ name : "project", mandatory : 1 }
],
"PaSMessage" : [
{ name : "target", mandatory : 1 },
{ name : "message", mandatory : 1 }
]
};
window.PaStec_GetParamsInMenuPanel = function(Form, searchedname){
var Params = {};
var Tags = ["textarea", "select", "input"];
for(var a=0,l=Tags.length;a<l;a++){
var Elements = Form.getElementsByTagName(Tags[a]);
for(var b=0,m=Elements.length;b<m;b++){
var Element = Elements[b];
var ElName = Element.name;
if(!ElName) continue;
if(searchedname && ElName == searchedname) return Element;
var ElValue = Element.value;
var ElType = Element.type;
if(Tags[a].toLowerCase()=='input' && (ElType == "checkbox" || ElType == "radio") && Element.checked){
if(typeof(Params[ElName]) !== "undefined"){
if(typeof(Params[ElName]) !== "object") Params[ElName] = [ Params[ElName] ];
Params[ElName].push(ElValue);
}else Params[ElName] = ElValue;
}else if(Tags[a].toLowerCase()=='input' && (ElType == "text" || ElType == "hidden") && ElValue !== ""){
if(typeof(Params[ElName]) !== "undefined"){
if(typeof(Params[ElName]) !== "object") Params[ElName] = [ Params[ElName] ];
Params[ElName].push(ElValue);
}else Params[ElName] = ElValue;
}else if(Tags[a].toLowerCase()!='input' && ElValue !== ""){
if(typeof(Params[ElName]) !== "undefined"){
if(typeof(Params[ElName]) !== "object") Params[ElName] = [ Params[ElName] ];
Params[ElName].push(ElValue);
}else Params[ElName] = ElValue;
}
}
}
if(searchedname) return null;
return Params;
};
window.PaStec_StringEscape = function(str){
return "'" + (""+str).replace(/\\/g, '\\\\').replace(/[\\]+n/g, '\\n').replace(/'/g, "\\'") + "'";
};
window.PaStec_ObjectToString = function(obj){
var str = "{";
var items = [];
for(var itemname in obj){
var itemvalue = obj[itemname];
if(typeof(itemvalue) === "object") items.push(itemname+":"+PaStec_ObjectToString(itemvalue));
else if(typeof(itemvalue) === "string") items.push(itemname+":"+PaStec_StringEscape(itemvalue));
else items.push(itemname+":"+itemvalue);
}
str += items.join(",")+"}";
return str;
};
window.PaStec_fillControl = function(type, text){
var Control = document.getElementById("PaStec_Panel"+type+"Control");
if(Control) Control.innerHTML = (text || "");
};
window.PaStec_ValidateDone = function(type, text){
PaStec_fillControl(type, (text +"<br><small>"+ PaStec_Texts.running +"</small><br><small>"+ PaStec_Texts.maybeerror+"</small>"));
};
window.PaStec_GetCheckedParamsInMenuPanel = function(type){
var Menu = document.getElementById("PaStec_"+type+"Fieldset");
if(!Menu) return false;
PaStec_fillControl(type, "");
$(Menu).find('form.mandatory').removeClass("mandatory");
var NeededParams = PaStec_ValidateNeededParams[type];
var ParamsFound = PaStec_GetParamsInMenuPanel(Menu);
// alert( type + "\n" + PaStec_ObjectToString(ParamsFound) );
var errorsfound = false;
var error = false;
for(var a=0,l=NeededParams.length;a<l;a++){
error = false;
var mandatory = NeededParams[a].mandatory;
var onlyif = NeededParams[a].onlyif;
if(mandatory === 0) continue;
if(onlyif && !ParamsFound[onlyif]) continue;
var paramname = NeededParams[a].name;
var paramfound = ParamsFound[paramname];
if(!paramfound) error = true;
if(mandatory > 1 && typeof(paramfound) === "string") error = true;
else if(mandatory > 1 && typeof(paramfound) === "object" && paramfound.length < 2) error = true;
else if(mandatory === 1 && typeof(paramfound) === "string" && paramfound === "") error = true;
if(error){
errorsfound = true;
var thisinput = PaStec_GetParamsInMenuPanel(Menu, paramname);
var Form = thisinput.parentNode;
while(Form && Form.tagName && Form.tagName.toLowerCase() !== "form") Form = Form.parentNode;
if(Form && !Form.classList.contains("mandatory")) Form.classList.add("mandatory");
}
}
if(errorsfound){
PaStec_fillControl(type, '<span class="error">' + PaStec_Texts.PaSAlertMissingParam + '</span>');
return false;
}
return ParamsFound;
};
window.PaStec_RunningRequests = null;
window.PaStec_ValidateMenuPanel = function(type){
var Params = PaStec_GetCheckedParamsInMenuPanel(type);
if(!Params) return;
if(!PaStec_Enabled[type]){
return alert( PaStec_Texts.PaSDisabled + "\n\n" + type + "\n" + PaStec_ObjectToString(Params) );
}
if(typeof(PaStec_ValidateFunctions[type]) === "function"){
PaStec_RunningRequests = type;
PaStec_ValidateFunctions[type](type, Params);
}
};
/* </syntaxhighlight>
==== Fonctions de requêtes principales ====
<syntaxhighlight lang=javascript> */
window.PaStec_ValidateFunctions = {
/* </syntaxhighlight>
===== Clôture en suppression =====
<syntaxhighlight lang=javascript> */
"PaSDelete" : function(type, Params){ // ["reason", "action", "redirects"]
PaStec_preventEditConflict(function() {
var page = PaStec_getPageName();
var delpage = mw.config.get('wgPageName');
PaStec_updatePaS(PaStec_Texts.DeletePaSType, Params.reason);
PaStec_updatePaSMainPage(PaStec_Texts.DeleteMainType);
if(Params.action === "Delete"){
var reason = PaStec_Texts.DeleteComment.split("$delpage").join(delpage);
PaStec_deletePage(page, reason);
PaStec_deletePage(PaStec_getDiscussionPageName(), reason);
var redirects = Params.redirects;
if(redirects){
if(typeof(redirects)==="string") redirects = [ redirects ];
for(var a=0,l=redirects.length;a<l;a++){
PaStec_deletePage(redirects[a], PaStec_Texts.DelRedirComment.split("$1").join(delpage));
}
}
PaStec_ValidateDone(PaStec_Texts.DeleteDoHeader);
}else if(Params.action === "AskSI"){
PaStec_editPage(
page,
PaStec_ReplaceDeleteTemplateRegExp,
PaStec_Texts.AskSIpage_Template.split("$reason").join("[["+delpage+"]]"),
PaStec_Texts.AskSIpageComment.split("$reason").join("[["+delpage+"]]")
);
PaStec_editPage(
PaStec_Texts.SIPageName,
">",
"\n\n"+PaStec_Texts.PASaskSITemplate.split("$page").join(page).split("$delpage").join(delpage),
PaStec_Texts.PASaskSIComment.split("$page").join(page).split("$delpage").join(delpage)
);
PaStec_ValidateDone(PaStec_Texts.DeleteAskHeader);
}else{
PaStec_ValidateDone(PaStec_Texts.DeleteHeader);
}
});
},
/* </syntaxhighlight>
===== Clôture suite à SI =====
<syntaxhighlight lang=javascript> */
"PaSSI" : function(type, Params){ // ["action","redirects"]
PaStec_preventEditConflict(function() {
var Funcs = {
onmissing : function(){
PaStec_editPage(
mw.config.get('wgPageName'),
PaStec_Texts.SIPaSTarget,
PaStec_Texts.SIPaSTemplate+"\n\n"+PaStec_Texts.SIPaSTarget,
PaStec_Texts.SIPaSComment.split("$1").join(mw.config.get('wgPageName'))
);
PaStec_updatePaSMainPage(PaStec_Texts.SIMainType);
if(Params.action === "DelRedir" && Params.redirects){
if(typeof(redirects)==="string") redirects = [ redirects ];
for(var a=0,l=redirects.length;a<l;a++){
PaStec_deletePage(redirects[a], PaStec_Texts.DelRedirComment.split("$1").join(mw.config.get('wgPageName')));
}
}
PaStec_ValidateDone(PaStec_Texts.SIHeader);
},
onredirect : function(){
alert(PaStec_Texts.SIPaSErrorExists);
},
onrealpage : function(){
alert(PaStec_Texts.SIPaSErrorExists);
}
};
PaStec_doOnPageContition(PaStec_getPageName(),Funcs);
});
},
/* </syntaxhighlight>
===== Déwikification =====
<syntaxhighlight lang=javascript> */
"PaSUnwikify" : function(type, Params){
PaStec_ValidateThisDiff(type);
},
/* </syntaxhighlight>
===== Clôture en conservation =====
<syntaxhighlight lang=javascript> */
"PaSKeep" : function(type, Params){ // ["reason"]
PaStec_preventEditConflict(function() {
PaStec_editPage(
PaStec_getPageName(),
PaStec_RemoveDeleteTemplateRegExp,
"",
PaStec_Texts.PASkeepPageComment.split("$page").join(PaStec_getPageName()).split("$delpage").join(mw.config.get('wgPageName'))
);
PaStec_editPageWithoutTests(
PaStec_getDiscussionPageName(),
"<",
PaStec_Texts.PASkeepTalkTemplate+"\n",
PaStec_Texts.PASkeepTalkComment.split("$page").join(PaStec_getPageName()).split("$delpage").join(mw.config.get('wgPageName')),
true
);
PaStec_updatePaS(PaStec_Texts.PASkeepPaSType, Params.reason);
PaStec_updatePaSMainPage(PaStec_Texts.PASkeepMainType);
PaStec_ValidateDone(PaStec_Texts.PASkeepHeader);
});
},
/* </syntaxhighlight>
===== Clôture en fusion =====
<syntaxhighlight lang=javascript> */
"PaSMerge" : function(type, Params){ // ["reason","pages","makerequest"]
function ArrDeleteEl(arr, todelete){
var newarr = [];
for(var a=0,l=arr.length;a<l;a++){
if(a !== todelete) newarr.push(arr[a]);
}
return newarr;
}
PaStec_preventEditConflict(function(){
var allpages = Params.pages;
var lastpage = allpages[(allpages.length-1)];
var firstpages = ArrDeleteEl(allpages, (allpages.length-1));
var delpage = mw.config.get('wgPageName').replace(/_/g, " ");
var bandeau = PaStec_Texts.MergeTemplate.split("$1").join(firstpages.join("]], [[")).split("$2").join(lastpage).split("$reason").join(Params.reason);
PaStec_editPage(
mw.config.get('wgPageName'),
PaStec_Texts.MergePaSTarget,
bandeau+"\n\n"+PaStec_Texts.MergePaSTarget,
PaStec_Texts.MergePaSComment.split("$1").join(delpage)
);
PaStec_updatePaSMainPage(PaStec_Texts.MergeMainType);
if(Params.makerequest) {
PaStec_editPage(
PaStec_Texts.DoMergeMainPageName,
">",
"\n\n"+PaStec_Texts.DoMergeMainPageTemplate.split("$1").join(firstpages.join("]], [[:")).split("$2").join(lastpage).split("$3").join(delpage),
PaStec_Texts.DoMergeMainPageComment.split("$1").join(firstpages.join("]], [[")).split("$2").join(lastpage).split("$3").join(delpage)
);
var thispage, otherpages, MergeComment;
var MergeTemplate = PaStec_Texts.DoMergePagesTemplate.split("$1").join(firstpages.join("|")).split("$2").join(lastpage);
for(var a=0,l=allpages.length;a<l;a++){
thispage = allpages[a];
otherpages = ArrDeleteEl(allpages, a);
if(a === 0){
MergeComment = PaStec_Texts.DoMergePage1Comment.split("$1").join(otherpages.join("]], [[")).split("$2").join(delpage);
PaStec_editPage(
thispage,
PaStec_ReplaceDeleteTemplateRegExp,
MergeTemplate,
MergeComment
);
}else{
MergeComment = PaStec_Texts.DoMergePagesComment.split("$1").join(otherpages.join("]], [[")).split("$2").join(delpage);
PaStec_editPage(
thispage,
"<",
MergeTemplate + "\n",
MergeComment
);
}
}
PaStec_ValidateDone(PaStec_Texts.DoMergeHeader);
}else{
PaStec_ValidateDone(PaStec_Texts.MergeHeader);
}
});
},
/* </syntaxhighlight>
===== Clôture en renommage =====
<syntaxhighlight lang=javascript> */
"PaSMove" : function(type, Params){ // ["reason","action","newtitle","redirects"]
PaStec_preventEditConflict(function() {
PaStec_updatePaS(PaStec_Texts.MovePaSType, Params.reason);
PaStec_updatePaSMainPage(PaStec_Texts.MoveMainType);
PaStec_editPage(
PaStec_getPageName(),
PaStec_RemoveDeleteTemplateRegExp,
"",
PaStec_Texts.MovePageComment.split("$1").join(PaStec_getPageName()).split("$2").join(mw.config.get('wgPageName'))
);
if(Params.action === "Move"){
PaStec_movePage(PaStec_getPageName(), Params.newtitle, Params.reason);
var doubleredirects = Params.redirects;
if(doubleredirects){
if(typeof(doubleredirects)==="string") doubleredirects = [ doubleredirects ];
for(var a=0,l=doubleredirects.length;a<l;a++){
PaStec_editPageWithoutTests(
doubleredirects[a],
'*',
'#REDIRECTION [['+Params.newtitle+']]',
PaStec_Texts.RedirectCorrComment.split("$1").join(Params.newtitle).split("$2").join(mw.config.get('wgPageName'))
);
}
}
PaStec_ValidateDone(PaStec_Texts.MoveDoHeader);
}else if(Params.action === "Ask"){
PaStec_editPage(
PaStec_Texts.MovePageName,
">",
"\n\n"+PaStec_Texts.MoveMainTemplate.split("$old").join(PaStec_getPageName()).split("$new").join(Params.newtitle).split("$delpage").join(mw.config.get('wgPageName')),
PaStec_Texts.MoveMainPageComment
);
PaStec_ValidateDone(PaStec_Texts.MoveAskHeader);
}else{
PaStec_ValidateDone(PaStec_Texts.MoveHeader);
}
});
},
/* </syntaxhighlight>
===== Clôture en redirection =====
<syntaxhighlight lang=javascript> */
"PaSRedirect" : function(type, Params){ // ["reason","makeredir","target","redirects"]
PaStec_preventEditConflict(function() {
PaStec_updatePaS(PaStec_Texts.RedirectPaSType, Params.reason);
PaStec_updatePaSMainPage(PaStec_Texts.RedirectMainType);
if(Params.makeredir) {
PaStec_editPage(
PaStec_getPageName(),
'*',
'#REDIRECTION [['+Params.target+']]',
PaStec_Texts.RedirectPageComment.split("$1").join(Params.target).split("$2").join(mw.config.get('wgPageName'))
);
var doubleredirects = Params.redirects;
if(doubleredirects){
if(typeof(doubleredirects)==="string") doubleredirects = [ doubleredirects ];
for(var a=0,l=doubleredirects.length;a<l;a++){
PaStec_editPageWithoutTests(
doubleredirects[a],
'*',
'#REDIRECTION [['+Params.target+']]',
PaStec_Texts.RedirectCorrComment.split("$1").join(Params.target).split("$2").join(mw.config.get('wgPageName'))
);
}
}
PaStec_ValidateDone(PaStec_Texts.RedirectDoHeader);
}else{
PaStec_ValidateDone(PaStec_Texts.RedirectHeader);
}
});
},
/* </syntaxhighlight>
===== Initialisation d'une PaS =====
<syntaxhighlight lang=javascript> */
"PaSInit" : function(type, Params){ // ["definition"]
PaStec_preventEditConflict(function() {
var page = PaStec_getPageName();
var d = new Date();
var day = d.getDate();
var year = d.getFullYear();
var months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
var month = months[d.getMonth()];
var target = PaStec_Texts.KirMainTarget.split("$day").join(day).split("$month").join(month).split("$year").join(year);
PaStec_editPage(
PaStec_Texts.PaSMainPageName,
target,
target+"\n"+PaStec_Texts.KirMainTemplate.split("$page").join(page).split("$definition").join(Params.definition),
PaStec_Texts.KirMainComment.split("$page").join(page).split("$delpage").join(mw.config.get('wgPageName'))
);
var pagefortemplate = PaStec_getPageName();
var template;
if (pagefortemplate.search(/Modèle:/) != -1) {
template = PaStec_Texts.DeleteTemplateNI;
} else {
template = PaStec_Texts.DeleteTemplate;
}
PaStec_editPageWithoutTests(
page,
PaStec_RemoveAdmitTemplateRegExp,
template,
PaStec_Texts.KirPageComment
);
PaStec_ValidateDone(PaStec_Texts.KirHeader);
});
},
/* </syntaxhighlight>
===== Avertissement utilisateur =====
<syntaxhighlight lang=javascript> */
"PaSWarnUser" : function(type, Params){ // ["user"]
var page = PaStec_getPageName();
var users = Params.user;
if(typeof(users) === "string") users = [ users ];
for(var a=0,l=users.length;a<l;a++){
PaStec_editPdd(mw.config.get('wgFormattedNamespaces')[3]+":"+users[a],page);
}
alert(PaStec_Texts.Flow);
PaStec_ValidateDone(PaStec_Texts.WarnUserHeader);
},
/* </syntaxhighlight>
===== Avertissement projet =====
<syntaxhighlight lang=javascript> */
"PaSWarnProject" : function(type, Params){ // ["project"]
if(typeof(PaStec_WarnedProjects)==="undefined") window.PaStec_WarnedProjects = {};
var projects = Params.project;
if(typeof(projects) === "string") projects = [ projects ];
PaStec_populateTalkPagesMap(projects, function() {
var page = PaStec_getPageName();
for(var a=0,l=projects.length;a<l;a++){
var StandardPage = PaStec_getProjectTalkPage(projects[a]);
if (StandardPage !== '' && !PaStec_WarnedProjects[StandardPage]) {
PaStec_doOnPageContition(StandardPage, {
onredirect : function(redirecttarget){
if(!PaStec_WarnedProjects[redirecttarget]){
PaStec_WarnedProjects[redirecttarget] = true;
PaStec_ValidateFunctions["PaSWarnThisProject"](redirecttarget);
}
},
onrealpage : function(title){
PaStec_ValidateFunctions["PaSWarnThisProject"](title);
}
});
}
}
PaStec_ValidateDone(PaStec_Texts.WarnProjectHeader);
});
},
"PaSWarnThisProject" : function(targetpage){
var page = PaStec_getPageName();
var foundspecialproject = false;
for(var sp=0,splen=PaStec_ProjectSpecialTalkPage.length;sp<splen;sp++){
var ThisSpecialProject = PaStec_ProjectSpecialTalkPage[sp];
var Reg = ThisSpecialProject.regexp;
if(targetpage.search(Reg) !== -1){
foundspecialproject = true;
var template = ThisSpecialProject.template;
var projectpage = ThisSpecialProject.page;
if(!template){
PaStec_editPdd(projectpage,page);
alert(PaStec_Texts.Flow);
}else{
PaStec_editPage(
projectpage,
">",
"\n\n"+template.split("$page").join(page)+"\n",
PaStec_Texts.WarnComment.split("$page").join(page)
);
}
}
}
if(!foundspecialproject){
PaStec_editPdd(targetpage,page);
alert(PaStec_Texts.Flow);
}
},
/* </syntaxhighlight>
===== Message =====
<syntaxhighlight lang=javascript> */
"PaSMessage" : function(type, Params){ // ["target", "message"]
var target = Params.target;
if(typeof(target) === "string") target = [ target ];
for(var a=0,l=target.length;a<l;a++){
PaStec_editPage(
target[a],
">",
"\n\n"+PaStec_Texts.MessageTemplate.split("$1").join(Params.message),
PaStec_Texts.MessageComment
);
}
PaStec_ValidateDone(PaStec_Texts.MessageHeader);
}
};
/* </syntaxhighlight>
==== Fonctions de requêtes secondaires ====
<syntaxhighlight lang=javascript> */
function PaStec_preventEditConflict(Callback) {
if(!mw.config.get('wgArticleId')) return Callback(); // La page de suppression n'existe pas : pas de conflit possible
var query = {format: 'json', action: 'query', prop: 'revisions', titles: mw.config.get( 'wgPageName' ), rvprop: 'ids|user|comment'};
$.getJSON(mw.util.wikiScript('api'), query, function(obj) {
var last = obj.query.pages[mw.config.get('wgArticleId')]['revisions'][0];
var notlastmess = PaStec_Texts.ErrorConflict.split("$user").join(last.user).split("$comment").join(last.comment);
if(last.revid == mw.config.get('wgRevisionId') || confirm(notlastmess) ){
Callback();
}
});
}
function PaStec_doOnPageContition(pagename, Callbacks) {
new mw.Api().get({action : 'query', prop : ['info','revisions'], rvprop : 'content', titles : pagename}).then(function(data) {
var pages = data.query.pages;
for(var id in pages){
var thispage = pages[id];
var isMissing = (thispage.missing === "");
if(isMissing){
if(typeof(Callbacks.onmissing)==="function") Callbacks.onmissing();
return;
}
var isRedirect = (thispage.redirect === "");
if(isRedirect){
var Rev = thispage.revisions[0];
var Text = Rev["*"];
if(Text){
var redirecttarget = Text.split("]]")[0].split("[[")[1];
if(typeof(Callbacks.onredirect)==="function") Callbacks.onredirect(redirecttarget);
}
return;
}
if(typeof(Callbacks.onrealpage)==="function") return Callbacks.onrealpage(pagename);
}
});
}
/* </syntaxhighlight>
===== Mise à jour du débat d'admissibilité =====
<syntaxhighlight lang=javascript> */
function PaStec_updatePaS(type, reason){
var bandeau = PaStec_Texts.TagTemplate.split("$type").join(type).split("$reason").join(reason);
PaStec_editPage(
mw.config.get('wgPageName'),
PaStec_Texts.TagTarget,
bandeau+"\n\n"+PaStec_Texts.TagTarget,
PaStec_Texts.TagComment.split("$page").join(PaStec_getPageName()).split("$type").join(type).split("$delpage").join(mw.config.get('wgPageName'))
);
}
/* </syntaxhighlight>
===== Mise à jour de la page centrale ([[Wikipédia:Débat d'admissibilité]]) =====
<syntaxhighlight lang=javascript> */
function PaStec_updatePaSMainPage(type){
PaStec_editPage(
PaStec_Texts.PaSMainPageName,
new RegExp(PaStec_Texts.PASstoreRegExp.split("$escpage$").join(PaStec_RegEscape(PaStec_getPageName()))),
PaStec_Texts.PASstoreTemplate.split("$type").join(type),
PaStec_Texts.PASstoreComment.split("$page").join(PaStec_getPageName()).split("$type").join(type).split("$delpage").join(mw.config.get('wgPageName'))
);
}
/* </syntaxhighlight>
===== Fonctions pour la déwikification =====
<syntaxhighlight lang=javascript> */
window.PaStec_CheckNextPage = function(type){
var OldLink = document.getElementById("currentdiff_"+type);
if(OldLink){
var Li = OldLink.parentNode;
var NextLi = Li.nextElementSibling;
if(NextLi) return PaStec_CheckThisPage(NextLi.getElementsByTagName('a')[0]);
}
var Fieldset = document.getElementById("PaStec_"+type+"Fieldset");
if(!Fieldset) return;
OldLink = document.getElementById("currentdiff_"+type);
if(OldLink) OldLink.classList.add("modified");
var Form = Fieldset.getElementsByClassName("PaStec_Whatlinkshere_links")[0];
if(!Form) Form = Fieldset.getElementsByClassName("PaStec_Whatlinkshere_imageusage")[0];
if(!Form) Form = Fieldset.getElementsByClassName("PaStec_Whatlinkshere_categories")[0];
if(!Form) return;
var LinkLists = Form.getElementsByTagName('ul');
for(var a=0,l=LinkLists.length;a<l;a++){
var AllLinks = LinkLists[a].getElementsByTagName('a');
for(var link=0,linklen=AllLinks.length;link<linklen;link++){
var Link = AllLinks[link];
if(!Link.classList.contains("modified") && !Link.classList.contains("cannotmodify")) return PaStec_GetThisDiff(Link, type, Link.title);
}
}
};
window.PaStec_CheckThisPage = function(Link){
if(Link.classList.contains("modified")) return;
var Page = Link.title;
var parent = Link.parentNode;
while(parent && parent.tagName.toLowerCase() !== "fieldset"){ parent = parent.parentNode; }
if(!parent.id) return;
var type = parent.id.split("PaStec_").join("").split("Fieldset").join("");
PaStec_GetThisDiff(Link, type, Page);
};
window.PaStec_getParentForm = function(el){
var parent = el.parentNode;
while(parent && parent.tagName.toLowerCase() !== "form"){ parent = parent.parentNode; }
return parent;
};
window.PaStec_getElementWithId = function(elementId, elementParentNode){
if(!elementParentNode) elementParentNode = document.body;
if (elementParentNode.getElementById) return elementParentNode.getElementById(elementId);
return elementParentNode.querySelector('#' + elementId);
};
window.PaStec_CanValidate = false;
window.PaStec_GetThisDiff = function(Link, type, Page){
var Diff = PaStec_ClearDiff(type);
PaStec_CanValidate = false;
if(!Diff) return;
var OldLink = document.getElementById("currentdiff_"+type);
if(OldLink){ OldLink.id = "";
if(!OldLink.classList.contains("cannotmodify") && !OldLink.classList.contains("unmodified")) OldLink.classList.add("unmodified");
}
Link.id = "currentdiff_"+type;
Link.focus();
var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(Page) + "&action=submit";
$.ajax({ url : URL, complete : function(editReq){
PaStec_CanValidate = false;
var HtmlDoc = new DOMParser().parseFromString(editReq.responseText, 'text/html');
var TextArea = PaStec_getElementWithId("wpTextbox1", HtmlDoc);
var wpSummary = PaStec_getElementWithId("wpSummary", HtmlDoc);
var wpSave = PaStec_getElementWithId("wpSave", HtmlDoc);
if(!wpSave){
Link.classList.add("cannotmodify");
PaStec_fillControl(type, PaStec_Texts.isProtected.split("$1").join(Page));
PaStec_CheckNextPage(type);
return;
}
var OldText = TextArea.value;
var Datas = { text : OldText, summary : "" };
Datas = PaStec_TextUnwikify(Datas, type);
if(Datas.text === OldText){
Link.classList.add("cannotmodify");
PaStec_fillControl(type, PaStec_Texts.cannotUnwikify.split("$1").join(Page));
PaStec_CheckNextPage(type);
return;
}
PaStec_fillControl(type);
Diff.classList.remove("PaStec_EmptyDiffPreview");
TextArea.value = Datas.text;
wpSummary.value = Datas.summary;
var H = document.createElement("h2");
H.innerHTML = PaStec_Texts.PaSUnwikifyRunning.split("$1").join(Page);
Diff.appendChild(H);
var SummaryDiv = document.createElement('div');
SummaryDiv.className = "summarydiv";
SummaryDiv.innerHTML = PaStec_Texts.PaSUnwikifySummary.split("$1").join('<span class="summaryspan">'+Datas.summary+'</span>');
Diff.appendChild(SummaryDiv);
var DiffDiv = document.createElement('div');
DiffDiv.innerHTML = '<span class="error">'+PaStec_Texts.running+'</span>';
Diff.appendChild(DiffDiv);
var Params = PaStec_GetParamsInMenuPanel(PaStec_getParentForm(TextArea));
var ParamsInURL = [];
for(var P in Params){
if(typeof(Params[P])=="string") ParamsInURL.push(P+"="+encodeURIComponent(Params[P]));
}
ParamsInURL = (ParamsInURL.join("&")+"&wpDiff=1");
$.ajax({
url : PaStec_getParentForm(TextArea).getAttribute("action")+"&wpDiff=1",
method : "POST",
headers : {'Content-Type':'application/x-www-form-urlencoded'},
data : ParamsInURL,
complete : function(diffReq){
PaStec_ClearDiff(type);
var HtmlDoc = new DOMParser().parseFromString(diffReq.responseText, 'text/html');
H = document.createElement("h2");
H.innerHTML = PaStec_Texts.PaSUnwikifyRunning.split("$1").join(Page);
Diff.appendChild(H);
SummaryDiv = document.createElement('div');
SummaryDiv.className = "summarydiv";
SummaryDiv.innerHTML = PaStec_Texts.PaSUnwikifySummary.split("$1").join('<span class="summaryspan">'+Datas.summary+'</span>');
Diff.appendChild(SummaryDiv);
DiffDiv = document.createElement('div');
Diff.appendChild(DiffDiv);
var Content = PaStec_getElementWithId("mw-content-text", HtmlDoc);
DiffDiv.innerHTML = Content.innerHTML;
var TitleInput = document.createElement('input')
TitleInput.name = "wpTitle";
TitleInput.value = Page;
DiffDiv.appendChild(TitleInput);
Diff.classList.remove("PaStec_EmptyDiffPreview");
Link.blur();
TitleInput.focus();
TitleInput.type = "hidden";
PaStec_CanValidate = true;
}
});
}});
};
window.PaStec_ValidateThisDiff = function(type){
var Diff = document.getElementById("PaStec_DiffPreview_"+type);
if(!Diff) return;
if(!PaStec_CanValidate) return PaStec_CheckNextPage(type);
var wpSave = PaStec_getElementWithId("wpSave", Diff);
if(!wpSave) return;
PaStec_CanValidate = false;
var Link = document.getElementById("currentdiff_"+type);
if(Link){
Link.classList.remove("cannotmodify");
Link.classList.remove("unmodified");
Link.classList.add("modified");
}
var Params = PaStec_GetParamsInMenuPanel(Diff);
var Tag = PaStec_gettag();
var requestEditData = ''
+ 'title=' + encodeURIComponent(Params.wpTitle)
+ '&text=' + encodeURIComponent(Params.wpTextbox1)
+ '&token=' + encodeURIComponent(Params.wpEditToken)
+ '&summary=' + encodeURIComponent( (Tag ? '' : PaStec_Texts.commentTag) + Params.wpSummary)
+ '&starttimestamp=' + encodeURIComponent(Params.wpStarttime)
+ '&basetimestamp=' + encodeURIComponent(Params.wpEdittime)
+ '&watchlist=nochange';
if(Tag) requestEditData += "&tags="+encodeURIComponent(Tag);
var headers = [];
headers['Content-Type'] = 'application/x-www-form-urlencoded';
PaStec_actionsLeft++;
PaStec_ajax.http({
retry:3,
url: mw.util.wikiScript('api') + '?format=xml&action=edit',
method: "POST",
headers: headers,
data: requestEditData,
onFailure: PaStec_failureAlert,
onSuccess:function(Req, data){
PaStec_confirmExecuted(Req, data);
PaStec_CheckNextPage(type);
}
});
PaStec_ValidateDone(type, PaStec_Texts.UnwikifyHeader.split("$1").join(Params.wpTitle));
};
window.PaStec_TextUnwikify = function(Datas, type){
var Params = PaStec_GetCheckedParamsInMenuPanel(type); // ["redirects","links","imageusage","categorymembers"]
if(!Params) return;
var text = Datas.text;
var summary = Datas.summary;
var redirects = Params.redirects;
if(!redirects) redirects = [];
if(typeof(redirects) === "string") redirects = [ redirects ];
var thispage = PaStec_getPageName();
redirects.push(thispage);
var catdelete = false, filedelete = false, linkdelete = false;
for(var a=0,l=redirects.length;a<l;a++){
var linktocheck = redirects[a];
var isFilelink = (linktocheck.indexOf(mw.config.get('wgFormattedNamespaces')[6]) === 0);
var isCatlink = (linktocheck.indexOf(mw.config.get('wgFormattedNamespaces')[14]) === 0);
if(isCatlink){ // ---------------------------------------------- Catégories
var REGEXP = PaStec_CreateCatRegExp(linktocheck);
var matches = text.match(REGEXP);
if(matches !== null){
catdelete = true;
for(var m=0,mlen=matches.length;m<mlen;m++){
text = text.replace(matches[m], "");
}
}
}else if(isFilelink){ // --------------------------------------- Images
var FileTag = "__FILENAME__";
var REGEXP = PaStec_CreateFileRegExp(linktocheck);
var matches = text.match(REGEXP);
if(matches !== null){
for(var m=0,mlen=matches.length;m<mlen;m++){
text = text.replace(matches[m], FileTag);
}
// --------------------------------------------------------------------------------------- Images dans infobox ou autre modèle
var REGEXPTemplate = new RegExp("=( )*"+FileTag+"( )*[^\\|\\}\n]*[\n\\|\\}]{1}", "g");
var matchesT = text.match(REGEXPTemplate);
if(matchesT !== null){
filedelete = true;
for(var m=0,mlen=matchesT.length;m<mlen;m++){
var thismatch = matchesT[m];
var Value = "="+thismatch.replace(/=[^\\|\\}\n]*/g, "");
text = text.replace(thismatch, Value);
}
}
// --------------------------------------------------------------------------------------- Galeries d'images
var REGEXPGalleryStart = new RegExp("<gallery[^>]*>", "g");
var REGEXPGalleryEnd = new RegExp("</gallery", "g");
var textisgallery = false;
var parttodelete = [];
var textsplit = text.split("\n");
for(var a=0,l=textsplit.length;a<l;a++){
var thistextpart = textsplit[a];
var galstart = (thistextpart.match(REGEXPGalleryStart) !== null);
var galend = (thistextpart.match(REGEXPGalleryEnd) !== null);
var filefound = (thistextpart.indexOf(FileTag) !== -1);
if(galstart && galend && !filefound) continue;
if(filefound){
filedelete = true;
if(galstart && !galend){
var gallerytag = thistextpart.match(REGEXPGalleryStart);
textsplit[a] = gallerytag[0];
textisgallery = true;
continue;
}
if(!galstart && galend){
textsplit[a] = '</gallery>';
textisgallery = false;
continue;
}
if(galstart && galend){
parttodelete.push(a);
continue;
}
if(!galstart && !galend && textisgallery){
parttodelete.push(a);
continue;
}
}else{
if(galstart && !galend) textisgallery = true;
if(!galstart && galend) textisgallery = false;
continue;
}
}
var newtext = [];
for(var a=0,l=textsplit.length;a<l;a++){
if(parttodelete.indexOf(a) === -1) newtext.push(textsplit[a]);
}
text = newtext.join("\n");
// --------------------------------------------------------------------------------------- Images "thumb"
var REGEXPThumbStart = new RegExp("\\[\\["+FileTag,"g");
var matchesTh = text.match(REGEXPThumbStart);
if(matchesTh !== null){
filedelete = true;
for(var m=0,mlen=matchesTh.length;m<mlen;m++){
text = text.replace(matchesTh[m], FileTag);
}
textsplit = text.split(FileTag);
for(var a=1,l=textsplit.length;a<l;a++){
var thispart = textsplit[a];
var NextClosure = thispart.indexOf("]]");
var NextLinkStart = thispart.indexOf("[[");
if(NextLinkStart === -1) thispart = thispart.substring(NextClosure+2);
else{
while(NextLinkStart !== -1 && NextClosure !== -1 && NextLinkStart < NextClosure){
thispart = thispart.substring(NextClosure+2);
NextClosure = thispart.indexOf("]]");
NextLinkStart = thispart.indexOf("[[");
}
if(NextLinkStart === -1 || NextLinkStart > NextClosure) thispart = thispart.substring(NextClosure+2);
}
thispart = FileTag + thispart;
thispart = thispart.split(FileTag+"\n").join("");
thispart = thispart.split(FileTag).join("");
textsplit[a] = thispart;
}
text = textsplit.join("");
}
}
}else{ // ----------------------------------------------------- Liens
var REGEXP = PaStec_CreateLinkRegExp(linktocheck);
var matches = text.match(REGEXP);
if(matches !== null){
linkdelete = true;
for(var m=0,mlen=matches.length;m<mlen;m++){
var linktext = matches[m].replace(/\[\[([^|]*\|)?(.*)\]\]/, '$2');
text = text.replace(matches[m], linktext);
}
}
}
}
var delpage = mw.config.get('wgPageName');
if(linkdelete) summary += (summary === "" ? "" : " ; ") + PaStec_Texts.RemoveLinkComment.split("$1").join(thispage).split("$2").join(delpage);
if(catdelete) summary += (summary === "" ? "" : " ; ") + PaStec_Texts.RemoveCatComment.split("$1").join(thispage).split("$2").join(delpage);
if(filedelete) summary += (summary === "" ? "" : " ; ") + PaStec_Texts.RemoveFileComment.split("$1").join(thispage).split("$2").join(delpage);
Datas.summary = summary;
Datas.text = text;
return Datas;
};
window.PaStec_CreateLinkRegExp = function(Page){
var NS = PaStec_getNamespaceInfoFromPage(Page, "NamespaceName");
var Title = PaStec_getNamespaceInfoFromPage(Page, "PageName");
if(NS) NS = "(" + NS.PaStec_ucFirst() + "|" + NS.PaStec_lcFirst() + ")*( |_)*:( |_)*";
Title = (PaStec_CaseSensitive ? PaStec_CreateRegExp(Title) : "("+PaStec_CreateRegExp(Title.PaStec_ucFirst())+"|"+PaStec_CreateRegExp(Title.PaStec_lcFirst())+")" );
return (new RegExp("\\[\\[( |_)*" + NS + Title + "( |_)*((\\#|\\|)[^\\]]*)?\\]\\]", "g"));
};
window.PaStec_CreateFileRegExp = function(File){
var NS = mw.config.get('wgFormattedNamespaces')[6];
var NSString = [ NS.PaStec_ucFirst(), NS.PaStec_lcFirst(), "File", "file", "Image", "image" ];
NSString = "("+NSString.join("|")+")?( )*:?";
var Title = PaStec_getNamespaceInfoFromPage(File, "PageName");
Title = (PaStec_CaseSensitive ? PaStec_CreateRegExp(Title) : "("+PaStec_CreateRegExp(Title.PaStec_ucFirst())+"|"+PaStec_CreateRegExp(Title.PaStec_lcFirst())+")" );
return (new RegExp(NSString+Title, "g"));
};
window.PaStec_CreateCatRegExp = function(Cat){
var NS = mw.config.get('wgFormattedNamespaces')[14];
NS = NS.PaStec_ucFirst() + "|" + NS.PaStec_lcFirst();
var Title = Cat.replace(new RegExp("^("+NS+"):"), "");
Title = (PaStec_CaseSensitive ? PaStec_CreateRegExp(Title) : PaStec_CreateRegExp(Title.PaStec_ucFirst())+"|"+PaStec_CreateRegExp(Title.PaStec_lcFirst()) );
return (new RegExp("(\\s?)\\[\\[( |_)*("+NS+")( |_)*:( |_)*(" + Title + ")( |_)*(\\|[^\\]]*)?\\]\\]", "g"));
};
window.PaStec_CreateRegExp = function(Page){
return mw.util.escapeRegExp(Page).replace(/(( |_)+)/g, "( |_)+");
};
/* </syntaxhighlight> */