An difríocht idir athruithe ar: "Plé úsáideora:Hoopydink/monobook.js"
monobook |
(No difference)
|
Leagan ó 11:06, 30 Iúil 2006
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Lupin/popups.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
//Interiot's javascript edit counter if (document.title.indexOf('User:Interiot/Tool2/code.js') != -1) {
document.write('<script type="text/javascript" src="' + 'http://en.wikipedia.org/w/index.php?title=User:Interiot/Tool2/code.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); }
// Script from User:Lupin/recent2.js document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Lupin/recent2.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
/**** afd helper ****/ document.write('<script type="text/javascript"' +
'src="http://en.wikipedia.org/w/index.php?title=User:Jnothman/afd_helper/' + 'script.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
// ----------------------------------------------------------------------------- // God-like Monobook skin // (c) 2005 Sam Hocevar <sam@zoy.org> // $Id: godmode-light.js 1029 2006-01-09 11:05:19Z sam $ // Several customizations have been made by User:Peruvianllama // Several customizations have been added from User:Freakofnurture //http://en.wikipedia.org/w/index.php?title=User%3AFreakofnurture%2Fmonobook.js&diff=30220662&oldid=30119499 // -----------------------------------------------------------------------------
// ----------------------------------------------------------------------------- // Removed multiple language support; see original for this feature. // ----------------------------------------------------------------------------- var rollbacklink = 'rollback'; var cantrollback = 'Cannot revert edit; last contributor is only author of this page.'; var alreadyrolled = 'Cannot rollback last edit of $1 by $2 (Talk); someone else has edited or rolled back the page already. Last edit was by $3 (Talk). '; var revertpage = 'Reverted edits by $2 (talk) to last version by $1';
// Most of the following edittypes were stolen from User:Freakofnurture/monobook.js, as of Dec. 10, 2005 var edittype = 'edits'; abbrev = Array(); abbrev['attack'] = 'personal attacks'; abbrev['atk'] = 'personal attacks'; abbrev['blank'] = 'blanking'; abbrev['bl'] = 'blanking'; abbrev['b'] = 'blanking'; abbrev['chess'] = 'illegal chess move'; abbrev['flagrant'] = 'flagrant vandalism'; abbrev['fv'] = 'flagrant vandalism'; abbrev['vand2'] = 'flagrant vandalism'; abbrev['v2'] = 'flagrant vandalism'; abbrev['img'] = 'image changes'; abbrev['info'] = 'misinformation'; abbrev['bjaodn'] = 'BJAODN attempt'; abbrev['jokes'] = 'BJAODN attempt'; abbrev['joke'] = 'BJAODN attempt'; abbrev['links'] = 'unnecessary external linkage'; abbrev['link'] = 'unnecessary external linkage'; abbrev['nonsense'] = 'nonsense'; abbrev['profane'] = 'profane language'; abbrev['prof'] = 'profane language'; abbrev['cuss'] = 'profane language'; abbrev['redir'] = 'redirection'; abbrev['r'] = 'redirection'; abbrev['spam'] = 'spam/advertisement'; abbrev['test'] = 'experimental edits'; abbrev['typing'] = 'typing practice'; abbrev['tp'] = 'typing practice'; abbrev['pruning'] = 'unexplained removal of text'; abbrev['prune'] = 'unexplained removal of text'; abbrev['tag'] = 'unexplained removal of a template'; abbrev['vandal'] = 'vandalism'; abbrev['vand'] = 'vandalism'; abbrev['v'] = 'vandalism'; abbrev['vanity'] = 'probable vanity entry'; abbrev['vain'] = 'probable vanity entry';
// ----------------------------------------------------------------------------- // XMLHttpRequest support // ----------------------------------------------------------------------------- if (document.implementation.createDocument) { var gml_xmlparser = new DOMParser(); }
function gml_XMLParse(string) { if (document.implementation.createDocument) { return gml_xmlparser.parseFromString(string, "text/xml"); } else if (window.ActiveXObject) { var gml_xmldoc = new ActiveXObject("Microsoft.XMLDOM"); gml_xmldoc.async = "false"; ret = gml_xmldoc.loadXML(string); if (!ret) return null; return gml_xmldoc.documentElement; } return null; }
var gml_xmlhttp;
function HTTPClient() { var gml_http; if(window.XMLHttpRequest) { gml_http = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { gml_http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { gml_http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { gml_http = false; } } } return gml_http; }
// ----------------------------------------------------------------------------- // MD5 hash calculator // ----------------------------------------------------------------------------- // Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. // Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet // Distributed under the BSD License // See http://pajhome.org.uk/crypt/md5 for more info. // ----------------------------------------------------------------------------- var hexcase = 0; var b64pad = ""; var chrsz = 8;
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function core_md5(x, len) { x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878;
for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i+10], 17, -42063); b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d);
}
function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } function md5_ff(a, b, c, d, x, s, t) { return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); } function md5_hh(a, b, c, d, x, s, t) { return md5_cmn(b ^ c ^ d, a, b, x, s, t); } function md5_ii(a, b, c, d, x, s, t) { return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); }
function safe_add(x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }
function bit_rol(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)); }
function str2binl(str) { var bin = Array(); var mask = (1 << chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); return bin; }
function binl2hex(binarray) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for(var i = 0; i < binarray.length * 4; i++) { str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); } return str; }
// ----------------------------------------------------------------------------- // Our nice Revert functions // ----------------------------------------------------------------------------- var gml_vandal, gml_editor, gml_url;
function PerformRevert() { var l, token = , revert = false; // Look for '&fakeaction=rollback' in URL gml_url = location.pathname; l = location.search.substring(1).split('&'); for (i = 0; i < l.length; i++) { var n = l[i].indexOf('='); var name = l[i].substring(0, n); if (name == 'fakeaction') { if (l[i].substring(n + 1) == 'rollback'){ revert = true; edittype = window.prompt("What type of edit?"); if (edittype.substr(0,2) == "c ") { //Allow for "custom" edit summary" edittype = edittype.substr(2,edittype.length); } else if (abbrev[edittype.toLowerCase()]) { edittype = abbrev[edittype.toLowerCase()]; } else { edittype = 'edits'; } } } else if (name == 'vandal') { gml_vandal = unescape(l[i].substring(n + 1)); } else if (name == 'token') { token = unescape(l[i].substring(n + 1)); } else if (name == 'title') { gml_url += '?' + l[i]; } } if (!revert) return; document.getElementById('bodyContent').innerHTML = 'Please wait, reverting edits by ' + gml_vandal + '...'; // Avoid XSS kiddies by using a special token if (token == || token != hex_md5(gml_url + gml_vandal + document.cookie)) { document.getElementById('bodyContent').innerHTML += '
Bad authentication token!'; return; }
gml_xmlhttp = HTTPClient(); if (!gml_xmlhttp) return; history_url = gml_url + '&action=history&limit=20'; document.getElementById('bodyContent').innerHTML += '
Getting article history (' + history_url + ')...'; gml_xmlhttp.open("GET", history_url, true); gml_xmlhttp.onreadystatechange = RevertStepTwo; gml_xmlhttp.send(null); }
function RevertStepTwo() { if (gml_xmlhttp.readyState != 4) return; var l; var oldid; // Get the vandal and new editor names gml_vandal = gml_vandal.replace(/_/g, ' '); gml_editor = ; // Hack for a MediaWiki bug xml = gml_xmlhttp.responseText.replace(/<body.*"ns-4">/, '<body class="ns-4">'); doc = gml_XMLParse(xml); if (!doc || !doc.getElementById('pagehistory')) { document.getElementById('bodyContent').innerHTML += '
Failed to parse XML data returned by the server.'; document.getElementById('bodyContent').innerHTML += '
Hint: try to disable both "Enable section editing by right-clicking on section titles (JavaScript)" and "Edit pages on double click (JavaScript)" in your editing preferences until a proper fix is found.'; document.getElementById('bodyContent').innerHTML += '
Dump of the unparseable page :
' + xml.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); return; } l = doc.getElementById('pagehistory').getElementsByTagName('li'); //l = doc.selectSingleNode('//*[@id="pagehistory"]').getElementsByTagName('li'); for (i = 0; i < l.length; i++) { var name = l[i].getElementsByTagName('span')[0].getElementsByTagName('a')[0].innerHTML.replace(/_/g, ' '); if (i == 0 && name != gml_vandal) { document.getElementById('bodyContent').innerHTML += '
Error: Last editor is ' + name + ', not ' + gml_vandal + '!'; return; } else if (i > 0 && name != gml_vandal) { oldid = l[i].getElementsByTagName('input')[0].value; gml_editor = name; break; } } if (gml_editor == ) { document.getElementById('bodyContent').innerHTML += '
Error: ' + gml_vandal + ' is the only editor!'; return; }
gml_xmlhttp = HTTPClient(); if (!gml_xmlhttp) return; document.getElementById('bodyContent').innerHTML += '
Getting article edit form (GET' + gml_url + '&action=edit&oldid=' + oldid + ')...'; gml_xmlhttp.open('GET', gml_url + '&action=edit&oldid=' + oldid, true); gml_xmlhttp.onreadystatechange = RevertStepThree; gml_xmlhttp.send(null); }
function RevertStepThree() { if (gml_xmlhttp.readyState != 4) return var form, newform, l; // Insert the downloaded form in our current page, using // only hidden form inputs. doc = gml_XMLParse(gml_xmlhttp.responseText); form = doc.getElementById('editform'); newform = document.createElement('form'); l = form.getElementsByTagName('textarea'); for (i = l.length; i--; ) { var t = document.createElement('input'); t.type = 'hidden'; t.name = l[i].name; t.value = l[i].value; newform.appendChild(t); } l = form.getElementsByTagName('input'); for (i = l.length; i--; ) { if (l[i].name == 'wpSummary') { var revertpage = 'Reverted ' + edittype + ' by $2 (talk) to last version by $1'; l[i].value = revertpage.replace(/\$1/g, gml_editor).replace(/\$2/g, gml_vandal); } else if (l[i].name == 'wpMinoredit') { l[i].value = '1'; } else if (l[i].name == 'wpWatchthis') { if (!l[i].checked) continue; // Don’t touch the "watch" status l[i].value = "on"; } else if (l[i].name == 'wpPreview') { continue; } else if (l[i].name == 'wpDiff') { continue; } l[i].type = 'hidden'; newform.appendChild(l[i]); } newform.name = form.name; newform.method = form.method; newform.id = form.id; newform.action = form.action; document.getElementById('bodyContent').innerHTML += '
Submitting form...'; document.getElementById('bodyContent').appendChild(newform); // Submit the form newform.submit(); opentalk(gml_vandal); }
// ----------------------------------------------------------------------------- // Add revert buttons to the page // ----------------------------------------------------------------------------- function AddRevertButtons() { var l, article = , vandal; // Add 'revert' links to a diff page l = document.getElementById('bodyContent').getElementsByTagName('td'); for (i = 0; i < l.length; i++) { if (l[i].className == 'diff-otitle') { article = l[i].getElementsByTagName('a')[0].href.split('&')[0].replace(/[^\/]*\/\/[^\/]*/, ); } else if (l[i].className == 'diff-ntitle') { var toplink = l[i].getElementsByTagName('a')[0].href; vandal = l[i].getElementsByTagName('a')[3].title.split(':')[1]; if (vandal.indexOf('&') > -1) vandal = vandal.split('&')[0]; var t = l[i].innerHTML n = t.indexOf('</a>) <br') + t.indexOf('</A>) <BR') + 1; // XXX: WOW HACK!!!! if (n >= 0 && article != && toplink.indexOf('oldid=') == -1) { l[i].innerHTML = t.substring(0, n + 5) + ' [<a href="' + article + '&fakeaction=rollback&vandal=' + vandal + '&token=' + hex_md5(article + vandal + document.cookie) + '">' + rollbacklink + '</a>] ' + t.substring(n + 5, t.length); } } } // Add 'revert' links to a contributions page if (location.href.indexOf(':Contributions') != -1) { var c = document.getElementById('contentSub'); var a = c.getElementsByTagName('a'); if (a.length == 4) { vandal = a[0].innerHTML; } else { vandal = c.innerHTML.replace(/ \(.*/, ).replace(/.* /, ); } l = document.getElementById('bodyContent').getElementsByTagName('li'); for (i = 0; i < l.length; i++) { var t = l[i].innerHTML // If we are already a sysop on this wiki, abort if (t.indexOf('>' + rollbacklink + '</a>]') != -1) break; //if (t.indexOf('&diff=0') != -1) { if (t.indexOf(' (') != -1) { article = l[i].getElementsByTagName('a')[0].href.split('&')[0].replace(/[^\/]*\/\/[^\/]*/, ); l[i].innerHTML += ' [<a href="' + article + '&fakeaction=rollback&vandal=' + vandal + '&token=' + hex_md5(article + vandal + document.cookie) + '">' + rollbacklink + '</a>]'; } } } }
// -------------------------------------------------- // Drop-dead simple function to open a new window with the vandal's talk page, for test/test-n warnings // Firefox users, see the following URL to force Firefox to open "new windows" in new tabs instead: // http://www.mozilla.org/support/firefox/tips#beh_tabbedbrowsingoptions // Do note that FireFox interprets this as a "pop-up" window. To get around this, either enable // popups for http://en.wikipedia.org, or place: onClick="javascript:opentalk(.... // within both of the rollback links (inside function AddRevertButtons()) // -------------------------------------------------- function opentalk(vandal) { window.open('http://en.wikipedia.org/w/index.php?title=User_talk:' + vandal + '&action=edit', '_VandalTalk' + vandal); }
// ----------------------------------------------------------------------------- // Modify the page once it is loaded // ----------------------------------------------------------------------------- if (window.addEventListener) { window.addEventListener("load", PerformRevert, false); window.addEventListener("load", AddRevertButtons, false); } else if (window.attachEvent) { window.attachEvent("onload", PerformRevert); window.attachEvent("onload", AddRevertButtons); }
// Script from User:Haza-w/cactions.js
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Haza-w/cactions.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');
var ctOriginalTabs = 1;
//
function tnaddlilink(url, name) {
var na = document.createElement('a'); na.setAttribute('href', url);
var txt = document.createTextNode(name); na.appendChild(txt);
var li = document.createElement('li'); li.appendChild(na); return li;
}
function testn(number) {
var page = prompt("Vandalism to which article?") var f = document.editform, t = f.wpTextbox1; if (t.value.length > 0) t.value += '\n'; t.value += "{{subst:" + "test" + number + "-n|" + page + "}} ~" + "~" + "~" + "~"; f.wpSummary.value = "Vandalism to " + page + " - warning " + number;
}
function add_testn_tabs() {
var c1 = document.getElementById('column-one'); var tabs = c1.getElementsByTagName('div')[0].getElementsByTagName('ul')[0];
// Only add for pages with "Editing User talk:" somewhere in the title if (document.title.indexOf("Editing User talk:") != -1) { tabs.appendChild(tnaddlilink('javascript:testn(1)',"t1")); tabs.appendChild(tnaddlilink('javascript:testn(2)',"t2")); tabs.appendChild(tnaddlilink('javascript:testn(3)',"t3")); tabs.appendChild(tnaddlilink('javascript:testn(4)',"t4")); }
}
addOnloadHook(add_testn_tabs);
//
function inc (file) {
var lt = String.fromCharCode(60); var gt = String.fromCharCode(62); document.writeln(lt+'script type="text/javascript" src="/w/index.php?title='+file+'&action=raw&ctype=text/javascript&dontcountme=s"'+gt+lt+'/script'+gt);
}
inc("User:Lightdarkness/aiv.js");
//
//Auto AFD script
//Please include the two following lines //Modified version of AutoVFD script to work with AFD //Script Modified by User:Jtkiefer
// This needs to change depending on skin used.
function add_link(url, name)
{
var na = document.createElement('a'); na.setAttribute('href', url); na.appendChild(document.createTextNode(name));
var li = document.createElement('li'); li.appendChild(na);
var tabs = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; tabs.appendChild(li);
}
function strip_namespace(target) {
var colon = target.indexOf(':'); if (colon != -1) { var spaces = new Array('User', 'Wikipedia', 'Image', 'MediaWiki', 'Template', 'Help', 'Category'); var ns = target.substring(0, colon); if (ns == || ns == 'Talk') return target.substring(colon + 1); else for (var i = 0; i < spaces.length; ++i) { if (ns == spaces[i] || ns == spaces[i] + '_talk') return target.substring(colon + 1); } }
return target;
}
function afd() {
document.editform.wpTextbox1.value = 'Teimpléad:' + 'subst:afd\n' + document.editform.wpTextbox1.value; document.editform.wpSummary.value = 'afd';
var target = document.editform.action; target = target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'));
var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); var date = new Date(); date = date.getUTCFullYear() + '_' + months[date.getUTCMonth()] + '_' + date.getUTCDate();
var pagename = strip_namespace(target);
window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/' + pagename + '&action=edit&fakeaction=afdsub&faketarget=' + target, 'Afd ' + unescape(target), 'status,toolbar,location,menubar,directories,resizeable,scrollbars'); window.open('/w/index.php?title=Wikipedia:Articles_for_deletion/Log/' + date + '&action=edit&fakeaction=afdlist&faketarget=' + pagename, 'AfdLog ' + unescape(target), 'status,toolbar,location,menubar,directories,resizeable,scrollbars');
}
function autoafd() {
if (document.title.indexOf('Editing ') == 0) { var action = ; var target = ; if (location.search) { var l = location.search.substring(1).split('&'); for (var i = 0; i < l.length; ++i) { var eq = l[i].indexOf('='); var name = l[i].substring(0, eq); if (name == 'fakeaction') action = l[i].substring(eq + 1); else if (name == 'faketarget') target = unescape(l[i].substring(eq + 1)).replace(/_/g, ' '); } }
if (action == 'afdlist') { document.editform.wpTextbox1.value += 'Teimpléad:' + 'Wikipedia:Articles for deletion/' + target + '\n'; document.editform.wpSummary.value = 'Wikipedia:Articles for deletion/' + target + ''; } else if (action == 'afdsub') { if (document.editform.wpTextbox1.value.length > 0) { target = document.editform.action; target = unescape(target.substring(target.indexOf('title=') + 6, target.lastIndexOf('&action=submit'))).replace(/_/g, ' '); window.alert("There's an old afd at the default location already.\n\n" + 'Please either move it out of the way (and update existing links to it), or file the Afd by hand in another location (such as ' + target + ' (2)).'); } else document.editform.wpTextbox1.value += '===' + target + '===\n' + 'Reason for nomination. ~~' + '~~\n*\n*\n*\n'; } else add_link('javascript:afd()', 'Afd'); }
}
addOnloadHook(autoafd);
//
// see http://paperlined.org/apps/wikipedia/Tool2/ for instructions on adding this to your monobook.js
// 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// // These *should not* have colons after them. var namespaces = [ "Talk", "User", "User talk", "Wikiquote", "Wikiquote talk", "Image", "Image talk", "MediaWiki", "MediaWiki talk", "Template", "Template talk", "Help", "Help talk", "Category", "Category talk",
// 3b. these two project project entries are not added by Special:Export, and might or might not need to be updated
"Wikipedia", "Wikipedia talk" ];
// 4. update this date-parser to match the format and language of your specific wiki. Feel free to contact Interiot regarding this, if you can't find another // copy of this script that uses the same language. // input: a text string from Special:Contributions. output: a javascript Date object // documentation: http://www.quirksmode.org/js/introdate.html#parse, http://www.elated.com/tutorials/programming/javascript/dates/ function date_parse(text) {
var matches = text.match(/^([0-9:]+), +([0-9]+) +([a-z]+) +([0-9]+)$/i); if (!matches) { //dump_text("XXX"); // for debugging return matches; }
parseme = matches[3] + ", " + matches[2] + " " + matches[4] + " " + matches[1] + ":00";
//dump_text(parseme); // for debugging
var dt = new Date(); dt.setTime( Date.parse(parseme));
//dump_text(dt.toLocaleString()); // for debugging
return dt;
}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ end of server-specific configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// 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 // - ??
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) {
if (navigator.userAgent.toLowerCase().indexOf('msie')+1) { bodyContent.innerHTML = "This counter does not currently work in Internet Explorer. Please <a href='http://www.getfirefox.com'>get Firefox</a> or use <a href='http://en.wikipedia.org/wiki/Wikipedia:WikiProject_edit_counters/Flcelloguy%27s_Tool'>Flcelloguy's Tool</a> instead."; } else { bodyContent.innerHTML =
"<form>
Username | <input maxlength=128 name=username value= id=username title='username'>" + " |
<input type=submit value='Submit'>" + " |
</form>";
var form = bodyContent.getElementsByTagName("form")[0]; form.method = "get"; form.action = document.location;
document.getElementById("username").focus(); }
}
function generate_main_report() {
fetch_data(params["username"].replace(/\+/g, " "), "", output_main_report, 0, []);
}
function add_stats_row(left_col, right_col) { var row = document.createElement("tr"); var left = document.createElement("td"); var right = document.createElement("td"); document.getElementById("basic_stats").appendChild(row); row.appendChild(left); row.appendChild(right); //left.innerHTML = left_col; left.appendChild( document.createTextNode(left_col) ); right.appendChild( document.createTextNode(right_col) ); return row; }
function output_main_report(history) {
// -- generate summary statistics var unique_articles = new Array(); var namespace_numedits = new Array(); for (var i=0; i<namespaces.length; i++) { namespace_numedits[ namespaces[i] ] = 0; } namespace_numedits[""] = 0; for (var i=0; i<history.length; i++) { var h = history[i]; unique_articles[ h["title"] ]++; namespace_numedits[ h["namespace"] ]++; } var unique_articles_keys = keys(unique_articles);
// -- output report var table = document.createElement("table"); table.id = "basic_stats"; document.getElementById("bodyContent").appendChild(table);
add_stats_row("Username", params["username"].replace(/\+/g, " ")); add_stats_row("Total edits", history.length); add_stats_row("Distinct pages edited", unique_articles_keys.length); add_stats_row("Average edits/page", new Number(history.length / unique_articles_keys.length).toFixed(3)); add_stats_row("First edit", history[ history.length-1 ]["date_text"] );
// add a blank row add_stats_row("", "").childNodes[0].style.height = "1em";
add_stats_row("(main)", namespace_numedits[""]); for (var i=0; i<namespaces.length; i++) { var nmspc = namespaces[i]; if (namespace_numedits[nmspc]) { add_stats_row(nmspc, namespace_numedits[nmspc]); } }
}
// ===================================== HTML-scraping backend =========================================
function add_loading_notice() {
if (document.getElementById("loading_notice")) return; var loading = document.createElement("div"); loading.id = "loading_notice"; loading.innerHTML = "
Retrieving data<blink>...</blink>"; document.getElementById("bodyContent").appendChild(loading);
} function remove_loading_notice() {
var loading = document.getElementById("loading_notice"); if (!loading) return; loading.parentNode.removeChild(loading);
}
var offset_regexp = /href="[^"]+:Contributions[^"]+offset=(\d+)/gi; function fetch_data(username, end_date, handler, offset, page_list) {
add_loading_notice(); var url = prefix + "Special:Contributions/" + username + "?offset=" + offset + "&limit=5000"; loadXMLDoc(url, function (request) { var next_offset = 0; if (request.readyState != 4) return; if (request.status == 200) { page_list.push(request.responseText); //dump_text(request.responseText);
// see if there's another pageful to get var matches = map( function(p){ return p.match( /(\d+)$/ )[0]; }, request.responseText.match( offset_regexp ) ); for (var i=0; i<matches.length; i++) { var v = matches[i] * 1; if (v != 0 && (offset == 0 || v < offset)) { next_offset = v; break; } } }
//next_offset = 0; // for testing only, retrieve just the first page of results
if (next_offset == 0) { parse_data(page_list, handler); } else { // tail recurse fetch_data(username, end_date, handler, next_offset, page_list); } });
}
// input: a list of strings, each string containing the HTML from a single page
// output: a list, where each individual entry is a specific edit from history
function parse_data(page_list, handler) {
//var total_len = 0; //for (var i=0; i<page_list.length; i++) total_len += page_list[i].length; //alert("parsing " + page_list.length + " pages comprising " + total_len + " total bytes");
var last_history_ent = []; last_history_ent["title"] = ""; last_history_ent["oldid"] = "";
var edit_history = new Array(); for (var pagecnt=0; pagecnt<page_list.length; pagecnt++) {
var matches = page_list[pagecnt].match( /^