Aller au contenu

Utilisateur:Durifon/inline.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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
 * Inline
 *
 * Quand vous sélectionnez du texte, Inline ajoute des liens dans la colonne de gauche permettant d'y appliquer des modèles du genre de
   {{Référence nécessaire}} ou de {{Passage non neutre}}. Compatible avec la dernière version de Wikipédia (Vector) et l'ancienne (Monobook).
 *
 * Auteur :Marin M. Mis à jour par Durifon
 * Date de dernière révision : 21 novembre 2016
 *
 * A implémenter: Suppression de contenu sélectionné
 * Insertion automatique de la date dans les modèles le prévoyant
 *
 */

// Pour utiliser Inline, mettez importScript('Utilisateur:Durifon/inline.js'); dans [[Spécial:Ma_page/common.js]]

if(mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') > -1 /* Todo : pages non modifiables */) {
	$(function($) {

		var inlineSelected;
		var inlineIsWorking = false;
		var $document = $(document);
		var $inlineGadgetMenu;

		function inlineAdd(name, before, after) {
			$inlineGadgetMenu.append($('<li></li>').append($('<a></a>').html(name).css('cursor', 'pointer')).mousedown(function() {
				if(confirm('Modifier la page ?')) {
				inlineIsWorking = true;
				$inlineGadgetMenu.html('Chargement en cours...');
				$.ajax({url: mw.config.get('wgScriptPath') + '/api.php', type: 'POST', data: 'action=query&prop=info&intoken=edit&format=json&titles=World_of_Goo', success: function(ni) {
					for(var i in ni.query.pages) {
						var token = ni.query.pages[i].edittoken.replace('+\\', '%2B%5C');
						$.ajax({url: mw.config.get('wgScript') + '?action=raw&title=' + encodeURIComponent(mw.config.get('wgPageName')), type: 'GET', cache: false, success: function(content) {
							var testDebut = inlineSelected.length;
							while(content.indexOf(inlineSelected.substring(0, testDebut)) == -1) {
								testDebut--;
							}

							if(testDebut != inlineSelected.length) {
								var testFin = testDebut;
								while(content.substring(content.indexOf(inlineSelected.substring(0, testDebut))).indexOf(inlineSelected.substring(testFin)) == -1) {
									testFin++;
								}
								var checker = new RegExp(inlineSelected.substring(0, testDebut).replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1") + '.*?' + inlineSelected.substring(testFin).replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1")).exec(content);
								if(checker === null) {
									alert('Beuh... Inline ne parvient pas à trouver le bout de texte sélectionné dans l\'article.');
									window.location.reload();
								} else {
									if(content.substring(content.indexOf(inlineSelected.substring(testFin)), content.indexOf(inlineSelected.substring(testFin)) + inlineSelected.substring(testFin).length + 2) == inlineSelected.substring(testFin) + ']]') {
										checker[0] += ']]';
									}
									content = content.replace(checker[0], before + checker[0] + after);
								}
							} else {
								content = content.replace(inlineSelected, before + inlineSelected + after);
							}
							content = encodeURIComponent(content);
							if(name == 'Gras' || name == 'Italique') {
								$.ajax({url: mw.config.get('wgScriptPath') + '/api.php', type: 'POST', data: 'action=edit&text=' + content + '&summary=[[Utilisateur:Durifon/inline.js|Inline]] - Mise en forme&token=' + token + '&minor=true&title=' + encodeURIComponent(mw.config.get('wgPageName')), success: function() {
									window.location.reload();
								}});
							} else {
								$.ajax({url: mw.config.get('wgScriptPath') + '/api.php', type: 'POST', data: 'action=edit&text=' + content + '&summary=[[Utilisateur:Durifon/inline.js|Inline]] - Ajout de ' + before.replace('|', '') + '}}&token=' + token + '&minor=true&title=' + encodeURIComponent(mw.config.get('wgPageName')), success: function() {
									window.location.reload();
								}});
							}
						}});
					}
				}});
				}
			}));
		}

		function inlineAddSpacer() {
			$inlineGadgetMenu.append($('<li></li>').html(''));
		}

		if(mw.config.get('skin') == 'vector') {
			var inlineBg = '#f6f6f6';
			$('#mw-panel').append($('<div></div>').addClass('portal').addClass('persistent').css('background', inlineBg).append($('<div></div>').addClass('body').append($('<ul></ul>', {id: 'inlineGadgetMenu'}))));
			var inlineTop = 170;
			var inlineLeft = 0;
			var inlineWidth = 150;
			var inlineZero = 0;
		} else {
			var inlineBg = '#f9f9f9';
			$('#column-one').append($('<div></div>').addClass('portal').css('background', inlineBg).append($('<div></div>').addClass('pBody').append($('<ul></ul>', {id: 'inlineGadgetMenu'}))));
			var inlineTop = 174;
			var inlineLeft = -18;
			var inlineWidth = 145;
			var inlineZero = -4;
		}
		$inlineGadgetMenu = $('#inlineGadgetMenu');
		$inlineGadgetMenu.css('z-index', '99999').css('display', 'none').css('position', 'fixed').css('background', inlineBg).css('left', inlineLeft).css('width', inlineWidth + 'px').css('padding', '5px');
		$document.scroll(function() {
			if($document.scrollTop() < inlineTop) {
				$inlineGadgetMenu.css('top', ((inlineTop - $document.scrollTop()) + inlineLeft) + 'px');
				$inlineGadgetMenu.css('height', (($document.height() - 10) - $document.scrollTop()) + 'px');
			} else {
				$inlineGadgetMenu.css('top', inlineZero + 'px');
				$inlineGadgetMenu.css('height', $document.height() - 10 + 'px');
			}
		});
		$document.scroll();
		inlineAdd('Référence nécessaire', '{{Référence nécessaire|', '}}');
		inlineAdd('Référence souhaitée', '{{Référence souhaitée|', '}}');
		inlineAdd('Référence insuffisante', '{{Référence insuffisante|', '}}');
		inlineAdd('Référence incomplète', '{{Référence incomplète|', '}}');
		inlineAdd('Référence à confirmer', '{{Référence à confirmer|', '}}');
		inlineAdd('Précision nécessaire', '{{Précision nécessaire|', '}}');
		inlineAddSpacer();
		inlineAdd('Passage non neutre', '{{Passage non neutre|', '}}');
		inlineAdd('Passage inédit', '{{Passage inédit|', '}}');
		inlineAdd('Passage évasif', '{{Passage évasif|', '}}');
		inlineAdd('Qui', '{{Qui|', '}}');
		inlineAdd('Quoi', '{{Quoi|', '}}');
		inlineAdd('Quand', '{{Quand|', '}}');
		inlineAdd('Où', '{{Où|', '}}');
		inlineAdd('Par qui', '{{Par qui|', '}}');
		inlineAdd('Pas clair', '{{Pas clair|', '}}');
		inlineAdd('Pourquoi', '{{Pourquoi|', '}}');
		inlineAdd('Combien', '{{Combien|', '}}');
		inlineAdd('Laquelle', '{{Laquelle|', '}}');
		inlineAdd('Lequel', '{{Lequel|', '}}');
		inlineAdd('Lesquels', '{{Lesquels|', '}}');
		inlineAdd('Lesquelles', '{{Lesquelles|', '}}');
		inlineAdd('Contradiction', '{{Contrad|', '}}');
		inlineAdd('Pertinence', '{{Pertinence détail|', '}}');
		inlineAdd('Actualiser', '{{Passage à actualiser|', '}}');
		inlineAdd('Lien Interne', '[[', ']]');
		inlineAddSpacer();
		inlineAdd('Gras', '\'\'\'', '\'\'\'');
		inlineAdd('Italique', '\'\'', '\'\'');
		setInterval(function() {
			if(window.getSelection().toString() !== '') {
				inlineSelected = window.getSelection().toString().replace('    ', '');
				$inlineGadgetMenu.css('display', 'block');
			} else {
				if(!inlineIsWorking) {
					$inlineGadgetMenu.css('display', 'none');
				}
			}
		}, 250);
	});
}