instiki/public/javascripts/page_helper.js
Jacques Distler 6be9c5ca6a More Robust mactionWorkarounds
The previous version was OK with itex2MML
output. But this one will not get tripped up
by extraneous text nodes.
2009-11-08 02:27:38 -06:00

60 lines
2.2 KiB
JavaScript

/*
* Based on Simon Willison's blockquotes.js
* http://simon.incutio.com/archive/2002/12/20/#blockquoteCitations
*/
function extractBlockquoteCitations() {
var quotes = document.getElementsByTagName('blockquote');
for (i = 0; i < quotes.length; i++) {
var cite = quotes[i].getAttribute('cite');
if (cite && cite != '') {
var newlink = document.createElement('a');
newlink.setAttribute('href', cite);
newlink.setAttribute('title', cite);
newlink.appendChild(document.createTextNode('#'));
var newspan = document.createElement('span');
newspan.setAttribute('class','blockquotesource');
newspan.appendChild(newlink);
quotes[i].lastChild.previousSibling.appendChild(newspan);
}
}
}
function fixRunIn() {
// work around lack of gecko support for display:run-in
var re = /^num_|\s+num_|^un_|\s+un_|proof/;
$$('div > h6').each(function(element) {
if(re.test($(element.parentNode).className)) {
var new_span = new Element('span').update(element.textContent);
new_span.addClassName('theorem_label');
var next_el = element.next().firstChild;
next_el.parentNode.insertBefore(new_span, next_el);
var period = new Element('span').update('. ');
next_el.parentNode.insertBefore(period, next_el);
element.remove();
}
});
// add tombstone to proof, since gecko doesn't support :last-child properly
$$('div.proof').each(function(element) {
var l = element.childElements().length -1;
var span = new Element('span').update('\u00a0\u00a0\u25ae');
element.childElements()[l].insert(span);
});
}
function mactionWorkarounds() {
$$('maction[actiontype="tooltip"]').each( function(mtool){
Element.writeAttribute(mtool, 'title',
Element.firstDescendant(mtool).nextSibling.firstChild.data);
});
$$('maction[actiontype="statusline"]').each( function(mstatus){
var v = Element.firstDescendant(mstatus).nextSibling.firstChild.data;
Event.observe(mstatus, 'mouseover', function(){window.status = v;});
Event.observe(mstatus, 'mouseout', function(){window.status = '';});
});
}
window.onload = function (){
extractBlockquoteCitations();
fixRunIn();
mactionWorkarounds();
};