Jump to content

User:Zalgo/newpages.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
var npp_http;
var npp_enabled;
var npp_num_pages;
var npp_refresh;

$( 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 = 30;
  }
  if(npp_refresh == null) {
    npp_refresh = 1;
  }

  // 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;
  }

  // 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
  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) {
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }

  npp_http.onreadystatechange = function() {
    if(npp_http.readyState == 4) npp_ajax_response();
  }

  return true;
}

/* make a request */
function npp_ajax_request() {
  // 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.firstChild.data = 'New Pages (updating)';
  }

  if (npp_create_request () == false) {
    if (cur_box != null) {
      cur_box.firstChild.firstChild.data = 'New Pages (update failed)';
    } else {
      alert ("There seems to be a problem using the NewPagePatrol script. I can't make AJAX objects, so I'm just going to complain. God Bless!");
    }
  }

  // Then make the request
  npp_http.open("GET", "/w/api.php?action=query&format=xml&list=recentchanges&rctype=new&rcnamespace=0&rclimit=" + npp_num_pages, true);
  npp_http.send(null);
}

/* we have received a response */
function npp_ajax_response() {

  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 item_url = 'http://en.wikipedia.org/w/index.php?title=' + escape(item_name) + '&rcid=' + escape(rcid);
 
    a = document.createElement('a');
    a.setAttribute('href', item_url);
    a.appendChild(document.createTextNode(item_name));
 
    var li = document.createElement('li');
    li.appendChild(a);
    list.appendChild(li);
  }

  // Container div
  var div = document.createElement('div');
  div.setAttribute('id', 'p-newpages');
  div.className = 'portlet';
  var heading = document.createElement('h5');
  heading.appendChild(document.createTextNode('New pages'));
  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('disable this box'));
  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 {
    var node = document.getElementById('p-search');
    side_col.insertBefore(div, node);
  }

  // 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;
  document.cookie = "npp_show_box=yes; path=/";
  npp_ajax_request();
}

function npp_draw_disabled_box() {
  // 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('h5');
  heading.appendChild(document.createTextNode('New pages'));
  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('enable this box'));
  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 {
    var node = document.getElementById('p-search');
    side_col.insertBefore(div, node);
  }
}