// wikibits customization
if(window.histrowinit) window.removeEventListener('load',histrowinit,false);
ts_alternate_row_colors = false;
// General library stuff {{{
// Event handler function {{{
function mkEvt(elem,evtname,handler) {
// old-style event handlers have more robust canceling and target
// finding - here's a trick to let me attach multiple ones
var oldhandler = elem['on'+evtname];
elem['on'+evtname] = function() {
if(oldhandler) {
elem._eventTemp = oldhandler;
if(elem._eventTemp() == false) return false;
}
elem._eventTemp = handler;
return elem._eventTemp();
}
}
//}}}*/
// Hack to fix race condition w/ importScript {{{
addOnloadHook = function(hookFunct) {
// Allows add-on scripts to add onload functions
if(doneOnloadHook) hookFunct();
else onloadFuncts[onloadFuncts.length] = hookFunct;
};
// }}} */
// tricks with getElementById {{{
document._realGEBI = document.getElementById;
document.getElementById = function(id){
if(id=="p-cactions") {
if(this._realGEBI("p-cactions2"))
return this._realGEBI("p-cactions2");
}
var x = this._realGEBI(id);
if(x) return x;
else {
switch(id) {
case "content": x= this._realGEBI("mw_content");break;
case "column-content": x= this._realGEBI("mw_contentwrapper");break;
case "bodyContent": x= this._realGEBI("mw_contentholder");break;
case "column-one": x= this._realGEBI("mw_portlets");break;
case "globalWrapper": x= this._realGEBI("mw_main");break;
default: return null;
}
}
return x;
}
// }}} */
/* }}} */
/* check if page is discussion {{{ */
var pageIsDiscussion = false;
addOnloadHook(function pageIsDiscussion_hook() {
if(wgNamespaceNumber % 2) {
pageIsDiscussion = true; return;
}
if(wgNamespaceNumber == 4) {
if(wgPageName.indexOf("noticeboard") > 0) {
pageIsDiscussion = true; return;
}
if(wgPageName.indexOf("Village_pump") > 0) {
pageIsDiscussion = true; return;
}
if(wgPageName.indexOf("_for_deletion/") > 0) {
pageIsDiscussion = true; return;
}
if(wgPageName.indexOf("_for_discussion/") > 0) {
pageIsDiscussion = true; return;
}
if(wgPageName.indexOf("Requests_for_comment/User_names") > 0) {
pageIsDiscussion = true; return;
}
}
});
/* }}} */
/* Add a tab for arbitrary actions {{{
// TODO undelete
// event handling here isn't making sense, and the style is somehow
// broken anyway (needs a skin check maybe?)
addOnloadHook(function blankTab_hook() {
try {
var theList = $('p-cactions').getElementsByTagName("UL")[0];
var myLi = document.createElement("LI");
var myForm = document.createElement("FORM");
var myInput = document.createElement("INPUT");
myForm.appendChild(myInput);
myLi.appendChild(myForm);
theList.appendChild(myLi);
// TODO move to .css
myLi.style.cssText = "float: right; padding-top: 1px;"
myForm.style.cssText = "display: inline"
myInput.style.cssText = "width: 4em; background-color:white; font: inherit; border: none; text-align: right"
myForm.onsubmit = function(e) {
e.preventDefault();
switch(myInput.value) {
case 'move':
location.href = ('Special:Movepage/'+wgPageName)
.replace(/(.*)/,wgArticlePath);
break;
case 'contribs':
location.href = ('Special:Contributions/'+wgPageName.replace(/^[^:]*:/,'').replace(/\/(.*)/,''))
.replace(/(.*)/,wgArticlePath);
break;
case 'links':
location.href = ('Special:Whatlinkshere/'+wgPageName)
.replace(/(.*)/,wgArticlePath);
break;
case 'log': case 'logs':
location.href = ('Special:Log')
.replace(/(.*)/,wgArticlePath)
+'?page='+escape(wgPageName);
break;
case 'edit lead':
location.href = wgScriptPath+'/index.php?' +
'title='+escape(wgPageName) + "&" +
'action=edit§ion=0';
break;
default: location.href = wgScriptPath+'/index.php?' +
'title='+escape(wgPageName) + "&" +
'action='+escape(myInput.value)
}
}
} catch(x) { Debug(x,'addBlankTab') }
});
// }}} */
// Alt text {{{
$(function() {
try {
for(var i=0;i<document.images.length;i++) {
var img = document.images[i];
if(img.alt && !img.title) img.title = 'alt: '+img.alt;
}
} catch(x) { Debug(x,'processImages') }
});
// }}} */
// [[User:Random832]] script for finding "resolved" tags. {{{
// semi-experimental, not yet adapted for anything but ANI.
if (wgPageName == "Wikipedia:Administrators\'_noticeboard/Incidents" && wgAction == "view") {
addOnloadHook(function ANI_toc_hook(){
var sections = document.getElementById('toc').getElementsByTagName("li");
for(var i=0;i<sections.length;i++) {
try {
var link = sections[i].firstChild;
var target=document.getElementsByName(link.hash.slice(1))[0];
var next = target.parentNode.nextSibling;
// discard text nodes
while(next.nodeType != 1) next = next.nextSibling;
// now we have the header, now skip another
if(next.tagName != "H2") { continue; }
next = next.nextSibling;
while(next.nodeType != 1) next = next.nextSibling;
if ((/\bresolved\b/.test(next.className))) {
//resolved
sections[i].className = "ani_resolved"
sections[i].style.fontStyle = 'italic'
//sections[i].appendChild(document.createTextNode("resolved"))
} else {
//not resolved
sections[i].className = "ani_unresolved"
sections[i].style.fontWeight = 'bold'
}
// BUG: chokes on sections beginning with a digit
// (anchor has name instead of id).
} catch(x) {
if(window.console) //firebug
console.log("caught %o",x);
}//end try
}//end for
});//end onloadhook function
}//end if WP:ANI
// }}}
(function submit_validation_hook() { // set up submit validation {{{
var validators = [];
var is_preview = false;
window.addOnSubmitValidator = function(x) {
validators[validators.length] = x;
}
addOnloadHook(function() {
var editform = document.getElementById('editform');
if(!editform) return;
mkEvt(editform,'submit',function() {
if(is_preview) return true;
for(var i=0;i<validators.length;i++) {
var result = validators[i]();
if(!result) return false;
}
});
if (document.getElementById('wpPreview')) {
mkEvt(document.getElementById('wpPreview'),'click',function () {
is_preview = true;
});
}
});
})(); // }}}
// Edit summary check {{{
addOnSubmitValidator(function() {
var editsummary = document.getElementById('wpSummary').value;
if( /^\/\*.*\*\/\s*$/.test(editsummary)) editsummary = ''
if(!editsummary) return confirm("Submit this edit without an edit summary?");
else return true;
});
// }}} */
// links on CAT:PER {{{
if(wgPageName=="Category:Wikipedia_protected_edit_requests")
$(function(){
var pagediv = document.getElementById("mw-pages");
var links = pagediv.getElementsByTagName("A");
for(var i=0;i<links.length;i++) {
links[i].hash = '#editprotected';
}
});
// }}} */
$(function() {
var s = document.createElement('STYLE');
s.textContent = '#edittools_hide_for_script_test {display:none}';
document.getElementsByTagName('HEAD')[0].appendChild(s);
});
/* change diff to history in new messages {{{
$(function() {
var contentSub = document.getElementById("contentSub");
if(!contentSub) return;
var elem = contentSub.nextSibling;
while(elem.nodeType != 1) elem = elem.nextSibling;
if(elem.className != 'usermessage') return;
elem.getElementsByTagName('A')[1].href = elem.getElementsByTagName('A')[1].href.replace("diff=cur","action=history")
elem.getElementsByTagName('A')[1].textContent = "history";
});
// }}}*/
// Section organizer for ANI {{{
if (wgPageName == "Wikipedia:Administrators\'_noticeboard/Incidents" && wgAction == "view") {
addOnloadHook(function ani_sections() {
var headers = document.getElementsByTagName('H2');
for(var i=1;i<headers.length;i++) {
// starting from 1, to skip the toc header.
var section = document.createElement("DIV");
section.className = "sectionContainer";
var anchor = headers[i].previousSibling;
while(anchor.nodeType != 1) anchor = anchor.previousSibling;
headers[i].parentNode.insertBefore(section,headers[i]);
section.appendChild(anchor);
section.appendChild(headers[i]);
var innerSection = document.createElement("DIV");
innerSection.className = "sectionContentHolder";
section.appendChild(innerSection);
while(section.nextSibling && section.nextSibling.tagName != 'H2' && section.nextSibling.id != 'catlinks') {
// look ahead
var anchorcheck = section.nextSibling.nextSibling;
while(anchorcheck && anchorcheck.nodeType!=1) anchorcheck = anchorcheck.nextSibling;
if(anchorcheck && anchorcheck.tagName == 'H2') break;
innerSection.appendChild(section.nextSibling);
}
var ntimestamps = 0;
// evil evil hack
var lastTimestamp = new Date(0);
var lastTimestampText = '(No Timestamp)';
innerSection.textContent.replace(/[0-9][0-9]:[0-9][0-9], [0-3]?[0-9] [A-Z][a-z]* [0-9][0-9][0-9][0-9]/g,function(match) {
var thisTimestamp = new Date(match);
if(thisTimestamp.valueOf() > lastTimestamp.valueOf()) {
lastTimestamp = thisTimestamp;
lastTimestampText = match;
}
ntimestamps++;
});
// was done incorrrectly in local time, convert from UTC
lastTimestamp.setMinutes(
lastTimestamp.getMinutes()-lastTimestamp.getTimezoneOffset()
);
var age = (new Date()).getTime() - lastTimestamp.getTime();
var hideDefault = false;
if (age > 21600000) // 6 hours
hideDefault = true;
if(innerSection.textContent.length < 600) // bytes
hideDefault = false; // no reason to hide in this case
if(ntimestamps < 2) // unanswered
hideDefault = false;
// hide if resolved, also, place the resolved header in the visible part.
var resolved = getElementsByClassName(innerSection,'DIV','resolved');
if(resolved.length) {
resolved = resolved[0];
// [1] to skip an annoying whitespace node
if (resolved != innerSection.firstChild && resolved != innerSection.childNodes[1]) resolved = resolved.cloneNode(true);
section.insertBefore(resolved,innerSection);
hideDefault = true;
}
section.insertBefore(document.createTextNode('Last: ' + lastTimestampText + ". "),innerSection);
section.insertBefore(document.createTextNode(innerSection.textContent.length + " text bytes. "),innerSection);
section.insertBefore(document.createTextNode(ntimestamps + " comments. "),innerSection);
(function ani_sections_closure(){
var header = headers[i];
var innerSectionFix = innerSection;
var button = document.createElement('BUTTON');
if(hideDefault)
button.textContent = 'show';
else
button.textContent = 'hide';
button.onclick = function ani_sections_onclick() {
if(innerSectionFix.style.display == 'none') {
innerSectionFix.style.display = 'block';
this.textContent = 'hide'; }
else {
innerSectionFix.style.display = 'none';
this.textContent = 'show'; }
}
header.insertBefore(button,header.firstChild);
button.style.cssText='float: right';
if(hideDefault) innerSection.style.display='none';
})();
}
});
}
// }}}
/* proof of concept for edit summary length. Not yet converted to wikipedia
<script>
window.onload = function() {
var box = document.getElementById("editsummary")
var len = document.getElementById("length_value")
function utfslop(s) {
var count = 3;
for(var i=0;i<s.length;i++) {
if(s[i] > '\u007f') count++;
if(s[i] > '\u07ff') count++;
}
return count;
}
box.onkeypress = function(evt) {
this.maxLength = 255 - utfslop(this.value);
if(this.value.length > this.maxLength)
this.value = this.value.substr(0,this.maxLength);
}
}
</scr\ipt>
<input id="editsummary">
<input id="length_value">
*/
/* addOnloadHook(function() {
var item = mw.util.addPortletLink('p-cactions','','ßsocks','ca-betasocks','Check socks with Betacommand\'s tool','',null);
var link=item.firstChild;
link.onclick = function() {
jsMsg('<form action="http://tools.wikimedia.de/~betacommand/cgi-bin/compare">'+
'<table>' +
'<tr><th>Master<\/th><td><input name="master"><\/td><\/tr>' +
'<tr><th>Socks<\/th><td><input name="socks"><\/td><\/tr>' +
'<tr><th>Key<\/th><td><input name="key"><\/td><\/tr>' +
'<tr><td colspan="2"><input type="submit"><\/td><\/tr><\/table>'+'<\/form>','betasocks');
return false;
}
}); */
$(function() {
var p = document.getElementById("p-logo");
if(!p) return;
var a = p.firstChild;
while(a.nodeType != 1) a = a.nextSibling;
var done = false;
a.onclick = function() {
if(!done) this.style.backgroundImage = 'none';
var ret = done; done = true; return ret;
}
});
/* convert this bookmarklet later on. javascript:(function(){if(!window['$ssZapClosedXFD']){var x=document.createElement('STYLE');x.textContent='.xfd-closed{display:none} .boilerplate.metadata.vfd{display:none}';
document.getElementsByTagName('HEAD')[0].appendChild(x);
window['$ssZapClosedXFD']=x.sheet}else{
window['$ssZapClosedXFD'].disabled=!window['$ssZapClosedXFD'].disabled}})(); */
/* snippet for WP:AN semi-protection, look at later
if (wgEditRestriction.length > 0) {
addOnloadHook(function() {
var msg_cantedit = document.getElementById("cantedit-msg");
var msg_isprotected = document.getElementById("isprotected-msg");
if(!msg_cantedit && !msg_isprotected)
var canEdit = false;
for(var i=0;i<wgUserGroups.length;i++) {
for(var ii=0;ii<wgEditRestriction.length;ii++) {
if(wgUserGroups[i] == wgEditRestriction[ii]) canEdit = true;
}
}
if(canEdit) { if(msg_isprotected) msg_isprotected.style.display='block'; }
else { if(msg_cantedit) msg_cantedit.style.display='block'; }
});
}
*/
if(wgPageName == 'Special:Watchlist') {
addOnloadHook(function() {
document.forms[0].method = 'get'; // TODO make more robust
});
}
function addEditWarnings(warntext) {
if(!warntext) warntext = "Are you sure you want to edit this page?";
function do_warn() {
return confirm(warntext);
}
var spans = document.getElementsByTagName('SPAN');
for(var i=0;i<spans.length;i++) {
if(/\beditsection\b/.test(spans[i].className)) mkEvt(spans[i],'click',do_warn);
}
mkEvt(document.getElementById('ca-edit'),'click',do_warn);
}
function logCalls(obj,prop) {
var oldfn = obj[prop];
obj[prop] = (function(ofn,nm) {
return (function()
{
var ret = ofn.apply(this,arguments);
console.debug("called %s on %o with arguments %o, returned %o",nm,this,arguments,ret);
});
})(oldfn,prop);
}
logCalls(window,'hookEvent');
logCalls(window,'addHandler');
logCalls(window,'addClickHandler');
$(function() {
var uploadtab = document.getElementById('t-upload');
if(!uploadtab) return
var uploadtablink = uploadtab.getElementsByTagName('a')[0];
if(!uploadtablink) return;
uploadtablink.href = wgArticlePath.replace('\$1','Special:Upload');
});
function shortenTabs() {
function st(id, text) {
try {
document.getElementById(id).getElementsByTagName('A')[0].textContent = text;
} catch(x) {}
}
function img(src,alt) {
var x=document.createElement('IMG');
x.src=src;
x.alt=alt;
return x;
}
st('ca-edit','Edit');
st('ca-talk','Talk');
st('ca-delete','Delete');
st('ca-protect','Prot.');
var unprotect = document.getElementById('ca-unprotect');
if(unprotect) {
unprotect = unprotect.getElementsByTagName('A')[0];
unprotect.textContent = '';
if(wgRestrictionEdit[0] && wgRestrictionEdit[0] == "autoconfirmed")
unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Padlock-silver-medium.svg/16px-Padlock-silver-medium.svg.png','SP'));
if(wgRestrictionEdit[0] && wgRestrictionEdit[0] == "sysop")
unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/en/thumb/5/59/Padlock.svg/16px-Padlock.svg.png','FP'));
else if(wgRestrictionMove[0] && wgRestrictionMove[0] == "sysop")
unprotect.appendChild(img('http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Padlock-olive.svg/16px-Padlock-olive.svg.png','MP'))
}
}
$(shortenTabs);
// Twinkle Lite
importScript('User:AzaToth/morebits.js');
importScript('User:AzaToth/twinklefluff.js');
//importScript('User:AzaToth/twinklewarn.js');
//importScript('User:AzaToth/twinklearv.js');
//importScript('User:AzaToth/twinklespeedy.js');
importScript('User:AzaToth/twinklediff.js');
//importScript('User:AzaToth/twinkleprotect.js');
//importScript('User:AzaToth/twinkleprod.js');
//importScript('User:AzaToth/twinklexfd.js');
//importScript('User:AzaToth/twinkleimage.js');
//importScript('User:AzaToth/twinkleunlink.js');
//importScript('User:AzaToth/twinkledelimages.js');
//importScript('User:AzaToth/twinkledeprod.js');
//importScript('User:AzaToth/twinklebatchdelete.js');
//importScript('User:AzaToth/twinklebatchprotect.js');
//importScript('User:AzaToth/twinkleimagetraverse.js');
// install [[User:Cacycle/wikEdDiff]] enhanced diff view using ajax
document.write('<script type="text/javascript" src="'
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s"><\/script>');
/*
var fractions = {
2:{1:'½'},3:{1:'⅓',2:'⅔'},4:{1:'¼',3:'¾'},8:{1:'⅛',3:'⅜',5:'⅝',7:'⅞'}
/*,5:{1:'⅕',2:'⅖',3:'⅗',4:'⅘'},6:{1:'⅙',5:'⅚'}*//*
};
function fixfracs() {
var spans = document.getElementsByTagName('SPAN');
for(var i=0;i<spans.length;i++) { var span=spans[i];
if(span.className != 'template-frac') continue;
var den = span.lastChild.textContent;
var num = span.firstChild.textContent;
if(fractions[den] && fractions[den][num]) {
span.textContent = fractions[den][num];
span.className = 'template-frac-vulgarized';
}
}
}
$(fixfracs);
*/
function toolsbreak() {
function del(x) {
var y = document.getElementById(x);
if(!y) return;
document.removeElement(y)
}
del("ca-delete");
del("ca-undelete");
del("ca-protect");
// not removing ca-unprotect since i've configured it to show
// accurate information about the current protection status
del("t-blockip");
}
$(toolsbreak);