librenms-librenms/html/js/Bs_Misc.lib.js
Adam Amstrong 79ed35214c bs js
git-svn-id: http://www.observium.org/svn/observer/trunk@2610 61d68cd4-352d-0410-923a-c4978735b2b8
2011-09-29 15:52:24 +00:00

213 lines
11 KiB
JavaScript

var ie = document.all != null;var moz = !ie && document.getElementById != null && document.layers == null;function bs_isNull(theVar) {
if (typeof(theVar) == 'undefined') return true;if (theVar == null) return true;return false;}
function bs_isObject(theVar) {
ret = false;if (typeof(theVar) == 'object') {
ret = !bs_isNull(theVar);}
return ret;}
function bs_isEmpty(theVar) {
if (bs_isNull(theVar)) return true;if (theVar == '') return true;return false;}
function bs_typeOf(theVar) {
ret = 'undefined';switch (typeof(theVar)) {
case 'boolean': ret = 'boolean'; break;case 'number': ret = 'number'; break;case 'string': ret = 'string'; break;case 'function': ret = 'function'; break;case 'object':
if (bs_isNull(theVar)) {
ret = 'null';break;}
if (theVar.concat && theVar.join && theVar.sort && theVar.pop) {
ret = 'array';break;}
break;case 'undefined':
default:
ret = 'undefined';}
return ret;}
function bs_arrayMerge(obj1, obj2) {
if (!bs_isObject(obj1) || !bs_isObject(obj2)) return false;for (var key in obj2) {obj1[key] = obj2[key];}
return obj1;}
function bs_arrayFlip(aArray) {
var aHash = new Object();type = bs_typeOf(aArray);if (type == 'array') {
for (var i=0; i<aArray.length; i++) {
aHash[aArray[i]] = true;}
} else if (type == 'string') {
if (aArray != '') {
aHash[aArray] = true;}
}
return aHash;}
function queryStringToHash(queryString) {
if (typeof(queryString) == 'undefined') {
var queryString = window.location.search;}
var ret = new Array;if (bs_isEmpty(queryString)) return ret;queryString = queryString.substr(1);if (bs_isEmpty(queryString)) return ret;var junks = queryString.split('&');for (var i=0; i<junks.length; i++) {
var x = junks[i].split('=');if (x.length == 2) {
ret[x[0]] = x[1];} else {
ret[x[0]] = '';}
}
return ret;}
function dump(theVar, doReturn, showFunctions, _out, _indent, _numCall) {
if (!_indent) {
_indent = ' ';_bsDumpOverallNumCall = 1;} else {
_indent += ' ';_bsDumpOverallNumCall++;}
if (_bsDumpOverallNumCall < 8) {
if (_out) {
var isInternal = true;} else {
_out = '';_numCall = 1;}
var goOn = true;if (_numCall > 10) {
goOn = false;if (!doReturn) {
goOn = confirm("There have been 10 recursive calls so far. Maybe you have an endless loop. Do you want to continue?");}
if (!goOn) {
_out += _indent + "error/warning: nesting levels too deep (>10 times)!\n";} else {
_numCall = 0;}
}
if (goOn) {
switch (typeof(theVar)) {
case 'object':
for (var key in theVar) {
switch (typeof(theVar[key])) {
case 'function':
if (typeof(showFunctions) == 'boolean') {
if (showFunctions) {
_out += _indent + 'function "' + key + '" => ' + theVar[key] + "\n";} else {
_out += _indent + 'function "' + key + "\n";}
} else {
if (showFunctions == 2) {
_out += _indent + 'function "' + key + '" => ' + theVar[key] + "\n";} else if (showFunctions == 1) {
_out += _indent + 'function "' + key + "\n";} else {
}
}
break;case 'undefined':
break;case 'object':
_out += _indent + key;if (theVar[key] instanceof Array) {
_out += ' (Array) => \n';} else if (theVar[key] instanceof Date) {
_out += ' (Date) => '+ theVar[key] +'\n';} else{
_out += ' (Object) => \n';}
_out = dump(theVar[key], doReturn, showFunctions, _out, _indent + " ", _numCall+1);break;case 'number':
if (theVar instanceof Date) alert('date');default:
_out += _indent + typeof(theVar[key]) + ' "' + key + '" => ' + theVar[key] + "\n";}
}
break;default:
_out += _indent + typeof(theVar) + ' => ' + theVar + "\n";}
}
}
if (isInternal || doReturn) {
return _out;} else {
alert(_out);return;}
}
function Position(x, y) {
this.x = x;this.y = y;};function getAbsolutePos(el, stopIfAbsolute) {
if (bs_isNull(el)) {
var res = new Position(0, 0);return res;}
var res = new Position(el.offsetLeft, el.offsetTop);if (el.offsetParent) {
if ((stopIfAbsolute != true ) || ((el.offsetParent.currentStyle.position != 'absolute') && (el.offsetParent.currentStyle.position != 'relative') && (el.offsetParent.currentStyle.overflow != 'auto') && (el.offsetParent.currentStyle.overflow != 'scroll'))) {
var tmp = getAbsolutePos(el.offsetParent, stopIfAbsolute);res.x += tmp.x;res.y += tmp.y;}
}
return res;};if ("undefined" != typeof(HTMLElement)) {
if ("undefined" == typeof(HTMLElement.insertAdjacentElement)) {
HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode) {
switch(where){
case 'beforeBegin':
this.parentNode.insertBefore(parsedNode,this)
break;case 'afterBegin':
this.insertBefore(parsedNode,this.firstChild);break;case 'beforeEnd':
this.appendChild(parsedNode);break;case 'afterEnd':
if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);else this.parentNode.appendChild(parsedNode);break;}
}
}
}
if (moz) {
extendEventObject();emulateAttachEvent();emulateEventHandlers(["click", "dblclick", "mouseover", "mouseout",
"mousedown", "mouseup", "mousemove",
"keydown", "keypress", "keyup"]);emulateCurrentStyle(["left", "right", "top", "bottom", "width", "height"]);emulateHTMLModel();Event.LEFT = 1;Event.MIDDLE = 2;Event.RIGHT = 3;}
else {
Event = {};Event.LEFT = 1;Event.MIDDLE = 4;Event.RIGHT = 2;}
function extendEventObject() {
Event.prototype.__defineSetter__("returnValue", function (b) {
if (!b) this.preventDefault();return b;});Event.prototype.__defineSetter__("cancelBubble", function (b) {
if (b) this.stopPropagation();return b;});Event.prototype.__defineGetter__("srcElement", function () {
var node = this.target;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("fromElement", function () {
var node;if (this.type == "mouseover")
node = this.relatedTarget;else if (this.type == "mouseout")
node = this.target;if (!node) return;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("toElement", function () {
var node;if (this.type == "mouseout")
node = this.relatedTarget;else if (this.type == "mouseover")
node = this.target;if (!node) return;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("offsetX", function () {
return this.layerX;});Event.prototype.__defineGetter__("offsetY", function () {
return this.layerY;});}
function emulateAttachEvent() {
HTMLDocument.prototype.attachEvent =
HTMLElement.prototype.attachEvent = function (sType, fHandler) {
var shortTypeName = sType.replace(/on/, "");
fHandler._ieEmuEventHandler = function (e) {
window.event = e;return fHandler();};this.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);};HTMLDocument.prototype.detachEvent =
HTMLElement.prototype.detachEvent = function (sType, fHandler) {
var shortTypeName = sType.replace(/on/, "");
if (typeof fHandler._ieEmuEventHandler == "function")
this.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);else
this.removeEventListener(shortTypeName, fHandler, true);};}
function emulateEventHandlers(eventNames) {
for (var i = 0; i < eventNames.length; i++) {
document.addEventListener(eventNames[i], function (e) {
window.event = e;}, true);}
}
function emulateAllModel() {
var allGetter = function () {
var a = this.getElementsByTagName("*");var node = this;a.tags = function (sTagName) {
return node.getElementsByTagName(sTagName);};return a;};HTMLDocument.prototype.__defineGetter__("all", allGetter);HTMLElement.prototype.__defineGetter__("all", allGetter);}
function extendElementModel() {
HTMLElement.prototype.__defineGetter__("parentElement", function () {
if (this.parentNode == this.ownerDocument) return null;return this.parentNode;});HTMLElement.prototype.__defineGetter__("children", function () {
var tmp = [];var j = 0;var n;for (var i = 0; i < this.childNodes.length; i++) {
n = this.childNodes[i];if (n.nodeType == 1) {
tmp[j++] = n;if (n.name) {
if (!tmp[n.name])
tmp[n.name] = [];tmp[n.name][tmp[n.name].length] = n;}
if (n.id)
tmp[n.id] = n
}
}
return tmp;});HTMLElement.prototype.contains = function (oEl) {
if (oEl == this) return true;if (oEl == null) return false;return this.contains(oEl.parentNode);};}
function emulateCurrentStyle(properties) {
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
var cs = {};var el = this;for (var i = 0; i < properties.length; i++) {
cs.__defineGetter__(properties[i], encapsulateObjects(el, properties[i]));}
return cs;});}
function encapsulateObjects(el, sProperty) {
return function () {
return document.defaultView.getComputedStyle(el, null).getPropertyValue(sProperty);};}
function emulateHTMLModel() {
function convertTextToHTML(s) {
s = s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<BR>");
while (/\s\s/.test(s))
s = s.replace(/\s\s/, "&nbsp; ");
return s.replace(/\s/g, " ");
}
HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
var df;var r = this.ownerDocument.createRange();switch (String(sWhere).toLowerCase()) {
case "beforebegin":
r.setStartBefore(this);df = r.createContextualFragment(sHTML);this.parentNode.insertBefore(df, this);break;case "afterbegin":
r.selectNodeContents(this);r.collapse(true);df = r.createContextualFragment(sHTML);this.insertBefore(df, this.firstChild);break;case "beforeend":
r.selectNodeContents(this);r.collapse(false);df = r.createContextualFragment(sHTML);this.appendChild(df);break;case "afterend":
r.setStartAfter(this);df = r.createContextualFragment(sHTML);this.parentNode.insertBefore(df, this.nextSibling);break;}
};HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
var r = this.ownerDocument.createRange();r.setStartBefore(this);var df = r.createContextualFragment(sHTML);this.parentNode.replaceChild(df, this);return sHTML;});HTMLElement.prototype.__defineGetter__("canHaveChildren", function () {
switch (this.tagName) {
case "AREA":
case "BASE":
case "BASEFONT":
case "COL":
case "FRAME":
case "HR":
case "IMG":
case "BR":
case "INPUT":
case "ISINDEX":
case "LINK":
case "META":
case "PARAM":
return false;}
return true;});HTMLElement.prototype.__defineGetter__("outerHTML", function () {
var attr, attrs = this.attributes;var str = "<" + this.tagName;for (var i = 0; i < attrs.length; i++) {
attr = attrs[i];if (attr.specified)
str += " " + attr.name + '="' + attr.value + '"';}
if (!this.canHaveChildren)
return str + ">";return str + ">" + this.innerHTML + "</" + this.tagName + ">";});HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
this.innerHTML = convertTextToHTML(sText);return sText;});var tmpGet;HTMLElement.prototype.__defineGetter__("innerText", tmpGet = function () {
var r = this.ownerDocument.createRange();r.selectNodeContents(this);return r.toString();});HTMLElement.prototype.__defineSetter__("outerText", function (sText) {
this.outerHTML = convertTextToHTML(sText);return sText;});HTMLElement.prototype.__defineGetter__("outerText", tmpGet);HTMLElement.prototype.insertAdjacentText = function (sWhere, sText) {
this.insertAdjacentHTML(sWhere, convertTextToHTML(sText));};}