Projet:Herpétologie/gadgets/Reference.js

Une page de Wikipédia, l'encyclopédie libre.
/* 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>