User:Interiot/Tool2/code.js: Difference between revisions

Content deleted Content added
mNo edit summary
old junk
 
(82 intermediate revisions by 5 users not shown)
Line 1:
// blanked as script was no longer working, and had been inactive for years.
// see http://en.wikipedia.org/wiki/User:Interiot/Tool2 for instructions on adding this to your monobook.js
mw.log.warn( 'You installed the userscript [[User:Interiot/Tool2/code.js]]\n'
 
+ 'It has been deprecated and you should remove it.' );
// To run this tool on other servers:
// 1. copy this script to the target server (this is required because of javascript cross-site security restrictions)
 
// 2. update the following URL
// for example: "User:Interiot/Tool2/code.js"
var tool2_url = "User:Interiot/Tool2/code.js";
 
// 3. update this namespace list, extracted from something like http://en.wikiquote.org/wiki/Special:Export//
var namespaces = [
"Talk",
"User",
"User talk",
"Wikiquote",
"Wikiquote talk",
"Image",
"Image talk",
"MediaWiki",
"MediaWiki talk",
"Template",
"Template talk",
"Help",
"Help talk",
"Category",
"Category talk"
];
 
 
// TODO:
// - the current document.___location method doesn't work when the page is accessed sans-mod_rewrite
// - test with non-ASCII characters
// - non-ascii usernames
// - ??
 
 
 
function addOnloadFunction(f) {
if (window.addEventListener) window.addEventListener("load",f,false);
else if (window.attachEvent) window.attachEvent("onload",f);
else {
var oldOnload='_old_onload_'+addOnloadFunction.uid;
addOnloadFunction[oldOnload] = window.onload ? window.onload : function () {};
window.onload = function() { addOnloadFunction[oldOnload](); f(); }
++addOnloadFunction.uid;
}
}
 
var prefix = "";
var params = parse_params();
 
addOnloadFunction(function() {
var path_len = document.___location.pathname.length;
// trigger once we view the right page
if (document.___location.pathname.substring(path_len - tool2_url.length, path_len) == tool2_url) {
// get the prefix (needs to be fixed to work sans-mod_rewrite
prefix = document.___location.protocol + "//" + document.___location.host + "/"
+ document.___location.pathname.substring(1, path_len - tool2_url.length);
 
// blank the inner contents of the page
var bodyContent = document.getElementById("bodyContent");
while (bodyContent.childNodes.length > 0) bodyContent.removeChild(bodyContent.lastChild);
 
if (document.___location.search.length == 0) {
generate_input_form(bodyContent);
} else {
generate_main_report(bodyContent);
}
}
});
 
 
function generate_input_form(bodyContent) {
bodyContent.innerHTML =
"<form><table><tr><td>Username <td><input maxlength=128 name=username value='' title='username'>" +
" <tr><td> <td><input type=submit value='Submit'>" +
"</table></form>";
 
var form = bodyContent.getElementsByTagName("form")[0];
form.method = "get";
form.action = document.___location;
}
 
function generate_main_report() {
fetch_data(params["username"], "", output_main_report, 0, []);
}
 
function output_main_report(data) {
}
 
 
 
var offset_regexp = new RegExp("href=\"[^\"]+:Contributions[^\"]+offset=(\d+)", "ig");
function fetch_data(username, end_date, handler, offset, page_list) {
var url = prefix + "Special:Contributions/" + username + "?offset=" + offset + "&limit=500";
loadXMLDoc(url,
function (request) {
var next_offset = 0;
if (request.readyState == 4 && request.status == 200) {
page_list.push(request.responseText);
 
// see if there's another pageful to get
var matches = offset_regexp.exec(request.responseText);
if (matches) {
for (var i=0; i<matches.length; i++) {
if (matches[i] != 0 && (matches * 1) < offset) {
next_offset = (matches * 1);
break;
}
}
}
}
 
if (next_offset == 0) {
parse_data(page_list, handler);
} else {
alert("fetching starting at offset " + next_offset);
// tail recurse
fetch_data(username, end_date, handler, next_offset, page_list);
}
});
}
 
 
function parse_data(page_list, handler) {
}
 
 
// ===================================== utility functions =========================================
 
function parse_params() {
var pairs = document.___location.search.substring(1).split("&");
var ret = [];
for (var i=0; i < pairs.length; i++) {
var values = pairs[i].split("=");
ret[values[0]] = unescape(values[1]);
}
return ret;
}
 
function loadXMLDoc(url, handler)
{
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = function () {handler(req)};
req.open("GET", url, true);
req.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = function () {handler(req)};
req.open("GET", url, true);
req.send();
}
}
}