|
|
Zeile 1: |
Zeile 1: |
− | 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);
| + | |
− | }
| + | |
− | }
| + | |