Utilisateur:Kyro/bandeauportail.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.// Documentation : [[Projet:JavaScript/Notices/BandeauxPortails]]
// ==================================================================================================================== DEBUT DU CODE
// ====================================================================================================================
//<pre><nowiki>
/////////////////////////////////////////////////////////////////////////////////// Variables personnalisables
if(typeof(BandeauxPortails_AutoEdit)=='undefined') var BandeauxPortails_AutoEdit = true; // Publication automatique
if(typeof(BandeauxPortails_MinorEdit)=='undefined') var BandeauxPortails_MinorEdit = true; // Modification mineure
if(typeof(BandeauxPortails_TailleListe)=='undefined') var BandeauxPortails_TailleListe = 10; // Nombre de suggestions
if(typeof(BandeauxPortails_ListeBas)=='undefined') var BandeauxPortails_ListeBas = false; // Affichage des suggestions vers le bas
if(typeof(BandeauxPortails_KeyboardDelay)=='undefined') var BandeauxPortails_KeyboardDelay = 5; // Délai (en secondes) lors de la sélection d'une suggestion au clavier
/////////////////////////////////////////////////////////////////////////////////// Fonctions actives au chargement de la page
if( ((mw.config.get('wgAction')=="view")||(mw.config.get('wgAction')=="purge"))&&(mw.config.get('wgNamespaceNumber')==0)){
addOnloadHook(BandeauxPortails);
}else if((mw.config.get('wgAction')=="edit")&&(mw.config.get('wgNamespaceNumber')==0)){
addOnloadHook(BandeauxPortails_Edit);
}
function BandeauxPortails(){
var UlBandeaux = document.getElementById('bandeau-portail');
if(!UlBandeaux) BandeauxPortails_CreateUl();
BandeauxPortails_ModifyUl();
}
function BandeauxPortails_CreateUl(){
var CatLinks = document.getElementById('catlinks');
if(!CatLinks) return;
var Bandeau = document.createElement('ul');
Bandeau.id = 'bandeau-portail';
Bandeau.className = 'bandeau-portail';
CatLinks.parentNode.insertBefore(Bandeau,CatLinks);
}
function BandeauxPortails_ModifyUl(){
var BandeauUl = document.getElementById('bandeau-portail');
if(!BandeauUl) return;
var BandeauLi = BandeauUl.getElementsByTagName('li');
for(var a=0;a<BandeauLi.length;a++){
Li = BandeauLi[a];
var Lien = Li.getElementsByTagName('a')[1];
if(Lien){
var TitreDecode = Lien.title.split('Portail:').join('')
TitreDecode = TitreDecode.replace(/ \(page inexistante\)/g, "");
var Titre = encodeURIComponent(TitreDecode);
var SpanLien = Lien.parentNode
SpanLien.id = 'lienPortail_' + a;
SpanLien.innerHTML += ' '
+'<a href="javascript:BandeauxPortails_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau de portail '+TitreDecode+'">(-)</a>'
+'<a href="javascript:BandeauxPortails_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau de portail '+TitreDecode+'">(±)</a>';
}
}
var BandeauInexistant = BandeauUl.getElementsByTagName('a');
for(var a=100;a<(BandeauInexistant.length+100);a++){
if($(BandeauInexistant[(a-100)]).hasClass("new")){
var Lien = BandeauInexistant[(a-100)];
if(Lien.title.indexOf("Portail:")==-1){
var TitreDecode = Lien.innerHTML.split('Modèle:Portail').join('');
TitreDecode = TitreDecode.replace(/^ /,'');
Titre = encodeURIComponent(TitreDecode);
var NewLi = document.createElement('li');
NewLi.innerHTML = '<span id="lienPortail_' + a + '" >'
+'<a class="new" href="' + Lien.href + '" title="'+Lien.title+'" >'+TitreDecode+'</a>'
+'<a href="javascript:BandeauxPortails_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau de portail '+TitreDecode+'">(-)</a>'
+'<a href="javascript:BandeauxPortails_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau de portail '+TitreDecode+'">(±)</a>';
Lien.parentNode.insertBefore(NewLi, Lien);
Lien.parentNode.removeChild(Lien);
}
}
}
var AddLi = document.createElement('li');
AddLi.id = 'lienPortail_add';
AddLi.innerHTML += '<span class="bandeau-portail-element">'
+'<span class="bandeau-portail-texte" id="BandeauxPortails_Add" >'
+'<a href="javascript:BandeauxPortails_AddOne()" title="Ajouter un bandeau de portail" >(+)</a>'
+'</span>'
+'</span>';
BandeauUl.appendChild(AddLi);
}
/////////////////////////////////////////////////////////////////////////////////// Formulaires
function BandeauxPortails_Cancel(id){
var Span = document.getElementById(id);
Span.style.display = 'inline';
var Parent = Span.parentNode;
var Form = Parent.getElementsByTagName('form')[0];
Parent.removeChild(Form);
}
function BandeauxPortails_SupprOne(Portail){
var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
var url = editlk + '&removeportail=' + Portail + 'ENDR' ;
document.location = url ;
}
function BandeauxPortails_ModifyOne( id, portail ) {
var Span = document.getElementById('lienPortail_' + id);
Span.style.display = "none";
var Form = document.createElement('form');
Form.style.display ="inline";
Form.innerHTML = '<select id="SelectModify_'+id+'" style="display:none;" title="Suggestions de bandeaux" />'
+'<input id="InputModify_'+id+'" type="text" value="'+portail+'" onkeyup="BandeauxPortails_TextChanged(\'SelectModify_'+id+'\')" />'
+'<input type="button" onclick="BandeauxPortails_ModifyThatOne(\''+id+'\',\''+portail+'\');" onselect="BandeauxPortails_ModifyThatOne(\''+id+'\',\''+portail+'\');" value="OK"/>'
+'<input type="button" onclick="BandeauxPortails_Cancel(\'lienPortail_'+id+'\')" onselect="BandeauxPortails_Cancel(\'lienPortail_'+id+'\')" value="Annuler"/>';
Span.parentNode.insertBefore(Form,Span);
document.getElementById('InputModify_'+id).focus() ;
}
function BandeauxPortails_ModifyThatOne(id, oldportail){
var Input = document.getElementById('InputModify_'+id);
var Portail = Input.value;
if((Portail!='')&&(Portail!=oldportail)){
Portail = Portail.substr(0,1).toUpperCase() + Portail.substr(1,Portail.length);
var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
var url = editlk + '&removeportail=' + encodeURIComponent( oldportail ) + 'ENDR&newportail=' + encodeURIComponent( Portail ) + 'ENDA';
document.location = url ;
}else{
BandeauxPortails_Cancel('lienPortail_'+id);
}
}
function BandeauxPortails_AddOne(){
var Span = document.getElementById('BandeauxPortails_Add');
Span.style.display = "none";
var Form = document.createElement('form');
Form.style.display ="inline";
Form.innerHTML = '<select id="SelectAdd" style="display:none;" title="Suggestions de bandeaux" />'
+'<input id="InputAdd" type="text" value="" onkeyup="BandeauxPortails_TextChanged(\'SelectAdd\')" />'
+'<input type="button" onclick="BandeauxPortails_AddThatOne();" onselect="BandeauxPortails_AddThatOne();"value="OK"/>'
+'<input type="button" onclick="BandeauxPortails_Cancel(\'BandeauxPortails_Add\')" onselect="BandeauxPortails_Cancel(\'BandeauxPortails_Add\')" value="Annuler"/>';
Span.parentNode.insertBefore(Form,Span);
document.getElementById('InputAdd').focus() ;
}
function BandeauxPortails_AddThatOne(){
var Input = document.getElementById('InputAdd');
var Portail = Input.value;
if(Portail!=''){
Portail = Portail.substr(0,1).toUpperCase() + Portail.substr(1,Portail.length);
var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
var url = editlk + '&newportail=' + encodeURIComponent( Portail ) + 'ENDA';
document.location = url ;
}else{
BandeauxPortails_Cancel('BandeauxPortails_Add');
}
}
/////////////////////////////////////////////////////////////////////////////////// Suggestions
var BandeauxPortails_TextChanged_running = 0 ;
function BandeauxPortails_TextChanged(id){
if ( BandeauxPortails_TextChanged_running ) return ;
if(BandeauxPortails_TailleListe==0) return;
var Select = document.getElementById( id ) ;
var idInput = id.split('Select').join('Input')
var Input = document.getElementById(idInput) ;
//if((!Input)||(!Select)) return;
var Value = Input.value;
if(Value=='') return;
BandeauxPortails_TextChanged_running = 1;
//Value = Value.substr(0,1).toUpperCase() + Value.substr(1,Value.length) ;
var url = mw.config.get('wgServer') + '/w/api.php?action=query&list=allpages&apnamespace=10&aplimit='+BandeauxPortails_TailleListe+'&apfrom=Portail%20'+Value;
var BandeauxPortails_Request = new XMLHttpRequest();
BandeauxPortails_Request.open("GET", url, true);
BandeauxPortails_Request.send(null);
BandeauxPortails_Request.onreadystatechange = function() {
if(BandeauxPortails_Request.readyState == 4 && BandeauxPortails_Request.status == 200) {
Select.innerHTML = '';
var Temp = document.createElement('div');
//document.body.insertBefore(Temp, document.body.firstChild);
Temp.innerHTML = BandeauxPortails_Request.responseText;
var Infos = Temp.getElementsByTagName('span');
var NbOptions = 0;
for(var a=0;a<Infos.length;a++){
Info = Infos[a].innerHTML;
if(Info.indexOf('title=')!=-1){
var TitrePage = Info.split('Portail')[1].split('"')[0];
TitrePage = TitrePage.replace(/^ /,'');
while(TitrePage.indexOf('&')!=-1){
TitrePage = TitrePage.split('&').join("&");
if(TitrePage.indexOf('&')==-1) break;
}
while(TitrePage.indexOf(''')!=-1){
TitrePage = TitrePage.split(''').join("'");
if(TitrePage.indexOf(''')==-1) break;
}
TitrePageEncode = TitrePage.replace(/'/g,"ZAPOSTROPHE");
Select.innerHTML += '<option value="'+TitrePage+'" '
+'onclick="BandeauxPortails_TextChanged_Set(\''+idInput+'\', \''+TitrePageEncode+'\'); '
+'BandeauxPortails_TextChanged(\''+id+'\');" '
+'>'+TitrePage+'</option>';
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(idInput).value = TextSelected;
setTimeout("BandeauxPortails_TextChanged(\'"+id+"\');", BandeauxPortails_KeyboardDelay*1000);
}
}
}
Select.size = NbOptions;
Select.style.display = 'inline';
Select.style.zIndex = 5 ;
Select.style.position = "absolute" ;
Input.style.width = Select.offsetWidth + "px" ;
if(BandeauxPortails_ListeBas){
Select.style.top = (parseInt(Input.offsetTop) + parseInt(Input.offsetHeight)) + 'px';
}else{
Select.style.top = (parseInt(Input.offsetTop) - Select.offsetHeight) + 'px';
}
Select.style.left = (parseInt(Input.parentNode.offsetLeft ) - 1) + 'px';
}else{
Select.style.display = 'none';
Select.innerHTML = '';
}
BandeauxPortails_TextChanged_running = 0;
}
}
}
function BandeauxPortails_TextChanged_Set(id, text){
text = text.replace(/ZAPOSTROPHE/g,"'");
document.getElementById(id).value = text;
document.getElementById(id).focus() ;
}
/////////////////////////////////////////////////////////////////////////////////// Édition
function BandeauxPortails_Edit(){
var TextArea = document.getElementById('wpTextbox1');
if(!TextArea) return;
var URL = location.href;
if((URL.indexOf('&removeportail=')==-1)&&(URL.indexOf('&newportail=')==-1)) return;
document.editform.style.display = "none";
var EditURL = URL.substring(0, URL.indexOf("&removeportail="));
var URL = URL.split(EditURL).join('');
var RemovePortalText = decodeURIComponent(URL.substring(0, URL.indexOf("ENDR")).replace(/.*=/g,''));
var AddPortalText = decodeURIComponent(URL.substring(0, URL.indexOf("ENDA")).replace(/.*=/g,''));
var OldText = TextArea.value;
OldText = OldText.replace(/\{\{Portail /ig, "\{\{Portail\|"); // Cas d'un bandeau unique : {{Portail Truc}} -> {{Portail|Truc}}
if((OldText.indexOf('{{Portail|')!=-1)||(OldText.indexOf('{{portail|')!=-1)){
// ==================================================================================== Il y a déjà un modèle {{Portail}}
var AvantModeleUp = OldText.substring(0, OldText.indexOf('{{Portail'));
var AvantModeleLow = OldText.substring(0, OldText.indexOf('{{portail'));
var ApresModele = OldText.split(AvantModeleUp).join('').split(AvantModeleLow).join('');
var DebutModele = OldText.split(ApresModele).join('');
var OldModele = ApresModele.substring(0, ApresModele.indexOf('\n'));
if((URL.indexOf('&newportail=')!=-1)&&(OldModele.indexOf(AddPortalText)!=-1)){
alert('Le portail ' + AddPortalText + ' est déjà présent.');
document.editform.style.display = "block";
return;
}
var SuiteModele = ApresModele.split(OldModele).join('');
if((URL.indexOf('&removeportail=')!=-1)&&(URL.indexOf('&newportail=')!=-1)){
var NouveauModele = OldModele.split('|' +RemovePortalText).join('|' + AddPortalText);
var Sommaire = 'Changement rapide de {{portail}} : - '+RemovePortalText+' , + '+AddPortalText.replace(/\|/g," , + ");
}else if(URL.indexOf('&removeportail=')!=-1){
var NouveauModele = OldModele.split('|' +RemovePortalText).join('');
var Sommaire = 'Retrait rapide de {{portail}} : - '+RemovePortalText;
}else if(URL.indexOf('&newportail=')!=-1){
var NouveauModele = OldModele.split('}}').join('|' + AddPortalText + '}}');
var Sommaire = 'Ajout rapide de {{portail}} : + '+AddPortalText.replace(/\|/g," , + ");
}
if(NouveauModele.indexOf('|')==-1){
alert('Erreur :\nLe modèle {{Portail}} doit avoir au moins un paramètre.');
document.editform.style.display = "block";
return;
}
}else{
// ==================================================================================== Il n'y a pas de modèle {{Portail}}
var NouveauModele = '{{Portail|' + AddPortalText + '}}\n\n';
var Sommaire = 'Ajout rapide de {{portail}} : + '+AddPortalText.replace(/\|/g," , + ");
if((OldText.indexOf('{{DEFAULTSORT:')!=-1)||(OldText.indexOf('[[Catégorie:')!=-1)||(OldText.indexOf('[[catégorie:')!=-1)||(OldText.indexOf('[[Categorie:')!=-1)||(OldText.indexOf('[[categorie:')!=-1)){
// ------------------------------------------------------------------------------------ Il y a des catégories
var DebutModele1 = OldText.substring(0, OldText.indexOf('{{DEFAULTSORT:'));
var DebutModele2 = OldText.substring(0, OldText.indexOf('[[Catégorie:'));
var DebutModele3 = OldText.substring(0, OldText.indexOf('[[catégorie:'));
var DebutModele4 = OldText.substring(0, OldText.indexOf('[[Categorie:'));
var DebutModele5 = OldText.substring(0, OldText.indexOf('[[categorie:'));
var SuiteModele = OldText.split(DebutModele1).join('').split(DebutModele2).join('').split(DebutModele3).join('').split(DebutModele4).join('').split(DebutModele5).join('')
var DebutModele = OldText.split(SuiteModele).join('');
}else{
// ------------------------------------------------------------------------------------ Il n'y a pas de catégories (todo : et si il y a des interwikis ? )
var DebutModele = OldText + '\n';
var SuiteModele = '';
}
}
document.getElementById('wpMinoredit').checked = BandeauxPortails_MinorEdit;
var TexteFinal = DebutModele + NouveauModele + SuiteModele;
document.getElementById('wpTextbox1').value = TexteFinal;
document.getElementById('wpSummary').value = Sommaire + ' ; avec [[MediaWiki:Gadget-BandeauxPortails.js|BandeauxPortails]]';
if(BandeauxPortails_AutoEdit) document.editform.submit();
}
//</nowiki></pre>
// ====================================================================================================================
// ==================================================================================================================== FIN DU CODE
//