MediaWiki:Gadget-delete.js

// <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,
	defaultReason: "",

	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 = new Array();

		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 = new Array();

		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 = new Array();

				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.style = 'min-width: 120px';
		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.replace('mw-list-item', '') === '') {
			catalk.style.textDecoration = 'blink';
			catalk.firstChild.style.backgroundColor = 'orange';
		}
		var wpReason = document.getElementsByName('wpReason')[0];
		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;
		}

		if (this.maxRevisions > 0) {
			var history_header = document.createElement('h2');
			history_header.innerHTML = this.historyHeader.replace('$1', this.maxRevisions);
			history_header.id = 'history_header';
			$(history_header).insertAfter('.mw-delete-editreasons');

			var history_content = document.createElement('div');
			history_content.id = 'history_content';
			history_content.innerHTML = this.loadingHistory;
			$(history_content).insertAfter('#history_header');

			$.when(
				$.get(
					mw.config.get('wgServer') +
					mw.config.get('wgScript') +
					'?limit=' + this.maxRevisions +
					'&title=' + encodeURIComponent(mw.config.get('wgPageName')) +
					'&action=history'
				),
				mw.loader.using( [
					'mediawiki.action.history.styles',
					'mediawiki.interface.helpers.styles',
					'mediawiki.special.changeslist'
				] )
			).done( function ( res ) {
				var $html = $( res[ 0 ] );
				$( history_content ).replaceWith( $html.find( '#mw-history-compare' ) );
				// poniższy moduł zawiera JS uruchamiany na HTML-u *już dołączonym* na stronie
				mw.loader.load( 'mediawiki.action.history' );
			} );
		}

		if (this.maxLinks > 0) {
			var links_header = document.createElement('h2');
			links_header.innerHTML = this.linksHeader.replace('$1', this.maxLinks);
			links_header.id = 'links_header';
			$(links_header).insertAfter('.mw-delete-editreasons');

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

			var that = this;
			
			var request = {};

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

				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 {
				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.getElementsByName('wpReason')[0];

		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();
});

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya