📄 domlib.js
字号:
/** $Id: domLib.js,v 1.1 2006/12/26 08:24:23 linhdh Exp $ */// {{{ license/* * Copyright 2002-2005 Dan Allen, Mojavelinux.com (dan.allen@mojavelinux.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */// }}}// {{{ intro/** * Title: DOM Library Core * Version: 0.72 * * Summary: * A set of commonly used functions that make it easier to create javascript * applications that rely on the DOM. * * Updated: $Date: 2006/12/26 08:24:23 $ * * Maintainer: Dan Allen <dan.allen@mojavelinux.com> * Maintainer: Jason Rust <jrust@rustyparts.com> * * License: Apache 2.0 */// }}}// {{{ browser detection// Formal browser detect library, courtesy of QuirksMode (http://www.quirksmode.org/js/detect.html)var BrowserDetect = { init: function () { this.engine = "unknown engine"; this.browser = this.searchString(this.dataBrowser) || "unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "unknown version"; this.OS = this.searchString(this.dataOS) || "unknown OS"; this.mode = (document.compatMode && document.compatMode == 'CSS1Compat' ? 'Strict' : 'Quirks'); }, searchString: function (data) { for (var i = 0; i < data.length; i++) { var dataString = data[i].string; var dataProp = data[i].prop; this.versionSearchString = data[i].versionSearch || data[i].identity; if (dataString) { if (dataString.indexOf(data[i].subString) != -1) { if (data[i].engine) { this.engine = data[i].engine; } return data[i].identity; } } else if (dataProp) { if (data[i].engine) { this.engine = data[i].engine; } return data[i].identity; } } }, searchVersion: function (dataString) { var index = dataString.indexOf(this.versionSearchString); if (index == -1) { return; } return parseFloat(dataString.substring(index + this.versionSearchString.length + 1)); }, dataBrowser: [ { string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb", engine: "WebCore" }, { // khtml browsers may use string "khtml, like gecko" string: navigator.vendor, subString: "Apple", identity: "Safari", engine: "KHTML" }, { prop: window.opera, identity: "Opera", engine: "Presto" }, { string: navigator.vendor, subString: "iCab", identity: "iCab", engine: "iCab" }, { // khtml browsers may use string "khtml, like gecko" string: navigator.vendor, subString: "KDE", identity: "Konqueror", engine: "KHTML" }, { string: navigator.userAgent, subString: "Firefox", identity: "Firefox", engine: "Gecko" }, { string: navigator.vendor, subString: "Camino", identity: "Camino", engine: "Gecko" }, { string: navigator.userAgent, subString: "Netscape", identity: "Netscape", engine: "Gecko" }, { string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE", engine: "Trident" }, { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv", engine: "Gecko" }, { string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" } ], dataOS : [ { string: navigator.platform, subString: "Win", identity: "Windows" }, { string: navigator.platform, subString: "Mac", identity: "Mac" }, { string: navigator.platform, subString: "Linux", identity: "Linux" } ]};BrowserDetect.init();// }}}// {{{ global constants (DO NOT EDIT)// -- Browser Identity Flags --var domLib_isMac = BrowserDetect.OS == 'Mac';var domLib_isWin = BrowserDetect.OS == 'Windows';var domLib_isGecko = BrowserDetect.engine == 'Gecko';var domLib_isOpera = BrowserDetect.browser == 'Opera';var domLib_isSafari = BrowserDetect.browser == 'Safari';var domLib_isKonq = BrowserDetect.browser == 'Konqueror';var domLib_isKHTML = BrowserDetect.engine == 'KHTML';var domLib_isIE = BrowserDetect.browser == 'Explorer';var domLib_isIE50 = (domLib_isIE && BrowserDetect.version == 5);var domLib_isIE5 = (domLib_isIE && BrowserDetect.version >= 5 && BrowserDetect.version < 6);var domLib_isMacIE = (domLib_isIE && domLib_isMac);// -- Browser Abilities --var domLib_standardsMode = BrowserDetect.mode == 'Strict';var domLib_useLibrary = ((domLib_isOpera && BrowserDetect.version >= 7) || domLib_isKHTML || (domLib_isIE && BrowserDetect.version >= 5) || domLib_isGecko || domLib_isMacIE || document.defaultView);// fixed in Konq3.2var domLib_hasBrokenTimeout = (domLib_isMacIE || (domLib_isKonq && BrowserDetect.version >= 3.2));var domLib_canFade = (domLib_isGecko || domLib_isIE || domLib_isSafari || domLib_isOpera);var domLib_canDrawOverSelect = ((domLib_isIE && BrowserDetect.version >= 7) || domLib_isMac || domLib_isOpera || domLib_isGecko);var domLib_canDrawOverFlash = (domLib_isMac || domLib_isWin);var domLib_detectObstructionsEnabled = true;// -- Event Variables --var domLib_eventTarget = domLib_isIE ? 'srcElement' : 'currentTarget';var domLib_eventButton = domLib_isIE ? 'button' : 'which';var domLib_eventTo = domLib_isIE ? 'toElement' : 'relatedTarget';var domLib_stylePointer = domLib_isIE ? 'hand' : 'pointer';// NOTE: a bug exists in Opera that prevents maxWidth from being set to 'none', so we make it hugevar domLib_styleNoMaxWidth = domLib_isOpera ? '10000px' : 'none';var domLib_hidePosition = '-1000px';var domLib_scrollbarWidth = 14;var domLib_autoId = 1;var domLib_zIndex = 100;// -- Detection --var domLib_collisionElements;var domLib_collisionsCached = false;var domLib_timeoutStateId = 0;var domLib_timeoutStates = new Hash();// }}}// {{{ DOM enhancementsif (!document.ELEMENT_NODE){ document.ELEMENT_NODE = 1; document.ATTRIBUTE_NODE = 2; document.TEXT_NODE = 3; document.DOCUMENT_NODE = 9; document.DOCUMENT_FRAGMENT_NODE = 11;}function domLib_clone(obj){ var copy = {}; for (var i in obj) { var value = obj[i]; try { if (value != null && typeof(value) == 'object' && value != window && !value.nodeType) { copy[i] = domLib_clone(value); } else { copy[i] = value; } } catch(e) { copy[i] = value; } } return copy;}// }}}// {{{ class Hash()function Hash(){ this.length = 0; this.numericLength = 0; this.elementData = []; for (var i = 0; i < arguments.length; i += 2) { if (typeof(arguments[i + 1]) != 'undefined') { this.elementData[arguments[i]] = arguments[i + 1]; this.length++; if (arguments[i] == parseInt(arguments[i])) { this.numericLength++; } } }}// using prototype as opposed to inner functions saves on memory Hash.prototype.get = function(in_key){ if (typeof(this.elementData[in_key]) != 'undefined') { return this.elementData[in_key]; } return null;}Hash.prototype.set = function(in_key, in_value){ if (typeof(in_value) != 'undefined') { if (typeof(this.elementData[in_key]) == 'undefined') { this.length++; if (in_key == parseInt(in_key)) { this.numericLength++; } } return this.elementData[in_key] = in_value; } return false;}Hash.prototype.remove = function(in_key){ var tmp_value; if (typeof(this.elementData[in_key]) != 'undefined') { this.length--; if (in_key == parseInt(in_key)) { this.numericLength--; } tmp_value = this.elementData[in_key]; delete this.elementData[in_key]; } return tmp_value;}Hash.prototype.size = function(){ return this.length;}Hash.prototype.has = function(in_key){ return typeof(this.elementData[in_key]) != 'undefined';}Hash.prototype.find = function(in_obj){ for (var tmp_key in this.elementData) { if (this.elementData[tmp_key] == in_obj) { return tmp_key; } } return null;}Hash.prototype.merge = function(in_hash){ for (var tmp_key in in_hash.elementData) { if (typeof(this.elementData[tmp_key]) == 'undefined') { this.length++; if (tmp_key == parseInt(tmp_key)) { this.numericLength++; } } this.elementData[tmp_key] = in_hash.elementData[tmp_key]; }}Hash.prototype.compare = function(in_hash){ if (this.length != in_hash.length) { return false; } for (var tmp_key in this.elementData) { if (this.elementData[tmp_key] != in_hash.elementData[tmp_key]) { return false; } } return true;}// }}}// {{{ domLib_isDescendantOf()function domLib_isDescendantOf(in_object, in_ancestor, in_bannedTags){ if (in_object == null) { return false; } if (in_object == in_ancestor) { return true; } if (typeof(in_bannedTags) != 'undefined' && (',' + in_bannedTags.join(',') + ',').indexOf(',' + in_object.tagName + ',') != -1) { return false; } while (in_object != document.documentElement) { try { if ((tmp_object = in_object.offsetParent) && tmp_object == in_ancestor) { return true; } else if ((tmp_object = in_object.parentNode) == in_ancestor) { return true; } else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -