MediaWiki:Gadget-LiveRC.js/Extensions/AskForRevisionDeleteFromHistExtension.js

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

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/* 
 --------------------------------------------------------------------------------------
 ---------LLLL---------III--------------------------RRRRRRRRRR--------CCCCC------------
 ---------LLLL---------III--------------------------RRRRRRRRRRRR----CCCCCCCCC----------
 ---------LLLL--------------------------------------RRR------RRR---CCC-----CCC---------
 ---------LLLL---------III--VV-----VV--EEEEEEEEE----RRR------RRR--CCC------------------
 ---------LLLL---------III---VV---VV---EEE----------RRRRRRRRRRR---CCC------------------
 ---------LLLL---------III---VV---VV---EEEEEE-------RRRRRRRRRR----CCC------------------
 ---------LLLL---------III----VV-VV----EEEEEE-------RRR-----RRR----CCC-----CCC---------
 ---------LLLLLLLLLLL--III----VVVVV----EEE----------RRR------RRR----CCCCCCCCC----------
 ---------LLLLLLLLLLL--III-----VVV-----EEEEEEEEE----RRR-------RRR-----CCCCC------------
 --------------------------------------------------------------------------------------
 
'''Extension de LiveRC'''
 
Ajoute des cases à cocher et un bouton dans la prévisualisation d'un historique pour demander un masquage (non sysop)
 
* Licence : ...?
* Documentation :
* Auteur : [[:fr:User:Dr Brains]]
* Développement et maintenance :
 
 
{{Catégorisation JS|LiveRC}}
 
<source lang=javascript> */
if(typeof(LiveRC_AddHook)=="function") { // DÉBUT IF
LiveRC_Config["InstalledLiveRCExtensions"].push("AskForRevisionDeleteFromHistExtension");
/* *************************************************************************************************************************** */

// textes traduits
try{
lrcTexts["AFRDFH_ButtonText"]  = "Demander le masquage des versions sélectionnées (live)";
lrcTexts["AFRDFH_AskReason"]   = "Raison de la demande de masquage"; 	
lrcTexts["AFRDFH_NoSelection"] = "Vous devez sélectionner au moins une révision";
lrcTexts["AFRDFH_NoReason"]    = "Vous devez indiquer une raison";
}catch(e){ }

// textes non traduits
try{
UnTranslatedTexts["AFRDFH_Resume"] = "{{a-court|$1}}";
}catch(e){ }

// paramètres
try{
lrcParams["AFRDFH_RequestPage"]     = "Wikipédia:Demande de purge d'historique";
lrcParams["AFRDFH_Template"]        = "Wikipédia:LiveRC/Modèles/Demande de purge d'historique|page=$page|url=$url|raison=$reason";
lrcParams["AFRDFH_ReasonInputSize"] = 35;
lrcParams["AFRDFH_UseOutOfLiveRC"]  = true;
}catch(e){ }

// descriptions de variables
try{
lrcParamDesc["DescAFRDFH_ButtonText"]               = "[AskForRevisionDeleteFromHist] Texte du bouton de demande de masquage";
lrcParamDesc["DescAFRDFH_AskReason"]                = "[AskForRevisionDeleteFromHist] Texte de la pop-up pour la raison de la demande de masquage";
lrcParamDesc["DescAFRDFH_NoSelection"]              = "[AskForRevisionDeleteFromHist] Erreur si pas de révision sélectionnée";
lrcParamDesc["DescAFRDFH_NoReason"]                 = "[AskForRevisionDeleteFromHist] Erreur si pas de raison donnée";
lrcParamDesc["DescAFRDFH_Resume"]                   = "[AskForRevisionDeleteFromHist] Résumé de modification de la demande de masquage";
lrcParamDesc["DescAFRDFH_RequestPage"]              = "[AskForRevisionDeleteFromHist] Page de requête pour la demande de masquage";
lrcParamDesc["DescAFRDFH_Template"]                 = "[AskForRevisionDeleteFromHist] Modèle pour la demande de masquage";
lrcParamDesc["DescAFRDFH_ReasonInputSize"]          = "[AskForRevisionDeleteFromHist] Taille du champ « Raison » ";
lrcParamDesc["DescAFRDFH_UseOutOfLiveRC"]           = "[AskForRevisionDeleteFromHist] Activer dans les pages d’historique normales";
lrcParamDesc["DesclstAskForRevisionReasons_short"]  = "Masquage";
lrcParamDesc["DesclstAskForRevisionReasons"]        = "Raisons de requête de masquage";

}catch(e){ }

// Limitation
LiveRC_Config["LimitationsRight"]["AskForRevisionDeleteFromHist"] = "autopatrol";


// Liste de raisons
window.Custom_lstAskForRevisionReasons = [];
window.lstAskForRevisionReasons = [
 { reason : "Violation de copyright",                 text : "copyvio"     },
 { reason : "Diffamation",                            text : "diffamation" },
 { reason : "Renseignements personnels inappropriés", text : "vie privée"  }
];


// Personnalisation auto
 
window.defineCustomAskForRevisionReasons = function(AskForRevisionReasons){
  Custom_lstAskForRevisionReasons = AskForRevisionReasons;
}
 
LiveRC_AddHook("AfterFillParamPanel", function(){
  LiveRC_ManageParams_Fill(lstAskForRevisionReasons, "lstAskForRevisionReasons", "defineCustomAskForRevisionReasons", true);
});


// ********************************************************************************************************* //

window.LiveRC_AskForRevisionDeleteFromHistExtension_PreProcess = function(){
    if(!lrcMakeParam("AFRDFH_UseOutOfLiveRC") ) return;
    LiveRC_Config["LaunchProcessForce"]["InterfaceLang"] = true;
    LiveRC_Config["LaunchProcessForce"]["UserInfos"] = true;
    LiveRC_Config["LaunchProcessForce"]["TranslationsLoaded"] = true;
    LiveRC_Config["LaunchProcessForce"]["InitTranslations"] = true;
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_Init = function(){
  if(!lrcUserCan("AskForRevisionDeleteFromHist") || lrcUserHasRight("deleterevision")) return;
  LiveRC_Config["LaunchProcess"].push({functions:LiveRC_AskForRevisionDeleteFromHistExtension_Run});
}
if(mw.config.get('wgAction')=="history"){
  LiveRC_AddHook("BeforeInitActivationProcess", LiveRC_AskForRevisionDeleteFromHistExtension_PreProcess);
  LiveRC_AddHook("AfterGotUserInfos", LiveRC_AskForRevisionDeleteFromHistExtension_Init);
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_Run = function(data){
  if(!lrcUserCan("AskForRevisionDeleteFromHist") || lrcUserHasRight("deleterevision")) return LiveRC_LaunchProcessNextStep();
  var HistForm = getElementWithId("mw-history-compare", 'form', document);
  var HistUL = getElementWithId("pagehistory", 'ul', Form);
  if(!HistForm || !HistUL) return LiveRC_LaunchProcessNextStep();
  var Lis = HistUL.getElementsByTagName('li');
  for(var a=0,l=Lis.length;a<l;a++){
    var Li = Lis[a];
    var AlreadyCheckboxes = false;
    for(var i=0,ilen=Inputs.length;i<ilen;i++){
      var Input = Inputs[i];
      if(Input.type !== "checkbox") continue;
      if(!Input.name) continue;
      if(Input.name.indexOf("ids[") !== -1){
        $(Input).addClass("AFRDFH_checkbox");
        AlreadyCheckboxes = true;
      }
    }
    if(AlreadyCheckboxes) continue;
    var Target = lrcGetElementsByClass("mw-changeslist-date", Li, "a")[0];
    if(!Target) continue; // revision already hidden
    var Input = document.createElement('input');
    Input.type = "checkbox";
    Input.className = "AFRDFH_checkbox";
    Input.name = "ids["+lrcGetArgFromURL(Target.href, "oldid")+"]";
    Input.value = "1";
    Target.parentNode.insertBefore(Input, Target);
  }
  var revisionactionsDiv = lrcGetElementsByClass("mw-history-revisionactions", HistForm, "div");
  if(revisionactionsDiv.length > 0){
    for(var a=0,l=revisionactionsDiv.length;a<l;a++){
      revisionactionsDiv[a].insertBefore(LiveRC_AskForRevisionDeleteFromHistExtension_CreateSubmitInput(), revisionactionsDiv[a].firstChild);
    }
  }else{
    var CompareInputs = lrcGetElementsByClass("mw-history-compareselectedversions-button", HistForm, "input");
    if(CompareInputs.length > 0){
      for(var a=0,l=CompareInputs.length;a<l;a++){
        CompareInputs[a].parentNode.appendChild(LiveRC_AskForRevisionDeleteFromHistExtension_CreateSubmitInput());
      }
    }    
  }
  LiveRC_LaunchProcessNextStep();
}
LiveRC_AddHook("AfterPreviewHistory", LiveRC_AskForRevisionDeleteFromHistExtension_Run);

window.LiveRC_AskForRevisionDeleteFromHistExtension_CreateSubmitInput = function(){
  var SubmitInput = document.createElement('input');
  SubmitInput.id = "AFRDFH_button_"+a;
  SubmitInput.type = "button";
  SubmitInput.className = "AFRDFH_buttonReason";
  SubmitInput.value = lrcMakeText("AFRDFH_ButtonText");
  SubmitInput.onclick = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_CreateReasonForm(this); };
  return SubmitInput;
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_DisAbleCheckboxes = function(Disable){
  var HistForm = getElementWithId("mw-history-compare", 'form', document);
  var HistUL = getElementWithId("pagehistory", 'ul', document);
  if(!HistForm || !HistUL) return;
  var Checkboxes = lrcGetElementsByClass("AFRDFH_checkbox", HistUL, "input");
  for(var a=0,l=Checkboxes.length;a<l;a++){
    Checkboxes[a].disabled = ( Disable ? "disabled" : false );
  }
  var SubmitInputs = lrcGetElementsByClass("AFRDFH_buttonReason", HistForm, "input");
  for(var a=0,l=SubmitInputs.length;a<l;a++){
    SubmitInputs[a].style.display = ( Disable ? "none" : "" );
  }
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_GetIds = function(){
  var HistForm = getElementWithId("mw-history-compare", 'form', document);
  var HistParams = getFormParams(HistForm);
  var ids = [];
  for(var paramname in HistParams){
    if(paramname.indexOf("ids[")===0) ids.push(encodeURIComponent(paramname)+"=1");
  }
  if(ids.length===0){
    LiveRC_alert(lrcMakeText("AFRDFH_NoSelection"));
    return false;
  }
  return ids;
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_CreateReasonForm = function(Button){
  if(!Button) return;
  var ids = LiveRC_AskForRevisionDeleteFromHistExtension_GetIds();
  if(!ids) return;
  LiveRC_AskForRevisionDeleteFromHistExtension_DisAbleCheckboxes(true);
  var Form = document.createElement("form");
  Form.id = "AFRDFH_form";
  Form.style.display = "inline";
  Form.submit = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Process(); return false; };
  var InputText = document.createElement('input');
  InputText.type = "text";
  InputText.id = "AFRDFH_inputtext";
  InputText.size = lrcMakeParam("AFRDFH_ReasonInputSize");
  InputText.title = lrcMakeText("AFRDFH_AskReason");
  Form.appendChild(InputText);
  var InputOK = document.createElement('input');
  InputOK.type = "button";
  InputOK.value = lrcMakeText("OK");
  InputOK.onclick = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Process(); };
  InputOK.onselect = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Process(); };
  Form.appendChild(InputOK);
  var CancelInput = document.createElement('input');
  CancelInput.type = "button";
  CancelInput.value = lrcMakeText("Cancel");
  CancelInput.onclick = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_CloseReasonForm(); }
  CancelInput.onselect = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_CloseReasonForm(); }
  Form.appendChild(CancelInput);
  Button.parentNode.insertBefore(Form, Button.nextSibling);
  LiveRC_AskForRevisionDeleteFromHistExtension_Init(Button);
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_Init = function(Button){
    var Input = document.getElementById("AFRDFH_inputtext");
    if(!Input) return;
    var Bottom = parseInt(Button.id.replace(/[^0-9]/g, ""));
    var Select = document.createElement('select');
    Select.id = "AFRDFH_SelectList";
    Select.style.zIndex = 100;
    Select.className = "LiveRC_Opacity_100";
    var OptZero = '<option selected="selected" onClick="LiveRC_AskForRevisionDeleteFromHistExtension_Update()" value=""> </option>';
    Select.innerHTML = OptZero;
    var Reasons = Custom_lstAskForRevisionReasons;
    if(!Reasons || Reasons.length==0) Reasons = lstAskForRevisionReasons;
    for(var a=0,l=Reasons.length;a<l;a++){
      var Reason = Reasons[a];
      var Opt = document.createElement('option');
      Opt.value = Reason.reason;
      Opt.title = Reason.reason;
      Opt.onclick = LiveRC_AskForRevisionDeleteFromHistExtension_Update;
      Opt.name = a;
      Opt.innerHTML = Reason.text;
      Select.appendChild(Opt);
    }
    var Taille = (Reasons.length+1);
    Select.style.display = "none";
    Select.style.position = "relative" ;
    Select.style.width = Input.offsetWidth + "px" ;
//    Select.style.height = ((Reasons.length+1) * 20) + "px" ;
    Select.size = Taille;
    if(!Bottom){
      Select.style.top = parseInt(Input.offsetHeight) + "px";
      Select.style.marginBottom = "-" + (20 * Taille) + "px";
    }else{
      Select.style.marginTop = "-" + (16.5 * Taille) + "px" ;
    }
    Select.style.marginLeft = "-"+Input.offsetWidth+"px" ;
    Input.parentNode.insertBefore(Select, Input.nextSibling);
    Select.onkeyup = LiveRC_AskForRevisionDeleteFromHistExtension_KeyPress;
    Select.onchange = LiveRC_AskForRevisionDeleteFromHistExtension_Update;
    Input.onmouseover = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Toggle(true); };
    Select.onmouseover = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Toggle(true); };
    Input.onmouseout = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Toggle(false); };
    Select.onmouseout = function(){ LiveRC_AskForRevisionDeleteFromHistExtension_Toggle(false); };
}
 
window.LiveRC_AskForRevisionDeleteFromHistExtension_Toggle = function(show){
    var Select = document.getElementById("AFRDFH_SelectList");
    if(!Select) return;
    if(show){
        clearTimeout(LiveRC_Config["Timeout"]["AFRDFH_SelectList"]);
        Select.className = "LiveRC_Opacity_100";
        Select.style.display = "inline";
    }else{
        LiveRC_Config["Timeout"]["AFRDFH_SelectList"] = setTimeout("LiveRC_alert_setOpacity("+lrcEscapeStr("AFRDFH_SelectList")+", function(){document.getElementById("+lrcEscapeStr("AFRDFH_SelectList")+").style.display = "+lrcEscapeStr("none")+";}, 5, 50);", 200);
    }
}
 
window.LiveRC_AskForRevisionDeleteFromHistExtension_KeyPress = function(e){
    if (!e) var e = window.event;
    if (e.keyCode != 13) return;
    LiveRC_AskForRevisionDeleteFromHistExtension_Update();
}
 
window.LiveRC_AskForRevisionDeleteFromHistExtension_Update = function(){
    var Input = document.getElementById("AFRDFH_inputtext");
    var Select = document.getElementById("AFRDFH_SelectList");
    if(!Input || !Select) return;
    var InputValue = Input.value;
    var Options = Select.getElementsByTagName('option');
    for(var a=0,l=Options.length;a<l;a++){
        if(!Options[a].selected) continue;
        Input.value = Options[a].value;
        Input.focus();
        return;
    }
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_CloseReasonForm = function(){
  var Form = document.getElementById("AFRDFH_form");
  if(Form) Form.parentNode.removeChild(Form);
  LiveRC_AskForRevisionDeleteFromHistExtension_DisAbleCheckboxes(false);
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_Process = function(){
  var ids = LiveRC_AskForRevisionDeleteFromHistExtension_GetIds();
  if(!ids) return;
  var type;
  var Form = getElementWithId("mw-history-compare", 'form', document);
  if(Form){
    type = "revision";
  }else{
    Form = getElementWithId("mw-log-deleterevision-submit", 'form', document);
    type = "logging";
  }
  if(!Form) return;
  var Params = getFormParams(Form);
  var title = Params["title"];
  if(!title) title = lrcGetNamespaceName(-1, true) + ":Log";
  var ReasonInput = document.getElementById("AFRDFH_inputtext");
  Reason = ReasonInput.value;
  if(!Reason){
    LiveRC_alert(lrcMakeText("AFRDFH_NoReason"));
    return;
  }
  var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?action=revisiondelete&type=' + type + "&" + ids.join("&");
  var Template = lrcMakeParam("AFRDFH_Template");
  Template = Template.split("$page").join(title);
  Template = Template.split("$url").join(URL);  
  Template = Template.split("$reason").join(Reason);
  LiveRC_AskForRevisionDeleteFromHistExtension_CreateRequest(Template, title);
  return false;
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_CreateRequest = function(Template, title){
  var Page = buildReportPageMagicWords(lrcMakeParam("AFRDFH_RequestPage"));
  var summary = lrcMakeText("AFRDFH_Resume").split("$1").join(title);
  var URL = lrcGetAPIURL('format=xml&action=query&prop=info&meta=tokens&type=csrf&inprop=protection&titles='+encodeURIComponent(Page));
  wpajax.http({ url       : URL,
                onSuccess : LiveRC_AskForRevisionDeleteFromHistExtension_SendRequest,
                template  : Template,
                summary   : summary,
                page      : Page
  });
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_SendRequest = function(Req, data){
  var page = data.page;
  var message = data.template;
  var summary = data.summary;
  var ObjetXML = Req.responseXML;
  var Isprotected = false;
  var PR = ObjetXML.getElementsByTagName("pr");
  for(var a=0,l=PR.length;a<l;a++){
    var Type = PR[a].getAttribute("type");
    var Level = PR[a].getAttribute("level");
    if(Type=="edit" && !lrcUserHasGroup(Level)) Isprotected = true;
  }
  if(Isprotected){
    LiveRC_alert("<b>"+lrcMakeText("PROTECTEDPAGE").split("$1").join(page)+"</b>");
    return;
  }
  var EditParam = new Array();
  EditParam["token"] = ObjetXML.getElementsByTagName('tokens')[0].getAttribute('csrftoken');
  EditParam["section"] = "new";
  EditParam["sectiontitle"] = summary;
  EditParam["text"] = '\n{{subst:' + message +'}}\n';
  EditParam["title"] = page;
  EditParam["notminor"] = "1";
  EditParam["watchlist"] = "preferences";
  if(lrcMakeParam("BypassWatchdefault")) EditParam["watchlist"] = "nochange";
  var Params = new Array();
  for(var Param in EditParam){
    Params.push(Param+"="+encodeURIComponent(EditParam[Param]));
  }
  Params = Params.join("&");
  var headers = new Array();
  headers['Content-Type'] = 'application/x-www-form-urlencoded';
  wpajax.http({ url: lrcGetAPIURL('action=edit'),
                method: "POST", headers: headers,
                data: Params,
                onSuccess: LiveRC_AskForRevisionDeleteFromHistExtension_SendRequestDone,
                params:EditParam
  });
}

window.LiveRC_AskForRevisionDeleteFromHistExtension_SendRequestDone = function(Req, data){
  var params = data.params;
  var text = "<b>"+params["title"]+ " : " + lrcMakeText("REPORTING_DONE") + "</b> <small>("+params["text"]+")</small>";
  LiveRC_alert(text);
  LiveRC_AskForRevisionDeleteFromHistExtension_CloseReasonForm();
}

/* *************************************************************************************************************************** */
} // FIN IF
//</source>