משתמש:Matanya/common.js/revert.js
< משתמש:Matanya | common.js
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
/* For admins: adds a "הצג אפשרויות טיפול בטרולים" link in user contribs page that adds troll reverting, deleteing and blocking options.
*
* written by [[user:yonidebest]]
*/
/* revert */
function execRevert(url, id) {
var a = sajax_init_object();
a.open('GET', url + '&bot=1&hidediff=1' , true);
a.onreadystatechange = function() {
if (a.readyState != 4) return;
var revertUpdate = document.getElementById('revertUpdate' + id);
revertUpdate.innerHTML = '<span style="color: green;">בוצע</span>';
};
a.send(null);
}
function execMassRevert(para) {
var hours = document.getElementById('revertTime').value;
var progressRevert = document.getElementById('progressRevert');
progressRevert.innerHTML = '<span style="color: orange;">ראה התקדמות למטה.</span>';
var ils = mw.util.$content.find('li');
if (ils.length==0) {
progressRevert.innerHTML = 'אין תרומות.';
return;
}
var today = Date.parse(Date());
var months = [];
months['ינואר'] = 1;months['פברואר'] = 2;months['מרץ'] = 3;months['אפריל'] = 4;months['מאי'] = 5;months['יוני'] = 6;
months['יולי'] = 7;months['אוגוסט'] = 8;months['ספטמבר'] = 9;months['אוקטובר'] = 10;months['נובמבר'] = 11;months['דצמבר'] = 12;
for (var i = 0; i < ils.length; i++) {
var mwrollbacklinks = getElementsByClassName(ils[i], 'span', 'mw-rollback-link');
if (!mwrollbacklinks || !mwrollbacklinks[0]) continue;
if (para == 'hours') {
var rx = new RegExp('(\\d{2}):(\\d{2}), (\\d{1,2}) ב([א-ת]+) (\\d{4})');
var m = rx.exec(ils[i].innerHTML);
var articleTime = Date.parse(months[m[4]] + '/' + m[3] + '/' + m[5] + ' ' + m[1] + ':' + m[2]); // mm/dd/yyyy hh:mm
if ( (today - articleTime)/60/60/1000 > hours ) continue;
}
var span = document.createElement('span');
span.id = 'revertUpdate' + i;
span.innerHTML = '<span style="color: orange;">טוען...</span>';
ils[i].appendChild(document.createTextNode(' ('));
ils[i].appendChild(span);
ils[i].appendChild(document.createTextNode(')'));
execRevert(mwrollbacklinks[0].getElementsByTagName('a')[0].href, i);
}
}
/* delete */
function execDelete(articleName, id) {
var api = sajax_init_object();
api.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&indexpageids=1&intoken=delete&titles=Whatever', true);
api.onreadystatechange = extract_token;
api.send(null);
function extract_token() {
if (api.readyState==4) {
if (api.status==200) {
var response = eval('(' + api.responseText + ')');
var token = response['query']['pages'][response['query']['pageids'][0]]['deletetoken'];
delete_page(token);
} else {
var deleteUpdate = document.getElementById('deleteUpdate' + id);
deleteUpdate.innerHTML = '<span style="color: red;">נכשל</span>';
}
}
}
// delete page (must be done through POST)
function delete_page(_token) {
var parameters = 'action=delete&title=' + articleName + '&reason=' + encodeURIComponent('שחזור מרובה') + '&token=' + encodeURIComponent(_token);
var api = sajax_init_object();
api.open('POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php', true); // just reuse the same query object
api.onreadystatechange = alert_result;
api.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
api.setRequestHeader('Connection', 'keep-alive');
api.setRequestHeader('Content-length', parameters.length);
api.send(parameters);
// process response
function alert_result() {
if (api.readyState==4) {
if (api.status==200) {
var deleteUpdate = document.getElementById('deleteUpdate' + id);
deleteUpdate.innerHTML = '<span style="color: green;">בוצע</span>';
} else {
var deleteUpdate = document.getElementById('deleteUpdate' + id);
deleteUpdate.innerHTML = '<span style="color: red;">נכשל</span>';
}
}
}
}
}
function execMassDelete(para) {
var hours = document.getElementById('deleteTime').value;
var progressDelete = document.getElementById('progressDelete');
progressDelete.innerHTML = '<span style="color: orange;">ראה התקדמות למטה.</span>';
var ils = mw.util.$content.find('li');
if (!ils || !ils[0]) {
progressDelete.innerHTML = 'אין תרומות.';
return;
}
var today = Date.parse(Date());
var months = [];
months['ינואר'] = 1;months['פברואר'] = 2;months['מרץ'] = 3;months['אפריל'] = 4;months['מאי'] = 5;months['יוני'] = 6;
months['יולי'] = 7;months['אוגוסט'] = 8;months['ספטמבר'] = 9;months['אוקטובר'] = 10;months['נובמבר'] = 11;months['דצמבר'] = 12;
for (var i = 0; i < ils.length; i++) {
var newpages = getElementsByClassName(ils[i], 'abbr', 'newpage');
if (!newpages || !newpages[0]) continue; // not new page
if (para == 'hours') {
var rx = new RegExp('(\\d{2}):(\\d{2}), (\\d{1,2}) ב([א-ת]+) (\\d{4})');
var m = rx.exec(ils[i].innerHTML);
var articleTime = Date.parse(months[m[4]] + '/' + m[3] + '/' + m[5] + ' ' + m[1] + ':' + m[2]); // mm/dd/yyyy hh:mm
if ( (today - articleTime)/60/60/1000 > hours ) continue;
}
var span = document.createElement('span');
span.id = 'deleteUpdate' + i;
span.innerHTML = '<span style="color: orange;">טוען...</span>';
ils[i].appendChild(document.createTextNode(' ('));
ils[i].appendChild(span);
ils[i].appendChild(document.createTextNode(')'));
execDelete(ils[i].getElementsByTagName('a')[4].innerHTML, i);
}
}
/* block */
function execBlockTroll(para) {
var progressBlock = document.getElementById('progressBlock');
progressBlock.innerHTML = '<span style="color: orange;">מבצע...</span>';
var api = sajax_init_object();
api.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&indexpageids=1&intoken=block&titles=Whatever', true);
api.onreadystatechange = extract_token;
api.send(null);
function extract_token() {
if (api.readyState==4) {
if (api.status==200) {
var response = eval('(' + api.responseText + ')');
var token = response['query']['pages'][response['query']['pageids'][0]]['blocktoken'];
block_user(token);
} else {
var progressBlock = document.getElementById('progressBlock');
progressBlock.innerHTML = '<span style="color: red;">נכשל</span>';
}
}
}
// block user (must be done through POST)
function block_user(_token) {
var userName = document.forms[0].target.value;
var reason = 'טרול';
if (para == 'range') {
userName = userName.replace(/(\d{1,3})\.(\d{1,3})\.\d{1,3}\.\d{1,3}/, '$1.$2.0.0/16');
reason = 'לפרטים נוספים, אנא פנו אל ספק האינטרנט שלכם, אם ברצונכם לערוך [[מיוחד:כניסה_לחשבון|הרשמו או הכנסו לחשבון.]]';
}
var parameters = 'action=block&user=' + encodeURIComponent(userName) + '&reason=' + encodeURIComponent(reason) + '&expiry=' + encodeURIComponent('1 day') + '&anononly=1&noemail=1&allowusertalk=1&autoblock=1&reblock=1' + ((para == 'day') ? '&nocreate=0' : "") + '&token=' + encodeURIComponent(_token);
api.open('POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php', true); // just reuse the same query object
api.onreadystatechange = alert_result;
api.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
api.setRequestHeader('Connection', 'keep-alive');
api.setRequestHeader('Content-length', parameters.length);
api.send(parameters);
// process response
function alert_result() {
if (api.readyState==4) {
if (api.status==200) {
var progressBlock = document.getElementById('progressBlock');
progressBlock.innerHTML = '<span style="color: green;">בוצע</span>';
} else {
var progressBlock = document.getElementById('progressBlock');
progressBlock.innerHTML = '<span style="color: red;">נכשל</span>';
}
}
}
}
}
/* general */
function showTrollOptions() {
var trollOptionsSpan = document.getElementById('trollOptionsSpan');
trollOptionsSpan.innerHTML = "";
var trollOptions = document.createElement('div');
trollOptions.id = 'trollOptions'; trollOptions.style.color = 'black'; trollOptions.style.fontSize = '115%';
trollOptions.style.padding = '10px'; trollOptions.style.border = '1px solid #aaa'; trollOptions.style.marginTop = '7px';
trollOptions.innerHTML = '<b><font color="#DC143C">יש להשתמש בסקריפט זה בזהירות מירבית. אם ביצעתם פעולה ואתם מעוניינים להפסיק את פעולתה - עברו לדף אחר על מנת לקטוע את פעילות הסקריפט.</font></b><br /><br /><b>אפשרויות שחזור:</b><br />';
var textbox1 = document.createElement('input');
textbox1.id = 'revertTime';
textbox1.value = 'הכנס מספר שעות';
trollOptions.appendChild(textbox1);
trollOptions.appendChild(document.createTextNode(' '));
var link1 = document.createElement('a');
link1.href = 'javascript:execMassRevert("hours")';
link1.appendChild(document.createTextNode('שחזור עריכות מ-X שעות אחרונות'));
trollOptions.appendChild(link1);
trollOptions.appendChild(document.createTextNode(' | '));
var link2 = document.createElement('a');
link2.href = 'javascript:execMassRevert("all")';
link2.appendChild(document.createTextNode('שחזור הכל'));
trollOptions.appendChild(link2);
trollOptions.innerHTML += '<br />';
var span1 = document.createElement('span');
span1.id = 'progressRevert';
trollOptions.appendChild(span1);
trollOptions.innerHTML += '<br /><b>אפשרויות מחיקה (לעניין דפים שנוצרו על ידי המשתמש):</b><br />';
var textbox2 = document.createElement('input');
textbox2.id = 'deleteTime';
textbox2.value = 'הכנס מספר שעות';
trollOptions.appendChild(textbox2);
trollOptions.appendChild(document.createTextNode(' '));
var link3 = document.createElement('a');
link3.href = 'javascript:execMassDelete("hours")';
link3.appendChild(document.createTextNode('מחיקת עריכות מ-X שעות אחרונות'));
trollOptions.appendChild(link3);
trollOptions.appendChild(document.createTextNode(' | '));
var link4 = document.createElement('a');
link4.href = 'javascript:execMassDelete("all")';
link4.appendChild(document.createTextNode('מחיקת הכל'));
trollOptions.appendChild(link4);
trollOptions.innerHTML += '<br />';
var span2 = document.createElement('span');
span2.id = 'progressDelete';
trollOptions.appendChild(span2);
trollOptions.innerHTML += '<br /><b>חסימה:</b><br />';
var link5 = document.createElement('a');
link5.href = 'javascript:execBlockTroll("day")';
link5.appendChild(document.createTextNode('חסימה ליום אחד'));
trollOptions.appendChild(link5);
trollOptions.appendChild(document.createTextNode(' | '));
var link6 = document.createElement('a');
link6.href = 'javascript:execBlockTroll("range")';
link6.appendChild(document.createTextNode('חסימת הטווח ליום אחד'));
trollOptions.appendChild(link6);
trollOptions.innerHTML += '<br />';
var span3 = document.createElement('span');
span3.id = 'progressBlock';
trollOptions.appendChild(span3);
trollOptionsSpan.parentNode.insertBefore(trollOptions, trollOptionsSpan);
trollOptions.parentNode.insertBefore(document.createElement('br'), trollOptions);
}
function initTrollOptions() {
if (wgCanonicalSpecialPageName != 'Contributions') return;
var span = document.createElement('span');
span.id = 'trollOptionsSpan';
var link = document.createElement('a');
link.href = 'javascript:showTrollOptions()';
link.appendChild(document.createTextNode('הצגת אפשרויות טיפול בטרולים'));
span.appendChild(document.createTextNode('('));
span.appendChild(link);
span.appendChild(document.createTextNode(')'));
var contentSub = document.getElementById('contentSub');
contentSub.appendChild(document.createTextNode(' '));
contentSub.appendChild(span);
}
$(initTrollOptions);