Utilisateur:Shawn/js/BlockMessage.js

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.
/*
Basé sur https://fr.wikipedia.org/w/index.php?title=Utilisateur:0x010C/script/BlockMessage.js&oldid=139673872
<nowiki>
*/
var bm_texts = {
	"default-header" : "Bloquer l’utilisateur",
	"success-header" : "Blocage réussi",
	"form-legend": "Avertir \'$1\' de son blocage",
	"template-label": "Modèle",
	"subst-label": "Subster le modèle",
	"clean-label": "Effacer la PdD avant de mettre le modèle",
	"extra-label": "Rajouter un message sous le modèle",
	"submit-label": "Avertir",
	"message-summary": "Blocage",
	"section-title": "Blocage",
	"successnotif": "La pose du message a réussi",
	"time-label": "Durée",
	"unit-label": "Unité",
};


var items = [
	{
		"separator": "Durée limitée",
	}, {
		"name": "Bloqué",
		"template": "Bloqué|$1|$2",
	}, {
		"name": "Bloqué sans avertissement",
		"template": "Bloqué sans avertissement|$1|$2",
	}, {
		"name": "Insultes",
		"template": "Insultes|$1|$2",
	}, {
		"name": "IP partagée bloquée",
		"template": "IP partagée bloquée|$1|$2",
	}, {
		"name": "Vandale scolaire bloqué",
		"template": "Vandale scolaire bloqué",
		"autoselect-time": "15 july 2017",
	}, {
		"name": "Proxy",
		"template": "Proxy",
		"default-subst": false,
		"autoselect-reason": "[[Wikipédia:Proxy ouvert|Proxy ouvert]]",
	}, {
		"name": "IP bloquée pour 3 jours",
		"template": "Adresse IP bloquée pour trois jours|$3|$1|$2",
	}, {
		"separator": "Durée indéfinie",
	}, {
		"name": "Vandale banni",
		"template": "Vandale banni",
		"default-clean": true,
	}, {
		"name": "Vandale banni sans avertissement",
		"template": "Vandale banni sans avertissement",
		"default-clean": true,
	}, {
		"name": "Compte bloqué indéfiniment",
		"template": "Compte bloqué indéfiniment|$3",
		"default-clean": true,
		"autoselect-time": "infinite",
	}, {
		"name": "Bot banni",
		"template": "Bot banni",
	},
];

var bm_vars = {
	"user": null,
	"reason": null,
	"duree": null,
};


$(function() {
	if (mw.config.get("wgCanonicalNamespace") === "Special" && mw.config.get("wgCanonicalSpecialPageName") === "Block") {
		if ($("#firstHeading").html() == bm_texts['default-header']) {
			$(".mw-htmlform-submit").click(function(event) {
				if($("#mw-input-wpExpiry").val() == "other")
					$.cookie("blockmessages-duree", $("#mw-input-wpExpiry-other").val());
				else
					$.cookie("blockmessages-duree", $("#mw-input-wpExpiry").val());
				if($("#mw-input-wpReason").val() == "other")
					$.cookie("blockmessages-reason", $("#mw-input-wpReason-other").val());
				else if($("#mw-input-wpReason-other").val() !== "")
					$.cookie("blockmessages-reason", $("#mw-input-wpReason").val()+" : "+$("#mw-input-wpReason-other").val());
				else
					$.cookie("blockmessages-reason", $("#mw-input-wpReason").val());
			});
		} else if ($("#firstHeading").html() == bm_texts['success-header'] && $.cookie("blockmessages-duree") !== null) {
			bm_vars = {
				"user": mw.config.get('wgRelevantUserName'),
				"reason": $.cookie("blockmessages-reason"),
				"duree": $.cookie("blockmessages-duree"),
			};
			bm_add_form();
			bm_parse_time();

			$("#blockmessage-submit").click(function(event) {
				event.preventDefault();
				$("#blockmessage-submit").attr("disabled","disabled");
				bm_send_message();
			});
			$("#blockmessage-select").change(function (event) {
				var id = $("#blockmessage-select option:selected").attr("bm-id");
				if(items[id].hasOwnProperty("default-subst")) {
					if(items[id]["default-subst"])
						$("#blockmessage-subst").prop('checked', true);
					else
						$("#blockmessage-subst").prop('checked', false);
				}
				if(items[id].hasOwnProperty("default-clean")) {
					if(items[id]["default-clean"])
						$("#blockmessage-clean").prop('checked', true);
					else
						$("#blockmessage-clean").prop('checked', false);
				}
			});
      $("#blockmessage-extra").change(function (event) {
			 if($("#blockmessage-extra:checked").length > 0)
         $("#blockmessage-extra-container").show();
       else
         $("#blockmessage-extra-container").hide();
			});
			
			bm_populate_select();
		}
	}
});


function bm_add_form() {
	$('#bodyContent').append('\
    <form class="visualClear">\
     <fieldset>\
      <legend>' + bm_texts['form-legend'].replace("$1", bm_vars["user"]) + '</legend>\
      <table>\
       <tbody>\
        <tr class="mw-htmlform-field-HTMLSelectOrOtherField">\
         <td class="mw-label">\
          <label for="blockmessage-select">' + bm_texts['template-label'] + '&nbsp;:</label>\
         </td>\
         <td class="mw-input">\
          <select id="blockmessage-select" class="mw-htmlform-select-or-other">\
          </select>\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLSelectOrOtherField blockmessage-hidden" style="display:none;">\
         <td class="mw-label">\
          <label for="blockmessage-time">' + bm_texts['time-label'] + '&nbsp;:</label>\
         </td>\
         <td class="mw-input">\
          <input id="blockmessage-time" size="45" />\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLSelectOrOtherField blockmessage-hidden" style="display:none;">\
         <td class="mw-label">\
          <label for="blockmessage-unit">' + bm_texts['unit-label'] + '&nbsp;:</label>\
         </td>\
         <td class="mw-input">\
          <input id="blockmessage-unit" size="45" />\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLCheckField">\
         <td class="mw-label">\
          <label>&nbsp;</label>\
         </td>\
         <td class="mw-input">\
          <input name="blockmessage-subst" checked="checked" id="blockmessage-subst" type="checkbox">&nbsp;<label for="blockmessage-subst">' + bm_texts['subst-label'] + '</label>\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLCheckField">\
         <td class="mw-label">\
          <label>&nbsp;</label>\
         </td>\
         <td class="mw-input">\
          <input name="blockmessage-clean" id="blockmessage-clean" type="checkbox">&nbsp;<label for="blockmessage-clean">' + bm_texts['clean-label'] + '</label>\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLCheckField">\
         <td class="mw-label">\
          <label>&nbsp;</label>\
         </td>\
         <td class="mw-input">\
          <input name="blockmessage-extra" id="blockmessage-extra" type="checkbox">&nbsp;<label for="blockmessage-extra">' + bm_texts['extra-label'] + '</label>\
         </td>\
        </tr>\
        <tr class="mw-htmlform-field-HTMLSelectOrOtherField blockmessage-hidden" id="blockmessage-extra-container" style="display:none;">\
         <td class="mw-label">\
         </td>\
         <td class="mw-textarea">\
          <textarea id="blockmessage-extra-textarea" name="blockmessage-extra-textarea" cols="70" rows="6"></textarea>\
          <small>(attention, la signature n\'est plus apposée automatiquement)</small>\
         </td>\
        </tr>\
       </tbody>\
      </table>\
     <input id="blockmessage-submit" class="mw-htmlform-submit" value="' + bm_texts['submit-label'] + '" type="submit">\
    </fieldset>\
   </form>\
  ');
}


function bm_populate_select() {
	var root = $("#blockmessage-select");
	var current_node = root;
	var optgroup_open = null;
	$(items).each(function(key) {
		if (this.hasOwnProperty("separator")) {
			current_node = $('<optgroup label="' + this.separator + '">');
			root.append(current_node);
		} else {
			var option = $("<option>").attr('value', this.template).attr('bm-id', key).text(this.name);
			if(this.hasOwnProperty('autoselect-time') && bm_vars["duree"] !== null) {
				if(bm_vars["duree"].indexOf(this['autoselect-time']) > -1) {
					option.prop('selected', true);
				}
			}
			if(this.hasOwnProperty('autoselect-reason') && bm_vars["user"] !== null) {
				if(bm_vars["user"].indexOf(this['autoselect-reason']) > -1) {
					option.prop('selected', true);
				}
			}
			current_node.append(option);
		}
	});
}


function bm_parse_time() {
	time_set = true;
	if (bm_vars["duree"] !== null) {
		var tmp = bm_vars["duree"].split(" ");
		if (tmp.length == 2 && !isNaN(tmp[0])) {
			switch (tmp[1]) {
				case "hour":
					$("#blockmessage-unit").attr("value", "heure");
					break;
				case "hours":
					$("#blockmessage-unit").attr("value", "heures");
					break;
				case "day":
					$("#blockmessage-unit").attr("value", "jour");
					break;
				case "days":
					$("#blockmessage-unit").attr("value", "jours");
					break;
				case "week":
					$("#blockmessage-unit").attr("value", "semaine");
					break;
				case "weeks":
					$("#blockmessage-unit").attr("value", "semaines");
					break;
				case "month":
					$("#blockmessage-unit").attr("value", "mois");
					break;
				case "months":
					$("#blockmessage-unit").attr("value", "mois");
					break;
				case "year":
					$("#blockmessage-unit").attr("value", "année");
					break;
				case "years":
					$("#blockmessage-unit").attr("value", "années");
					break;
				default:
					time_set = false;
			}
			if (time_set) {
				$("#blockmessage-time").attr("value", tmp[0]);
			}
		} else {
			time_set = false;
		}
	} else {
		time_set = false;
	}


	if (!time_set) {
		$(".blockmessage-hidden").show();
	}
}


function bm_send_message() {
	var subst = '';
	if ($("#blockmessage-subst").is(":checked")) {
		subst = 'subst:';
	}
  var extra = ' ~~~~';
  if ($("#blockmessage-extra:checked").length > 0) {
    extra = '\n\n'+$("#blockmessage-extra-textarea").val();
  }

	$.ajax({
		url: mw.util.wikiScript('api'),
		data: {
			action: 'query',
			meta: 'tokens',
			format: 'json',
			type: 'csrf',
		},
		dataType: 'json'
	}).then(function(data) {
		var d = {
			action: 'edit',
			title: 'User talk:' + bm_vars["user"],
			summary: bm_texts['message-summary'],
			format: 'json',
			token: data.query.tokens.csrftoken,
			text: "{{" + subst + $("#blockmessage-select").val().replace("$1", $("#blockmessage-time").val()).replace("$2", $("#blockmessage-unit").val()).replace("$3", bm_vars["reason"]) + "}}"+extra,
		};
		if (!$("#blockmessage-clean").is(":checked")) {
			d.section = "new";
			d.sectiontitle = bm_texts['section-title'];
		}
		$.ajax({
			url: mw.util.wikiScript('api'),
			method: 'POST',
			data: d,
			dataType: 'json',
			success: function(data) {
				mw.notify(bm_texts['successnotif']);
				$.removeCookie("blockmessages-user");
				$.removeCookie("blockmessages-duree");
				$.removeCookie("blockmessages-reason");
				setTimeout(function() {
					document.location.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace("$1", "User talk:"+bm_vars["user"]+"#footer");
				}, 750);
			}
		});
	});
}

/*
</nowiki>
*/