MediaWiki:Gadget-replylinks.js

Z Wikipodróży

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
/**
	@file Odpowiedzi z linkami (Reply links with backtrack links)

	Opis (pl):
		- http://pl.wikipedia.org/wiki/Wikipedia:Narz%C4%99dzia/Odpowiedzi_z_linkami

    Main functions:
		- adding reply links near user links
		- inserting text given in newsectionname (as PHP param in the location string of the page)

    Copyright:  ©2006-2011 Maciej Jaros (pl:User:Nux, en:User:EcceNux)
     Licencja:  GNU General Public License v2
                http://opensource.org/licenses/gpl-license.php

	@note Please keep MW 1.16 compatible (i.e. do not use mw.config)
	@note jQuery is required though
	@note Dev version contains more comments see: http://pl.wikipedia.org/wiki/Wikipedysta:Nux/replylinks.dev.js
*/
// EOC@line#21
if (typeof(window.oRepLinks) != 'undefined')
{
	throw ("oRepLinks already used");
}
var oRepLinks = {};
// EOC@line#30
oRepLinks.version = oRepLinks.ver = '1.6.5';
// EOC@line#36
oRepLinks.i18n = {'':''
	,'en' : {'':''
		,'std prefix'        : 'Re:'
		,'no section prefix' : 'Ad:'
		,'reply link text'   : 'reply'
	}
	,'pl' : {'':''
		,'std prefix'        : 'Odp:'
		,'no section prefix' : 'Ad:'
		,'reply link text'   : 'odp'
	}
};

oRepLinks.hrefOnlineIPwhois = 'http://www.ripe.net/perl/whois?form_type=simple&searchtext=';
// EOC@line#55
(function($G){




$G.Lang = "en";
if (wgUserLanguage in $G.i18n)
{
	$G.Lang = wgUserLanguage;
}
$G.i18n = $G.i18n[$G.Lang];
// EOC@line#72
$G.getNamespaceNames = function(namespaceNumber, encodingFunction)
{
	var found = [];
	for (var id in mw.config.get('wgNamespaceIds'))
	{
		if (mw.config.get('wgNamespaceIds')[id] == namespaceNumber)
		{
			if (encodingFunction)
			{
				id = encodingFunction(id);
			}
			found.push(id);
		}
	}
	return found;
}






$G.strReHrefBase          = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1',  '(?:' + $G.getNamespaceNames(2, encodeURIComponent).join('|') + ')') + ':';

$G.strReHrefNewBase       = mw.config.get('wgServer') + mw.config.get('wgScript') + '\\?title=' + '(?:' + $G.getNamespaceNames(2, encodeURIComponent).join('|') + ')' + ':';

$G.strReHrefAnonimBase    = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', encodeURIComponent(wgFormattedNamespaces[-1])) + ':(?:Contributions|Wk%C5%82ad)/';

$G.strBaseUserTalkURL     = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', encodeURIComponent(wgFormattedNamespaces[3])) + ':';
// EOC@line#156
$G.autoNewSectionName = function()
{
	//

	//
	var elInput = document.getElementById('wpTextbox1');
	if (elInput)
	{
		//

		//
		var reParam = new RegExp ("&newsectionname=([^&]*)", "i");
		var matches = reParam.exec(location.search);
		var sectxt;

		if (matches)
		{
			sectxt = decodeURIComponent(matches[1]);
			elInput.value += ';'+sectxt+'\n\n';
		}

		//

		elInput = document.getElementById('wpSummary');
		if (elInput)
		{
			matches = /[ ](.*)\]/.exec(sectxt);

			if (matches)
			{
				elInput.value += decodeURIComponent(matches[1]);
			}
		}
	}
};
// EOC@line#195
$G.addReplyLinks = function()
{
	//

	//
	// if (!document.getElementById('t-permalink') && !document.getElementById('t-ispermalink') )
	if (wgCurRevisionId==0)
	{
		return;
	}

	//

	//
	var hrefPermalink;

	if (document.location.href.indexOf('&oldid=')!=-1)
	{
		hrefPermalink = document.location.href.replace(/#.+$/,'');
	}

	else
	{
		hrefPermalink = '{{fullurl:' + mw.config.get('wgPageName') + '|oldid=' + wgCurRevisionId + '}}';
	}

	//

	//

	//

	var reHref = new RegExp ($G.strReHrefBase + "([^/]*)$", "i");
	var reHrefNew = new RegExp ($G.strReHrefNewBase + "([^/?&]*)", "i");
	var reHrefAnonim = new RegExp ($G.strReHrefAnonimBase + "([\\.0-9]*)$");

	var content = document.getElementById('content');
	if (!content)
	{
		content = document.getElementById('mw_content');
		if (!content)
		{
			return;
		}
	}
	var bodyContent_id = 'bodyContent';
	var bodyContent = document.getElementById(bodyContent_id);
	if (!bodyContent)
	{
		bodyContent = document.getElementById('mw_contentholder');
	}

	//

	var secAbove = {
		'id' : bodyContent_id,
		'text' : $G.parseSectionText(mw.config.get('wgPageName'))
	};
	var secReplyText = $G.i18n['no section prefix'];
	//

	var a = $G.getElementsByTagNames ('A,SPAN', bodyContent);
	for (var i = 0; i < a.length; i++)
	{
		//

		if (a[i].nodeName.toLowerCase()=='a' && a[i].href != '' && a[i].getAttribute('href').indexOf('#')==-1)
		{
			var anonimous = false;
			var matches = (a[i].className.indexOf('new')>=0) ? reHrefNew.exec(a[i].href) : reHref.exec(a[i].href);
			if (!matches)
			{
				matches = reHrefAnonim.exec(a[i].href);
				anonimous = true;
			}

			else if ($G.oBotToOwner[matches[1]] != undefined)
			{
				matches[1] = $G.oBotToOwner[matches[1]];
			}

			if (matches)
			{
				//


				var hrefReply = $G.strBaseUserTalkURL + matches[1] + '?action=edit&section=new';
				//

				var newSectionName = '['+hrefPermalink+'#'+secAbove.id+' '+secReplyText+secAbove.text+']';
				hrefReply += '&newsectionname=' + encodeURIComponent(newSectionName);
				var newEl = document.createElement('small');
				var newA = document.createElement('a');
				newA.setAttribute('href', hrefReply);
				newA.setAttribute('title', $G.i18n['std prefix']+secAbove.text);
				newA.appendChild(document.createTextNode('['+$G.i18n['reply link text']+']'));
				newEl.appendChild(newA);
				$G.insertAfterGivenElement(a[i],newEl);


				if (anonimous)
				{
					newA = document.createElement('a');
					newA.setAttribute('href', $G.hrefOnlineIPwhois+matches[1]);
					newA.setAttribute('title', 'IP whois');
					newA.appendChild(document.createTextNode('[?]'));
					newEl.appendChild(newA);

				}
			}
		}

		//

		if (a[i].nodeName.toLowerCase()=='a' && mw.config.get('wgNamespaceNumber') != 6 && a[i].id != '' && a[i].parentNode.nodeName=='P')
		{
			var header = a[i].parentNode;

			var found;
			for (found=3; found; found--)
			{
				header = header.nextSibling;
				if (header!=null && header.nodeType==document.ELEMENT_NODE && header.nodeName.search(/h[0-9]/i)==0)
				{
					break;
				}
			}
			if (found)
			{
				secAbove.id = a[i].id;

				secAbove.text = $G.parseSectionText(header.innerHTML);
				// should be set only once (as it is always the same), but let's leave it that way
				secReplyText = $G.i18n['std prefix'];
				//header.innerHTML = '['+secAbove.id+'@'+found+']&rarr;'+secAbove.text;
			}
		}
		//

		if (a[i].className=='mw-headline')
		{
			secAbove.id = a[i].id;

			secAbove.text = $G.parseSectionText(a[i].innerHTML);
			// should be set only once (as it is always the same), but let's leave it that way
			secReplyText = $G.i18n['std prefix'];
			//header.innerHTML = '['+secAbove.id+'@'+found+']&rarr;'+secAbove.text;
		}
		//

		if (secAbove.text.search(/^[0-9.]+ /) > -1)
		{
			var isNumbered = true;
			if (secAbove.id.search(/^[0-9.]+_/) > -1)
			{
				if (secAbove.text.replace(/^([0-9. ]+) .*/, '$1').length == secAbove.id.replace(/^([0-9._]+)_.*/, '$1').length)
				{
					isNumbered = false;
				}
			}
			if (isNumbered)
			{
				secAbove.text = secAbove.text.replace(/^[0-9.]+ (.*)/, '$1');
			}
		}
	}
};
// EOC@line#371
$G.insertAfterGivenElement = function (el, newEl)
{
	if (el.nextSibling)
	{
		el.parentNode.insertBefore(newEl, el.nextSibling);
	}
	else
	{
		el.parentNode.appendChild(newEl);
	}
};
// EOC@line#392
$G.parseSectionText = function (html)
{

	html = html.replace(/<\S[^<>]*>/g, '');

	html = html.replace(/\[[^\]]*\]/,'');

	html = html.replace(/[\{\}]/g,'');

	html =  html.replace(/[ \t]*$/,'').replace(/^[ \t]*/,'');
	return html;
};
// EOC@line#416
$G.getElementsByTagNames = function (list, obj)
{
	// for some reason sourceIndex doesn't work in Opera when NOT in debug mode (returns -1)...

	var resultArray = new Array();
	$(list, obj).each(function(){
		resultArray.push(this);
	})
	return resultArray;
};





if (mw.config.get('wgAction')=='edit' && mw.config.get('wgCanonicalNamespace')=='User_talk')
{
	$($G.autoNewSectionName);
}

if (mw.config.get('wgAction')!='edit' && mw.config.get('wgAction')!='submit')
{
	$($G.addReplyLinks);
}
// EOC@line#444
})(oRepLinks);