Dalībnieks:Edgars2007/cee.js

Vikipēdijas lapa

Piezīme: Lai redzētu izmaiņas, pēc publicēšanas var nākties iztīrīt sava pārlūka kešatmiņu.

  • Firefox / Safari: Pieturi Shift un klikšķini uz Pārlādēt vai nospied Ctrl-F5 vai Ctrl-R (⌘-R uz Mac)
  • Google Chrome: Nospied Ctrl-Shift-R (⌘-Shift-R uz Mac)
  • Internet Explorer / Edge: Pieturi Ctrl un klikšķini uz Pārlādēt vai nospied Ctrl-F5
  • Opera: Nospied Ctrl-F5.
//based on https://en.wikipedia.org/wiki/User:Enterprisey/delsort.js
(function($, mw) {
	mw.loader.load("jquery.chosen");
	mw.loader.load("mediawiki.ui.input", "text/css");
	var delsortCategories = {
		"temats": ["Cilvēktiesības", "Daba un ģeogrāfija", "Izglītība", "Kultūra", "Militārisms", "Politika", "Sabiedrība", "Saimniecība", "Sievietes", "Sports", "Transports", "Vēsture", "Zinātne"],
		"valsts": ["Albānija", "Armēnija", "Austrija", "Azerbaidžāna", "Baltkrievija", "Baškortostāna", "Bosnija un Hercegovina", "Bulgārija", "Čehija", "Donas reģions", "Erzji", "Esperanto", "Grieķija", "Gruzija", "Horvātija", "Igaunija", "Kazahstāna", "Kipra", "Kosova", "Krievija", "Krimas tatāri", "Lietuva", "Malta", "Melnkalne", "Moldova", "Polija", "Rumānija", "Serbija", "Slovākija", "Slovēnija", "Sorbi", "Tatāri", "Turcija", "Ukraina", "Ungārija", "Ziemeļmaķedonija"]
	};
	var ADVERTISEMENT = " (izmantojot [[:Dalībnieks:Edgars2007/cee.js|cee.js]])";
	if (mw.config.get('wgNamespaceNumber') == 0) {
		var portletLink = mw.util.addPortletLink('p-cactions', '#', 'CEE', 'pt-cee', 'Pievieno CEE Spring veidni');
		$(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;">Pievieno CEE Spring veidni</div>' + '  Dalībnieks: <input type="text" id="select-name" style="width:250px;" autofocus /><br>' + '  Kategorija: <select multiple="multiple" id="select-temats" data-placeholder="Kategorija" style="width:250px;"></select><br>' + '  Valsts: <select multiple="multiple" id="select-valsts" data-placeholder="Valsts" style="width:250px;"></select>' + '  <button style="position: absolute; top: 5px; right: 5px;" id="close-button" class="mw-ui-button mw-ui-destructive mw-ui-quiet">Close</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("Save changes").click(function(e) {
				// Make a status list
				$("#delsort").append($("<ul> ").attr("id", "status"));
				var user_name = $("#delsort #select-name").val();
				console.log(user_name);
				// 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,
					'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-a(dvanced 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('|dalībnieks = ' + dalibnieks + '\n');
		var regioni = data['regioni'];
		for (i = 0; i < regioni.length; i++) {
			if (i == 0) {
				tpl.push('|valsts     = ' + regioni[i] + '\n');
			} else {
				tpl.push('|valsts' + (i + 1) + '    = ' + regioni[i] + '\n');
			}
		}
		var temas = data['temas'];
		for (i = 0; i < temas.length; i++) {
			if (i == 0) {
				tpl.push('|tēma       = ' + temas[i] + '\n');
			} else {
				tpl.push('|tēma' + (i + 1) + '      = ' + temas[i] + '\n');
			}
		}
		return '{'+'{CEE Spring 2024\n' + 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: 'Diskusija:' + mw.config.get('wgPageName'),
				summary: "Pievienota CEE spring veidne" + 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: 'Diskusija:' + 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));