MediaWiki:Gadget-delete.js

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Catatan: Setelah menyimpan, Anda harus memintas tembolok (cache) peramban Anda untuk melihat perubahannya. Google Chrome, Firefox, Microsoft Edge dan Safari: Tahan tombol Shift dan klik Muat ulang (Reload) di tombol bilah alat. Untuk detail dan instruksi tentang peramban lain, lihat halaman menghapus singgahan (Inggris).

// <nowiki>
// UWAGA! Z tego gadżetu korzystają także inne projekty (Wikisłownik, Wikiźródła)
// Style CSS → [[Mediawiki:Common.css]] ↓
// .userSummaryButtons

window.del$talkNamespace = /(?:talk$|^dyskusja)/i;

window.del$redirect = /#(?:REDIRECT|PATRZ|PRZEKIERUJ|TAM)(?:\s*\[\[(.+?)(\|.*?)?\]\])?/i;
window.del$speedy = /\{\{(?:ek|delete|speedy)\|(?:1=)?(.+?)(?:\}\}|$)/i;
window.del$nowCommons = /\{\{(?:NowCommons|Do commons)\|(?:1=)?(?:Plik:|File:|Image:|Grafika:)?(.+?)\}\}/i;

// ---------------------------------------------------------
// Ustawienia - linkujące oraz historia
// ---------------------------------------------------------

// del_max_links - maksymalna liczba pobieranych linkujących, 0 - nie pobiera
// del_max_versions - maksymalna liczba pobieranych wpisów z historii, 0 - nie pobiera
// del_hardcore - czy włączony jest tryb hardcode?
// del_talk_highlight - czy włączone jest podświetlanie linku do strony dyskusji

// ---------------------------------------------------------

window.deleteGadget = {
	version: 3,

	loadingLinks: '<b>Wczytywanie linkujących...</b>',
	loadingHistory: '<b>Wczytywanie historii zmian...</b>',

	noLinks: '<span style="color: green; font-size: larger; font-weight:bold">Brak linkujących</span>',
	linksRedirect: 'strona przekierowująca',
	linksEmbedded: 'dołączony szablon',

	linksHeader: 'Linkujące <span style="font-size: x-small;">(pierwsze $1)</span>',
	historyHeader:  'Historia i autorzy <span style="font-size: x-small;">(ostatnie $1)</span>',

	showAllCaption: 'pokaż wszystkie',

	processLinks: function(data) {
		var pages = [];

		for (var id in data.query.embeddedin) {
			var page = data.query.embeddedin[id];
			page.embedded = true;
			pages.push( page );
		}

		for (var id in data.query.backlinks) {
			var page = data.query.backlinks[id];
			pages.push( page );
		}

		this.addLinks(pages);
	},

	processImageUsage: function(data) {
		var pages = [];

		for (var id in data.query.imageusage) {
			var page = data.query.imageusage[id];
			pages.push( page );
		}

		this.addLinks(pages);
	},

	addLinks: function(list) {
		var container = document.getElementById( 'links_content' );
		if (list.length > 0) {
			var ul = document.createElement('ul');
			var limit = list.length;

			if (limit > this.maxLinks)
				limit = this.maxLinks;

			for (var i = 0; i < limit; i++) {
				var page = list[i];
				var li = document.createElement('li');
				var link = document.createElement('a');
				link.title = page.title;
				link.href = mw.util.getUrl(page.title);
				link.appendChild( document.createTextNode(page.title) );
				li.appendChild(link);
				var sufix = [];

				if (typeof(page.redirect) != 'undefined')
					sufix.push(this.linksRedirect);

				if (page.embedded)
					sufix.push(this.linksEmbedded);

				if (sufix.length)
					li.appendChild( document.createTextNode(" (" + sufix.join(', ') + ")"));

				ul.appendChild(li);
			}
			container.innerHTML = '';
			container.appendChild(ul);
			return;
		}

		container.innerHTML = this.noLinks;
	},

	createButtons: function(parentNode, buttonArray) {
		var that = this;
		for (var i = 0; i < buttonArray.length; i++)
		{
			var button = buttonArray[i];

			// sprawdzenie czy przycisk ma zostać dodany
			if (button.visibility && !button.visibility())
				continue;

			var newButton = document.createElement('a');

			// atrybuty
			newButton.title = button.reason;

			if (button.callback) {
				newButton.onclick = button.callback;
			}
			else {
				newButton.onclick = function() { that.insertReason(this.title) };
			}

			newButton.appendChild(document.createTextNode(button.caption));

			// dodanie przycisku
			parentNode.appendChild(newButton);
		}
	},

	createGroup: function(name, group) {
		tr = document.createElement('tr');
		tr.id = "del_" + name;

		td_caption = document.createElement('td');
		td_caption.align = 'right';
		td_caption.appendChild( document.createTextNode(group.caption) );
		tr.appendChild(td_caption);

		td_buttons = document.createElement('td');
		td_buttons.align = 'left';
		td_buttons.className = 'userSummaryButtons';

		this.createButtons(td_buttons, group.buttons);
		tr.appendChild(td_buttons);

		if ( group.visibility() ) {
			tr.firstChild.style.fontWeight = 'bold';
		}
		else {
			tr.style.display = 'none';
		}

		return tr;
	},

	showAll: function() {
		for (var name in del$buttons) {
			document.getElementById("del_" + name).style.display = '';
		}
		document.getElementById("del_general").cells[0].style.visibility = 'hidden';
	},

	init: function() {

		if ( (mw.config.get('wgAction') != "delete" || mw.config.get('wgArticleId') == 0) && mw.config.get('wgCanonicalSpecialPageName') != "Nuke") {
			return;
		}

		this.maxLinks = (typeof(del_max_links) == 'undefined') ? 10 : del_max_links;
		this.maxRevisions = (typeof(del_max_versions) == 'undefined') ? 5 : del_max_versions;
		this.hardcore = (typeof(del_hardcore) == 'undefined') ? false : del_hardcore;
		this.talkHighlight = (typeof(del_talk_highlight) == 'undefined') ? true : del_talk_highlight;

		this.defaultReason = '';

		var catalk = document.getElementById('ca-talk');
		if ( this.talkHighlight && catalk && catalk.className == '') {
			catalk.style.textDecoration = 'blink';
			catalk.firstChild.style.backgroundColor = 'orange';
		}
		var wpReason = document.getElementById('wpReason');
		if ( wpReason ) {
			wpReason.parentNode.align = "left";
			wpReason.style.width = "100%";
			this.defaultReason = wpReason.value;
			var p = new RegExp('(\\?|&)wpReason=');
			if (!p.exec(window.location)) {
				wpReason.value = '';
			}
		}
		else {
			return;
		}

		var table;
		var tr_watch;

		if (mw.config.get('wgCanonicalSpecialPageName') == "Nuke") {
			var label = wpReason.form.getElementsByTagName("label");

			if (!label.length) {
				return;
			}

			table = document.createElement("table");
			var row = document.createElement("tr");
			var tdLabel = document.createElement("td");
			tdLabel.appendChild( document.createTextNode( label[0].textContent ) );
			row.appendChild(tdLabel);
			var tdReason = document.createElement("td");
			tdReason.appendChild(wpReason);
			row.appendChild(tdReason);
			table.appendChild(row);

			label[0].parentNode.insertBefore(table, label[0]);
			label[0].parentNode.removeChild(label[0]);

		}
		else if (mw.config.get('wgNamespaceNumber') == 6 && !document.getElementById('wpConfirmB')) {
			var mwfiledeletesubmit = document.getElementById('mw-filedelete-submit');
			tr_watch = mwfiledeletesubmit.parentNode.parentNode;
			table = tr_watch.parentNode;
		}
		else {
			var wpWatch = document.getElementById('wpWatch');
			if (wpWatch) {
				tr_watch = wpWatch.parentNode.parentNode;
				table = tr_watch.parentNode;
			}
		}

		for (var name in del$buttons) {
			var group = del$buttons[name];
			var new_tr = this.createGroup(name, group);

			if (name == 'general') {
				var newButton = document.createElement('a');

				// atrybuty
				newButton.appendChild(document.createTextNode(this.showAllCaption));
				newButton.onclick = this.showAll;
				newButton.style.cursor = 'pointer';

				// dodanie przycisku
				new_tr.firstChild.appendChild(newButton);

				// przywróć normalny styl
				new_tr.firstChild.style.fontWeight = 'normal';
			}

			if (tr_watch) {
				table.insertBefore(new_tr, tr_watch);
			}
			else {
				table.appendChild(new_tr);
			}
		}

		if (mw.config.get('wgCanonicalSpecialPageName') == "Nuke") {
			return;
		}

		var bodyContent = document.getElementById('bodyContent');
		var deletionlog = document.getElementById('mw-article-delete-deletionlog');

		if (this.maxRevisions > 0) {
			var history_header = document.createElement('h2');
			history_header.innerHTML = this.historyHeader.replace('$1', this.maxRevisions);
			bodyContent.insertBefore(history_header, deletionlog);

			var history_content = document.createElement('div');
			history_content.id = 'history_content';
			history_content.innerHTML = this.loadingHistory;

			bodyContent.insertBefore(history_content, deletionlog);

			jQuery( '#history_content' ).load(
				mw.config.get('wgServer') +
				mw.config.get('wgScript') +
				'?limit=' + this.maxRevisions +
				'&title=' + encodeURIComponent(mw.config.get('wgPageName')) +
				'&action=history #mw-history-compare'
			);
		}

		if (this.maxLinks > 0) {
			var links_header = document.createElement('h2');
			links_header.innerHTML = this.linksHeader.replace('$1', this.maxLinks);

			bodyContent.insertBefore(links_header, deletionlog);

			var links_content = document.createElement('div');
			links_content.id = 'links_content';
			links_content.className = 'plainlinks';
			links_content.innerHTML = this.loadingLinks;

			bodyContent.insertBefore(links_content, deletionlog);
			var that = this;

			if (mw.config.get('wgNamespaceNumber') == 6) { // file

				var request = {
					action:	'query',
					list:	'imageusage',
					iulimit:	this.maxLinks,
					iutitle:	mw.config.get('wgPageName'),
					format:	'json',
					requestid:	new Date().getTime()
				};

				jQuery.getJSON( mw.config.get( 'wgScriptPath' ) + '/api.php', request, function(result) {
					that.processImageUsage(result);
				});
			}
			else {
				var request = {
					action:	'query',
					list:	'backlinks|embeddedin',
					bllimit:	this.maxLinks,
					bltitle:	mw.config.get('wgPageName'),
					eilimit:	this.maxLinks,
					eititle:	mw.config.get('wgPageName'),
					format:	'json',
					requestid:	new Date().getTime()
				};

				jQuery.getJSON( mw.config.get( 'wgScriptPath' ) + '/api.php', request, function(result) {
					that.processLinks(result);
				});
			}
		}
	},

	insertReason: function(reason) {
		var element = document.getElementById('wpReason');

		element.value = reason;

		if (this.hardcore) {
			element.form.submit();
		}
	},

	insertReasonEx: function(reason, reasonFormat, regex) {
		var matches = this.defaultReason.match(regex);
		if (matches && matches.length > 1 && typeof(matches[1]) != 'undefined') {
			return this.insertReason(reasonFormat.replace('$1', matches[1]));
		}
		else {
			return this.insertReason(reason);
		}
	}
}


jQuery(document).ready(function() {
	deleteGadget.init()
});