147 lines
4.6 KiB
JavaScript
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);
|