c88a1d43dc
Handle the 'Change page name' part of the form more intelligently.
110 lines
4.1 KiB
JavaScript
110 lines
4.1 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 = '';});
|
|
});
|
|
}
|
|
|
|
function updateSize(elt, w, h) {
|
|
// adjust to the size of the user's browser area.
|
|
// w and h are the original, unadjusted, width and height per row/column
|
|
var parentheight = document.viewport.getHeight() - $('pageName').getHeight()
|
|
- $('editFormButtons').getHeight() - $('hidebutton').getHeight();
|
|
var parentwidth = $('Content').getWidth();
|
|
var f = $('MarkupHelp');
|
|
if (f.visible()) { parentwidth = parentwidth - f.getWidth() - 20 }
|
|
var changename = $('alter_title');
|
|
if (changename) {
|
|
parentheight = parentheight - changename.parentNode.getHeight()-2*h;
|
|
}
|
|
elt.writeAttribute({'cols': Math.floor(parentwidth/w) - 1,
|
|
'rows': Math.floor(parentheight/h) - 4 });
|
|
elt.setStyle({Width: parentwidth, Height: parentheight});
|
|
}
|
|
|
|
function resizeableTextarea() {
|
|
//make the textarea resize to fit available space
|
|
var f = $('MarkupHelp');
|
|
if (f) {
|
|
var hidebutton = new Element('input', {id:'hidebutton', type:'button', value: 'Hide markup help'});
|
|
f.insert({before: hidebutton});
|
|
}
|
|
$$('textarea#content').each( function(textarea) {
|
|
var w = textarea.getWidth()/textarea.getAttribute('cols');
|
|
var h = textarea.getStyle('lineHeight').replace(/(\d*)px/, "$1");
|
|
var changename = $('alter_title');
|
|
if (changename) {
|
|
Event.observe(changename.parentNode, 'change', function() {
|
|
updateSize(textarea, w, h);
|
|
});
|
|
}
|
|
Event.observe(hidebutton, 'click', function(){
|
|
if (f.visible()) {
|
|
f.hide();
|
|
hidebutton.writeAttribute({value: 'Show markup help'});
|
|
updateSize(textarea, w, h)
|
|
} else {
|
|
f.show();
|
|
hidebutton.writeAttribute({value: 'Hide markup help'});
|
|
updateSize(textarea, w, h)
|
|
}
|
|
});
|
|
Event.observe(window, 'resize', function(){ updateSize(textarea, w, h) });
|
|
updateSize(textarea, w, h);
|
|
});
|
|
}
|
|
|
|
window.onload = function (){
|
|
extractBlockquoteCitations();
|
|
fixRunIn();
|
|
mactionWorkarounds();
|
|
resizeableTextarea();
|
|
};
|