מדיה ויקי: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);
});