مدیاویکی:Gadget-patroller.js

از اسلامیکال
نسخهٔ تاریخ ‏۱۲ ژانویهٔ ۲۰۲۳، ساعت ۱۹:۲۷ توسط Aboammar (بحث | مشارکت‌ها) (صفحه‌ای تازه حاوی «// en:User:TheJosh/Scripts/NewPagePatrol.js var npp_http; var npp_enabled; var npp_num_pages = 50; var npp_refresh; var npp_num_idle_req; var npp_curr_idle_req; var npp_str_no_ajax = "ظاهراً در استفاده از اسکریپت گشت صفحهٔ نو مشکلی وجود دارد. مرورگر شما از این ابزار پشتیبانی نمی‌کند!"; var npp_str_box_title = "صفحه‌های نو"; var npp_str_bo...» ایجاد کرد)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
// [[:en:User:TheJosh/Scripts/NewPagePatrol.js]]
var npp_http;
var npp_enabled;
var npp_num_pages = 50;
var npp_refresh;
var npp_num_idle_req;
var npp_curr_idle_req;

var npp_str_no_ajax = "ظاهراً در استفاده از اسکریپت گشت صفحهٔ نو مشکلی وجود دارد. مرورگر شما از این ابزار پشتیبانی نمی‌کند!";
var npp_str_box_title = "صفحه‌های نو";
var npp_str_box_title_updating = 'صفحه‌های نو <img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />';
var npp_str_box_title_failed = "صفحه‌های نو (به‌روزرسانی شکست خورد)";
var npp_str_enable = "فعال‌کردن این جعبه";
var npp_str_disable = "غیرفعال‌کردن این جعبه";
  
$( npp_init );
 
/* initalise */
function npp_init() {
 
  // allow user settings through
  if (npp_enabled == null) {
    npp_enabled = false;
  }
  if (npp_num_pages == null) {
    npp_num_pages = 10;
  }
  if (npp_refresh == null) {
    npp_refresh = 5;
  }
  if (npp_num_idle_req == null) {
    npp_num_idle_req = 60;
  }
 
  // A few limits to be nice to the servers
  if (npp_num_pages > 50) {
    npp_num_pages = 50;
  }
  if (npp_num_pages < 1) {
    npp_num_pages = 1;
  }
  if (npp_refresh < 2) {
    npp_refresh = 2;
  }
  if (npp_num_idle_req > 1000) {
    npp_num_idle_req = 1000;
  }
  if (npp_num_idle_req < 5) {
    npp_num_idle_req = 5;
  }
 
  // get our cookie
  if (document.cookie.length > 0) {
    var c_start = document.cookie.indexOf("npp_show_box=");
    if (c_start != -1) { 
      c_start = c_start + 13; 
      var c_end = document.cookie.indexOf(";", c_start);
      if (c_end == -1) {
        c_end = document.cookie.length;
      }
 
      if (document.cookie.substring(c_start, c_end) == "yes") {
        npp_enabled = true;
      } else {
        npp_enabled = false;
      }
    } 
  }
 
  // Either make a request or show nothing
  npp_curr_idle_req = 0;
  if (npp_enabled == true) {
    npp_ajax_request();
  } else {
    npp_draw_disabled_box();
  }
}
 
/* init ajax */
function npp_create_request() {
  try {
    npp_http = new XMLHttpRequest();
 
  } catch (e) {
    try {
      npp_http = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        npp_http = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        return false;
      }
    }
  }
 
  npp_http.onreadystatechange = function() {
    if(npp_http.readyState == 4) npp_ajax_response();
  }
 
  return true;
}
 
/* make a request */
function npp_ajax_request() {
  // if we have done too many requests, disable the box
  npp_curr_idle_req++;
  if (npp_curr_idle_req > npp_num_idle_req) {
    npp_disable_box();
  }
 
  // check we are enabled
  if (npp_enabled == false) return;
 
  // firstly, inform the user
  var cur_box = document.getElementById('p-newpages');
  if (cur_box != null) {
    cur_box.firstChild.innerHTML = npp_str_box_title_updating;
  }
 
  if (npp_create_request () == false) {
    if (cur_box != null) {
      cur_box.firstChild.firstChild.data = npp_str_box_title_failed;
    } else {
      alert (npp_str_no_ajax);
    }
  }
 
  // Get the current time
  var dateobj = new Date();
  var now = Math.floor(dateobj.getTime() / 1000.0);
 
  // Go back 5 mins in time
  now -= (60 * 5);
 
  // Then make the request
  npp_http.open("GET", "/w/api.php?action=query&format=xml&list=recentchanges&rcshow=!bot|!redirect&rctype=new&rcnamespace=0&rcprop=title|timestamp|ids|patrolled&rcstart=" + now + "&rclimit=" + npp_num_pages, true);
  npp_http.send(null);
}
 
function npp_draw_disabled_box() {
  if (mw.config.get('skin') == 'vector' || mw.config.get('skin') == 'vector-2022') {
    npp_draw_disabled_box_vector();
  } else {
    npp_draw_disabled_box_monobook();
  }
}
 
function npp_ajax_response() {
  if (mw.config.get('skin') == 'vector' || mw.config.get('skin') == 'vector-2022') {
    npp_ajax_response_vector();
  } else {
    npp_ajax_response_monobook();
  }
 
  // and do it again in 5 secs
  //setTimeout("npp_ajax_request()", npp_refresh * 1000);
}
 
function npp_disable_box() {
  npp_enabled = false;
  npp_draw_disabled_box();
  document.cookie = "npp_show_box=no; path=/";
}
 
function npp_enable_box() {
  npp_enabled = true;
  npp_curr_idle_req = 0;
  document.cookie = "npp_show_box=yes; path=/";
  npp_ajax_request();
}
 
 
/* Draw disabled (monobook) */
function npp_draw_disabled_box_monobook() {
  // Container div
  var link_div = document.createElement('div');
  link_div.className = 'pBody';
  var div = document.createElement('div');
  div.setAttribute('id', 'p-newpages');
  div.className = 'portlet';
  var heading = document.createElement('h3');
  heading.appendChild(document.createTextNode(npp_str_box_title));
  div.appendChild(heading);
  div.appendChild(link_div);
 
  // enable link
  var p = document.createElement('p');
  p.style.fontSize = 'x-small';
  p.style.margin = '0px';
  var a = document.createElement('a');
  a.appendChild(document.createTextNode(npp_str_enable));
  a.onclick = npp_enable_box;
  p.appendChild(a);
  link_div.appendChild(p);
 
  // now replace the div
  var old_div = document.getElementById('p-newpages');
  var side_col = document.getElementById('column-one');
  if (old_div != null) {
    side_col.replaceChild(div, old_div);
  } else if (side_col != null) {
    var node = document.getElementById('p-search');
    if(node && side_col && node.parentNode === side_col) {
	    side_col.insertBefore(div, node);
    }
  }
}
 
/* Draw response (monobook) */
function npp_ajax_response_monobook() {

  if(!npp_http || !npp_http.responseXML) return;
  var items = npp_http.responseXML.getElementsByTagName('rc');
 
  // create the div that holds all the newpage links
  var link_div = document.createElement('div');
  link_div.className = 'pBody';
  var list = document.createElement('ul');
  link_div.appendChild(list);
 
  // populate the list with 10 links.
  for (var i = 0; i < items.length; i++) {
    var item_name = items[i].getAttribute('title');
    var rcid = items[i].getAttribute('rcid');
    var patrolled = items[i].getAttribute('patrolled') != null;
 
    item_name = item_name.replace(/&/, "%26");
    var item_url = mw.config.get('wgScript') + '?title=' + encodeURI(item_name) + '&rcid=' + rcid + '&redirect=no';
 
    a = document.createElement('a');
    a.setAttribute('href', item_url);
    a.appendChild(document.createTextNode(item_name));
 
    var li = document.createElement('li');
    li.appendChild(a);
    if (!patrolled) {
        li.setAttribute('class', 'not-patrolled');
    }
    list.appendChild(li);
  }
 
  // Container div
  var div = document.createElement('div');
  div.setAttribute('id', 'p-newpages');
  div.className = 'portlet';
  var heading = document.createElement('h3');
  heading.appendChild(document.createTextNode(npp_str_box_title));
  div.appendChild(heading);
  div.appendChild(link_div);
 
  // disable link
  var p = document.createElement('p');
  p.style.fontSize = 'x-small';
  p.style.margin = '0px';
  p.style.textAlign = 'right';
  a = document.createElement('a');
  a.appendChild(document.createTextNode(npp_str_disable));
  a.onclick = npp_disable_box;
  p.appendChild(a);
  link_div.appendChild(p);
 
  // now replace the div
  var old_div = document.getElementById('p-newpages');
  var side_col = document.getElementById('column-one');
  if (old_div != null) {
    side_col.replaceChild(div, old_div);
  } else if (side_col != null) {
    var node = document.getElementById('p-search');
    if ( node && node.parentNode === side_col ) {
	    side_col.insertBefore(div, node);
    }
  }
}
 
 
/* Draw disabled box (vector skin) */
function npp_draw_disabled_box_vector() {
  // Container div
  var link_div = document.createElement('div');
  link_div.className = 'body';
  link_div.style.display = "block";
  var div = document.createElement('div');
  div.setAttribute('id', 'p-newpages');
  div.className = 'mw-portlet vector-menu vector-menu-portal portal collapsed';
  var heading = document.createElement('h3');
  heading.appendChild(document.createTextNode(npp_str_box_title));
  div.appendChild(heading);
  div.appendChild(link_div);
 
  // enable link
  var p = document.createElement('p');
  p.style.fontSize = 'x-small';
  p.style.margin = '0px';
  var a = document.createElement('a');
  a.appendChild(document.createTextNode(npp_str_enable));
  a.onclick = npp_enable_box;
  p.appendChild(a);
  // add later
 
  // now replace the div
  var old_div = document.getElementById('p-newpages');
  var side_col = document.getElementById('mw-panel');
  if (old_div != null) {
    side_col.replaceChild(div, old_div);
  } else if (side_col != null) {
    var node = document.getElementById('p-lang');
    if ( node && node.parentNode === side_col ) side_col.insertBefore(div, node);
  }
 
  if( typeof $ != 'undefined' ) {
    $('#p-newpages > h3').keydown( function( event ) {
      if ( event.which == 13 /* Enter */ || event.which == 32 /* Space */ ) {
        npp_toggle( $(this) );
      }
    } )
    .mousedown( function() {
      npp_toggle( $(this) );
      $(this).blur();
        return false;
    } );
  } else {
   link_div.appendChild(p);
  }
}
 
/* Draw response (vector skin) */
function npp_ajax_response_vector() {
  if(!npp_http || !npp_http.responseXML) return;
  var items = npp_http.responseXML.getElementsByTagName('rc');
 
  // create the div that holds all the newpage links
  var link_div = document.createElement('div');
  link_div.className = 'body';
  link_div.style.display = "block";
  var list = document.createElement('ul');
  link_div.appendChild(list);
 
  // populate the list with 10 links.
  for (var i = 0; i < items.length; i++) {
    var item_name = items[i].getAttribute('title');
    var rcid = items[i].getAttribute('rcid');
    var patrolled = items[i].getAttribute('patrolled') != null;
 
    item_name = item_name.replace(/&/, "%26");
    var item_url = mw.config.get('wgScript') + '?title=' + encodeURI(item_name) + '&rcid=' + rcid + '&redirect=no';
 
    a = document.createElement('a');
    a.setAttribute('href', item_url);
    //a.style.fontSize = 'x-small';
    a.appendChild(document.createTextNode(item_name));
 
    var li = document.createElement('li');
    li.appendChild(a);
    if (!patrolled) {
        //li.setAttribute('class', 'not-patrolled');
        li.setAttribute('style','background-color: #e7e7e7');
        //li.style.color = '#555555';
 
    }
        list.appendChild(li);
  }
 
  // Container div
  var div = document.createElement('div');
  div.setAttribute('id', 'p-newpages');
  div.className = 'mw-portlet vector-menu vector-menu-portal portal expanded';
  var heading = document.createElement('h3');
  heading.appendChild(document.createTextNode(npp_str_box_title));
  div.appendChild(heading);
  div.appendChild(link_div);
 
  // disable link
  var p = document.createElement('p');
  p.style.fontSize = 'x-small';
  p.style.margin = '0px';
  p.style.textAlign = 'left';
  a = document.createElement('a');
  a.appendChild(document.createTextNode(npp_str_disable));
  a.onclick = npp_disable_box;
  p.appendChild(a);
  // add later
 
  // now replace the div
  var old_div = document.getElementById('p-newpages');
  var side_col = document.getElementById('mw-panel');
  if (old_div != null) {
    side_col.replaceChild(div, old_div);
  } else if (side_col != null) {
    var node = document.getElementById('p-interaction');
    if ( node.parentNode === side_col ) side_col.insertBefore(div, node);
  }
 
  if( typeof $ != 'undefined' ) {
    $('#p-newpages > h3').keydown( function( event ) {
      if ( event.which == 13 /* Enter */ || event.which == 32 /* Space */ ) {
        npp_toggle( $(this) );
      }
    } )
    .mousedown( function() {
      npp_toggle( $(this) );
      $(this).blur();
        return false;
    } );
  } else {
   link_div.appendChild(p);
  }
}
 
function npp_toggle( $element ) {
 $.cookie( 'vector-nav-' + $element.parent().attr( 'id' ), $element.parent().is( '.collapsed' ) );
 if( $element.parent().is('.collapsed') ) {
  npp_enable_box();
 } else {
  npp_disable_box();
 }
 $element
  .parent()
  .toggleClass( 'expanded' )
  .toggleClass( 'collapsed' )
  .find( 'div.body' )
  .slideToggle( 'fast' );
}