Aller au contenu

MediaWiki:Gadget-0xBlockMessage.js

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 31 mars 2016 à 19:24 et modifiée en dernier par 0x010C (discuter | contributions) (empêcher de double-cliquer sur le bouton d'envoie et de laisser par ce biais deux fois le messages). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
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.
/*
<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",
	"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 2016",
	}, {
		"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|$1|$3|$2",
	}, {
		"separator": "Durée indéfini",
	}, {
		"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 (window.location.pathname.indexOf(encodeURI("Spécial:Bloquer/")) == 6) {
		if ($("#firstHeading").html() == bm_texts['default-header']) {
			$(".visualClear .mw-htmlform-submit").click(function(event) {
				$.cookie("blockmessages-user", $("#mw-bi-target").val());
				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-user") !== null) {
			bm_vars = {
				"user": $.cookie("blockmessages-user"),
				"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").attr("checked", "checked");
					else
						$("#blockmessage-subst").removeAttr("checked");
				}
				if(items[id].hasOwnProperty("default-clean")) {
					if(items[id]["default-clean"])
						$("#blockmessage-clean").attr("checked", "checked");
					else
						$("#blockmessage-clean").removeAttr("checked");
				}
			});
			
			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>\
       </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:';
	}

	$.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"]) + "}} ~~~~",
		};
		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>
*/