215 lines
5.9 KiB
JavaScript
215 lines
5.9 KiB
JavaScript
|
|
// xGetElementById, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
||
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
||
|
|
|
||
|
|
var nxIE = navigator.userAgent && navigator.userAgent.indexOf('MSIE ') > -1 ?
|
||
|
|
1 : 0;
|
||
|
|
|
||
|
|
function xGetElementById(e)
|
||
|
|
{
|
||
|
|
if(typeof(e)!='string') return e;
|
||
|
|
if(document.getElementById) e=document.getElementById(e);
|
||
|
|
else if(document.all) e=document.all[e];
|
||
|
|
else e=null;
|
||
|
|
return e;
|
||
|
|
}
|
||
|
|
|
||
|
|
// xWinOpen, Copyright 2003-2005 Michael Foster (Cross-Browser.com)
|
||
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
||
|
|
|
||
|
|
// A simple alternative to xWindow.
|
||
|
|
|
||
|
|
var xChildWindow = null;
|
||
|
|
function xWinOpen(sUrl)
|
||
|
|
{
|
||
|
|
var features = "left=0,top=0,width=600,height=500,location=0,menubar=0," +
|
||
|
|
"resizable=1,scrollbars=1,status=0,toolbar=0";
|
||
|
|
if (xChildWindow && !xChildWindow.closed) {xChildWindow.location.href = sUrl;}
|
||
|
|
else {xChildWindow = window.open(sUrl, "myWinName", features);}
|
||
|
|
xChildWindow.focus();
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// xGetCookie, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
||
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
||
|
|
|
||
|
|
function xGetCookie(name)
|
||
|
|
{
|
||
|
|
var value=null, search=name+"=";
|
||
|
|
if (document.cookie.length > 0) {
|
||
|
|
var offset = document.cookie.indexOf(search);
|
||
|
|
if (offset != -1) {
|
||
|
|
offset += search.length;
|
||
|
|
var end = document.cookie.indexOf(";", offset);
|
||
|
|
if (end == -1) end = document.cookie.length;
|
||
|
|
value = unescape(document.cookie.substring(offset, end));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
|
||
|
|
// xGetCookie, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
||
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
||
|
|
|
||
|
|
function xGetCookie(name)
|
||
|
|
{
|
||
|
|
var value=null, search=name+"=";
|
||
|
|
if (document.cookie.length > 0) {
|
||
|
|
var offset = document.cookie.indexOf(search);
|
||
|
|
if (offset != -1) {
|
||
|
|
offset += search.length;
|
||
|
|
var end = document.cookie.indexOf(";", offset);
|
||
|
|
if (end == -1) end = document.cookie.length;
|
||
|
|
value = unescape(document.cookie.substring(offset, end));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return value;
|
||
|
|
}
|
||
|
|
|
||
|
|
// xSetCookie, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
||
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
||
|
|
|
||
|
|
function xSetCookie(name, value, expire, path)
|
||
|
|
{
|
||
|
|
document.cookie = name + "=" + escape(value) +
|
||
|
|
((!expire) ? "" : ("; expires=" + expire.toGMTString())) +
|
||
|
|
"; path=" + ((!path) ? "/" : path);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ---------------------------------------------------------------------------
|
||
|
|
// Original code follows
|
||
|
|
// ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
// This does NOT scroll the object to the position! See nxscrollObject()
|
||
|
|
// below for that.
|
||
|
|
function nxpositionCursor(obj, pos)
|
||
|
|
{
|
||
|
|
if (nxIE) {
|
||
|
|
var range = obj.createTextRange();
|
||
|
|
range.collapse(true);
|
||
|
|
range.moveEnd('character', pos);
|
||
|
|
range.moveStart('character', pos);
|
||
|
|
range.select(); // TODO: test this
|
||
|
|
} else {
|
||
|
|
obj.selectionStart = obj.selectionEnd = pos;
|
||
|
|
obj.focus();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function nxgetPositionCursor(obj)
|
||
|
|
{
|
||
|
|
if ('selectionStart' in obj) {
|
||
|
|
return obj.selectionStart;
|
||
|
|
}
|
||
|
|
if (document.selection && document.selection.createRange) {
|
||
|
|
obj.focus();
|
||
|
|
var range = document.selection.createRange();
|
||
|
|
return 0 - range.duplicate().moveStart('character', -100000);
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Scrolls the object to the given line out of the given total number of lines.
|
||
|
|
// The total number of lines must be supplied for the calculation to be
|
||
|
|
// correct.
|
||
|
|
function nxscrollObject(obj, line, total)
|
||
|
|
{
|
||
|
|
if (total == 0)
|
||
|
|
obj.scrollTop = 0;
|
||
|
|
else
|
||
|
|
obj.scrollTop = ((line - 1) / total) * obj.scrollHeight;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Retrieves the last character typed.
|
||
|
|
function nxgetLastChar(obj)
|
||
|
|
{
|
||
|
|
if (window.event && window.event.keyCode)
|
||
|
|
return window.event.keyCode;
|
||
|
|
|
||
|
|
if (nxIE) {
|
||
|
|
var range = document.selection.createRange();
|
||
|
|
range.moveStart('character', -1);
|
||
|
|
return range.text.charCodeAt(0);
|
||
|
|
} else {
|
||
|
|
var range = document.createRange();
|
||
|
|
range.setStart(obj, obj.selectionEnd - 1);
|
||
|
|
range.setEnd(obj, obj.selectionEnd);
|
||
|
|
return range.toString().charCodeAt(0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Retrieves the last n characters typed.
|
||
|
|
function nxgetLastChars(obj, n)
|
||
|
|
{
|
||
|
|
if (nxIE) {
|
||
|
|
var range = document.selection.createRange();
|
||
|
|
range.moveStart('character', -n);
|
||
|
|
return range.text;
|
||
|
|
} else {
|
||
|
|
return obj.value.substring(obj.selectionStart - n, obj.selectionStart);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Retrieves the line *before* the insertion point (or "" if on the first line).
|
||
|
|
function nxgetPrevLine(obj)
|
||
|
|
{
|
||
|
|
var prefix;
|
||
|
|
if (nxIE) {
|
||
|
|
var range = document.selection.createRange();
|
||
|
|
range.moveStart('textarea', 0);
|
||
|
|
prefix = range.text;
|
||
|
|
} else if (obj.selectionStart != null) {
|
||
|
|
prefix = obj.value.substring(0, obj.selectionStart);
|
||
|
|
}
|
||
|
|
|
||
|
|
/*var end = prefix.lastIndexOf("\n");
|
||
|
|
if (end > 0) {
|
||
|
|
var start = prefix.substring(0, end).lastIndexOf("\n");
|
||
|
|
if (end > 0)
|
||
|
|
return prefix.substring(start + 1, end);
|
||
|
|
else
|
||
|
|
return "";
|
||
|
|
} else
|
||
|
|
return ""; */
|
||
|
|
|
||
|
|
var m = prefix.match(/([^\n]*)\n[^\n]*$/);
|
||
|
|
if (m)
|
||
|
|
return m[1];
|
||
|
|
else
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
|
||
|
|
// Inserts the given text at the insertion point.
|
||
|
|
function nxinsertText(obj, text)
|
||
|
|
{
|
||
|
|
if (nxIE) {
|
||
|
|
obj.focus();
|
||
|
|
document.selection.createRange().text += text;
|
||
|
|
} else if (obj.selectionEnd != null) {
|
||
|
|
var oend = obj.selectionEnd;
|
||
|
|
var otop = obj.scrollTop;
|
||
|
|
|
||
|
|
var val = obj.value;
|
||
|
|
obj.value = val.substring(0, obj.selectionEnd) + text +
|
||
|
|
val.substring(obj.selectionEnd);
|
||
|
|
|
||
|
|
obj.setSelectionRange(oend + text.length, oend + text.length);
|
||
|
|
obj.scrollTop = otop;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Replaces the last n characters typed with the given text.
|
||
|
|
function nxreplaceLastChars(obj, n, text)
|
||
|
|
{
|
||
|
|
if (nxIE) {
|
||
|
|
obj.focus();
|
||
|
|
var range = document.selection.createRange();
|
||
|
|
range.moveStart('character', -n);
|
||
|
|
range.text = text;
|
||
|
|
} else if (obj.selectionEnd != null) {
|
||
|
|
var val = obj.value;
|
||
|
|
obj.value = val.substring(0, obj.selectionEnd - n) + text +
|
||
|
|
val.substring(obj.selectionEnd + 1);
|
||
|
|
}
|
||
|
|
}
|