Wikipedysta:Stepa/common.js

/*

disFixer v. 2.1.2
by Matma Rex, zmiany by ToSter
cc-by-sa 3.0

Użycie: wybierz disFixer w preferencjach 
lub dodaj do swojego common.js linię
importScript('MediaWiki:Gadget-disFixer.js')

Szerszy opis: [[Wikipedia:Narzędzia/disFixer]].

*/
disStr = //strings - translate this!
{
	and:			' i ', //used in summary
	autosummaryBegin:       'poprawa linków do',
	dabsShort:		'ujedn.',
	redirsShort:		'przek.',

	categoryDabPages:       'Kategoria:Strony ujednoznaczniające',
	wikipediaDabPage:       'Wikipedia:Strona ujednoznaczniająca',

	fixLinks:		'Popraw linki do ujednoznacznień i przekierowań', //main button
	fixLinksDisam:		'Popraw linki do ujednoznacznień',
	fixLinksRedir:		'Popraw linki do przekierowań',
	wait:			'Czekaj...', //main button after click

	noRedirLinks:		'Brak linków do przekierowań.',
	fixingInProgress:       'Rozwiązywanie przekierowań: trwa...',

	fixRedirsOnly:		'Popraw przekierowania (Wykonaj także inne zmiany! Sama poprawa przekierowań nie ma sensu!)', //fix button if no dabs
	fixButton:		'Popraw', //fix button

	fixDabs:		'Popraw ujednoznacznienia:', //before list of dabs
	viewDabPage:		'Zobacz stronę ujedn.', //title
	scrollToLink:		'Przewiń do pozycji linku w tekście', //title
	delink:			'odlinkuj', //last element in every list

	fixRedirsCheckbox:      'popraw przekierowania',

	otherTarget:		'inny cel...',
	setNewLinkTarget:       'Dokąd ma prowadzić link?'
};

//domyślne ustawienia
if (typeof disFixIfRedirsOnly == 'undefined') disFixIfRedirsOnly = false;
if (typeof disMarkAsMinor == 'undefined') disMarkAsMinor = false;
if (typeof disCodeCleanup == 'undefined') disCodeCleanup = false;
if (typeof useOldRedirFixing == 'undefined') useOldRedirFixing = false;
if (typeof disEnforceCookies == 'undefined') disEnforceCookies = false;


if(disCodeCleanup && typeof wp_sk == 'undefined')
{
	importScript('Wikipedysta:Nux/wp sk.js');
}

function disCallApi(query) // z [[MediaWiki:Gadget-lib-beau.js]]
{
	var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?';
	query['format'] = 'json';
	url += $.param(query);
	mw.loader.load(url);
}

function disScrollToLink(target)
{
	if (typeof disHighlightedLinkTimeout != 'undefined' && typeof disHighlightedLink != 'undefined') {
		clearTimeout(disHighlightedLinkTimeout);
		disHighlightedLink.css('background', '');
	}
	window.disHighlightedLink = $(dis).filter('[title=' + target + ']').first();
	disHighlightedLink.css('background', 'red');

	window.disHighlightedLinkTimeout = setTimeout(function() {
		disHighlightedLink.css('background', '');
	}, 3000);
	disHighlightedLink.get(0).scrollIntoView();
}

function disLoadFixer()
{
	window.dis = $('a.mw-disambig').get();
	window.disRedirs = $('a.mw-redirect').get();

	//nie ma disambigów, na pewno - nic do roboty
	if (dis.length  ==  0) {
		if (!disFixIfRedirsOnly || disRedirs.length  ==  0) {
			return //możliwość wymuszenia sprawdzania mimo braku disambigów, ale tylko, gdy są rediry
		}
	}

	var txt = disStr.fixLinks;
	if (dis.length == 0) {
		txt = disStr.fixLinksRedir;
	}
	else if (disRedirs.length == 0) {
		txt = disStr.fixLinksDisam;
	}
	var el = '<input id="disBeginButton" type="submit" class="disFixerButton" value="' + txt + '" />';

	$('h1:first').before(el);
	$('#disBeginButton').click(function() {
		try {
			$('#disBeginButton').val(disStr.wait);
		} catch(er){}
	});
	$('#disBeginButton').click(disBegin);
}

function disBegin()
{
	var el = '<div id="disRedirsStatus"></div>';
	$('h1:first').before(el);

	$('#disRedirsStatus').append('<input type="checkbox" id="disFixRedirsCheckbox" style="display:none" />');
	if (window.disRedirs.length == 0) {
		$('#disRedirsStatus').append(disStr.noRedirLinks);
	}
	else {
		$('#disRedirsStatus').append(disStr.fixingInProgress);
	}

	var titles = [];
	for (var i = 0; i < dis.length; i++) {
		titles.push(dis[i].title);
	}

	disCallApi({
		action:'query',
		prop:'links',
		titles:titles.join('|'),
		plnamespace:0,
		pllimit:500,
		callback:'disCallback'
	});

	if (window.disRedirs.length > 0) {
		var titles2 = [];
		for (var i = 0; i < disRedirs.length; i++) {
			titles2.push(disRedirs[i].title);
		}

		if (useOldRedirFixing) {
			disCallApi({
				action:'query',
				redirects:'',
				titles:titles2.join('|'),
				callback:'disRedirCallback'
			});
		}
		else {
			disCallApi({
				action:'query',
				prop:'revisions',
				rvprop:'content',
				titles:titles2.join('|'),
				callback:'disRedirCallback2'
			});
		}
	}
}

function disCallback(res)
{
	if (typeof res.query == 'undefined' && disFixIfRedirsOnly) {
		var el = '<div id="disContainer"><input type="submit" class="disFixerButton" value="' + disStr.fixRedirsOnly
			+ '" style="font-weight:bold;color:red" /></div>';

		$('#disBeginButton').replaceWith(el);
		$('#disContainer input').click(disSend);
	}
	else {
		var addScrollToLink = $('#content').get(0).scrollIntoView;
		var pages = res.query.pages;

		var str = disStr.fixDabs + '<br />';
		for (var i in pages) {
			if (isNaN(+i)) continue; //prototypes, damn
			var page = pages[i];

			str +=
				'<label>' + page.title + ' '
				+ '<a href="https://profillengkap.com/pl/' +encodeURIComponent(page.title) + '" title="' + disStr.viewDabPage
				+ '" target="_new">&#8663;</a>'
				+ (addScrollToLink ? '<a href="https://profillengkap.com/pl/javascript:disScrollToLink(' + '\'' + page.title
					+ '\'' + ')" title="' + disStr.scrollToLink + '">&#8659;</a>'
					: '')
				+ ': <select id="input-dislink' + page.title + '">';
			str += '<option>' + page.title + '</option>';

			if (typeof page.links == 'undefined') {
				page.links = [];
			}
			for (var i = 0; i < page.links.length; i++) {
				str += '<option>' + page.links[i].title + '</option>';
			}

			str += '<option style="color:grey">[' + disStr.delink + ']</option>';
			str += '</select> <input type="submit" class="disFixerButton" onclick="disSetLinkTarget(this,'
				+ '\'' + page.title + '\'' + ')" value="' + disStr.otherTarget + '" /></label><br />';
		}

		var el = '<div id="disContainer">' + str
			+ '<input type="submit" class="disFixerButton" value="' + disStr.fixButton + '" /></div>';
		$('#disBeginButton').replaceWith(el);
		$('#disContainer input:last').click(disSend);
	}
}

function disRedirCallback(res)
{
	window.disResolvedRedirs = res.query.redirects;

	var el = '<input type="checkbox" id="disFixRedirsCheckbox" checked="checked" /> '
		+ '<label for="disFixRedirsCheckbox">' + disStr.fixRedirsCheckbox
		+ ' (' + disResolvedRedirs.length + ')</label>';
	$('#disRedirsStatus').html(el);
	$('#disRedirsStatus').css('color', 'green');
}

function disRedirCallback2(res)
{
	var pages = res.query.pages;
	window.disResolvedRedirs = [];

	for (var i in pages) {
		if (isNaN(i)) continue;

		var f = pages[i].title;
		var t = pages[i].revisions[0]['*'].replace(/^#(?:REDIRECT|TAM|PATRZ|PRZEKIERUJ)\s*\[\[([^\]]+)\]\][\s\S]*$/i, '$1');

		if (t.match(/[<>\[\]|{}\r\n]/)) {
			//coś się pomieszało - tych znaków nie powinno być w tytule strony
			continue;
		}

		window.disResolvedRedirs.push({from:f, to:t});
	}

	var el = '<input type="checkbox" id="disFixRedirsCheckbox" checked="checked" /> '
		+ '<label for="disFixRedirsCheckbox">' + disStr.fixRedirsCheckbox
		+ ' (' + disResolvedRedirs.length + ')</label>';
	$('#disRedirsStatus').html(el);
	$('#disRedirsStatus').css('color', 'green');
}

function disSend()
{
	var inputs = $('#disContainer select');
	var toFix = [];
	for (var i = 0; i < inputs.length; i++) {
		var from = inputs[i].options[0].value;
		var to = inputs[i].value;
		if (from == to) continue;
		toFix.push(from + '~' + to);
	}
	createCookie('disFixDis' + mw.config.get('wgPageName'), toFix.join('|'), 0);

	if (typeof disResolvedRedirs != 'undefined' && $('#disFixRedirsCheckbox').attr('checked')) {
		var toFix = [];
		for (var i = 0; i < disResolvedRedirs.length; i++) {
			var from = disResolvedRedirs[i].from;
			var to = disResolvedRedirs[i].to;
			toFix.push(from + '~' + to);
		}
		createCookie('disFixRedirs' + mw.config.get('wgPageName'), toFix.join('|'), 0);
	}
	window.location = $('#ca-edit a:first').attr('href');
}

function disOnloadEdit()
{
	var whatIsFixed = [];
	var str = $('#wpTextbox1').val();

	str = str.replace(/\r\n/g,'\n').replace(/\s*$/, '');

	if (disCodeCleanup && typeof wp_sk != 'undefined') {
		str = wp_sk.cleaner(str);
	}
	else {
		str = disCleanLinks(str);
	}

	var linksDisam = readCookie('disFixDis' + mw.config.get('wgPageName'));
	var linksRedir = readCookie('disFixRedirs' + mw.config.get('wgPageName'));

	var links = new Array();
	if (linksDisam != null && linksDisam != 'undefined' && linksDisam != '') {
		links = linksDisam.split('|');
		whatIsFixed.push(disStr.dabsShort);
	}
	if (linksRedir != null && linksRedir != 'undefined' && linksRedir != '') {
		links = $.merge(links, linksRedir.split('|'));
		whatIsFixed.push(disStr.redirsShort);
	}

	if (links.length > 0) {
		for (var i = 0; i < links.length; i++) {
			var l = links[i].split('~');
			var from = l[0].replace(/([\/\.\*\+\?\|\(\)\[\]\{\}\\])/g, '\\$1') //regex escape
			var to = l[1];

			if (to == '[' + disStr.delink + ']') {
				str = str.replace(new RegExp('\\[\\[(' + from + ')(?:#[^\\]\\|]+|)\\]\\]', 'gi'), '$1');
				str = str.replace(new RegExp('\\[\\[' + from + '(?:#[^\\]\\|]+|)\\|([^\\]]+)\\]\\]', 'gi'), '$1');
				continue;
			}
			var sh = to.indexOf('#') != -1;
			str = str.replace(new RegExp('\\[\\[(' + from + ')(#[^\\]\\|]+|)\\]\\]', 'gi'), '[[' + (sh ? to : to + '$2') + '|$1]]');
			str = str.replace(new RegExp('\\[\\[' + from + '(#[^\\]\\|]+|)\\|([^\\]]+)\\]\\]', 'gi'), '[[' + (sh ? to : to + '$1') + '|$2]]');
		}
	}
	str = disCleanLinks(str);

	eraseCookie('disFixDis' + mw.config.get('wgPageName'));
	eraseCookie('disFixRedirs' + mw.config.get('wgPageName'));

	if (whatIsFixed.length == 0) {
		return;
	}

	$('#wpTextbox1').val(str);
	var newval = $('#wpSummary').val() + '[[WP:Narzędzia/disFixer|' + disStr.autosummaryBegin
		+ ' ' + whatIsFixed.join(disStr.and) + ']]' + (disCodeCleanup ? ', [[WP:SK]]' : '');
	$('#wpSummary').val(newval);
	if (disMarkAsMinor) {
		$('#wpMinoredit').prop('checked', true);
	}
	$('#wpDiff').click();
}

function disSetLinkTarget(el, disName) //helper - for buttons
{
	el = $(el); // to jquery object
	var target = prompt(disStr.setNewLinkTarget, disName);
	if (typeof target == 'undefined' || target == '') {
		return;
	}

	var opt = '<option value="' + target + '">' + target + '</option>';
	var sel = el.parent().find('select:first');
	sel.append(opt);
	sel.find('option:last').prop('selected', true);
}

// based on Nux's code cleanup
// http://pl.wikipedia.org/wiki/Wikipedysta:Nux/wp_sk.js
function disCleanLinks(str)
{
	//najprostszy cleanup, głównie po to, żeby regeksy do poprawy linków mogły być prostsze

	// [[Kto%C5%9B_jaki%C5%9B#co.C5.9B|...]]›[[Ktoś jakiś#coś|...]]
	str = str.replace(/\[\[([^|#\]]*)([^|\]]*)(\||\]\])/g, function(a, name, anchor, end)
	{
		try {
			var name = decodeURIComponent(name);
			var anchor = decodeURIComponent(anchor.replace(/\.([0-9A-F]{2})\.([0-9A-F]{2})/g, '%$1%$2'));
			a = '[[' + name + anchor + end;
		} catch(err){} // błąd na linkach typu [[%]]

		return a.replace(/_/g, ' ');
	});

	// [[Link|link]] > [[link]]
	str = str.replace(/\[\[([^|\]])([^|\]]*)\|([^\]])\2\]\]/g, function (a, w1_1, w_rest, w2_1)
	{
		return (w1_1.toUpperCase() == w2_1.toUpperCase()) ? '[[' + w2_1 + w_rest + ']]' : a;
	});

	// (ro)zwijanie wikilinków
	str = str.replace(/\[\[([^|\]]*)\|\1([a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ]*)\]\]/g, '[[$1]]$2');
	str = str.replace(/\[\[([^|\]]+)\|([^|\]]+)\]\]([a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ]+)/g, '[[$1|$2$3]]');

	// usuwanie spacji w wikilinkach
	str = str.replace(/\[\[ *([^\]\|:]*[^\]\| ]) *\|/g, '[[$1|');
	str = str.replace(/([^ \t\n])\[\[ +/g, '$1 [[');
	str = str.replace(/\[\[ +/g, '[[');
	str = str.replace(/([^ \t\n])\[\[([^\]\|:]+)\| +/g, '$1 [[$2|');
	str = str.replace(/\[\[([^\]\|:]+)\| +/g, '[[$1|');
	str = str.replace(/([^ \|]) +\]\]([^ \t\na-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ])/g, '$1]] $2');
	str = str.replace(/([^ \|]) +\]\]([^a-zA-ZżółćęśąźńŻÓŁĆĘŚĄŹŃ])/g, '$1]]$2');

	return str;
}


// http://www.quirksmode.org/js/cookies.html
// modified to use globalStorage in Firefox
function createCookie(name, value, days)
{
	try {
		if (disEnforceCookies) throw('cookies enforced');

		if (days < 0) globalStorage['pl.wikipedia.org'].removeItem(name);
		else globalStorage['pl.wikipedia.org'][name] = value;
	}
	catch(er) {
		//regular cookies
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			var expires = "; expires=" + date.toGMTString();
		}
		else var expires = "";
		document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
	}
}

function readCookie(name)
{
	try {
		if (disEnforceCookies) throw('cookies enforced');

		return (globalStorage['pl.wikipedia.org'][name]) + '' //weird Firefox fix
	}
	catch(er) {
		var nameEQ = escape(name) + "=";
		var ca = document.cookie.split(';');
		for (var i = 0; i < ca.length; i++) {
			var c = ca[i];
			while (c[0] == ' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ)  ==  0) return unescape(c.substring(nameEQ.length,c.length));
		}
		return null;
	}
}

function eraseCookie(name)
{
	createCookie(name, "", -1);
}



// borrowed from Beau's disambig marking tool
// http://pl.wikipedia.org/wiki/MediaWiki:Gadget-mark-disambigs.js
var dg$pageLoaded = false;
var dg$dataLoaded = false;
var dg$disambig = {};
var dg$uniqueLinks = 0;
var dg$links = 0;

function dg$request(clcontinue)
{
	var query = {
		action: 'query',
		titles: mw.config.get('wgPageName'),
		prop:   'categories',
		cllimit:	'max',
		gpllimit:       'max',
		generator:      'links',
		callback:       'dg_callback',
		requestid:      new Date().getTime()
	};
	if (clcontinue) {
		query['clcontinue'] = clcontinue;
	}
	disCallApi(query);
}

function dg$isDisambig(categories)
{
	for (var key in categories) {
		if (categories[key].title  ==  disStr.categoryDabPages)
			return true;
	}
	return false;
}

function dg_callback(data)
{
	if (! data.query)
		return;

	document.data = data;
	for (var pageid in data.query.pages) {
		var page = data.query.pages[pageid];
		if (page.categories && dg$isDisambig(page.categories)) {
			if (dg$disambig[page.title])
				continue;

			dg$disambig[page.title] = true;
			dg$uniqueLinks++;
		}
	}

	if (data['query-continue'] && data['query-continue']['categories']) {
		dg$request(data['query-continue']['categories']['clcontinue'])
	}
	else if (dg$pageLoaded)
		dg$doColor();
	else
		dg$dataLoaded = true;
}

function dg$doColor() {
	if (! dg$uniqueLinks) {
		disLoadFixer();
		return;
	}

	var links = document.getElementsByTagName('a');
	dg$disambig['Wikipedia:Strona ujednoznaczniająca'] = false;

	var prefix = mw.util.getUrl("");

	for (var i = 0; i < links.length; i++)
	{
		var link = links[i];

		if (link.href.substring(0, prefix.length) != prefix)
			continue;

		var title = decodeURIComponent(link.href.substring(prefix.length).replace("_", " "));
		link.title = title;

		if (dg$disambig[title]) {
			dg$links++;
			if (link.text  ==  'inne znaczenia tego określenia')
				continue;

			if (link.parentNode && link.parentNode.className.match(/\bdisambig\b/))
				continue;

			link.className = 'mw-disambig';
		}
	}
	disLoadFixer();
}


function disMarkInit() {
	dg$pageLoaded = true;
	if (dg$dataLoaded)
		dg$doColor();
}


/*
AND FINALLY ONLOAD
*/

if((mw.config.get('wgAction') == 'view'|| mw.config.get('wgAction') == 'purge') && mw.config.get('wgNamespaceNumber') >= 0) {
	dg$request();
	$(document).ready(disMarkInit)
}
if(mw.config.get('wgAction') == 'edit') {
	$(document).ready(disOnloadEdit)
}

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