Utilisateur:0x010C/script/AppendDatabox.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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//<source lang=javascript>
//<pre><nowiki>
var ADBvars_basetemplate = "{{Infobox Biographie2}}\n";
var ADBvars_imagetemplate = "{{Infobox Biographie2\n| image   = $1\n| légende = $2\n}}\n";

var ADBvars_Texts = {
 "nowikidataitem"               : "Pas d'élément lié sur Wikidata",
 "p31notspecified"              : "« Nature de l'élément » non renseignée sur Wikidata",
 "add"                          : "L'ajouter dans l'article",
 "showpreview"                  : "Afficher l'Infobox Biographie2",
 "hidepreview"                  : "Cesser d'afficher l'Infobox Biographie2",
 "confirmmodaltext"             : "Voulez-vous déplacer la première image de l'article dans l'Infobox Biographie2 ?",
 "editsummary"                  : "ajout de l'[[Modèle:Infobox Biographie2|Infobox Biographie2]] via [[Utilisateur:0x010C/script#AppendDatabox.js|AppendDatabox]]",
 "successnotif"                 : "L'Infobox a été ajoutée :)",
};

mw.loader.using(['jquery.client', 'jquery.mwEmbedUtil', 'jquery.ui']);


$(function() {
	if (mw.config.get('wgNamespaceNumber') == 0 && mw.config.get('wgAction') == 'view' && !appenddatabox_justsaved()) {
		if ($("#t-wikibase").length)
			appenddatabox_getwikidataentity();
		else
			$('#firstHeading').before('<div style="float:right;"><small>['+ADBvars_Texts['nowikidataitem']+']</small></div>');
	}
});

function appenddatabox_getwikidataentity() {
	$.ajax({
		'url': 'https://www.wikidata.org/w/api.php',
		'data': {
			'action': 'wbgetclaims',
			'entity': 'Q' + $("#t-wikibase a").attr("href").split("Q")[1],
			'format': 'json',
			'origin': 'https://'+mw.config.get('wgServerName'),
		},
		'xhrFields': {
			'withCredentials': true
		},
		'dataType': 'json',
		'success': function(data) {
			if (typeof data.claims["P31"] === "undefined")
				$('#firstHeading').before('<div style="float:right;"><small>['+ADBvars_Texts['p31notspecified']+']</small></div>');
			else if (data.claims["P31"][0].mainsnak.datavalue.value['numeric-id'] == '5')
				appenddatabox_initialize();
		}
	});
}

function appenddatabox_initialize() {
	$('#firstHeading').before('<div style="float:right;" id="appenddatabox_link1"><small>[<a href="javascript:appenddatabox_showpreview();">'+ADBvars_Texts['showpreview']+'</a>]</small></div>');
}

function appenddatabox_showpreview() {
	$("#appenddatabox_link1").html('<small>[<a href="javascript:appenddatabox_hidepreview();">'+ADBvars_Texts['hidepreview']+'</a>]</small>');
	$.ajax({
		url: mw.util.wikiScript('api'),
		method: 'GET',
		data: {
			action: 'expandtemplates',
			text: ADBvars_basetemplate,
			prop: 'wikitext',
			title: mw.config.get('wgTitle'),
			format: 'json',
		},
	}).then(function(data) {
		$.ajax({
			url: mw.util.wikiScript('api'),
			method: 'POST',
			data: {
				action: 'parse',
				text: '<div id="appenddatabox_preview">' + data.expandtemplates.wikitext + '</div>',
				contentmodel: 'wikitext',
				prop: 'text',
				format: 'json',
			},
			success: function(data) {
				$("#mw-content-text").prepend(data.parse.text["*"]);
				if (typeof databoxeditor_changelinks == 'function')
					databoxeditor_changelinks();
			}
		});
	});
}

function appenddatabox_hidepreview() {
	$("#appenddatabox_preview").remove();
	$("#appenddatabox_link1").html('<small>[<a href="javascript:appenddatabox_showpreview();">'+ADBvars_Texts['showpreview']+'</a>]</small>');
}

function appenddatabox_insert() {
	$("#appenddatabox_link2").html('<small>['+ADBvars_Texts['add']+']</small>');
	$.ajax({
		url: mw.util.wikiScript('api'),
		method: 'GET',
		data: {
			action: 'query',
			prop: 'revisions',
			rvprop: 'timestamp|content',
			titles: mw.config.get('wgTitle'),
			format: 'json',
		},
		success: function(data) {
			revision = [];
			revision.timestamp = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0].timestamp;
			revision.content = data.query.pages[Object.keys(data.query.pages)[0]].revisions[0]["*"];
			var r_pictures = /(\[\[(?:[Ff]ile|[Ii]mage|[Ff]ichier):([^|\]]+)\|*(?:(?:thumb|thumbnail|alt|vignette|framed|cadre|frameless|sans_cadre|left|gauche|right|droite|center|centre|néant|none|upright=*[0-9\.,]*|[0-9]+px)\|*)*((?:\[\[[^\]]*\]\]|[^|\]])*)(?:\|(?:thumb|thumbnail|alt|vignette|framed|cadre|frameless|sans_cadre|left|gauche|right|droite|center|centre|néant|none|upright=*[0-9\.,]*|[0-9]+px))*\|*\]\]\n?)/;
			var match = r_pictures.exec(revision.content);
			if (match) {
				$("body").append('<div id="appenddatabox_confirm">'+ADBvars_Texts['confirmmodaltext']+'</div>');
				$("#appenddatabox_confirm").dialog({
					resizable: false,
					height: 140,
					modal: true,
					autoOpen: true,
					buttons: {
						'Oui': function() {
							$(this).dialog("close");
							revision.content = revision.content.replace(match[1], "");
							appenddatabox_save(revision, ADBvars_imagetemplate.replace("$1", match[2]).replace("$2", match[3]));
						},
						'Non': function() {
							$(this).dialog("close");
							appenddatabox_save(revision, ADBvars_basetemplate);
						}
					}
				});
			} else
				appenddatabox_save(revision, ADBvars_basetemplate);
		}
	});
}

function appenddatabox_save(revision, template) {
	var r_template = /^\s*(\{\{([\n]+|[^\}]+)\}\}\s*)+/;
	var match = r_template.exec(revision.content);
	console.log(match);
	if (match)
		revision.content = revision.content.slice(0, match[0].length) + template + revision.content.slice(match[0].length);
	else
		revision.content = template + revision.content;
	$.ajax({
		url: mw.util.wikiScript('api'),
		data: {
			action: 'query',
			meta: 'tokens',
			format: 'json',
			type: 'csrf',
		},
		dataType: 'json'
	}).then(function(data) {
		$.ajax({
			url: mw.util.wikiScript('api'),
			method: 'POST',
			data: {
				action: 'edit',
				title: mw.config.get('wgTitle'),
				text: revision.content,
				summary: ADBvars_Texts['editsummary'],
				basetimestamp: revision.timestamp,
				format: 'json',
				token: data.query.tokens.csrftoken
			},
			dataType: 'json',
			success: function(data) {
				mw.notify(ADBvars_Texts['successnotif']);
				setTimeout(function() {
					document.location.href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace("$1", mw.config.get('wgPageName')) + "?action=purge&appenddatabox=success";
				}, 1500);
			}
		});
	});
}


function appenddatabox_justsaved() {
	var sPageURL = window.location.search.substring(1);
	var sURLVariables = sPageURL.split('&');
	for (var i = 0; i < sURLVariables.length; i++) {
		var sParameterName = sURLVariables[i].split('=');
		if (sParameterName[0] == "appenddatabox")
			return true;
	}
	return false;
}
//</nowiki></pre></source>