Utilisateur:Efly/Script/AddTweet.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.
/**
 * Add an "add tweet" link to [[Projet:Aide_et_accueil/Twitter/Tweets]]
 *
 * @author [[User:eflyjason]]
 */

/* globals mw, OO, $ */

if (mw.config.get('wgPageName') === 'Projet:Aide_et_accueil/Twitter/Tweets' && mw.config.get('wgAction') === 'view') {
	$(function ($) {
		$('.mw-headline').each(function (index, headline) {
			var $parent = $(headline).parent('h2');
			if (!$parent.length) {
				return;
			}

			// use the href property (which is an absolute URL), not the attribute
			var editSectionUrl = $parent.find('.mw-editsection').find('a').first().prop('href');
			if (!editSectionUrl) {
				return;
			}
			var sectionRaw = new URL(editSectionUrl).searchParams.get('section');
			if (!sectionRaw || sectionRaw.indexOf('T') > -1) {
				return;
			}
			var section = parseInt(sectionRaw);

			var h2Title = headline.textContent;
			$parent.append('<div style="font-size:0.6em; font-weight:bold; float:right"> | <a id="addTweetLink' + section + '" href="#' + headline.id + '" class="addTweetLink">' + 'add tweet' + '</a></div>');
			$parent.find('a.addTweetLink').click(function (e) {
				e.preventDefault();
				var aHrefEle = this;
				mw.loader.using(['mediawiki.api', 'oojs-ui-core'], function () {
					var textInputText = new OO.ui.TextInputWidget({
						label: 'Texte',
						placeholder: '',
						required: true
					});
					var textInputMedia = new OO.ui.TextInputWidget({
						label: 'Média',
						placeholder: ''
					});
					var button = new OO.ui.ButtonWidget({
						label: 'Add Tweet',
						icon: 'check'
					});
					button.on('click', function () {
						if (textInputText.value === '') {
							alert("Text should not be empty!");
							return;
						}

						popup.toggle(false);

						$("#addTweetLink" + section).text('adding tweet...');

						var api = new mw.Api();
						api.postWithToken('edit', {
							action: 'edit',
							title: mw.config.get('wgPageName'),
							section: section,
							summary: "/* " + h2Title + " */ Ajout d'un tweet ([[Utilisateur:eflyjason/Script/AddTweet.js]])",
							appendtext: '\n\n' +
								'{{Proposition tweet\n' +
								'|texte=' + textInputText.value + '\n' +
								'|média=' + textInputMedia.value + '\n' +
								'|proposé par=~~' + '~~\n' + // to prevent auto conversion of signature in script
								'|validé par=\n' +
								'|publié par=\n' +
								'}}',
						}).done(function(data) {
							mw.notify("Tweet added!", {
								type: 'success'
							});
							api.post({
								action: 'purge',
								forcelinkupdate: '1',
								titles: mw.config.get('wgPageName'),
							}).done(function(data) {
								location.reload();
							});
						}).fail(function(code, result) {
							mw.notify("Problème de réseau, rechargez la page et réessayez.", {
								type: 'error'
							});
						});
					});

					var popupWindow = $('<div>')
						.attr('id', 'addtweetdiv')
						.append(textInputText.$element)
						.append(textInputMedia.$element)
						.append(button.$element);

					var popup = new OO.ui.PopupWidget({
						$content: popupWindow,
						padded: true,
						width: 600,
						head: true
					});
					popup.$element.css('z-index', '9999999');
					$(aHrefEle).parent().append(popup.$element);
					popup.toggle(true);
				});
			});
		});
	});
}