Utilisateur:Dr Brains/AddCatsWhileEditing.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./*
{{Projet:JavaScript/Script}}
*/
if((mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit"))
$(AddCatsWhileEditing_AddButton);
function AddCatsWhileEditing_AddButton(){
var Toolbar = document.getElementById("toolbar");
if(!Toolbar) return;
var CatButton = document.getElementById("mw-editbutton-category");
//if(CatButton) CatButton.style.display = 'none';
var NewButton = document.createElement('a');
NewButton.title = "Ajouter une catégorie";
NewButton.innerHTML = '<img height="22" width="23" border="0" class="mw-toolbar-editbutton" id="mw-editbutton-categoryDeluxe" src="http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png" alt="Catégorie" >';
NewButton.href = "javascript:AddCatsWhileEditing_CreateForm();";
if(CatButton){
CatButton.parentNode.insertBefore(NewButton, CatButton);
}else{
Toolbar.appendChild(NewButton);
}
}
function AddCatsWhileEditing_DeleteForm(){
var OldForm = document.getElementById("AddCatsWhileEditingForm");
if(OldForm) OldForm.parentNode.removeChild(OldForm);
}
function AddCatsWhileEditing_CreateForm(){
var OldForm = document.getElementById("AddCatsWhileEditingForm");
var Toolbar = document.getElementById("toolbar");
if(!Toolbar) Toolbar = document.getElementById("Oldbar");
if((OldForm)||(!Toolbar)) return;
var FormContent = '<form>'
+ '<input type="button" value="Valider" '
+ 'onclick="AddCatsWhileEditing_Edit();" onselect="AddCatsWhileEditing_Edit();" />'
+ '<input type="button" value="Annuler" '
+ 'onclick="AddCatsWhileEditing_DeleteForm();" onselect="AddCatsWhileEditing_DeleteForm();" />'
+ '<br/>'
+ '<input id="AddCatsWhileEditing_Key" type="text" value="" "/>'
+ '<label for="AddCatsWhileEditing_Key" >Clef de tri (facultatif)</label> '
+ '<br/>'
+ '<select id="AddCatsWhileEditing_Select" style="display:none" title="Suggestions de catégories" ></select>'
+ '<input id="AddCatsWhileEditing_Text" type="text" value="" '
+ 'onkeyup="AddCatsWhileEditing_TextChanged();"/>'
+ '<label for="AddCatsWhileEditing_Text" >Catégorie</label> '
+ '</form>';
var FormDiv = document.createElement('div');
FormDiv.id = "AddCatsWhileEditingForm";
FormDiv.innerHTML = FormContent
Toolbar.parentNode.insertBefore(FormDiv, Toolbar.nextSibling);
}
var AddCatsWhileEditing_TailleListe = 10;
var AddCatsWhileEditing_TextChanged_running = 0;
var AddCatsWhileEditing_KeyboardDelay = 5;
function AddCatsWhileEditing_TextChanged(){
if ( AddCatsWhileEditing_TextChanged_running == 1 ) return ;
if(AddCatsWhileEditing_TailleListe==0) return;
var Select = document.getElementById("AddCatsWhileEditing_Select");
var Input = document.getElementById("AddCatsWhileEditing_Text") ;
if((!Input)||(!Select)) return;
var Value = Input.value;
if(Value=='') return;
AddCatsWhileEditing_TextChanged_running = 1;
Value = Value.substr(0,1).toUpperCase() + Value.substr(1,Value.length) ;
var url = mw.config.get('wgServer') + "/" + mw.config.get('wgScriptPath') + "/api.php?&action=query&list=allpages&apnamespace=14&apfrom=" + Value + "&aplimit=" + AddCatsWhileEditing_TailleListe;
var AddCatsWhileEditing_Request = new XMLHttpRequest();
AddCatsWhileEditing_Request.open("GET", url, true);
AddCatsWhileEditing_Request.onreadystatechange = function() {
if(AddCatsWhileEditing_Request.readyState == 4 && AddCatsWhileEditing_Request.status == 200) {
Select.innerHTML = '';
var OldTemp = document.getElementById('Temp');
if(OldTemp) OldTemp.parentNode.removeChild(OldTemp);
var Temp = document.createElement('div');
Temp.id = 'Temp';
//document.body.insertBefore(Temp, document.body.firstChild);
Temp.innerHTML = AddCatsWhileEditing_Request.responseText;
var Infos = Temp.getElementsByTagName('span');
var NbOptions = 0;
for(var a=0;a<Infos.length;a++){
var Info = Infos[a].innerHTML;
if(Info.indexOf('title=')!=-1){
var TitrePage = Info.split('title="')[1].split('"')[0];
TitrePage = AddCatsWhileEditing_HTMLDecode(TitrePage);
TitrePage = TitrePage.split(mw.config.get('wgFormattedNamespaces')[14] + ':').join('');
TitrePageEncode = TitrePage.replace(/'/g,"ZAPOSTROPHE");
var NewOption = '<option value="'+TitrePage+'" '
+ 'onclick="AddCatsWhileEditing_TextChanged_Set(\''+TitrePageEncode+'\'); '
+ 'AddCatsWhileEditing_TextChanged();" '
+ '>'+TitrePage+'</option>';
Select.innerHTML += NewOption;
NbOptions++
}
}
if(NbOptions>0){
Select.onchange = function(){
var Selected = this.getElementsByTagName('option');
for(var a=0;a<Selected.length;a++){
if(Selected[a].selected){
var TextSelected = Selected[a].value;
document.getElementById("AddCatsWhileEditing_Text").value = TextSelected;
setTimeout("AddCatsWhileEditing_TextChanged();", AddCatsWhileEditing_KeyboardDelay*1000);
}
}
}
Select.size = NbOptions;
Select.style.display = 'inline';
Select.style.zIndex = 5 ;
Select.style.position = "absolute" ;
Input.style.width = Select.offsetWidth + "px" ;
Select.style.top = (parseInt(Input.offsetTop) + parseInt(Input.offsetHeight)) + 'px';
Select.style.left = (parseInt(Input.parentNode.offsetLeft ) - 1) + 'px';
}else{
Select.style.display = 'none';
Select.innerHTML = '';
}
AddCatsWhileEditing_TextChanged_running = 0;
}
}
AddCatsWhileEditing_Request.send(null);
}
function AddCatsWhileEditing_TextChanged_Set(text){
text = text.replace(/ZAPOSTROPHE/g,"'");
document.getElementById("AddCatsWhileEditing_Text").value = text;
document.getElementById("AddCatsWhileEditing_Text").focus() ;
}
function AddCatsWhileEditing_HTMLDecode(text){
var EncodedCharacter = new Array();
var DecodedCharacter = new Array();
var CharacterCount = 0;
EncodedCharacter[CharacterCount] = "&";
DecodedCharacter[CharacterCount] = "&";
CharacterCount++;
EncodedCharacter[CharacterCount] = "'";
DecodedCharacter[CharacterCount] = "'";
CharacterCount++;
EncodedCharacter[CharacterCount] = """;
DecodedCharacter[CharacterCount] = '"';
CharacterCount++;
for(var a=0;a<EncodedCharacter.length;a++){
while(text.indexOf(EncodedCharacter[a])!=-1){
text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);
if(text.indexOf(EncodedCharacter[a])==-1) break;
}
}
return text;
}
function AddCatsWhileEditing_Edit(){
var InputCat = document.getElementById("AddCatsWhileEditing_Text") ;
var InputKey = document.getElementById("AddCatsWhileEditing_Key");
var TextArea = document.getElementById("wpTextbox1");
if((!InputCat)||(!InputKey)||(!TextArea)) return;
var ValueCat = InputCat.value;
var ValueKey = InputKey.value;
if(ValueCat=='') return;
if(ValueKey!='') ValueKey = '|'+ValueKey;
var NewCat = mw.config.get('wgFormattedNamespaces')[14] + ':' + ValueCat.substr(0,1).toUpperCase() + ValueCat.substr(1,ValueCat.length) ;
var NewLink = '[[' + NewCat + ValueKey + ']]';
var OldText = TextArea.value;
var CatRegExp = new RegExp("(\\s*)\\[\\[ *(?:Catégorie|Category) *: *" + ValueCat.replace(/([\\\^\$\*\+\?\.\|\{\}\[\]\(\)])/g, "\\$1") + " *(\\|[^\\]]*)?\\]\\]", "gi");
var matches = OldText.match(CatRegExp);
if (matches != null && matches.length == 1) {
alert('La catégorie « '+ValueCat+' » est déjà présente.');
return;
}
var re = /\[\[(?:Catégorie|Category):[^\]]+\]\]/ig
var index = -1;
while (re.exec(OldText) != null) index = re.lastIndex;
if (index < 0) { // no category
//------------------------------------------------------------------------------------------------------------- Recherche interwiki
var interWiki = new RegExp('^\\s*\\[\\[([a-z][a-z].?(x?-[^\\]]+)?|simple|tokipona):([^\\]]*)\\]\\]\\s*$');
var blank = new RegExp('^\\s*$');
var lines = t.split('\n');
var DebutModele = '';
var SuiteModele = '';
var FoundInterwiki = false;
for (var lineId = lines.length - 1; lineId >= 0; --lineId){
if (!interWiki.exec(lines[lineId]) && !blank.exec(lines[lineId])){
DebutModele = lines.slice(0, lineId + 1).join('\n');
SuiteModele = lines.slice(lineId + 1).join('\n');
break;
}
}
DebutModele = DebutModele + '\n\n';
while(SuiteModele.indexOf('\n\n')!=-1){
SuiteModele = SuiteModele.split("\n\n").join("\n");
}
SuiteModele = SuiteModele.replace(/^\n/, "");
t = DebutModele + txt + '\n\n' + SuiteModele;
//------------------------------------------------------------------------------------------------------------------
} else { // already a category
t = t.substring(0, index) + '\n' + txt + t.substring(index);
}
TextArea.value = OldText;
}