wiki-archive/twiki/pub/TWiki/TWikiJavascripts/twiki_edit.js

147 lines
4.6 KiB
JavaScript

var toShow = new Array();
var toHide = new Array();
var COOKIE_PREFIX = "PatternEdit";
var COOKIE_EXPIRES = 365; // days
var EDITBOX_ID = "topic";
var SIGNATURE_BOX_ID = "sig";
var EDITBOX_HOLDER_ID = "formHolder";
// edit box rows
var EDITBOX_COOKIE_ROWS_ID = "TextareaRows";
var EDITBOX_CHANGE_STEP_SIZE = 4;
var EDITBOX_MIN_ROWCOUNT = 4;
// edit box font style
var EDITBOX_COOKIE_FONTSTYLE_ID = "TextareaFontStyle";
var EDITBOX_FONTSTYLE_MONO = "mono";
var EDITBOX_FONTSTYLE_PROPORTIONAL = "proportional";
var EDITBOX_FONTSTYLE_MONO_STYLE = "twikiEditboxStyleMono";
var EDITBOX_FONTSTYLE_PROPORTIONAL_STYLE = "twikiEditboxStyleProportional";
var EDITBOX_COOKIE_FONTSTYLE_ID = "TextareaFontstyle";
function initForm() {
try { document.main.text.focus(); } catch (er) {}
initTextAreaHeight();
initTextAreaFontStyle();
unhideTextArea();
var i, ilen = toShow.length;
var elem;
for (i = 0; i < ilen; ++i) {
if (dom) {
elem = document.getElementById(toShow[i]);
if (elem) elem.style.display="inline";
} else if (ie4) {
document.all[toShow[i]].style.display="inline";
} else if (ns4) {
document.layers[toShow[i]].style.display="inline";
}
}
ilen = toHide.length;
for ( i = 0; i < toHide.length; ++i) {
if (dom) {
elem = document.getElementById(toHide[i]);
if (elem) elem.style.display="none";
} else if (ie4) {
document.all[toHide[i]].style.display="none";
} else if (ns4) {
document.layers[toHide[i]].style.display="none";
}
}
}
/**
Sets the height of the edit box to height read from cookie.
*/
function initTextAreaHeight() {
var cookie = readCookie(COOKIE_PREFIX + EDITBOX_COOKIE_ROWS_ID);
if (!cookie) return;
setEditBoxHeight( parseInt(cookie) );
}
/**
Sets the font style (monospace or proportional space) of the edit box to style read from cookie.
*/
function initTextAreaFontStyle() {
var cookie = readCookie(COOKIE_PREFIX + EDITBOX_COOKIE_FONTSTYLE_ID);
if (!cookie) return;
setEditBoxFontStyle( cookie );
}
/**
Now that all edit box properties have been set, the hidden text area holder may unhide.
*/
function unhideTextArea() {
var elem = document.getElementById(EDITBOX_HOLDER_ID);
if (elem) elem.style.display = "block";
}
/**
Disables the use of ESCAPE in the edit box, because some browsers will interpret this as cancel and will remove all changes.
*/
function handleKeyDown(e) {
if (!e) e = window.event;
var code;
if (e.keyCode) code = e.keyCode;
if (code==27) return false;
return true;
}
function checkAll( theButton, theButtonOffset, theNum, theCheck ) {
// find button element index
var i, j = 0;
for (i = 0; i <= document.main.length; ++i) {
if( theButton == document.main.elements[i] ) {
j = i;
break;
}
}
// set/clear all checkboxes
var last = j+theButtonOffset+theNum;
for(i = last-theNum; i < last; ++i) {
document.main.elements[i].checked = theCheck;
}
}
/**
Changes the height of the editbox textarea.
param inDirection : -1 (decrease) or 1 (increase).
If the new height is smaller than EDITBOX_MIN_ROWCOUNT the height will become EDITBOX_MIN_ROWCOUNT.
Each change is written to a cookie.
*/
function changeEditBox(inDirection) {
var rowCount = document.getElementById(EDITBOX_ID).rows;
rowCount += (inDirection * EDITBOX_CHANGE_STEP_SIZE);
rowCount = (rowCount < EDITBOX_MIN_ROWCOUNT) ? EDITBOX_MIN_ROWCOUNT : rowCount;
setEditBoxHeight(rowCount);
writeCookie(COOKIE_PREFIX + EDITBOX_COOKIE_ROWS_ID, rowCount, COOKIE_EXPIRES);
return false;
}
/**
Sets the height of the exit box text area.
param inRowCount: the number of rows
*/
function setEditBoxHeight(inRowCount) {
document.getElementById(EDITBOX_ID).rows = inRowCount;
}
/**
Sets the font style of the edit box and the signature box. The change is written to a cookie.
param inFontStyle: either EDITBOX_FONTSTYLE_MONO or EDITBOX_FONTSTYLE_PROPORTIONAL
*/
function setEditBoxFontStyle(inFontStyle) {
if (inFontStyle == EDITBOX_FONTSTYLE_MONO) {
replaceClass(document.getElementById(EDITBOX_ID), EDITBOX_FONTSTYLE_PROPORTIONAL_STYLE, EDITBOX_FONTSTYLE_MONO_STYLE);
replaceClass(document.getElementById(SIGNATURE_BOX_ID), EDITBOX_FONTSTYLE_PROPORTIONAL_STYLE, EDITBOX_FONTSTYLE_MONO_STYLE);
writeCookie(COOKIE_PREFIX + EDITBOX_COOKIE_FONTSTYLE_ID, inFontStyle, COOKIE_EXPIRES);
return;
}
if (inFontStyle == EDITBOX_FONTSTYLE_PROPORTIONAL) {
replaceClass(document.getElementById(EDITBOX_ID), EDITBOX_FONTSTYLE_MONO_STYLE, EDITBOX_FONTSTYLE_PROPORTIONAL_STYLE);
replaceClass(document.getElementById(SIGNATURE_BOX_ID), EDITBOX_FONTSTYLE_MONO_STYLE, EDITBOX_FONTSTYLE_PROPORTIONAL_STYLE);
writeCookie(COOKIE_PREFIX + EDITBOX_COOKIE_FONTSTYLE_ID, inFontStyle, COOKIE_EXPIRES);
return;
}
}
addLoadEvent(initForm);