User:TheJosh/Scripts/RecentChangesPatrol.js
From Wikipedia, the free encyclopedia
< User:TheJosh | Scripts
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
var rcp_http; var rcp_enabled; var rcp_num_pages; var rcp_refresh; addOnloadHook( rcp_init ); /* initalise */ function rcp_init() { // allow user settings through if(rcp_enabled == null) { rcp_enabled = false; } if(rcp_num_pages == null) { rcp_num_pages = 10; } if(rcp_refresh == null) { rcp_refresh = 5; } // A few limits to be nice to the servers if (rcp_num_pages > 50) { rcp_num_pages = 50; } if (rcp_num_pages < 1) { rcp_num_pages = 1; } if (rcp_refresh < 2) { rcp_refresh = 2; } // get our cookie if (document.cookie.length > 0) { var c_start = document.cookie.indexOf("rcp_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") { rcp_enabled = true; } else { rcp_enabled = false; } } } // Either make a request or show nothing if (rcp_enabled == true) { rcp_ajax_request(); } else { rcp_draw_disabled_box(); } } /* init ajax */ function rcp_create_request() { try { rcp_http = new XMLHttpRequest(); } catch (e) { try { rcp_http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { rcp_http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support AJAX!"); return false; } } } rcp_http.onreadystatechange = function() { if(rcp_http.readyState == 4) rcp_ajax_response(); } return true; } /* make a request */ function rcp_ajax_request() { // check we are enabled if (rcp_enabled == false) return; // firstly, inform the user var cur_box = document.getElementById('p-recentchanges'); if (cur_box != null) { cur_box.firstChild.firstChild.data = 'Recent Changes (updating)'; } if (rcp_create_request () == false) { if (cur_box != null) { cur_box.firstChild.firstChild.data = 'Recent Changes (update failed)'; } else { alert ("There seems to be a problem using the RecentChangePatrol script. I can't make AJAX objects, so I'm just going to complain. God Bless!"); } } // Then make the request rcp_http.open("GET", "http://en.wikipedia.org/w/api.php?action=query&list=recentchanges&format=xml&rcnamespace=0&rcshow=!bot&rcshow=!minor&rclimit=" + rcp_num_pages, true); rcp_http.send(null); } /* we have received a response */ function rcp_ajax_response() { var items = rcp_http.responseXML.getElementsByTagName('rc'); // create the div that holds all the recentchanges 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 item_url = 'http://en.wikipedia.org/w/index.php?diff=cur&oldid=prev&title=' + escape(item_name); 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-recentchanges'); div.className = 'portlet'; var heading = document.createElement('h5'); heading.appendChild(document.createTextNode('Recent Changes')); 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 = rcp_disable_box; p.appendChild(a); link_div.appendChild(p); // now replace the div var old_div = document.getElementById('p-recentchanges'); 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("rcp_ajax_request()", rcp_refresh * 1000); } function rcp_disable_box() { rcp_enabled = false; rcp_draw_disabled_box(); document.cookie = "rcp_show_box=no; path=/"; } function rcp_enable_box() { rcp_enabled = true; document.cookie = "rcp_show_box=yes; path=/"; rcp_ajax_request(); } function rcp_draw_disabled_box() { // Container div var link_div = document.createElement('div'); link_div.className = 'pBody'; var div = document.createElement('div'); div.setAttribute('id', 'p-recentchanges'); div.className = 'portlet'; var heading = document.createElement('h5'); heading.appendChild(document.createTextNode('Recent Changes')); 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 = rcp_enable_box; p.appendChild(a); link_div.appendChild(p); // now replace the div var old_div = document.getElementById('p-recentchanges'); 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); } }

