Utilisateur:Tpt/badges.js

La bibliothèque libre.

Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
mw.loader.using(['mediawiki.widgets', 'mediawiki.util', 'mediawiki.api', 'ext.proofreadpage.base'], function () {
	$(function() {
		if(mw.config.get('wgNamespaceNumber') !== 0) {
			return;
		}
		var wdApi = new mw.ForeignApi('https://www.wikidata.org/w/api.php');
		var siteId = mw.config.get('wgPageContentLanguage') + 'wikisource'; //TODO: bad
		var pageTitle = mw.config.get('wgPageName');
		
		function getBadges(pageTitle) {
			return wdApi.get({
				action: 'wbgetentities',
				props: 'info|sitelinks',
				sites: siteId,
				titles: pageTitle
			}).then(function(data) {
				for(var i in data.entities) {
					if('missing' in data.entities[i]) {
						return undefined;
					}
					return data.entities[i].sitelinks[siteId].badges;
				}
			});
		}
		
		function setBadges(pageTitle, badges) {
			wdApi.postWithToken('csrf', {
				action: 'wbsetsitelink',
				site: siteId,
				title: pageTitle,
				linksite: siteId,
				linktitle: pageTitle,
				badges: badges.join('|')
			}).then(function(data) {
				if('success' in data) {
					mw.notify('Mise à jour du badge de qualité faite');
				} else {
					OO.ui.alert('Mise à jour du badge de qualité interrompue : ' + JSON.stringify(data));
				}
			}, function (jqXHR, textStatus) {
				OO.ui.alert('Mise à jour du badge de qualité interrompue :' + JSON.stringify(textStatus));
			});
		}

		var levelMapping = {
			'Q20748094': 2,
			'Q20748091': 1,
			'Q20748092': 3,
			'Q20748093': 4
		};
		getBadges(pageTitle).done(function(badges) {
			if(badges === undefined || badges.length > 1) {
				return; //TODO: work when there is no item
			}
			
			//View mode
			$.each(badges, function(_, badge) {
				if(badge in levelMapping) {
					$('#ca-nstab-main a').addClass('quality' + levelMapping[badge]);
				}
			});
			
			//Setup edit mode
			var selectWidget = new OO.ui.ButtonSelectWidget({
				items: [
					new OO.ui.ButtonOptionWidget({
						data: 'Q20748094',
						icon: 'notice',
						title: 'incomplet'
					}),
					new OO.ui.ButtonOptionWidget({
						data: 'Q20748091',
						icon: 'close',
						title: 'non corrigé'
					}),
					new OO.ui.ButtonOptionWidget({
						data: 'Q20748092',
						icon: 'check',
						title: 'relu et corrigé'
					}),
					new OO.ui.ButtonOptionWidget({
						data: 'Q20748093',
						icon: 'star',
						title: 'validé'
					})
				]
			});
			$('.editCheckboxes > .oo-ui-horizontalLayout').append(new OO.ui.FieldLayout(selectWidget, {
				align: 'inline',
				label: 'Niveau d’avancement du texte',
				help: 'Niveau d’avancement du texte stocké via le système de "badge" des liens de Wikidata'
			}).$element);
			$.each(badges, function(_, badge) {
				selectWidget.selectItemByData(badge);
			});
			$('.mw-editform').submit(function() {
				var selectedOption = selectWidget.findSelectedItem();
				var newBadges = (selectedOption === null) ? [] : [selectedOption.getData()];
				if(newBadges != badges) {
					setBadges(pageTitle, newBadges);
				}
			});
		});

	});
});