mourningdove/htdocs/js/s2edit/xlib.js

215 lines
5.9 KiB
JavaScript
Raw Permalink Normal View History

2026-05-24 01:03:05 +00:00
// 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);
}
}