MediaWiki:Gadget-EUSpring.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
//адаптовано з https://lv.wikipedia.org/wiki/Dalībnieks:Edgars2007/cee.js2
(function($, mw) {
	mw.loader.load("jquery.chosen");
	mw.loader.load("mediawiki.ui.input", "text/css");
	var delsortCategories = {
		"temats": ["архітектура", "економіка", "жінки", "історія", "їжа", "культура", "література", 
		  "мистецтво", "музика", "наука та технології", "освіта", "політика", 
		  "природа та географія", "спорт", "суспільство", "транспорт"],
		"valsts": ["Австрія", "Азербайджан", "Албанія", "Андорра", "Бельгія", 
		  "Болгарія", "Боснія і Герцеговина", "Велика Британія", "Вірменія", "Греція", 
		  "Грузія", "Данія", "Естонія", "Ірландія", "Ісландія", 
		  "Іспанія", "Італія", "Кіпр", "Латвія", "Литва", 
		  "Ліхтенштейн", "Люксембург", "Мальта", "Молдова", "Монако", 
		  "Нідерланди", "Німеччина", "Норвегія", "Північна Македонія", "Польща", 
		  "Португалія", "Румунія", "Сан-Марино", "Сербія", "Словаччина", 
		  "Словенія", "Туреччина", "Угорщина", "Фінляндія", "Франція", 
		  "Хорватія", "Чехія", "Чорногорія", "Швейцарія", "Швеція"]
	};
	var ADVERTISEMENT = " (за допомогою [[MediaWiki:Gadget-EUSpring.js|cee.js]])";
	var date = new Date();
	var current_year = date.getFullYear();
	if (mw.config.get('wgNamespaceNumber') == 0) {
		var portletLink = mw.util.addPortletLink('p-cactions', '#', 'Європейська весна '+current_year, 'pt-cee', 'Додавання шаблону «Європейська весна '+current_year+'»');
		$(portletLink).click(function(e) {
			e.preventDefault();
			$("#jump-to-nav").after('<div style="border: thin solid rgb(197, 197, 197); box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.25); border-radius: 3px; padding: 5px; position: relative;" id="delsort">' + 
			  '<div id="delsort-title" style="font-size: larger; font-weight: bold; text-align: center;">Додавання шаблону «Європейська весна '+current_year+'»</div>' + 
			  '<table cellspacing="5"><tr><td>Користувач:<td><input type="text" id="select-name" style="width:250px;" autofocus /><br>' + 
			  //'<tr><td>Теми:<td><select multiple="multiple" id="select-temats" data-placeholder="Теми" style="width:250px;"></select><br>' + 
			  //'<tr><td>Країни і спільноти:<td><select multiple="multiple" id="select-valsts" data-placeholder="Країни і спільноти" style="width:250px;"></select></table>' + 
			  '<tr><td>Країни:<td><select multiple="multiple" id="select-valsts" data-placeholder="Країни" style="width:250px;"></select>' + 
			  '<tr><td colspan=2><input type="checkbox" id="edited_existing_article">&nbsp;Доповнено існуючу статтю</table>' + 
			  '<button style="position: absolute; top: 5px; right: 5px;" id="close-button" class="mw-ui-button mw-ui-destructive mw-ui-quiet">Скасувати</button>' + '</div>');
			$("#close-button").click(function(e) {
				$("#delsort").remove();
			});
			
			get_author();
			
			for (var key in delsortCategories) {
				var aaa = [];
				for (i = 0; i < delsortCategories[key].length; i++) {
					aaa.push('<option value="' + delsortCategories[key][i] + '">' + delsortCategories[key][i] + '</option>');
				}
				$("#delsort #select-" + key).append(aaa.join(''));
			}
			// Set up the chosen one (some code stolen from http://stackoverflow.com/a/27445788)
			$("#delsort select").chosen();
			$("#delsort .chzn-container").css("text-align", "left");
			// Add the button that triggers sorting
			$("#delsort").append($("<div>").css("text-align", "center").append($("<button> ")
			 .addClass("mw-ui-button").addClass("mw-ui-progressive").attr("id", "sort-button").text("Зберегти").click(function(e) {
				// Make a status list
				$("#delsort").append($("<ul> ").attr("id", "status"));
				var user_name = $("#delsort #select-name").val();
				console.log(user_name);
				var edited_existing = $('#edited_existing_article').prop('checked');
				console.log(edited_existing);
				// Build a list of categories
				var temati_res = $("#delsort #select-temats").val() || [];
				$("#delsort #select-temats .custom-delsort-field").each(function(index, element) {
					temati_res.push($(element).val());
				});
				temati_res = temati_res.filter(Boolean); // remove empty strings
				console.log(temati_res);
				// Build a list of categories
				var reg_res = $("#delsort #select-valsts").val() || [];
				$("#delsort #select-valsts .custom-delsort-field").each(function(index, element) {
					reg_res.push($(element).val());
				});
				reg_res = reg_res.filter(Boolean); // remove empty strings
				console.log(reg_res);
				categories = {
					'user': user_name,
					'edited_existing': edited_existing,
					'regioni': reg_res,
					'temas': temati_res
				};
				// Actually do the delsort
				saveChanges(categories);
			})));
		});
	} // End if ( mw.config.get( "wgPageName" ).indexOf('Wikipedia:Articles_for_deletion/') ... )

	//Saves the changes to the current discussion page by adding delsort notices (if applicable) and updating the AFDC cat

	function get_author() {
		$.ajax({
			url: mw.util.wikiScript('api'),
			type: 'POST',
			dataType: 'json',
			data: {
				format: 'json',
				action: 'query',
				prop: 'revisions',
				titles: mw.config.get('wgPageName'),
				rvprop: 'user',
				rvlimit: 1,
				rvdir: "newer"
			}
		}).done(function(data) {
			try {
				var pageId = Object.keys(data.query.pages)[0];
				user = data.query.pages[pageId].revisions[0].user;
				$("#select-name").val(user);
			} catch (e) {
				console.log('did not get user');
			}
		});
	}
	
	function saveChanges(cats) {
		// Indicate to the user that we're doing some deletion sorting
		$("#delsort-table").remove();
		$("#delsort #sort-button").text("Sorting discussion...").prop("disabled", true).fadeOut(400, function() {
			$(this).remove();
		});
		var categoryTitleComponent = (cats.length === 1) ? ("the \"" + cats[0] + "\" category") : (cats.length + " categories");
		// Start the animation, using super-advanced techniques
		var animationInterval = setInterval(function() {
			$("#delsort-dots").text($("#delsort-dots").text() + ".");
			if ($("#delsort-dots").text().length > 3) {
				$("#delsort-dots").text("");
			}
		}, 600);
		// Place (a) notification(s) on the discussion and update its AFDC cat
		postDelsortNoticesAndUpdateAfdc(cats);
	}

	function format_template(data) {
		var tpl = [];
		var dalibnieks = data.user;
		if (dalibnieks && dalibnieks != '') tpl.push('|користувач=' + dalibnieks);
		if(data.edited_existing) tpl.push('|доповнено=так');
		var regioni = data.regioni;
		for (i = 0; i < regioni.length; i++)
		{
			//if (i == 0) { tpl.push('|країна=' + regioni[i]); }
			//else { tpl.push('|країна' + (i + 1) + '=' + regioni[i]); }
			tpl.push('|' + regioni[i]);
		}
		var temas = data.temas;
		for (i = 0; i < temas.length; i++) {
			if (i == 0) {
				tpl.push('|тема=' + temas[i]);
			} else {
				tpl.push('|тема' + (i + 1) + '=' + temas[i]);
			}
		}
		return '{'+'{Європейська весна ' + current_year + tpl.join('') + '}}';
	}

	function save_page(wikitext, cats) {
		wikitext = format_template(cats) + wikitext;
		$.ajax({
			url: mw.util.wikiScript('api'),
			type: 'POST',
			dataType: 'json',
			data: {
				format: 'json',
				action: 'edit',
				title: 'Обговорення:' + mw.config.get('wgPageName'),
				summary: "Додано шаблон [[Шаблон:Європейська весна "+current_year+"|&#123;&#123;Європейська весна "+current_year+"&#125;&#125;]]" + ADVERTISEMENT,
				token: mw.user.tokens.get('csrfToken'),
				watchlist: "nochange",
				text: wikitext
			}
		}).done(function(data) {
			if (data && data.edit && data.edit.result && data.edit.result == 'Success') {
				console.log('good');
				$("#delsort").hide();
			} else {
				console.log('bad');
			}
		}).fail(function() {
			console.log('bad2');
		});
	}

	//Adds some notices to the discussion page that this discussion was sorted.

	function postDelsortNoticesAndUpdateAfdc(cats) {
		var wikitext;
		$.getJSON(mw.util.wikiScript('api'), {
			format: 'json',
			action: 'query',
			prop: 'revisions',
			rvprop: 'content',
			rvlimit: 1,
			titles: 'Обговорення:' + mw.config.get('wgPageName')
		}).done(function(data) {
			try {
				var pageId = Object.keys(data.query.pages)[0];
				wikitext = data.query.pages[pageId].revisions[0]['*'];
				console.log('saved as 1');
				save_page(wikitext, cats);
			} catch (e) {
				console.log('saved as 2');
				save_page('', cats);
			}
		});
	}
}(jQuery, mediaWiki));