Bruker:Laaknor/Scripts/RecentChangesPatrol.js

Fra Wikipedia, den frie encyklopedi

Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.

  • Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
  • Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
  • Internet Explorer / Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
  • Opera: Ttrykk Ctrl+F5.
/* Orginalscript fra http://en.wikipedia.org/wiki/User:TheJosh/Scripts/RecentChangesPatrol.js */
/* Tilpasset til nowiki av [[Bruker:Laaknor]] http://no.wikipedia.org/wiki/Bruker:Laaknor/Scripts/RecentChangesPatrol.js */
/* Omfattende endringer er utført av Laaknor. Takk til Jeblad, Flums, EivindJ, m.m. */
 
 
var rcp_http;
var rcp_enabled;
var rcp_num_pages;
var rcp_refresh;
var rcp_order;
var rcp_max;
var rcp_count;
var rcp_mode;


function rcp_get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}


 
$( 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 = 10;
  }
//  if(rcp_order == null) {
//    rcp_order = 'newer';
//  }
  if(rcp_max == null) {
    rcp_max = 36;
  }
  if(rcp_count == null) {
    rcp_count = 0;
  }
 
  // 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;
      } // end if c_end
    } // end if (c_start != -1)
  */
    var c_show = rcp_get_cookie("rcp_show_box");
    if(c_show == "yes") {
      rcp_enabled = true;
    } else {
      rcp_enabled = false;
    }
    var c_order = rcp_get_cookie("rcp_order");
    if(c_order == "newer") {
      rcp_order = "newer";
    } else {
      rcp_order = "older";
    }

    var c_mode = rcp_get_cookie("rcp_mode");
    if(c_mode == "notmain") {
      rcp_mode = "notmain";
    } else if(c_mode == "newonly") {
      rcp_mode = "newonly";
    } else if(c_mode == "watchlist") {
      rcp_mode = "watchlist";
    } else {
      rcp_mode = "default";
    }

  } // end if (document.cookie.length > 0)
 
  // 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_max < rcp_count++) return;
  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 = 'Upatruljerte (oppdaterer)';
  }
 
  if (rcp_create_request () == false) {
    if (cur_box != null) {
      cur_box.firstChild.firstChild.data = 'Upatruljerte (oppdatering feilet)';
    } 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!");
    }
  }

  // Get request-API-URL

  if(rcp_mode == "onlymain") {
    rcp_apisearch = "http://no.wikipedia.org/w/api.php?action=query&list=recentchanges&format=xml&rcnamespace=0&rcshow=!patrolled&rctype=edit|new&rcprop=patrolled|title|timestamp|ids&rcdir=" + rcp_order + "&rclimit=" + rcp_num_pages;
  } 
  else if(rcp_mode == "notmain") {
    rcp_apisearch = "http://no.wikipedia.org/w/api.php?action=query&list=recentchanges&format=xml&rcnamespace=1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101&rcshow=!patrolled&rctype=edit|new&rcprop=patrolled|title|timestamp|ids&rcdir=" + rcp_order + "&rclimit=" + rcp_num_pages;
  }
  else if(rcp_mode == "newonly") {
    rcp_apisearch = "http://no.wikipedia.org/w/api.php?action=query&list=recentchanges&format=xml&rcshow=!patrolled&rctype=new&rcprop=patrolled|title|timestamp|ids&rcdir=" + rcp_order + "&rclimit=" + rcp_num_pages;
  }  
  else if(rcp_mode == "watchlist") {

    rcp_apisearch = "http://no.wikipedia.org/w/api.php?action=query&list=watchlist&format=xml&wlallrev&wlprop=ids|title|flags&wlshow=!patrolled&wldir=" + rcp_order + "&wllimit=" + rcp_num_pages;
  }    
  else {
    rcp_apisearch = "http://no.wikipedia.org/w/api.php?action=query&list=recentchanges&format=xml&rcshow=!patrolled&rctype=edit|new&rcprop=patrolled|title|timestamp|ids&rcdir=" + rcp_order + "&rclimit=" + rcp_num_pages;
  }

 
  // Then make the request
  rcp_http.open("GET", rcp_apisearch, true);
  rcp_http.send(null);
}
 
/* we have received a response */
function rcp_ajax_response() {
 
  if(rcp_mode == "watchlist") {
    var items = rcp_http.responseXML.getElementsByTagName('item');
  }
  else {
    var items = rcp_http.responseXML.getElementsByTagName('rc');
  }
 
  /* Check if no response. Could mean no right */
  if(items.length == 0) {
    rcp_disable_box();
  }
 
  // 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_patrolled = items[i].getAttribute('patrolled');
    var item_type = items[i].getAttribute('type');
    var item_wl_new = items[i].getAttribute('new');
 
    if (item_type == "new") {
       var item_rcid = items[i].getAttribute('rcid');
       var item_url = 'http://no.wikipedia.org/w/index.php?title=' + escape(item_name) + '&rcid=' + escape(item_rcid);
    } else if (item_wl_new == "") {
       var item_rcid = items[i].getAttribute('revid');
       var item_url = 'http://no.wikipedia.org/w/index.php?title=' + escape(item_name) + '&rcid=' + escape(item_rcid);       
    } else {
       var item_revid = items[i].getAttribute('revid');
       var item_url = 'http://no.wikipedia.org/w/index.php?oldid=prev&diff=' + escape(item_revid) + '&title=' + escape(item_name);
    }
 
    a = document.createElement('a');
    a.setAttribute('href', item_url);
    a.appendChild(document.createTextNode(item_name));
 
//    b = document.createElement('b');
//    if(item_patrolled == NULL) {
//        b.appendChild(document.createTextNode('patruljer'));
//    } 
    if(items[i].getAttribute('patrolled') != '') {
        var li = document.createElement('li');
        li.appendChild(a);
//      li.appendChild(b);
        list.appendChild(li);
     }
  }
 
  // Container div
  var div = document.createElement('div');
  div.setAttribute('id', 'p-recentchanges');
  div.className = 'portlet';
  var heading = document.createElement('a');
  heading.setAttribute('href', 'http://no.wikipedia.org/w/index.php?title=Spesial:Siste_endringer&hidepatrolled=1&days=21&hidemyself=1&limit=50');
  heading.appendChild(document.createElement('h5'));
  heading.appendChild(document.createTextNode('Upatruljerte'));
  div.appendChild(heading);
  div.appendChild(link_div);
  
  
  // disable link
  var p1 = document.createElement('p');
  var pmidle = document.createTextNode(' - ');
  p1.style.fontSize = 'xx-small';
  p1.style.margin = '0px';
  p1.style.textAlign = 'right';
  if(rcp_mode != "notmain") {
    mode_notmain = document.createElement('a');
    mode_notmain.appendChild(document.createTextNode('IkkeArtikler'));
    mode_notmain.onclick = api_mode_notmain;
    p1.appendChild(mode_notmain);
  }
  else { 
    p1.appendChild(document.createTextNode('IkkeArtikler'));
  }
  p1.appendChild(document.createTextNode(' '));
  if(rcp_mode != "newonly") {
    mode_newonly = document.createElement('a');
    mode_newonly.appendChild(document.createTextNode('Nye'));
    mode_newonly.onclick = api_mode_newonly;
    p1.appendChild(mode_newonly);
  }
  else {
    p1.appendChild(document.createTextNode('Nye'));
  }
  p1.appendChild(document.createTextNode(' '));
  if(rcp_mode != "watchlist") {
    mode_watchlist = document.createElement('a');
    mode_watchlist.appendChild(document.createTextNode('Overvåket'));
    mode_watchlist.onclick = api_mode_watchlist;
    p1.appendChild(mode_watchlist);
  }
  else {
    p1.appendChild(document.createTextNode('Overvåket'));
  }
  p1.appendChild(document.createTextNode(' '));
  if(rcp_mode != "default") {
    mode_default = document.createElement('a');
    mode_default.appendChild(document.createTextNode('Alt'));
    mode_default.onclick = api_mode_default;
    p1.appendChild(mode_default);
  }
  else {
    p1.appendChild(document.createTextNode('Alt'));
  }
  var p2 = document.createElement('p');
  p2.style.fontSize = 'x-small';
  p2.style.margin = '0px';
  p2.style.textAlign = 'right';

  if(rcp_order == "newer") {
    aorder = document.createElement('a');
    aorder.appendChild(document.createTextNode('Viser eldste først'));
    aorder.onclick = order_older_box;
  }
  else {
    aorder = document.createElement('a');
    aorder.appendChild(document.createTextNode('Viser nyeste først'));
    aorder.onclick = order_newer_box;
  }
  a = document.createElement('a');
  a.appendChild(document.createTextNode('Skjul'));
  a.onclick = rcp_disable_box;

  
  p2.appendChild(aorder);
  p2.appendChild(pmidle);
  p2.appendChild(a);
  link_div.appendChild(p1);
  link_div.appendChild(p2);
 
  // 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=/";
  rcp_mode = "default";
  document.cookie = "rcp_mode=default; path=/";
}
 
function rcp_enable_box() {
  rcp_enabled = true;
  document.cookie = "rcp_show_box=yes; path=/";
  rcp_ajax_request();
}

function order_newer_box() {
	rcp_order = "newer";
	document.cookie = "rcp_order=newer";
	rcp_ajax_request();
}
function order_older_box() {
	rcp_order = "older";
	document.cookie = "rcp_order=older";
	rcp_ajax_request();
}

function api_mode_default() {
  rcp_mode = "default";
  document.cookie = "rcp_mode=default";
  rcp_ajax_request();
}
function api_mode_watchlist() {
  rcp_mode = "watchlist";
  document.cookie = "rcp_mode=watchlist";
  rcp_ajax_request();
}
function api_mode_newonly() {
  rcp_mode = "newonly";
  document.cookie = "rcp_mode=newonly";
  rcp_ajax_request();
}
function api_mode_notmain() {
  rcp_mode = "notmain";
  document.cookie = "rcp_mode=notmain";
  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('Upatruljerte'));
  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('Vis denne boksen'));
  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);
  }
}