מדיה ויקי:Gadget-Watchlist.js

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/***
These are two gadgets from he.wikipedia, unified into a single gadget.
SOURCE #1: he.wikipedia.org/wiki/MediaWiki:Gadget-Watchlist.js
SOURCE #2: he.wikipedia.org/wiki/MediaWiki:Gadget-watchlistMark.js
***/
if ($.inArray( mw.config.get('wgCanonicalSpecialPageName'), ['Recentchanges', 'Watchlist', 'Newpages']) + 1)
$(document).ready(function() {
var cannonicalPageName = mw.config.get('wgCanonicalSpecialPageName');

function wlinrc_setText(element, text) {
	if (typeof element.innerText != "undefined")
		element.innerText = text;
	if (typeof element.textContent != "undefined")
		element.textContent = text;
}

function wlinrc_done(span) {
	if (cannonicalPageName == 'Watchlist') {
		span.parentNode.removeChild(span);
		return;
	}
	wlinrc_setText(span.firstChild, span.isWatched ? '[מעקב]' : '[ביטול מעקב]');
	span.source.style.fontWeight = span.isWatched ? 'normal' : 'bolder';
	span.style.color = span.isWatched ? '#3864e8' : 'green';
	span.isWatched ^= true;
}

function wlinrc_watchme() {
	var params = {action: 'watch', title: this.target.replace(' ', '_') , format: 'json'};
	if (this.isWatched)
		params.unwatch = '';
	if (mw && mw.user && mw.user.tokens)
		params.token = mw.user.tokens.get('watchToken');
	var span = this;
	$.post(mw.util.wikiScript('api'), params, function() { wlinrc_done(span); })
	wlinrc_setText(this.firstChild, '[טוען...]');
	this.style.color = 'orange';
}

function wlinrc_addWatchListLink(element, anchor) {
	var link, source;
	if (anchor) {
		source = anchor;
		link = anchor.title;
	} else {
		var anchors = element.getElementsByTagName('a');
		var link = '', source = null;
		for (var i = 0; i < anchors.length; i++) {
			var anchor = anchors[i];
			var linkString = anchor.href;
			if (linkString && linkString.indexOf('/wiki/', 0) > 0) {
				link = anchor.title;
				source = anchor;
				break;
			}
		}
		if (!link)
			return;
	}
	var span = document.createElement(span);
	var inWatchList = cannonicalPageName == 'Watchlist';
	span.isWatched =  inWatchList || $(element).closest('.mw-changeslist-line-watched').length;
	var stopFollowStr = inWatchList ? '[ביטול מעקב]' : '[ביטול מעקב]';
	span.appendChild(document.createTextNode(span.isWatched ? stopFollowStr  : '[מעקב]'));
	$.extend(span.style, {cursor: 'pointer', color: span.isWatched ? 'green' : '#3864e8'});
	$.extend(span, {onclick: wlinrc_watchme, target: link, source: source});
	element.appendChild(span);
}

$('li.mw-line-even, li.mw-line-odd').each(function(i,e){wlinrc_addWatchListLink(e)});

var tds = $("td.mw-enhanced-rc").next().each(function() {
	var a = $(this).find("a:eq(0)");
	if (a.length)
		wlinrc_addWatchListLink(this, a[0]);
});

if (cannonicalPageName == 'Newpages') {
	$(".mw-newpages-time").parent().each(function() {
		var anchors = $(this).find(".mw-newpages-time").next();
		if (anchors.length)
			wlinrc_addWatchListLink(this, anchors[0]);
	});
}

});

/* ---------- */

if ((mw.config.get('wgNamespaceNumber') == -1 && mw.config.get('wgCanonicalSpecialPageName') == "Contributions")
	|| (mw.config.get('wgNamespaceNumber') == 14))
	$(document).ready(function() {
var isCat = mw.config.get('wgNamespaceNumber') == 14;
var watchList = {};

function readWatchList(continuation) {
	var params = { action: 'query', list: 'watchlistraw', wrlimit: 500, format: 'json', rawcontinue: 1 };
	if (continuation)
		params.wrcontinue = continuation;
	$.getJSON(mw.util.wikiScript('api'), params, function(data) {
		if (data && data.watchlistraw)
			$.each(data.watchlistraw, function(key, val) { watchList[val.title] = true; });
		if (data && data['query-continue'])
			readWatchList(data['query-continue']['watchlistraw']['wrcontinue']);
		else
			colorWatched();
	});
}

function watchText(watch) { return (isCat ? ' ':'') + (watch ? '[מעקב]' : '[ביטול מעקב]');}
function watchTitle(watch){ return watch? 'הוספת דף זה לרשימת המעקב שלך' : 'הסרת דף זה מרשימת המעקב שלך';}

function colorWatched() {

	var pagesList = isCat ? $('#mw-pages').find('li') : mw.util.$content.find('ul > li');
	var all = [];
	var all = pagesList.each(function() {
		var li = $(this);
		var line = li.children().filter('a:last');
		var page = line.attr('title');
		var watched = watchList[page] || false;
		if (watched)
			line.addClass('iswatched');
		var watchLink = $('<span>', {'class': watched? 'unwatchit-link' : 'watchit-link', title: watchTitle( !watched)})
			.text(watchText(! watched))
			.click(function() {watchIt($(this), page)});
		li.append(watchLink);
	});
}

function watchIt(span, page) {
	var watched = span.hasClass('unwatchit-link');
	var params = {action: 'watch', title: page, format: 'json'};
	if (watched)
		params.unwatch = '';
	if (mw && mw.user && mw.user.tokens)
		params.token = mw.user.tokens.get('watchToken');
	$.post(mw.util.wikiScript('api'), params, function() {
		var lines=$('a').filter(function(){return $(this).text()==page});
		lines.parent().children('span.watchit-link, span.unwatchit-link')
			.toggleClass('unwatchit-link  watchit-link')
			.text(watchText(watched))
			.attr({title: watchTitle(watched)});
		lines.toggleClass('iswatched');
	});
}

mw.util.addCSS(
	".unwatchit-link{color: #a00; cursor: pointer; font-size: 70%; display: none}  \n" +
	".watchit-link{color: #008; cursor: pointer; font-size: 70%; display: none}  \n" +
	".iswatched{font-weight: bolder;}  \n" +
	"</style> "
)
readWatchList();
var showLink = $('<a>', {href: '#', text:'הצגת קישוריות מעקב'}).click(
	function(){
		mw.util.addCSS('.unwatchit-link,.watchit-link{display:inline;}');
		$(this).remove();
	}
);
if ($('#contentSub a').length)
	$('#contentSub a:last').after(showLink).after(' | ');
else
	$('#contentSub').append(showLink);

});