User:Ace of Spades/newpage.js

// I take no credit for any of the code on this page.

// The original code was copied from User:TheJosh/Scripts/NewPagePatrol.js

// User:Thingg tweaked the code so that the newpage patrol box showed up below the search box,

// because it was annoying to have to scroll down to search if I wanted to do something else

// while keeping an eye on the newpage log.

// After the position of the search box was changed, I kept this because I liked where the

// newpage thingy shows up on my display, which is 1280x800px.

var npp_http;

var npp_enabled;

var npp_num_pages;

var npp_refresh;

var npp_num_idle_req;

var npp_curr_idle_req;

// This part here is customizable. Read TheJosh's documentation if you want to change something

npp_enabled = false;

npp_num_pages = 50;

npp_refresh = 5;

npp_num_idle_req = 60;

var npp_str_no_ajax = "There seems to be a problem using the NewPagePatrol script. Your browser is not supported. God Bless!";

var npp_str_box_title = "New pages";

var npp_str_box_title_updating = "New pages (updating)";

var npp_str_box_title_failed = "New pages (update failed)";

var npp_str_enable = "enable this box";

var npp_str_disable = "disable this box";

addOnloadHook( 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.firstChild.data = 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);

}

}

// 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&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 patrolled = items[i].getAttribute('patrolled') != null;

item_name = item_name.replace(/&/, "%26");

var item_url = 'http://en.wikipedia.org/w/index.php?title=' + 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('h5');

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 {

var node = document.getElementById('p-tb');

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;

npp_curr_idle_req = 0;

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(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 {

var node = document.getElementById('p-tb');

side_col.insertBefore(div, node);

}

}