# MediaWiki:Gadget-patroller.js

From faraghaib
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press 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') {
        npp_draw_disabled_box_vector();
      } else {
        npp_draw_disabled_box_monobook();
      }
    }

    function npp_ajax_response() {
      if (mw.config.get('skin') == 'vector') {
        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');
        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');
        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');
        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' );
    }

Retrieved from "https://en.faraghaib.ir/w/index.php?title=MediaWiki:Gadget-patroller.js&oldid=325"