/* jshint strict:false */
//<pre><nowiki>
/*
Permet de ranger les references
la structure du code et la plupart du code de ce gadget vient du gadget [[MediaWiki:Gadget-OuvrageArticle.js]] (brillamment) developpe par [[Utilisateur:Dr Brains]]
*/
// ------------------------------------------------------ Lancement
if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ) addOnloadHook(Reference_AddButton);
// ------------------------------------------------------ Ajout du bouton
function caseInsensitiveSort(a, b)
{
var ret = 0;
a = a.toLowerCase();b = b.toLowerCase();
if(a > b)
ret = 1;
if(a < b)
ret = -1;
return ret;
}
function Reference_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/2/2b/Button_arrow_down.PNG" heigth="23" width="23" alt="Reference" />';
var NewButton = document.createElement('a');
NewButton.title = "Ordonner les références";
NewButton.href="javascript:Reference_OpenMenu();";
NewButton.innerHTML = button;
Toolbar.appendChild(NewButton);
}
// ------------------------------------------------------ Création du menu
function Reference_OpenMenu(){
var Toolbar = document.getElementById('toolbar');
if(!Toolbar) Toolbar = document.getElementById("Oldbar");
var MenuDiv = document.getElementById('Reference');
if(MenuDiv){
return;
}else{
MenuDiv = document.createElement('div');
MenuDiv.id = 'Menu_Reference';
$(MenuDiv).insertAfter(Toolbar);
}
var TextArea = document.createElement('textarea');
TextArea.id = 'Menu_Reference_Input';
TextArea.rows = 4;
var InputGetselected = document.createElement('input');
InputGetselected.type = "button";
InputGetselected.value = "1/ Coller texte selectionné";
InputGetselected.onclick = Reference_Pasteselected;
InputGetselected.select = Reference_Pasteselected;
var InputOK = document.createElement('input');
InputOK.type = "button";
InputOK.value = "2/ Convertir";
InputOK.onclick = Reference_CheckMenu;
InputOK.select = Reference_CheckMenu;
var InputCopysolution = document.createElement('input');
InputCopysolution.type = "button";
InputCopysolution.value = "3/ Copier solution";
InputCopysolution.onclick = Reference_Copysolution;
InputCopysolution.select = Reference_Copysolution;
var InputAllinone = document.createElement('input');
InputAllinone.type = "button";
InputAllinone.value = "1 + 2 + 3 + 4";
InputAllinone.onclick = Reference_Allinone;
InputAllinone.select = Reference_Allinone;
var InputCancel = document.createElement('input');
InputCancel.type = "button";
InputCancel.value = "4/ Fermer";
InputCancel.onclick = Reference_Cancel;
InputCancel.select = Reference_Cancel;
MenuDiv.appendChild(TextArea);
MenuDiv.appendChild(InputGetselected);
MenuDiv.appendChild(InputOK);
MenuDiv.appendChild(InputCopysolution);
MenuDiv.appendChild(InputCancel);
MenuDiv.appendChild(InputAllinone);
}
// ------------------------------------------------------ Tout en un
function Reference_Allinone(){
var Textarea = document.getElementById('Menu_Reference_Input');
Reference_Pasteselected();
Reference_CheckMenu();
Reference_Copysolution();
Reference_Cancel();
}
// ------------------------------------------------------ Annulation du menu
function Reference_Cancel(){
var MenuDiv = document.getElementById('Menu_Reference');
MenuDiv.parentNode.removeChild(MenuDiv);
}
// ------------------------------------------------------ Vérification du menu
function Reference_CheckMenu(){
var Textarea = document.getElementById('Menu_Reference_Input');
var Value = Textarea.value;
if (Value==="") return;
Value = Reference_Order(Value);
Textarea.value = Value;
}
// ------------------------------------------------------ Mettre en forme
function Reference_Order(Texte){
var EmptyParamRegExp1 = new RegExp("({{ADW|{{ASW|{{ReptileDB|{{NCBI|{{ITIS|{{INPN|{{CITES|{{UICN|{{TFTSG|{{WRMS|{{TPDB|{{DORIS|{{uBIO|{{ARKive|\\bARK\\b|\\bGES\\b)", "g");
var EmptyParamRegExp2 = new RegExp("([A-Z][A-ZÜ]{1,})", "g");
var EmptyParamRegExp3 = new RegExp("(^{{Autres projets$|^\\|commons titre\\=|^\\|commons\\=|^\\|wikispecies titre\\=|^\\|wikispecies\\=|^}}$)", "g");
var temp = Texte.replace(/ASW /g,"Amphibiawea ").split('\n');
var Textenotsorted = "";
var Textesorted1 = "";
var firstline = 0;
for(var i=0; i<temp.length; i++) {
var commons = temp[i].replace(EmptyParamRegExp3, "a");
firstline++;
if (commons==temp[i]){
var temp1 = temp[i].split(" ");
if (firstline != 1){
Textesorted1 += "\n";
}
for(var j=0; j<temp1.length; j++) {
var temp2 = temp1[j].split("|");
if (j !== 0){
Textesorted1 += " ";
}
for(var k=0; k<temp2.length; k++) {
var temp3 = temp2[k].split("(");
if (k !== 0){
Textesorted1 += "|";
}
for(var l=0; l<temp3.length; l++) {
var temp4 = temp3[l].split("-");
if (l !== 0){
Textesorted1 += "(";
}
for(var m=0; m<temp4.length; m++) {
var temp5 = temp4[m].split("’");
if (m !== 0){
Textesorted1 += "-";
}
for(var n=0; n<temp5.length; n++) {
var temp6 = temp5[n].split("'");
if (n !== 0){
Textesorted1 += "’";
}
for(var o=0; o<temp6.length; o++) {
var chain = temp6[o].replace(EmptyParamRegExp1, "a");
if (chain==temp6[o]){
var chain1 = temp6[o].replace(EmptyParamRegExp2, "a");
if (chain1!=temp6[o]){
temp6[o]=temp6[o].substring(0,1)+temp6[o].substring(1).toLowerCase();
}
}
if (o !== 0){
Textesorted1 += "'" + temp6[o];
}else{
Textesorted1 += temp6[o];
}
}
}
}
}
}
}
}else{
Textenotsorted += temp[i] + "\n";
firstline = 0;
}
}
var temp7 = Textesorted1.split('\n');
temp7.sort(caseInsensitiveSort);
var Textesorted2 = "";
for(var p=0; p<temp7.length; p++) {
if (p!=temp7.length-1){
Textesorted2 += temp7[p] + "\n";
}else{
Textesorted2 += temp7[p];
}
}
var finalresult = Textenotsorted + Textesorted2;
finalresult = finalresult.replace(/Amphibiawea /g,"ASW ").replace(/, & /g," & ");
return finalresult;
}
// ------------------------------------------------------ Coller texte selectionne
function Reference_Pasteselected(){
var Textarea = document.getElementById('Menu_Reference_Input');
try
{
// On teste 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");
}
var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
if (!clip) return false;
var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
if (!trans) return false;
trans.addDataFlavor("text/unicode");
clip.getData(trans, clip.kGlobalClipboard);
var str = {};
var len = {};
trans.getTransferData("text/unicode",str,len);
str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
Textarea.value = str.data.substring(0, len.value / 2);
}
// ------------------------------------------------------ Copier solution
function Reference_Copysolution(){
var Textarea = document.getElementById('Menu_Reference_Input');
var Value = Textarea.value;
try
{
// On teste 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");
}
var str = Components.classes["@mozilla.org/supports-string;1"].
createInstance(Components.interfaces.nsISupportsString);
if (!str) return false;
str.data = Value;
var trans = Components.classes["@mozilla.org/widget/transferable;1"].
createInstance(Components.interfaces.nsITransferable);
if (!trans) return false;
trans.addDataFlavor("text/unicode");
trans.setTransferData("text/unicode", str, Value.length * 2);
var clipid = Components.interfaces.nsIClipboard;
var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(clipid);
if (!clip) return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
}
// ------------------------------------------------------
//</nowiki></pre>