Projet:Herpétologie/gadgets/Synonyme.js
//
//
/* Permet de créer le synonyme a partir de l'espèce la structure du code et la plupart du code de ce gadget vient du gadget [[MediaWiki:Gadget-OuvrageArticle.js]] (brillamment) developpé par [[Utilisateur:Dr Brains]] */ // ------------------------------------------------------ Modèles par défaut var Synonym_Template = "#REDIRECTION [[ESPECE@]]\n" +"[[Catégorie:CATEGORIE@]]\n" +"[[Catégorie:FAMILLE@]]" // ------------------------------------------------------ Lancement if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ) addOnloadHook(Synonyme_AddButton); // ------------------------------------------------------ Ajout du bouton function Synonyme_AddButton(){ if(!document.editform) return; var Toolbar = document.getElementById('toolbar'); if(!Toolbar){ Toolbar = document.createElement('div'); Toolbar.id = 'toolbar'; document.editform.insertBefore(Toolbar, document.editform.firstChild); } var button = '<img src="http://upload.wikimedia.org/wikipedia/commons/1/1b/Button_renommer.png" heigth="23" width="23" alt="Synonyme" />'; var NewButton = document.createElement('a') NewButton.title = "Créer un synonyme"; NewButton.href="javascript:Synonyme_OpenMenu();"; NewButton.innerHTML = button; Toolbar.appendChild(NewButton); } // ------------------------------------------------------ Création du menu function Synonyme_OpenMenu(){ var Toolbar = document.getElementById('toolbar'); if(!Toolbar) Toolbar = document.getElementById("Oldbar"); var MenuDiv = document.getElementById('Synonyme'); if(MenuDiv){ return; }else{ MenuDiv = document.createElement('div'); MenuDiv.id = 'Menu_Synonyme'; $(MenuDiv).insertAfter(Toolbar); } var TextArea = document.createElement('textarea'); TextArea.id = 'Menu_Synonyme_Input'; TextArea.rows = 5; var InputOK = document.createElement('input'); InputOK.type = "button"; InputOK.value = "Créer le texte du synonyme"; InputOK.onclick = Synonyme_CheckArticleParams; InputOK.select = Synonyme_CheckArticleParams; var InputCopysolution = document.createElement('input'); InputCopysolution.type = "button"; InputCopysolution.value = "Copier solution"; InputCopysolution.onclick = Synonyme_Copysolution; InputCopysolution.select = Synonyme_Copysolution; var InputPreview = document.createElement('input'); InputPreview.type = "button"; InputPreview.value = "Créer les synonymes"; InputPreview.onclick = Synonyme_CreateSyn; InputPreview.select = Synonyme_CreateSyn; var InputCancel = document.createElement('input'); InputCancel.type = "button"; InputCancel.value = "Fermer"; InputCancel.onclick = Synonyme_Cancel; InputCancel.select = Synonyme_Cancel; MenuDiv.appendChild(TextArea); MenuDiv.appendChild(InputOK); MenuDiv.appendChild(InputCopysolution); MenuDiv.appendChild(InputPreview); MenuDiv.appendChild(InputCancel); } // ------------------------------------------------------ Annulation du menu function Synonyme_Cancel(){ var MenuDiv = document.getElementById('Menu_Synonyme'); MenuDiv.parentNode.removeChild(MenuDiv); } // ------------------------------------------------------ Copier solution function Synonyme_Copysolution(){ var Textarea = document.getElementById('Menu_Synonyme_Input'); var Value = Textarea.value; if (window.clipboardData) { // IE // Le contenu actuel du presse-papier sera écrasé par la valeur de sText. window.clipboardData.setData('Text', Value); // On ne veut pas suivre le lien après le clic. return false; } else if (typeof(netscape) == 'object' && typeof(Components) == 'object') { // Mozilla try { // On test si la configuration permet l'accès au presse-papier. netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Impossible d'accéder au presse-papier (mettez la valeur signed.applets.codebase_principal_support a true dans l'URL about:config"); } // Initialisation du composant fournit par Mozilla. var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper); // Copie du texte dans le presse papier. gClipboardHelper.copyString(Value); // On ne veut pas suivre le lien après le clic. return false; } else { alert("Cette fonctionnalité n'est pas disponible pour votre navigateur"); } } // ------------------------------------------------------ Mettre en forme function Synonyme_CheckArticleParams(){ var Textarea = document.getElementById('Menu_Synonyme_Input'); var Synonym = Synonym_Template; var EditValue = document.editform.wpTextbox1.value; var EditValueLine1 = EditValue.split("\n"); var Resultat; // boucle sur les lignes de l'article for(var a=0;a<EditValueLine1.length;a++){ var EmptyParamRegExp1 = new RegExp("(.*)\\{\\{Taxobox[ ]*\\|[ ]*famille[ ]*\\|[ ]*([^ ]*)[ ]*(.*)", "ig") var EmptyParamRegExp2 = new RegExp("(.*)\\{\\{Taxobox[ ]*\\|[ ]*sous\\-famille[ ]*\\|[ ]*([^ ]*)[ ]*(.*)", "ig") var EmptyParamRegExp3 = new RegExp("(.*)\\{\\{Taxobox taxon[ ]*\\|[ ]*animal[ ]*\\|[ ]*espèce[ ]*\\|[ ]*([^\\|]*)[ ]*(.*)", "ig") var EmptyParamRegExp4 = new RegExp("(.*)\\{\\{Taxobox[ ]*\\|[ ]*ordre[ ]*\\|[ ]*([^ ]*)[ ]*(.*)", "ig") var EmptyParamRegExp5 = new RegExp("(.*)\\{\\{Taxobox[ ]*\\|[ ]*sous\\-ordre[ ]*\\|[ ]*([^ ]*)[ ]*(.*)", "ig") Resultat = EditValueLine1[a].replace(EmptyParamRegExp1, "$2"); if (Resultat!=EditValueLine1[a]){ var Famille = EditValueLine1[a].replace(EmptyParamRegExp1, "$2").replace(/^\s+|\s+$/g,"");; } Resultat = EditValueLine1[a].replace(EmptyParamRegExp2, "$2"); if (Resultat!=EditValueLine1[a]){ var Sous_Famille = EditValueLine1[a].replace(EmptyParamRegExp2, "$2").replace(/^\s+|\s+$/g,"");; } Resultat = EditValueLine1[a].replace(EmptyParamRegExp3, "$2"); if (Resultat!=EditValueLine1[a]){ var Espece = EditValueLine1[a].replace(EmptyParamRegExp3, "$2").replace(/^\s+|\s+$/g,"");; } Resultat = EditValueLine1[a].replace(EmptyParamRegExp4, "$2"); if (Resultat!=EditValueLine1[a]){ var Ordre = EditValueLine1[a].replace(EmptyParamRegExp4, "$2").replace(/^\s+|\s+$/g,""); Ordre = Ordre.substring(0,1).toUpperCase() + Ordre.substring(1,Ordre.length).toLowerCase(); } Resultat = EditValueLine1[a].replace(EmptyParamRegExp5, "$2"); if (Resultat!=EditValueLine1[a]){ var Sous_Ordre = EditValueLine1[a].replace(EmptyParamRegExp5, "$2").replace(/^\s+|\s+$/g,""); Sous_Ordre = Sous_Ordre.substring(0,1).toUpperCase() + Sous_Ordre.substring(1,Sous_Ordre.length).toLowerCase(); } } Synonym = Synonym.replace(/ESPECE@/, Espece); if(Sous_Famille){ Synonym = Synonym.replace(/FAMILLE@/, Sous_Famille); }else{ Synonym = Synonym.replace(/FAMILLE@/, Famille); } var Categorie = null; switch (Ordre) { case 'Testudines': Categorie = "Synonyme de tortues (nom scientifique)"; break; case 'Anura': Categorie = "Synonyme d'anoures (nom scientifique)"; break; case 'Urodela': Categorie = "Synonyme d'urodèles (nom scientifique)"; break; case 'Caudata': Categorie = "Synonyme d'urodèles (nom scientifique)"; break; case 'Gymnophiona': Categorie = "Synonyme de gymnophiones (nom scientifique)"; break; case 'Crocodilia': Categorie = "Synonyme de crocodiliens (nom scientifique)"; break; case 'Rhynchocephalia': Categorie = "Synonyme de rhynchocéphales (nom scientifique)"; break; case 'Squamata':{ switch (Sous_Ordre) { case 'Serpentes': Categorie = "Synonyme de serpents (nom scientifique)"; break; case 'Amphisbaenia': Categorie = "Synonyme d'amphisbènes (nom scientifique)"; break; case 'Sauria': Categorie = "Synonyme de sauriens (nom scientifique)"; break; default: Categorie = "Synonyme de squamates (nom scientifique)"; } } break; default: Categorie = 'unknown'; } Synonym = Synonym.replace(/CATEGORIE@/, Categorie); Textarea.value = Synonym; } // ------------------------------------------------------ Recherche texte selectionne function Synonyme_CreateSyn(){ var EditValue = document.editform.wpTextbox1.value; var EditValueLine1 = EditValue.split("\n"); var Resultat; var Resultat1; var Syn_mode = 0; var EmptyParamRegExp5 = new RegExp("(.*)\\{\\{Taxobox synonymes[ ]*\\|(.*)", "ig") var EmptyParamRegExp6 = new RegExp("(.*)\\'\\'([^\\'\\']*)\\'\\'(.*)", "ig") var EmptyParamRegExp7 = new RegExp("(.*)\\}\\}(.*)", "ig") var EmptyParamRegExp8 = new RegExp("(.*)\\{\\{lang[ ]*\\|([^\\|]*)\\|([^\\}\\}]*)\\}\\}(.*)", "ig") var EmptyParamRegExp9 = new RegExp("<small>(.*)</small>", "ig") // boucle sur les lignes de l'article for(var a=0;a<EditValueLine1.length;a++){ if (Syn_mode==0){ Resultat = EditValueLine1[a].replace(EmptyParamRegExp5, "$2"); if (Resultat!=EditValueLine1[a]){ Syn_mode = 1; } } if (Syn_mode==1){ var Syn_name = EditValueLine1[a].replace(EmptyParamRegExp9, "").replace(EmptyParamRegExp6, "$2"); Syn_name = Syn_name.replace(EmptyParamRegExp8, "$3").replace(/^\s+|\s+$/g,""); EditValueLine1[a] = EditValueLine1[a].replace(EmptyParamRegExp8, "$1 $3 $4"); if (Syn_name!=EditValueLine1[a]){ var newwin = window.open('http://fr.wikipedia.org/w/index.php?title=' + Syn_name + '&action=edit'); } Resultat1 = EditValueLine1[a].replace(EmptyParamRegExp7, "$1"); if (EditValueLine1[a]!=Resultat1){ Syn_mode = 2; } } } } // ------------------------------------------------------ //