משתמש:קיפודנחש/common.js/workTemplatesRemovalWatch.js
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
/*
IMPORTANT NOTICE:
This script should not be used, and is left here for historical reasons only! 10/2019 קיפודנחש
*/
// riwt: Identify Removal of [[תבנית:בעבודה]] and log pages that lost it on [[ויקיפדיה:ערכים מהם הוסרה תבנית בעבודה]]
function riwt_short_date() {
var date = new Date();
var min = (date.getUTCMinutes() < 10 ? '0' : '') + date.getUTCMinutes();
return date.getUTCDate() + '/' + (1+date.getUTCMonth()) + '/' + date.getUTCFullYear() + ' ' + date.getUTCHours() + ':' + min;
}
function riwt_save_topage(title, summary, content, section, next) {
var param = {action: 'edit', title: title, summary: summary, token: mw.user.tokens.get('csrfToken'), format: 'json'};
if (typeof section == 'number')
param.section = section;
$.post(mw.util.wikiScript('api'), $.extend(param, content), function (data) {
if (data && data.error)
alert('error saving: ' + data.error['info']);
else if (data && data.edit && data.edit.result == 'Success' && typeof next == 'function')
next();
});
}
function riwt_get_json(params, func) {$.getJSON(mw.util.wikiScript('api'), $.extend(params, {format: 'json'}), func);}
function riwt_handle_removed(current, removed, pagesWithTemplate, data, sanitizedRemoved, progress) {
message = 'מנקה את רשימת הדפים מהם הוסרה התבנית';
progress.lastLine(message + ' ' + removed.length, 1);
if (data && data.query && data.query.pages)
for (var i in data.query.pages) {
var page = data.query.pages[i], title = page.title;
if (page.pageid && !pagesWithTemplate[title])
sanitizedRemoved.push(title);
}
if (removed.length)
riwt_get_json({action: 'query', titles: removed.splice(0, 20).join('|'), redirects: ''},
function(newdata){current, riwt_handle_removed(current, removed, pagesWithTemplate, newdata, sanitizedRemoved, progress);});
else {
sanitizedRemoved.sort();
riwt_process_current(current, sanitizedRemoved, progress);
}
}
function riwt_process_current(current, sanitizedRemoved, progress) {
var dateLastEdit = {}, work = current.slice(), threshold = new Date() - 1000 * 60 * 60 * 24 * 21; //three weeks
progress.lastLine(progress.lastLine() + ' - בוצע');
progress.lastLine('', 1);
nextSlice(work.splice(0, 20));
function lastEdit(article) {
return article in dateLastEdit ? dateLastEdit[article].ts : 0;
}
function report() {
var message = 'כותב את רשימת הדפים עם התבנית ', todo = current.length, done = todo - work.length;
progress.lastLine(message + done + '/' + todo);
}
function getDate(ts) {
dar = ts.split(/[^\d]/); // timestamp looks like so: "2011-05-05T18:56:27Z"
var month = parseInt(dar[1],10) - 1; // "Date" expexts months in the range of 0..11, timestamp is more conventional.
return new Date(dar[0],month,dar[2],dar[3],dar[4],dar[5]);
}
function storeCurrent() {
function daysStale(article) {
var now = new Date();
var diff = now - lastEdit(article);
return Math.round(diff / 1000 / 3600 / 24);
}
current.sort(function(a, b) {return lastEdit(a) - lastEdit(b)});
var text = '{{/פתיח}}\n';
for (var i in current) {
var article = current[i],
user = article in dateLastEdit ? dateLastEdit[article].user : '';
text += '#[[' + article + ']] {{כ}} (' + daysStale(article) + ', [[משתמש:' + user + ']])\n';
}
riwt_save_topage(riwt_page_name(0), 'עדכון ' + riwt_short_date(), {text: text}, '',
function() {
progress.lastLine('הסקריפט סיים לרוץ. התבנית הוסרה מ-' + sanitizedRemoved.length + ' דפים ', 1);
progress.closeIt();
}
);
}
function nextSlice(slice) {
report();
riwt_get_json({action: 'query', prop: 'revisions', rvprop: 'timestamp|user', titles: slice.join('|')}, function(data) {
if (data.query && data.query.pages)
for (var pageid in data.query.pages) {
if (pageid < 0)
continue;
var page = data.query.pages[pageid];
dateLastEdit[page.title] = {ts: getDate(page.revisions[0].timestamp), user: page.revisions[0].user};
}
if (work.length)
nextSlice(work.splice(0, 20));
else {
if (sanitizedRemoved.length > 0)
riwt_save_topage(riwt_page_name(1), 'עדכון ' + riwt_short_date(),
{prependtext: '====הרצה בתאריך ' + riwt_short_date() + '====\n*[[' + sanitizedRemoved.join(']]\n*[[') + ']]\n'},
1,
function() {
progress.lastLine('כותב את רשימת הדפים מהם הוסרה התבנית', 1);
storeCurrent();
});
else
storeCurrent();
}
})
}
}
function riwt_analyze_results(data, pagesWithTemplate, progress) {
progress.lastLine(progress.lastLine() + ' - בוצע');
var removed = [];
if (data && data.parse && data.parse.links)
for (var i in data.parse.links) {
var link = data.parse.links[i], title = link['*'];
if (title && ! /(משתמשת?:|תבנית:)/.test(title) && link['exists'] == '' && !pagesWithTemplate[title])
removed.push(title);
}
current = [];
for (var key in pagesWithTemplate)
current.push(key);
current.sort();
riwt_handle_removed(current, removed, pagesWithTemplate, false, [], progress);
}
function riwt_get_current_list(data, pagesWithTemplate, progress) {
var message = 'קורא את רשימת הדפים עם התבנית:';
progress.lastLine(message);
var sofar = 0;
if (data && data.query && data.query.embeddedin) {
for (var i in data.query.embeddedin) {
pagesWithTemplate[data.query.embeddedin[i].title] = 1;
sofar++;
}
progress.lastLine(message + ' ' + sofar);
}
if (!data || data['query-continue']) {
var params = {action: 'query', list: 'embeddedin', eititle: 'תבנית:בעבודה', eilimit: 500, einamespace: 0};
if (data['query-continue'])
params.eicontinue = data['query-continue'];
riwt_get_json(params, function(data) {riwt_get_current_list(data, pagesWithTemplate, progress);});
} else {
progress.lastLine(progress.lastLine() + ' - בוצע');
progress.lastLine('קורא את הדף הקודם', 1);
riwt_get_json({action: 'parse', page: riwt_page_name(0)}, function(data){riwt_analyze_results(data, pagesWithTemplate, progress);});
}
}
function riwt_page_name(type, full) {
return (full ? wgServer + '/w/index.php?title=' : '') +
'ויקיפדיה:ערכים מהם הוסרה תבנית בעבודה' +
(type == 0 ?
'/דפים עם התבנית'
: '');
}
function riwt_doit() {
mediaWiki.loader.using('jquery.ui', function () {
$(document).ready(function () {
var progress = {
init: function() {
document.body.style.cursor = 'wait';
this.dialog = $('<div style="font-size:2em;"></div>')
.html(this.lines.join('<br/>') + '</div> ')
.dialog({
id: 'riwt_dialog',
width: 800,
height: 'auto',
minHeight: 90,
modal: true,
resizable: false,
draggable: false,
closeOnEscape: false
});
$('.ui-dialog-titlebar').hide();
},
lastLine: function(content, push) {
if (content) {
this.lines[this.lines.length - 1 + (push || 0)] = content;
this.dialog.html(this.lines.join('<br />' + '</div>'));
}
else return this.lines[this.lines.length - 1];
},
closeIt: function() {
var d = this.dialog;
d.append($('<p>').append($('<input>', {type: 'button', value: 'סגור'}).click(function() {
$(d).dialog('close');
document.body.style.cursor = '';
})));
},
lines: ['<div id="riwt_dialog" style="font-size:2em;">']
};
progress.init();
progress.lastLine(' ');
riwt_get_current_list(false, {}, progress);
});
});
}
mw.util.addPortletLink('p-tb', 'javascript:riwt_doit()', 'סקריפט "איבדו בעבודה"');
mw.util.addPortletLink('p-tb', 'javascript:window.location=riwt_page_name(1, true);', 'דפים שאיבדו "בעבודה"');