Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
m (Ah of course, the < was treating it as strings as well.) |
(Now making the box more intelligent. Implementing the two functions later.) |
||
Line 130: | Line 130: | ||
} | } | ||
if((currentTranscriptHlEnd.offsetTop - line.offsetTop + 50) > getClientHeight()) | if((currentTranscriptHlEnd.offsetTop - line.offsetTop + 50) > getClientHeight()) | ||
ypos = line.offsetTop | ypos = line.offsetTop - 50; | ||
else | else | ||
ypos = line.offsetTop + (currentTranscriptHlEnd.offsetTop - line.offsetTop)/2 - (getClientHeight()/2); | ypos = line.offsetTop + (currentTranscriptHlEnd.offsetTop - line.offsetTop)/2 - (getClientHeight()/2); | ||
Line 171: | Line 171: | ||
var div1 = document.createElement("div"); | var div1 = document.createElement("div"); | ||
var div2 = document.createElement("div"); | var div2 = document.createElement("div"); | ||
var p = document.createElement("p"); | |||
var div3 = document.createElement("div"); | var div3 = document.createElement("div"); | ||
div1.setAttribute("class", "infoboxCentre"); | div1.setAttribute("class", "infoboxCentre"); | ||
div2.setAttribute("id", "transcript-lineedit"); | div2.setAttribute("id", "transcript-lineedit"); | ||
div2.setAttribute("class", "infoboxCentre"); | div2.setAttribute("class", "infoboxCentre"); | ||
p.setAttribute("style", "font-weight: bold;"); | |||
div3.setAttribute("id", "transcript-linelink"); | div3.setAttribute("id", "transcript-linelink"); | ||
div1.appendChild(deactivateAnchor); | div1.appendChild(deactivateAnchor); | ||
div2.appendChild( | p.appendChild(helpText); | ||
div2.appendChild(p); | |||
te.appendChild(div1); | te.appendChild(div1); | ||
te.appendChild(div2); | te.appendChild(div2); | ||
Line 250: | Line 252: | ||
currentTranscriptHl.style.backgroundColor = ""; | currentTranscriptHl.style.backgroundColor = ""; | ||
} | } | ||
document.getElementById("transcript-lineedit").firstChild.data = "Work with this line or click another."; | |||
currentTranscriptHl = el; | currentTranscriptHl = el; | ||
transcriptLineLink(); | transcriptLineLink(); | ||
Line 294: | Line 297: | ||
tll.appendChild(label2); | tll.appendChild(label2); | ||
tll.appendChild(input2); | 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();"); | |||
editAnchor.appendChild(editText); | |||
multipleAnchor.appendChild(multipleText); | |||
p1.appendChild(editAnchor); | |||
p2.appendChild(multipleAnchor); | |||
tel.appendChild(p1); | |||
tel.appendChild(p2); | |||
} else { | } else { | ||
var input1 = document.getElementById("transcript-directlinelink"); | var input1 = document.getElementById("transcript-directlinelink"); | ||
Line 300: | Line 319: | ||
input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "}}"); | input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "}}"); | ||
} | } | ||
} | |||
function transcriptEditThisLine() { | |||
//Not yet implemented. | |||
document.getElementById("transcript-lineedit").firstChild.data = "This function is not yet implemented."; | |||
} | |||
function transcriptHlMultiple() { | |||
//Not yet implemented. | |||
document.getElementById("transcript-lineedit").firstChild.data = "This function is not yet implemented."; | |||
} | } |
Revision as of 02:21, 6 April 2008
/* Any JavaScript here will be loaded for all users on every page load. */ var reasonCaptionShow = "Show reason"; var reasonCaptionHide = "Hide reason"; 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 columnAreaImage(){ var divS; var divC; if (document.getElementById ) { divS = document.getElementById("column-content"); divC = document.getElementById("content"); } else if (document.all ) { divS = document.all["column-content"]; divC = document.all["content"]; } else { return; } if ( divS && divS.style ){ var divSHval; if (divS.style.pixelHeight) { divSHval= divS.style.pixelHeight; } else { divSHval= divS.offsetHeight; } if(Number(divSHval) >1136){ //1136=768(number bigger than background image and side buttons)+imgheight(370) divS.style.backgroundImage = "url(/images/0/02/Infosphere_lower_Background.png)"; divS.style.backgroundPosition = "bottom left"; divS.style.backgroundRepeat = "no-repeat"; if(hasClass(document.body, "ns-8")) return; if(divC && divC.style ) { //Uhm... apparently this is working now! Woo! divC.style.backgroundImage = "url(/images/4/44/Infosphere_content_Background.png)"; divC.style.backgroundPosition = "bottom left"; divC.style.backgroundRepeat = "no-repeat"; } } } } addOnloadHook(columnAreaImage); function getClientHeight() { return document.documentElement.clientHeight; } //The following is for transcript articles. var currentTranscriptTarget = null; var currentTranscriptHl = null; var currentTranscriptHlEnd = null; var writtenTranscriptLineLink = false; var transcriptHlColour = "#888888"; function transcriptStart() { if(!document.getElementById("transcript-field")) //check if it is a transcript article, otherwise jump out. return; 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); } } 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) { currentTranscriptHl.style.background = "transparent"; currentTranscriptHl.style.backgroundColor = "#ffffff"; currentTranscriptHl = null; } document.getElementById("bodyContent").removeEventListener('click', transcriptLine, true); } function getTranscriptElement(el) { var tn = el.tagName.toLowerCase(); if(tn=="dl" || (tn=="div" && hasClass(el, "poem"))) return el; var ptn = el.parentNode.tagName.toLowerCase(); switch(tn) { case "i": case "em": if(ptn=="dd") return el.parentNode.parentNode; if(ptn=="p") return el.parentNode.parentNode; case "dd": return el.parentNode; case "b": case "strong": if(ptn=="p") return el.parentNode.parentNode; if(ptn=="i") return el.parentNode.parentNode.parentNode; case "dl": return el.parentNode; case "p": return el.parentNode; default: return null; } } function transcriptLine(event) { if(!event) event = window.event; var el = getTranscriptElement(event.target); if(el==null) return; if((currentTranscriptTarget == el) && (currentTranscriptHl!=el)) { //Since we are here, it must be assumed this is the second time we clicked it. if(el.tagName.toLowerCase()=="i") el = el.parentNode.parentNode; if(el.tagName.toLowerCase()=="dd") el = el.parentNode; el.style.backgroundColor = transcriptHlColour; if(currentTranscriptHl) { currentTranscriptHl.style.background = "transparent"; currentTranscriptHl.style.backgroundColor = ""; } document.getElementById("transcript-lineedit").firstChild.data = "Work with this line or click another."; currentTranscriptHl = el; transcriptLineLink(); } else if(currentTranscriptTarget!=el) { currentTranscriptTarget = el; } } function transcriptLineLink() { hlTop = parseInt(currentTranscriptHl.id.split("-")[1]); 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 + "/" + wgPageName + "#link-" + 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();"); 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"); input1.setAttribute("value", wgServer + "/" + wgPageName + "#link-" + hlTop); input2.setAttribute("value", "{{transline|" + wgTitle.split(" (")[0] + "|" + hlTop + "}}"); } } function transcriptEditThisLine() { //Not yet implemented. document.getElementById("transcript-lineedit").firstChild.data = "This function is not yet implemented."; } function transcriptHlMultiple() { //Not yet implemented. document.getElementById("transcript-lineedit").firstChild.data = "This function is not yet implemented."; }