Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
(20 intermediate revisions by 3 users not shown) | |||
Line 4: | Line 4: | ||
var docCaptionShow = "Show documentation"; | var docCaptionShow = "Show documentation"; | ||
var docCaptionHide = "Hide documentation"; | var docCaptionHide = "Hide documentation"; | ||
var tpbCoverChange = "Alternate | var tpbCoverChange = "Alternate Image"; | ||
//Add any javascript methods here or via [skin].js that need to be triggered after another method alters the page length | |||
var resizeMethods = ''; // e.g. 'function();function2();' | |||
var hasClass = (function () { | var hasClass = (function () { | ||
Line 80: | Line 84: | ||
var linkCaption = document.createTextNode(docCaptionHide); | var linkCaption = document.createTextNode(docCaptionHide); | ||
link.setAttribute("id", "docSwitch-" + docIndex); | link.setAttribute("id", "docSwitch-" + docIndex); | ||
link.setAttribute("href", "javascript:collapseDoc(" + docIndex + ");"); | link.setAttribute("href", "javascript:collapseDoc(" + docIndex + ");" + resizeMethods); | ||
link.appendChild(linkCaption); | link.appendChild(linkCaption); | ||
rSwitch.appendChild(link); | rSwitch.appendChild(link); | ||
Line 121: | Line 125: | ||
var link = document.createElement("a"); | var link = document.createElement("a"); | ||
var linkCaption = document.createTextNode(tpbCoverChange); | var linkCaption = document.createTextNode(tpbCoverChange); | ||
link.setAttribute("href", "javascript:ToggleCoverImage();"); | link.setAttribute("href", "javascript:ToggleCoverImage();" + resizeMethods); | ||
link.appendChild(linkCaption); | link.appendChild(linkCaption); | ||
Line 135: | Line 139: | ||
var textShow = 'show'; | var textShow = 'show'; | ||
var textHide = 'hide'; | var textHide = 'hide'; | ||
var textProd = 'production order'; | |||
var textBrod = 'broadcast order'; | |||
var prodOrder = true; | |||
var showNav = true; | |||
function findShowHideElements() { | function findShowHideElements() { | ||
Line 145: | Line 153: | ||
var a = document.createElement('a'); | var a = document.createElement('a'); | ||
a.setAttribute('href', 'javascript://'); | a.setAttribute('href', 'javascript://'); | ||
a.setAttribute('onclick', 'toggleShow(this);'); | a.setAttribute('onclick', 'toggleShow(this);' + resizeMethods); | ||
a.appendChild(document.createTextNode(textHide)); | a.appendChild(document.createTextNode(textHide)); | ||
spans[j].appendChild(document.createTextNode('[')); | spans[j].appendChild(document.createTextNode('[')); | ||
Line 151: | Line 159: | ||
spans[j].appendChild(document.createTextNode(']')); | spans[j].appendChild(document.createTextNode(']')); | ||
toggleShow(a); | toggleShow(a); | ||
} | |||
if(hasClass(spans[j], 'navigation-toggle')) { | |||
var a = document.createElement('a'); | |||
a.setAttribute('href', 'javascript://'); | |||
a.setAttribute('onclick', 'toggleShowOrder(this);' + resizeMethods); | |||
a.appendChild(document.createTextNode(textProd)); | |||
spans[j].appendChild(document.createTextNode('[')); | |||
spans[j].appendChild(a); | |||
spans[j].appendChild(document.createTextNode(']')); | |||
} | } | ||
} | } | ||
Line 158: | Line 175: | ||
addOnloadHook(findShowHideElements); | addOnloadHook(findShowHideElements); | ||
function toggleShowOrder(anchor) { | |||
prodOrder = !prodOrder; | |||
if(showNav) { // only if visiable | |||
if(prodOrder) { | |||
var prodRow = 'table-row'; | |||
var brodRow = 'none'; | |||
} else { | |||
var brodRow = 'table-row'; | |||
var prodRow = 'none'; | |||
} | |||
var p = anchor.parentNode; | |||
while(p.tagName!='TABLE') | |||
var p = p.parentNode; | |||
var trs = p.getElementsByTagName('tr'); | |||
for(var i = 0; i < trs.length; i++) { | |||
if(hasClass(trs[i], 'canhide')) { | |||
if(hasClass(trs[i], 'production-row')) { | |||
trs[i].style.display = prodRow; | |||
} else if(hasClass(trs[i], 'broadcast-row')) { | |||
trs[i].style.display = brodRow; | |||
} else { | |||
trs[i].style.display = 'none'; | |||
} | |||
} | |||
} | |||
} | |||
if(prodOrder) { | |||
anchor.innerHTML = textProd; | |||
} else { | |||
anchor.innerHTML = textBrod; | |||
} | |||
} | |||
function toggleShow(anchor) { | function toggleShow(anchor) { | ||
showNav = !showNav; | |||
if( | if(showNav) { | ||
var dis = 'table-row'; | var dis = 'table-row'; | ||
} else { | } else { | ||
Line 172: | Line 222: | ||
for(var i = 0; i < trs.length; i++) { | for(var i = 0; i < trs.length; i++) { | ||
if(hasClass(trs[i], 'canhide')) { | if(hasClass(trs[i], 'canhide')) { | ||
trs[i].style.display = dis; | if((prodOrder && hasClass(trs[i], 'production-row')) | ||
|| (!prodOrder && hasClass(trs[i], 'broadcast-row')) | |||
|| (!hasClass(trs[i], 'broadcast-row') && !hasClass(trs[i], 'production-row'))) //indicates comic | |||
trs[i].style.display = dis; | |||
else | |||
trs[i].style.display = 'none'; | |||
} | } | ||
} | } | ||
if( | if(showNav) { | ||
anchor.innerHTML = textHide; | anchor.innerHTML = textHide; | ||
} else { | } else { | ||
Line 684: | Line 739: | ||
return; | return; | ||
} | } | ||
return optionsArray[Math.floor(Math.random() * | return optionsArray[Math.floor(Math.random() * optionsArray.length)]; | ||
} | } | ||
Line 691: | Line 746: | ||
{ | { | ||
var titleCaption = getElementbyClass(document.getElementsByTagName("p"), "titleCaption"); | var titleCaption = getElementbyClass(document.getElementsByTagName("p"), "titleCaption"); | ||
var opt = new Array(); | |||
var d = new Date(); | |||
if(d.getDate() == 30 && d.getMonth() == 0) | |||
{ | |||
var sphereAge =d.getFullYear()-2006; | |||
//TODO: update this before 2027 (sphereAge == 21) | |||
titleCaption[0].innerHTML = "What day is today? It's The Infosphere's "+ sphereAge +"th birthday!"; | |||
} | |||
else | |||
{ | |||
var opt = new Array(); | |||
opt[0]="As seen on TV"; | |||
opt[1]="For external use only"; | |||
opt[2]="Deciphered from crop circles"; | |||
opt[3]="80% entertainment by volume"; | |||
opt[4]="As foretold by Nostradamus"; | |||
opt[5]="The proud result of prison labor"; | |||
opt[6]="Proudly made on Earth"; | |||
opt[7]="It just won't stay dead!"; | |||
opt[8]="Torn from tomorrow's headlines"; | |||
opt[9]="For the sophisticated shut-in"; | |||
opt[10]="Dancing space potatoes?<br/>You bet!"; | |||
opt[11]="A stern warning of things to come"; | |||
opt[12]="Penetrates even the thickest foil hat"; | |||
opt[13]="There will be a test"; | |||
opt[14]="A by-product of the TV industry"; | |||
opt[15]="Spoiler alert:<br/>Robots and whatnot"; | |||
if(d.getDate() == 1 && d.getMonth() == 0) | |||
{ | |||
opt[16]="Happy New Year, naked weirdo!"; | |||
} | |||
titleCaption[0].innerHTML = randomise(opt); | |||
} | |||
} | } | ||
} | } | ||
Line 711: | Line 785: | ||
function countdownTemplate(){ | function countdownTemplate(){ | ||
var counters = getElementbyClass(document.getElementsByTagName(" | var counters = getElementbyClass(document.getElementsByTagName("span"), "countdown"); | ||
var today = new Date(); | var today = new Date(); | ||
for (i=0; i<counters.length; i++){ | for (i=0; i<counters.length; i++){ | ||
Line 720: | Line 794: | ||
var endDate = new Date(); | var endDate = new Date(); | ||
endDate.setFullYear(year, month - 1, date); | endDate.setFullYear(year, month - 1, date); | ||
var daysLeft = (Math.round((endDate.getTime() - today.getTime())/86400000)); | |||
counters[i].innerHTML = daysLeft; | |||
if ( daysLeft == 1 ) | |||
document.getElementById(counters[i].id+"_days").innerHTML = "day"; | |||
else | |||
document.getElementById(counters[i].id+"_days").innerHTML = "days"; | |||
} | } | ||
} | } | ||
addOnloadHook(countdownTemplate); | addOnloadHook(countdownTemplate); |
Latest revision as of 03:18, 8 January 2014
/* Any JavaScript here will be loaded for all users on every page load. */ var reasonCaptionShow = "Show reason"; var reasonCaptionHide = "Hide reason"; var docCaptionShow = "Show documentation"; var docCaptionHide = "Hide documentation"; var tpbCoverChange = "Alternate Image"; //Add any javascript methods here or via [skin].js that need to be triggered after another method alters the page length var resizeMethods = ''; // e.g. 'function();function2();' var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); function collapseReason(id) { var content = document.getElementById("reasonContent-" + id); var rSwitch = document.getElementById("reasonSwitch-" + id); if(rSwitch.firstChild.data==reasonCaptionShow) { content.style.display = "block"; rSwitch.firstChild.data = reasonCaptionHide; } else { content.style.display = "none"; rSwitch.firstChild.data = reasonCaptionShow; } } function createAllReasonButtons() { var reasonIndex = 0; var divs = document.getElementsByTagName("div"); for(var i = 0; i < divs.length; i++) { if(hasClass(divs[i], "reasonContainer")) { var rSwitch = divs[i].childNodes[0].lastChild; var content = divs[i].childNodes[1]; content.setAttribute("id", "reasonContent-" + reasonIndex); var link = document.createElement("a"); var linkCaption = document.createTextNode(reasonCaptionShow); link.setAttribute("id", "reasonSwitch-" + reasonIndex); link.setAttribute("href", "javascript:collapseReason(" + reasonIndex + ");"); link.appendChild(linkCaption); rSwitch.appendChild(link); reasonIndex++; } } } addOnloadHook(createAllReasonButtons); function collapseDoc(id) { var content = document.getElementById("docContent-" + id); var rSwitch = document.getElementById("docSwitch-" + id); if(rSwitch.firstChild.data==docCaptionShow) { content.style.display = "block"; rSwitch.firstChild.data = docCaptionHide; } else { content.style.display = "none"; rSwitch.firstChild.data = docCaptionShow; } } function createAllDocButtons() { var docIndex = 0; var divs = document.getElementsByTagName("div"); for(var i = 0; i < divs.length; i++) { if(hasClass(divs[i], "template-documentation")) { var subs = divs[i].childNodes; for(var j = 0; j < subs.length; j++) { if(hasClass(subs[j], "fake-h2")) var rSwitch = subs[j].firstChild; if(hasClass(subs[j], "documentation-content")) var content = subs[j]; } content.setAttribute("id", "docContent-" + docIndex); var link = document.createElement("a"); var linkCaption = document.createTextNode(docCaptionHide); link.setAttribute("id", "docSwitch-" + docIndex); link.setAttribute("href", "javascript:collapseDoc(" + docIndex + ");" + resizeMethods); link.appendChild(linkCaption); rSwitch.appendChild(link); docIndex++; } } if(docIndex>2) { for(var i = 0; i < docIndex; i++) { collapseDoc(i); } } } addOnloadHook(createAllDocButtons); function ToggleCoverImage() { var el = document.getElementById("image2"); if ( el.style.display != 'none' ) { el.style.display = 'none'; } else { el.style.display = ''; } el = document.getElementById("image1"); if ( el.style.display != 'none' ) { el.style.display = 'none'; } else { el.style.display = ''; } } function createAllCoverButtons() { var divs = document.getElementsByTagName("div"); for(var i = 0; i < divs.length; i++) { if(hasClass(divs[i], "CoverToggle")) { // var content = divs[i].lastChild; var link = document.createElement("a"); var linkCaption = document.createTextNode(tpbCoverChange); link.setAttribute("href", "javascript:ToggleCoverImage();" + resizeMethods); link.appendChild(linkCaption); divs[i].appendChild(link); break; } } } addOnloadHook(createAllCoverButtons); var textShow = 'show'; var textHide = 'hide'; var textProd = 'production order'; var textBrod = 'broadcast order'; var prodOrder = true; var showNav = true; function findShowHideElements() { var tables = document.getElementById("content").getElementsByTagName('table'); for(var i = 0; i<tables.length; i++) { if(hasClass(tables[i], 'showhide')) { var spans = tables[i].getElementsByTagName('span'); for(var j = 0; j<spans.length; j++) { if(hasClass(spans[j], 'show-button')) { var a = document.createElement('a'); a.setAttribute('href', 'javascript://'); a.setAttribute('onclick', 'toggleShow(this);' + resizeMethods); a.appendChild(document.createTextNode(textHide)); spans[j].appendChild(document.createTextNode('[')); spans[j].appendChild(a); spans[j].appendChild(document.createTextNode(']')); toggleShow(a); } if(hasClass(spans[j], 'navigation-toggle')) { var a = document.createElement('a'); a.setAttribute('href', 'javascript://'); a.setAttribute('onclick', 'toggleShowOrder(this);' + resizeMethods); a.appendChild(document.createTextNode(textProd)); spans[j].appendChild(document.createTextNode('[')); spans[j].appendChild(a); spans[j].appendChild(document.createTextNode(']')); } } } } } addOnloadHook(findShowHideElements); function toggleShowOrder(anchor) { prodOrder = !prodOrder; if(showNav) { // only if visiable if(prodOrder) { var prodRow = 'table-row'; var brodRow = 'none'; } else { var brodRow = 'table-row'; var prodRow = 'none'; } var p = anchor.parentNode; while(p.tagName!='TABLE') var p = p.parentNode; var trs = p.getElementsByTagName('tr'); for(var i = 0; i < trs.length; i++) { if(hasClass(trs[i], 'canhide')) { if(hasClass(trs[i], 'production-row')) { trs[i].style.display = prodRow; } else if(hasClass(trs[i], 'broadcast-row')) { trs[i].style.display = brodRow; } else { trs[i].style.display = 'none'; } } } } if(prodOrder) { anchor.innerHTML = textProd; } else { anchor.innerHTML = textBrod; } } function toggleShow(anchor) { showNav = !showNav; if(showNav) { var dis = 'table-row'; } else { var dis = 'none'; } var p = anchor.parentNode; while(p.tagName!='TABLE') var p = p.parentNode; var trs = p.getElementsByTagName('tr'); for(var i = 0; i < trs.length; i++) { if(hasClass(trs[i], 'canhide')) { if((prodOrder && hasClass(trs[i], 'production-row')) || (!prodOrder && hasClass(trs[i], 'broadcast-row')) || (!hasClass(trs[i], 'broadcast-row') && !hasClass(trs[i], 'production-row'))) //indicates comic trs[i].style.display = dis; else trs[i].style.display = 'none'; } } if(showNav) { anchor.innerHTML = textHide; } else { anchor.innerHTML = textShow; } } function getClientHeight() { return document.documentElement.clientHeight; } function alternate_init() { var tables = getElementsByClassName(document, "table", "alternateable"); for(var ti = 0; ti < tables.length; ti++) { ts_alternate(tables[ti]); } } addOnloadHook(alternate_init); function ts_alternate(table) { // Take object table and get all it's tbodies. var tableBodies = table.getElementsByTagName("tbody"); // Loop through these tbodies for (var i = 0; i < tableBodies.length; i++) { // Take the tbody, and get all it's rows var tableRows = tableBodies[i].getElementsByTagName("tr"); // Loop through these rows // Start at 1 because we want to leave the heading row untouched var curRow = 0 var sections = new Array(); var s = 0; sections[s] = new Array(); for (var j = 0; j < tableRows.length; j++) { if(tableRows[j].parentNode != tableBodies[i]) continue; if(tableRows[j].tagName != 'TR') continue; var ignore = false; var oldClasses = tableRows[j].className.split(" "); var newClassName = ""; for (var k = 0; k < oldClasses.length; k++) { if (oldClasses[k] == "alternate-ignore") ignore = true; if (oldClasses[k] == "alternate-reset") { curRow = 0; ignore = true; } if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd") newClassName += oldClasses[k] + " "; } if(curRow==0 && j>0) { s++; sections[s] = new Array(); } if(ignore) { continue; } sections[s].push(tableRows[j]); curRow++; } for(var s = 0; s < sections.length; s++) { var l = sections[s].length; if (l<=1) continue; for(var r = 0; r < l; r++) { var row = sections[s][r]; var oldClasses = row.className.split(" "); var newClassName = ""; for (var k = 0; k < oldClasses.length; k++) { if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd") newClassName += oldClasses[k] + " "; } row.className = newClassName + ((l-r) % 2 == 0 ? "odd" : "even"); } } } } //Donation notice var barWidth = 200; var topAmount = 500; var currentAmount = 0; function updateDonationNotice() { if(!document.getElementById("donation-progress-number")) return; getDonation(); } addOnloadHook(updateDonationNotice); function getDonation() { var url = "/api.php?action=query&meta=allmessages&ammessages=donation-amount|donation-contributors&amlang=en&format=xml"; ajax(url, getDonationEnd, []); } function getDonationEnd(xml, data) { var doc = xml.documentElement; var currentAmount = parseInt(doc.getElementsByTagName("message")[0].firstChild.data); var currentContributors = parseInt(doc.getElementsByTagName("message")[1].firstChild.data); var nowWidth = (currentAmount/topAmount)*barWidth; var number = document.getElementById("donation-progress-number"); number.innerHTML = currentAmount; var progBar = document.getElementById("donation-progress-indicator"); progBar.setAttribute("style", "width: " + nowWidth + "px"); var contSpan = document.getElementById("donation-progress-contributors"); contSpan.innerHTML = currentContributors; } function ajax(url, callbackFunction, data) { var request = new XMLHttpRequest(); request.open("GET", url, true); //request.setRequestHeader("Content-Type", // "application/x-www-form-urlencoded"); request.onreadystatechange = function() { var done = 4, ok = 200; if (request.readyState == done) { if (request.status == ok) { if (request.responseXML) { callbackFunction(request.responseXML, data); } } else { if (request.responseXML) { alert(request.responseXML); } else { /*alert('Fejl: Serveren stak mig i ryggen og skred. ' + request.status);*/ } } } }; request.send(null); } function canonNotice() { var e = document.getElementById('canon-notice-info'); if(!e) return; e.setAttribute('onclick', 'toggleCanonNotice(event);'); } addOnloadHook(canonNotice); var canonNoticeShow = false; function toggleCanonNotice(event) { var e = document.getElementById('canon-notice-text'); ev = event || window.event; var docWidth = document.body.clientWidth; show = !canonNoticeShow; canonNoticeShow = !canonNoticeShow; if(!show) { e.style.display = 'none'; return; } var et = document.getElementById('canon-notice-info'); e.setAttribute('onclick', 'toggleCanonNotice(event);'); et.setAttribute('onclick', 'toggleCanonNotice(event);'); e.style.display = 'block'; right = docWidth - ev.pageX - canonNoticeWidth/2; e.style.right = right + "px"; } //The following is for transcript articles. var currentTranscriptTarget = null; var currentTranscriptTarget2 = null; var currentTranscriptHl = null; var currentTranscriptHlEnd = null; var writtenTranscriptLineLink = false; var transcriptHlColour = "#888888"; var transcriptHlSecondMode = false; var specialCharacters = ["!", "*", "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]" ]; var specialCharactersValues = {"!" : "%21", "*" : "%2A", "'" : "%27", "(" : "%28", ")" : "%29", ";" : "%3B", ":" : "%3A", "@" : "%40", "&" : "%26", "=" : "%3D", "+" : "2B", "$" : "%24", "," : "%2C", "/" : "%2F", "?" : "%3F", "%" : "%25", "#" : "%23", "[" : "%5B", "]" : "%5D" }; function handleURI(str) { var tmp = str; for(var i = 0; i < specialCharacters.length; i++) { if(tmp.indexOf(specialCharacters[i])!=-1) tmp = tmp.replace(specialCharacters[i], specialCharactersValues[specialCharacters[i]]); } return tmp; } function getStyle(el,styleProp) { var x = document.getElementById(el); if (x.currentStyle) var y = x.currentStyle[styleProp]; else if (window.getComputedStyle) var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); return y; } function transcriptStart() { if((!document.getElementById("transcript-field") && wgAction=="view") || (wgTitle.indexOf("(transcript)")==-1 && wgAction=="edit")) //check if it is a transcript article, otherwise jump out. return; if(wgAction=="view") { var tf = document.getElementById("transcript-field"); while(tf.firstChild) tf.removeChild(tf.firstChild); var activateText = document.createTextNode("Activate edit mode"); var activateAnchor = document.createElement("a"); activateAnchor.setAttribute("href", "javascript:activateTranscript();"); activateAnchor.appendChild(activateText); tf.appendChild(activateAnchor); giveTranscriptElementsId(); //Let's check if someone linked to a specific line in the transcript. var bookmark = location.hash; if(bookmark) { var bs = bookmark.split("-"); var line = document.getElementById("transline-" + bs[1]); currentTranscriptHl = line; var ypos = line.offsetTop - (getClientHeight()/2); line.style.backgroundColor = transcriptHlColour; if(bs[2]) { var lstart = parseInt(bs[1]); var lend = parseInt(bs[2]); if(lstart < lend) { for(var i = lstart+1; i<=lend; i++) { var tmp = document.getElementById("transline-" + i); if(tmp==null) break; tmp.style.backgroundColor = transcriptHlColour; currentTranscriptHlEnd = tmp; } if((currentTranscriptHlEnd.offsetTop - line.offsetTop + 50) > getClientHeight()) ypos = line.offsetTop - 50; else ypos = line.offsetTop + (currentTranscriptHlEnd.offsetTop - line.offsetTop)/2 - (getClientHeight()/2); } } window.scrollBy(0, ypos); } } else if(wgAction=="edit") { var bookmark = location.hash; if(bookmark.indexOf("-")==-1) return; var lineid = parseInt(bookmark.split("-")[1]) var findLine = 0; var fullContent = document.getElementById("wpTextbox1").firstChild.data.split("\n"); var inTemplate = false; var line = ""; var fontSize = parseInt(getStyle("wpTextbox1", "font-size")); if(!fontSize) fontSize = parseInt(getStyle("wpTextbox1", "fontSize")); var cWidth = parseInt(document.getElementById("wpTextbox1").offsetWidth); var fontWidth = fontSize/2 + 1; var lineLength = Math.floor(cWidth/fontWidth - 3 * fontWidth); var inBoxLine = 0; for(var i = 0; i < fullContent.length; i++) { var tmpline = fullContent[i]; if(tmpline.indexOf("}}")!=-1) { inTemplate = false; findLine--; } else if(tmpline.indexOf("{{")!=-1) { inTemplate = true; } if(!inTemplate) findLine++; if(findLine>lineid) break; inBoxLine += Math.floor(tmpline.length/lineLength) + 1; } //var cHeight = document.getElementById("wpTextbox1").offsetHeight; var ypos = Math.floor(inBoxLine * (fontSize + 2)); document.getElementById("wpTextbox1").scrollTop = ypos; } } addOnloadHook(transcriptStart); function giveTranscriptElementsId() { var c = document.getElementById("bodyContent"); var elementIndex = 0; var kids = c.childNodes; for(var i = 0; i < kids.length; i++) { var nt = kids[i].nodeType; if(nt!=1) continue; var tn = kids[i].tagName.toLowerCase(); if(tn=="dl" || (tn=="div" && hasClass(kids[i], "poem"))) { kids[i].setAttribute("id", "transline-" + elementIndex); elementIndex++; } } } function activateTranscript() { var te = document.getElementById("transcript-edit"); while(te.firstChild) te.removeChild(te.firstChild); var tf = document.getElementById("transcript-field"); while(tf.firstChild) tf.removeChild(tf.firstChild); var deactivateAnchor = document.createElement("a"); var deactivateText = document.createTextNode("Deactivate edit mode"); deactivateAnchor.setAttribute("href", "javascript:deactivateTranscript();"); deactivateAnchor.appendChild(deactivateText); var helpText = document.createTextNode("Double click any line to begin."); var div1 = document.createElement("div"); var div2 = document.createElement("div"); var p = document.createElement("p"); var div3 = document.createElement("div"); div1.setAttribute("class", "infoboxCentre"); div2.setAttribute("id", "transcript-lineedit"); div2.setAttribute("class", "infoboxCentre"); p.setAttribute("style", "font-weight: bold;"); div3.setAttribute("id", "transcript-linelink"); div1.appendChild(deactivateAnchor); p.appendChild(helpText); div2.appendChild(p); te.appendChild(div1); te.appendChild(div2); te.appendChild(div3); te.setAttribute("style", "display:block; position: fixed; top: " + (getClientHeight()/2) + "px; right: 10px;"); document.getElementById("bodyContent").addEventListener('click', transcriptLine, true); } function deactivateTranscript() { var te = document.getElementById("transcript-edit"); while(te.firstChild) te.removeChild(te.firstChild); var tf = document.getElementById("transcript-field"); te.style.display = "none"; var activateText = document.createTextNode("Activate edit mode"); var activateAnchor = document.createElement("a"); activateAnchor.setAttribute("href", "javascript:activateTranscript();"); activateAnchor.appendChild(activateText); tf.appendChild(activateAnchor); if(currentTranscriptHl!=null) { unHighlightLines(currentTranscriptHl.id.split("-")[1], true); currentTranscriptHl = null; currentTranscriptHlEnd = null; } writtenTranscriptLineLink = false; document.getElementById("bodyContent").removeEventListener('click', transcriptLine, true); } function unHighlightLines(start, several) { start = parseInt(start); if(!several) { document.getElementById("transline-" + start).style.background = "transparent"; document.getElementById("transline-" + start).style.backgroundColor = ""; } else { var i = start; while(1) { if(document.getElementById("transline-" + i)==null || document.getElementById("transline-" + i).style.backgroundColor=="") return; document.getElementById("transline-" + i).style.background = "transparent"; document.getElementById("transline-" + i).style.backgroundColor = ""; i++; } } } function getTranscriptElement(el) { if(el.id.indexOf("transline-")!=-1) return el; while(el.id.indexOf("transline-")==-1) { if(el.id=="bodyContent") return null; el = el.parentNode; } return el; } function transcriptLine(event) { if(!event) event = window.event; var el = getTranscriptElement(event.target); if(el==null) return; if(!transcriptHlSecondMode) { if((currentTranscriptTarget == el) && (currentTranscriptHl!=el)) { //Since we are here, it must be assumed this is the second time we clicked it. el.style.backgroundColor = transcriptHlColour; if(currentTranscriptHl) { unHighlightLines(currentTranscriptHl.id.split("-")[1], true); currentTranscriptHlEnd = null; } setTranscriptStatus("Work with this line or click another."); currentTranscriptHl = el; transcriptLineLink(); } else if(currentTranscriptTarget!=el) { currentTranscriptTarget = el; } } else { if((currentTranscriptTarget2 == el) && (currentTranscriptHlEnd!=el)) { startid = parseInt(currentTranscriptHl.id.split("-")[1]); endid = parseInt(el.id.split("-")[1]); unHighlightLines(startid+1, true); for(var i = startid+1; i<=endid; i++) document.getElementById("transline-" + i).style.backgroundColor = transcriptHlColour; currentTranscriptHlEnd = document.getElementById("transline-" + endid); transcriptLineLink(); } else if(currentTranscriptTarget2!=el) { currentTranscriptTarget2 = el; } } } function transcriptLineLink() { hlTop = parseInt(currentTranscriptHl.id.split("-")[1]); pageName = handleURI(wgPageName); if(!writtenTranscriptLineLink) { writtenTranscriptLineLink = true; var tll = document.getElementById("transcript-linelink"); var strong = document.createElement("strong"); var text1 = document.createTextNode("Link to this line:"); var text2 = document.createTextNode("Direct URL:"); var text3 = document.createTextNode("In other articles:"); var label1 = document.createElement("label"); var label2 = document.createElement("label"); label1.setAttribute("for", "transcript-directlinelink"); label1.setAttribute("style", "float: left; clear:left;"); label2.setAttribute("for", "transcript-articlelinelink") label2.setAttribute("style", "float: left; clear:left;"); var input1 = document.createElement("input"); var input2 = document.createElement("input"); input1.setAttribute("id", "transcript-directlinelink"); input1.setAttribute("size", "32"); input1.setAttribute("type", "text"); input1.setAttribute("value", wgServer + "/" + pageName + "#line-" + hlTop); input1.setAttribute("style", "float: left; clear:left; font-size: 0.85em; width: 240px;"); input1.setAttribute("onFocus", "this.select();"); input2.setAttribute("id", "transcript-articlelinelink"); input2.setAttribute("size", "32"); input2.setAttribute("type", "text"); input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "}}"); input2.setAttribute("style", "float: left; clear:left; font-size: 0.85em; width: 240px;"); input2.setAttribute("onFocus", "this.select();"); strong.appendChild(text1); label1.appendChild(text2); label2.appendChild(text3); tll.appendChild(strong); tll.appendChild(label1); tll.appendChild(input1); tll.appendChild(label2); tll.appendChild(input2); var tel = document.getElementById("transcript-lineedit"); var p1 = document.createElement("p"); var p2 = document.createElement("p"); var editAnchor = document.createElement("a"); var editText = document.createTextNode("Edit this line"); var multipleAnchor = document.createElement("a"); var multipleText = document.createTextNode("Highlight multiple lines"); editAnchor.setAttribute("href", "javascript:transcriptEditThisLine();"); multipleAnchor.setAttribute("href", "javascript:transcriptHlMultiple();"); multipleAnchor.setAttribute("id", "transcript-multiple"); editAnchor.appendChild(editText); multipleAnchor.appendChild(multipleText); p1.appendChild(editAnchor); p2.appendChild(multipleAnchor); tel.appendChild(p1); tel.appendChild(p2); } else { var input1 = document.getElementById("transcript-directlinelink"); var input2 = document.getElementById("transcript-articlelinelink"); if(!transcriptHlSecondMode) { input1.setAttribute("value", wgServer + "/" + pageName + "#line-" + hlTop); input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "}}"); } else { var hl2Top = parseInt(currentTranscriptHlEnd.id.split("-")[1]); input1.setAttribute("value", wgServer + "/" + pageName + "#line-" + hlTop + "-" + hl2Top); input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "|" + hl2Top + "}}"); } } } function setTranscriptStatus(msg) { document.getElementById("transcript-lineedit").firstChild.firstChild.data = msg; } function transcriptEditThisLine() { var lid = parseInt(currentTranscriptHl.id.split("-")[1]); var url = wgServer + "/index.php?title=" + wgPageName + "&action=edit#line-" + lid; location.href = url; } function transcriptHlMultiple() { if(!transcriptHlSecondMode) { setTranscriptStatus("Double click a line below the current one."); document.getElementById("transcript-multiple").firstChild.data = "Leave multiple highlight mode"; transcriptHlSecondMode = true; } else { setTranscriptStatus("Double click a line."); document.getElementById("transcript-multiple").firstChild.data = "Highlight multiple lines"; transcriptHlSecondMode = false; } } function getElementbyClass(rootobj, classname){ var temparray=new Array(); var inc=0; var rootlength=rootobj.length; for (i=0; i<rootlength; i++){ if (rootobj[i].className==classname) temparray[inc++]=rootobj[i]; } return temparray; } function randomise(optionsArray){ if(optionsArray.length == 0) { return; } return optionsArray[Math.floor(Math.random() * optionsArray.length)]; } function randomiseTitleCaptions(){ if(wgTitle == "Main Page") { var titleCaption = getElementbyClass(document.getElementsByTagName("p"), "titleCaption"); var d = new Date(); if(d.getDate() == 30 && d.getMonth() == 0) { var sphereAge =d.getFullYear()-2006; //TODO: update this before 2027 (sphereAge == 21) titleCaption[0].innerHTML = "What day is today? It's The Infosphere's "+ sphereAge +"th birthday!"; } else { var opt = new Array(); opt[0]="As seen on TV"; opt[1]="For external use only"; opt[2]="Deciphered from crop circles"; opt[3]="80% entertainment by volume"; opt[4]="As foretold by Nostradamus"; opt[5]="The proud result of prison labor"; opt[6]="Proudly made on Earth"; opt[7]="It just won't stay dead!"; opt[8]="Torn from tomorrow's headlines"; opt[9]="For the sophisticated shut-in"; opt[10]="Dancing space potatoes?<br/>You bet!"; opt[11]="A stern warning of things to come"; opt[12]="Penetrates even the thickest foil hat"; opt[13]="There will be a test"; opt[14]="A by-product of the TV industry"; opt[15]="Spoiler alert:<br/>Robots and whatnot"; if(d.getDate() == 1 && d.getMonth() == 0) { opt[16]="Happy New Year, naked weirdo!"; } titleCaption[0].innerHTML = randomise(opt); } } } addOnloadHook(randomiseTitleCaptions); function countdownTemplate(){ var counters = getElementbyClass(document.getElementsByTagName("span"), "countdown"); var today = new Date(); for (i=0; i<counters.length; i++){ var month = document.getElementById(counters[i].id+"_month").innerHTML; var date = document.getElementById(counters[i].id+"_date").innerHTML; var year = document.getElementById(counters[i].id+"_year").innerHTML; var endDate = new Date(); endDate.setFullYear(year, month - 1, date); var daysLeft = (Math.round((endDate.getTime() - today.getTime())/86400000)); counters[i].innerHTML = daysLeft; if ( daysLeft == 1 ) document.getElementById(counters[i].id+"_days").innerHTML = "day"; else document.getElementById(counters[i].id+"_days").innerHTML = "days"; } } addOnloadHook(countdownTemplate);