MediaWiki:Gadget-recent-changes-patrol.js
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;
}
jQuery( document ).ready( 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 = mw.util.wikiScript('api') + "?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 = mw.util.wikiScript('api') + "?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 = mw.util.wikiScript('api') + "?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 = mw.util.wikiScript('api') + "?action=query&list=watchlist&format=xml&wlallrev&wlprop=ids|title|flags&wlshow=!patrolled&wldir=" + rcp_order + "&wllimit=" + rcp_num_pages;
}
else {
rcp_apisearch = mw.util.wikiScript('api') + "?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);
}
// expose to window.
window.rcp_ajax_request = rcp_ajax_request;
/* we have received a response */
function rcp_ajax_response() {
var responseXML = rcp_http && rcp_http.responseXML;
if(!responseXML) return;
if(rcp_mode == "watchlist") {
var items = responseXML.getElementsByTagName('item');
}
else {
var items = 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 = (mw.config.get('skin')=='vector')?'body':'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 = mw.util.wikiScript('index') + '?title=' + escape(item_name) + '&rcid=' + escape(item_rcid);
} else if (item_wl_new == "") {
var item_rcid = items[i].getAttribute('revid');
var item_url = mw.util.wikiScript('index') + '?title=' + escape(item_name) + '&rcid=' + escape(item_rcid);
} else {
var item_revid = items[i].getAttribute('revid');
var item_url = mw.util.wikiScript('index') + '?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 = (mw.config.get('skin')=='vector')?'portal':'portlet';
var heading = document.createElement('a');
heading.setAttribute('href', mw.util.wikiScript('index') + '?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') || document.getElementById('mw_portlets') || document.getElementById('panel') || document.getElementById('mw-panel');
if (old_div != null) {
old_div.parentNode.replaceChild(div, old_div);
} else {
var node = document.getElementById('p-navigation');
node.parentNode.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 = (mw.config.get('skin')=='vector')?'body':'pBody';
var div = document.createElement('div');
div.setAttribute('id', 'p-recentchanges');
div.className = (mw.config.get('skin')=='vector')?'portal':'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') || document.getElementById('mw_portlets') || document.getElementById('panel') || document.getElementById('mw-panel');
if (old_div != null) {
side_col.replaceChild(div, old_div);
} else {
var node = document.getElementById('p-navigation');
if(side_col && node && node.parentNode === side_col) {
side_col.insertBefore(div, node);
}
}
}