משתמש:Matanya/common.js/revert.js

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על 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);