6be9c5ca6a
The previous version was OK with itex2MML output. But this one will not get tripped up by extraneous text nodes.
60 lines
2.2 KiB
JavaScript
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();
|
|
};
|