diff options
author | Brandon Mathis <brandon@imathis.com> | 2011-06-07 10:45:01 -0400 |
---|---|---|
committer | Brandon Mathis <brandon@imathis.com> | 2011-06-07 10:45:01 -0400 |
commit | d8b796acb9275e74324c3ea04324314ecbe1b664 (patch) | |
tree | 475d78d3b5ee9f5bba1bf8147e8368aa9278e4fa /source/javascripts/libs/ie/DOMAssistantComplete-2.8.js | |
parent | 8698a276f937cb1cd6f67f7f213e2ea438500d7e (diff) | |
download | my_new_personal_website-d8b796acb9275e74324c3ea04324314ecbe1b664.tar.xz my_new_personal_website-d8b796acb9275e74324c3ea04324314ecbe1b664.zip |
Another massive commit:
1. Major improvements to the responsive styling.
2. Toggleable sidebar
3. Upgraded to modernizr 2.0 which includes Respond.js
4. IE7-9 testing and fixes
5. New theming system which should make forkers happy
6. New rake task for installing Octopress themes
7. Magic
Diffstat (limited to 'source/javascripts/libs/ie/DOMAssistantComplete-2.8.js')
-rw-r--r-- | source/javascripts/libs/ie/DOMAssistantComplete-2.8.js | 1529 |
1 files changed, 0 insertions, 1529 deletions
diff --git a/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js b/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js deleted file mode 100644 index ddca30ed..00000000 --- a/source/javascripts/libs/ie/DOMAssistantComplete-2.8.js +++ /dev/null @@ -1,1529 +0,0 @@ -// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://domassistant.googlecode.com/, documentation: http://www.domassistant.com/documentation, version 2.8 -var DOMAssistant = function () { - var HTMLArray = function () { - // Constructor - }, - w = window, _$ = w.$, _$$ = w.$$, - isIE = /*@cc_on!@*/false, - isIE5 = isIE && parseFloat(navigator.appVersion) < 6, - sort, tagCache = {}, lastCache = {}, useCache = true, - slice = Array.prototype.slice, - camel = { - "accesskey": "accessKey", - "class": "className", - "colspan": "colSpan", - "for": "htmlFor", - "maxlength": "maxLength", - "readonly": "readOnly", - "rowspan": "rowSpan", - "tabindex": "tabIndex", - "valign": "vAlign", - "cellspacing": "cellSpacing", - "cellpadding": "cellPadding" - }, - regex = { - rules: /\s*,\s*/g, - selector: /^(\w+|\*)?(#[\w\u00C0-\uFFFF\-=$]+)?((\.[\w\u00C0-\uFFFF\-]+)*)?((\[\w+\s*([~^$*|])?(=\s*([-\w\u00C0-\uFFFF\s.]+|"[^"]*"|'[^']*'))?\]+)*)?((:\w[-\w]*(\((odd|even|\-?\d*n?([-+]\d+)?|[:#]?[-\w\u00C0-\uFFFF.]+|"[^"]*"|'[^']*'|((\w*\.[-\w\u00C0-\uFFFF]+)*)?|(\[#?\w+([~^$*|])?=?[-\w\u00C0-\uFFFF\s.'"]+\]+)|(:\w[-\w]*\(.+\)))\))?)*)?([+>~])?/, - selectorSplit: /(?:\[.*\]|\(.*\)|[^\s+>~[(])+|[+>~]/g, - id: /^#([-\w\u00C0-\uFFFF=$]+)$/, - tag: /^\w+/, - relation: /^[+>~]$/, - pseudo: /^:(\w[-\w]*)(\((.+)\))?$/, - pseudos: /:(\w[-\w]*)(\((([^(]+)|([^(]+\([^(]+)\))\))?/g, - attribs: /\[(\w+)\s*([~^$*|])?(=)?\s*([^\[\]]*|"[^"]*"|'[^']*')?\](?=$|\[|:|\s)/g, - classes: /\.([-\w\u00C0-\uFFFF]+)/g, - quoted: /^["'](.*)["']$/, - nth: /^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([-+]\d+)?)|(-(([1-9]\d*)?)n\+(\d+)))$/, - special: /(:check|:enabl|\bselect)ed\b/ - }, - navigate = function (node, direction, checkTagName) { - var oldName = node.tagName; - while ((node = node[direction + "Sibling"]) && (node.nodeType !== 1 || (checkTagName? node.tagName !== oldName : node.tagName === "!"))) {} - return node; - }, - def = function (obj) { - return typeof obj !== "undefined"; - }, - sortDocumentOrder = function (elmArray) { - return (sortDocumentOrder = elmArray[0].compareDocumentPosition? function (elmArray) { return elmArray.sort( function (a, b) { return 3 - (a.compareDocumentPosition(b) & 6); } ); } : - isIE? function (elmArray) { return elmArray.sort( function (a, b) { return a.sourceIndex - b.sourceIndex; } ); } : - function (elmArray) { return elmArray.sort( function (a, b) { - var range1 = document.createRange(), range2 = document.createRange(); - range1.setStart(a, 0); - range1.setEnd(a, 0); - range2.setStart(b, 0); - range2.setEnd(b, 0); - return range1.compareBoundaryPoints(Range.START_TO_END, range2); - } ); })(elmArray); - }; - var pushAll = function (set1, set2) { - set1.push.apply(set1, slice.apply(set2)); - return set1; - }; - if (isIE) { - pushAll = function (set1, set2) { - if (set2.slice) { - return set1.concat(set2); - } - var i=0, item; - while ((item = set2[i++])) { - set1[set1.length] = item; - } - return set1; - }; - } - return { - isIE : isIE, - camel : camel, - def : def, - allMethods : [], - publicMethods : [ - "prev", - "next", - "hasChild", - "cssSelect", - "elmsByClass", - "elmsByAttribute", - "elmsByTag" - ], - - harmonize : function () { - w.$ = _$; - w.$$ = _$$; - return this; - }, - - initCore : function () { - this.applyMethod.call(w, "$", this.$); - this.applyMethod.call(w, "$$", this.$$); - w.DOMAssistant = this; - if (isIE) { - HTMLArray = Array; - } - HTMLArray.prototype = []; - (function (H) { - H.each = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (fn.call(context || this[i], this[i], i, this) === false) { - break; - } - } - return this; - }; - H.first = function () { - return def(this[0])? DOMAssistant.addMethodsToElm(this[0]) : null; - }; - H.end = function () { - return this.previousSet; - }; - H.indexOf = H.indexOf || function (elm) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && this[i] === elm) { - return i; - } - } - return -1; - }; - H.map = function (fn, context) { - var res = []; - for (var i=0, il=this.length; i<il; i++) { - if (i in this) { - res[i] = fn.call(context || this[i], this[i], i, this); - } - } - return res; - }; - H.filter = function (fn, context) { - var res = new HTMLArray(); - res.previousSet = this; - for (var i=0, il=this.length; i<il; i++) { - if (i in this && fn.call(context || this[i], this[i], i, this)) { - res.push(this[i]); - } - } - return res; - }; - H.every = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && !fn.call(context || this[i], this[i], i, this)) { - return false; - } - } - return true; - }; - H.some = function (fn, context) { - for (var i=0, il=this.length; i<il; i++) { - if (i in this && fn.call(context || this[i], this[i], i, this)) { - return true; - } - } - return false; - }; - })(HTMLArray.prototype); - this.attach(this); - }, - - addMethods : function (name, method) { - if (!def(this.allMethods[name])) { - this.allMethods[name] = method; - this.addHTMLArrayPrototype(name, method); - } - }, - - addMethodsToElm : function (elm) { - for (var method in this.allMethods) { - if (def(this.allMethods[method])) { - this.applyMethod.call(elm, method, this.allMethods[method]); - } - } - return elm; - }, - - applyMethod : function (method, func) { - if (typeof this[method] !== "function") { - this[method] = func; - } - }, - - attach : function (plugin) { - var publicMethods = plugin.publicMethods; - if (!def(publicMethods)) { - for (var method in plugin) { - if (method !== "init" && def(plugin[method])) { - this.addMethods(method, plugin[method]); - } - } - } - else if (publicMethods.constructor === Array) { - for (var i=0, current; (current=publicMethods[i]); i++) { - this.addMethods(current, plugin[current]); - } - } - if (typeof plugin.init === "function") { - plugin.init(); - } - }, - - addHTMLArrayPrototype : function (name, method) { - HTMLArray.prototype[name] = function () { - var elmsToReturn = new HTMLArray(); - elmsToReturn.previousSet = this; - for (var i=0, il=this.length; i<il; i++) { - elmsToReturn.push(method.apply(DOMAssistant.$$(this[i]), arguments)); - } - return elmsToReturn; - }; - }, - - cleanUp : function (elm) { - var children = elm.all || elm.getElementsByTagName("*"); - for (var i=0, child; (child=children[i++]);) { - if (child.hasData && child.hasData()) { - if (child.removeEvent) { child.removeEvent(); } - child.unstore(); - } - } - elm.innerHTML = ""; - }, - - setCache : function (cache) { - useCache = cache; - }, - - $ : function () { - var obj = arguments[0]; - if (arguments.length === 1 && (typeof obj === "object" || (typeof obj === "function" && !!obj.nodeName))) { - return DOMAssistant.$$(obj); - } - var elm = !!obj? new HTMLArray() : null; - for (var i=0, arg, idMatch; (arg=arguments[i]); i++) { - if (typeof arg === "string") { - arg = arg.replace(/^[^#\(]*(#)/, "$1"); - if (regex.id.test(arg)) { - if ((idMatch = DOMAssistant.$$(arg.substr(1), false))) { - elm.push(idMatch); - } - } - else { - var doc = (document.all || document.getElementsByTagName("*")).length; - elm = (!document.querySelectorAll && useCache && lastCache.rule && lastCache.rule === arg && lastCache.doc === doc)? lastCache.elms : pushAll(elm, DOMAssistant.cssSelection.call(document, arg)); - lastCache = { rule: arg, elms: elm, doc: doc }; - } - } - } - return elm; - }, - - $$ : function (id, addMethods) { - var elm = (typeof id === "object" || typeof id === "function" && !!id.nodeName)? id : document.getElementById(id), - applyMethods = def(addMethods)? addMethods : true, - getId = function(el) { var eid = el.id; return typeof eid !== "object"? eid : el.attributes.id.nodeValue; }; - if (typeof id === "string" && elm && getId(elm) !== id) { - elm = null; - for (var i=0, item; (item=document.all[i]); i++) { - if (getId(item) === id) { - elm = item; - break; - } - } - } - if (elm && applyMethods && !elm.next) { - DOMAssistant.addMethodsToElm(elm); - } - return elm; - }, - - prev : function () { - return DOMAssistant.$$(navigate(this, "previous")); - }, - - next : function () { - return DOMAssistant.$$(navigate(this, "next")); - }, - - hasChild: function (elm) { - return this === document || this !== elm && (this.contains? this.contains(elm) : !!(this.compareDocumentPosition(elm) & 16)); - }, - - getSequence : function (expression) { - var start, add = 2, max = -1, modVal = -1, - pseudoVal = regex.nth.exec(expression.replace(/^0n\+/, "").replace(/^2n$/, "even").replace(/^2n+1$/, "odd")); - if (!pseudoVal) { - return null; - } - if (pseudoVal[2]) { // odd or even - start = (pseudoVal[2] === "odd")? 1 : 2; - modVal = (start === 1)? 1 : 0; - } - else if (pseudoVal[3]) { // single digit - start = max = parseInt(pseudoVal[3], 10); - add = 0; - } - else if (pseudoVal[4]) { // an+b - add = pseudoVal[6]? parseInt(pseudoVal[6], 10) : 1; - start = pseudoVal[7]? parseInt(pseudoVal[7], 10) : 0; - while (start < 1) { - start += add; - } - modVal = (start >= add)? (start - add) % add : start; - } - else if (pseudoVal[8]) { // -an+b - add = pseudoVal[10]? parseInt(pseudoVal[10], 10) : 1; - start = max = parseInt(pseudoVal[11], 10); - while (start > add) { - start -= add; - } - modVal = (max >= add)? (max - add) % add : max; - } - return { start: start, add: add, max: max, modVal: modVal }; - }, - - cssByDOM : function (cssRule) { - var prevParents, currentRule, cssSelectors, childOrSiblingRef, nextTag, nextRegExp, current, previous, prevParent, notElm, addElm, iteratorNext, childElm, sequence, anyTag, - elm = new HTMLArray(), index = elm.indexOf, prevElm = [], matchingElms = [], cssRules = cssRule.replace(regex.rules, ",").split(","), splitRule = {}; - function clearAdded (elm) { - elm = elm || prevElm; - for (var n=elm.length; n--;) { - elm[n].added = null; - elm[n].removeAttribute("added"); - } - } - function clearChildElms () { - for (var n=prevParents.length; n--;) { - prevParents[n].childElms = null; - } - } - function subtractArray (arr1, arr2) { - for (var i=0, src1; (src1=arr1[i]); i++) { - var found = false; - for (var j=0, src2; (src2=arr2[j]); j++) { - if (src2 === src1) { - found = true; - arr2.splice(j, 1); - break; - } - } - if (found) { - arr1.splice(i--, 1); - } - } - return arr1; - } - function getAttr (elm, attr) { - return (isIE || regex.special.test(attr))? elm[camel[attr.toLowerCase()] || attr] : elm.getAttribute(attr, 2); - } - function attrToRegExp (attrVal, substrOperator) { - attrVal = attrVal? attrVal.replace(regex.quoted, "$1").replace(/(\.|\[|\])/g, "\\$1") : null; - return { - "^": "^" + attrVal, - "$": attrVal + "$", - "*": attrVal, - "|": "^" + attrVal + "(\\-\\w+)*$", - "~": "\\b" + attrVal + "\\b" - }[substrOperator] || (attrVal !== null? "^" + attrVal + "$" : attrVal); - } - function notComment(el) { - return (el || this).tagName !== "!"; - } - function getTags (tag, context) { - return isIE5? (tag === "*"? context.all : context.all.tags(tag)) : context.getElementsByTagName(tag); - } - function getElementsByTagName (tag, parent) { - tag = tag || "*"; - parent = parent || document; - return (parent === document || parent.lastModified)? tagCache[tag] || (tagCache[tag] = getTags(tag, document)) : getTags(tag, parent); - } - function getElementsByPseudo (previousMatch, pseudoClass, pseudoValue) { - prevParents = []; - var pseudo = pseudoClass.split("-"), matchingElms = [], idx = 0, checkNodeName = /\-of\-type$/.test(pseudoClass), recur, - match = { - first: function(el) { return !navigate(el, "previous", checkNodeName); }, - last: function(el) { return !navigate(el, "next", checkNodeName); }, - empty: function(el) { return !el.firstChild; }, - enabled: function(el) { return !el.disabled && el.type !== "hidden"; }, - disabled: function(el) { return el.disabled; }, - checked: function(el) { return el.checked; }, - contains: function(el) { return (el.innerText || el.textContent || "").indexOf(pseudoValue.replace(regex.quoted, "$1")) > -1; }, - other: function(el) { return getAttr(el, pseudoClass) === pseudoValue; } - }; - function basicMatch(key) { - while ((previous=previousMatch[idx++])) { - if (notComment(previous) && match[key](previous)) { - matchingElms[matchingElms.length] = previous; - } - } - return matchingElms; - } - var word = pseudo[0] || null; - if (word && match[word]) { - return basicMatch(word); - } - switch (word) { - case "only": - var kParent, kTag; - while ((previous=previousMatch[idx++])) { - prevParent = previous.parentNode; - var q = previous.nodeName; - if (prevParent !== kParent || q !== kTag) { - if (match.first(previous) && match.last(previous)) { - matchingElms[matchingElms.length] = previous; - } - kParent = prevParent; - kTag = q; - } - } - break; - case "nth": - if (pseudoValue === "n") { - matchingElms = previousMatch; - } - else { - var direction = (pseudo[1] === "last")? ["lastChild", "previousSibling"] : ["firstChild", "nextSibling"]; - sequence = DOMAssistant.getSequence(pseudoValue); - if (sequence) { - while ((previous=previousMatch[idx++])) { - prevParent = previous.parentNode; - prevParent.childElms = prevParent.childElms || {}; - var p = previous.nodeName; - if (!prevParent.childElms[p]) { - var childCount = 0; - iteratorNext = sequence.start; - childElm = prevParent[direction[0]]; - while (childElm && (sequence.max < 0 || iteratorNext <= sequence.max)) { - var c = childElm.nodeName; - if ((checkNodeName && c === p) || (!checkNodeName && childElm.nodeType === 1 && c !== "!")) { - if (++childCount === iteratorNext) { - if (c === p) { matchingElms[matchingElms.length] = childElm; } - iteratorNext += sequence.add; - } - } - childElm = childElm[direction[1]]; - } - if (anyTag) { sort++; } - prevParent.childElms[p] = true; - prevParents[prevParents.length] = prevParent; - } - } - clearChildElms(); - } - } - break; - case "target": - var hash = document.location.hash.slice(1); - if (hash) { - while ((previous=previousMatch[idx++])) { - if (getAttr(previous, "name") === hash || getAttr(previous, "id") === hash) { - matchingElms[matchingElms.length] = previous; - break; - } - } - } - break; - case "not": - if ((recur = regex.pseudo.exec(pseudoValue))) { - matchingElms = subtractArray(previousMatch, getElementsByPseudo(previousMatch, recur[1]? recur[1].toLowerCase() : null, recur[3] || null)); - } - else { - for (var re in regex) { - if (regex[re].lastIndex) { - regex[re].lastIndex = 0; - } - } - pseudoValue = pseudoValue.replace(regex.id, "[id=$1]"); - var notTag = regex.tag.exec(pseudoValue); - var notClass = regex.classes.exec(pseudoValue); - var notAttr = regex.attribs.exec(pseudoValue); - var notRegExp = new RegExp(notAttr? attrToRegExp(notAttr[4], notAttr[2]) : "(^|\\s)" + (notTag? notTag[0] : notClass? notClass[1] : "") + "(\\s|$)", "i"); - while ((notElm=previousMatch[idx++])) { - addElm = null; - if (notTag && !notRegExp.test(notElm.nodeName) || notClass && !notRegExp.test(notElm.className)) { - addElm = notElm; - } - else if (notAttr) { - var att = getAttr(notElm, notAttr[1]); - if (!def(att) || att === false || typeof att === "string" && !notRegExp.test(att)) { - addElm = notElm; - } - } - if (addElm && !addElm.added) { - addElm.added = true; - matchingElms[matchingElms.length] = addElm; - } - } - } - break; - default: return basicMatch("other"); - } - return matchingElms; - } - function pushUnique(set1, set2) { - var i=0, s=set1, item; - while ((item = set2[i++])) { - if (!s.length || s.indexOf(item) < 0) { - set1.push(item); - } - } - return set1; - } - sort = -1; - for (var a=0, tagBin=[]; (currentRule=cssRules[a]); a++) { - if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || a && index.call(cssRules.slice(0, a), currentRule) > -1) { continue; } - prevElm = [this]; - for (var i=0, rule; (rule=cssSelectors[i]); i++) { - matchingElms = []; - if ((childOrSiblingRef = regex.relation.exec(rule))) { - var idElm = null, nextWord = cssSelectors[i+1]; - if ((nextTag = regex.tag.exec(nextWord))) { - nextTag = nextTag[0]; - nextRegExp = new RegExp("(^|\\s)" + nextTag + "(\\s|$)", "i"); - } - else if (regex.id.test(nextWord)) { - idElm = DOMAssistant.$(nextWord) || null; - } - for (var j=0, prevRef; (prevRef=prevElm[j]); j++) { - switch (childOrSiblingRef[0]) { - case ">": - var children = idElm || getElementsByTagName(nextTag, prevRef); - for (var k=0, child; (child=children[k]); k++) { - if (child.parentNode === prevRef) { - matchingElms[matchingElms.length] = child; - } - } - break; - case "+": - if ((prevRef = navigate(prevRef, "next"))) { - if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { - matchingElms[matchingElms.length] = prevRef; - } - } - break; - case "~": - while ((prevRef = prevRef.nextSibling) && !prevRef.added) { - if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { - prevRef.added = true; - matchingElms[matchingElms.length] = prevRef; - } - } - break; - } - } - prevElm = matchingElms; - clearAdded(); - rule = cssSelectors[++i]; - if (/^\w+$/.test(rule) || regex.id.test(rule)) { - continue; - } - prevElm.skipTag = true; - } - var cssSelector = regex.selector.exec(rule); - splitRule = { - tag : cssSelector[1]? cssSelector[1] : "*", - id : cssSelector[2], - allClasses : cssSelector[3], - allAttr : cssSelector[5], - allPseudos : cssSelector[10] - }; - anyTag = (splitRule.tag === "*"); - if (splitRule.id) { - var u = 0, DOMElm = document.getElementById(splitRule.id.slice(1)); - if (DOMElm) { - while (prevElm[u] && !DOMAssistant.hasChild.call(prevElm[u], DOMElm)) { u++; } - matchingElms = (u < prevElm.length && (anyTag || splitRule.tag === DOMElm.tagName.toLowerCase()))? [DOMElm] : []; - } - prevElm = matchingElms; - } - else if (splitRule.tag && !prevElm.skipTag) { - if (i===0 && !matchingElms.length && prevElm.length === 1) { - prevElm = matchingElms = pushAll([], getElementsByTagName(splitRule.tag, prevElm[0])); - } - else { - for (var l=0, ll=prevElm.length, tagCollectionMatches, tagMatch; l<ll; l++) { - tagCollectionMatches = getElementsByTagName(splitRule.tag, prevElm[l]); - for (var m=0; (tagMatch=tagCollectionMatches[m]); m++) { - if (!tagMatch.added) { - tagMatch.added = true; - matchingElms[matchingElms.length] = tagMatch; - } - } - } - prevElm = matchingElms; - clearAdded(); - } - } - if (!matchingElms.length) { - break; - } - prevElm.skipTag = false; - if (splitRule.allClasses) { - var n = 0, matchingClassElms = [], allClasses = splitRule.allClasses.split(".").slice(1); - while ((current = prevElm[n++])) { - var matchCls = true, elmClass = current.className; - if (elmClass && elmClass.length) { - elmClass = elmClass.split(" "); - for (var o=allClasses.length; o--;) { - if (elmClass.indexOf(allClasses[o]) < 0) { - matchCls = false; - break; - } - } - if (matchCls) { - matchingClassElms[matchingClassElms.length] = current; - } - } - } - prevElm = matchingElms = matchingClassElms; - } - if (splitRule.allAttr) { - var matchAttr, r = 0, regExpAttributes = [], matchingAttributeElms = [], allAttr = splitRule.allAttr.match(regex.attribs); - for (var specialStrip = /^\[(selected|readonly)(\s*=.+)?\]$/, q=0, ql=allAttr.length, attributeMatch, attrVal; q<ql; q++) { - regex.attribs.lastIndex = 0; - attributeMatch = regex.attribs.exec(allAttr[q].replace(specialStrip, "[$1]")); - attrVal = attrToRegExp(attributeMatch[4], attributeMatch[2] || null); - regExpAttributes[q] = [(attrVal? new RegExp(attrVal) : null), attributeMatch[1]]; - } - while ((current = matchingElms[r++])) { - for (var s=0, sl=regExpAttributes.length; s<sl; s++) { - var attributeRegExp = regExpAttributes[s][0], currentAttr = getAttr(current, regExpAttributes[s][1]); - matchAttr = true; - if (!attributeRegExp && currentAttr === true) { continue; } - if ((!attributeRegExp && (!currentAttr || typeof currentAttr !== "string" || !currentAttr.length)) || (!!attributeRegExp && !attributeRegExp.test(currentAttr))) { - matchAttr = false; - break; - } - } - if (matchAttr) { - matchingAttributeElms[matchingAttributeElms.length] = current; - } - } - prevElm = matchingElms = matchingAttributeElms; - } - if (splitRule.allPseudos) { - var allPseudos = splitRule.allPseudos.match(regex.pseudos); - for (var t=0, tl=allPseudos.length; t<tl; t++) { - regex.pseudos.lastIndex = 0; - var pseudo = regex.pseudos.exec(allPseudos[t]); - var pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null; - var pseudoValue = pseudo[3] || null; - matchingElms = getElementsByPseudo(matchingElms, pseudoClass, pseudoValue); - clearAdded(matchingElms); - } - prevElm = matchingElms; - } - } - elm = ((tagBin.length && (anyTag || index.call(tagBin, splitRule.tag) >= 0 || index.call(tagBin, "*") >= 0))? pushUnique : pushAll)(elm, prevElm); - tagBin.push(splitRule.tag); - if (isIE && anyTag) { elm = elm.filter(notComment); } - } - return ((elm.length > 1 && cssRules.length > 1) || sort > 0)? sortDocumentOrder(elm) : elm; - }, - - cssByXpath : function (cssRule) { - var ns = { xhtml: "http://www.w3.org/1999/xhtml" }, - prefix = (document.documentElement.namespaceURI === ns.xhtml)? "xhtml:" : "", - nsResolver = function lookupNamespaceURI (prefix) { - return ns[prefix] || null; - }; - DOMAssistant.cssByXpath = function (cssRule) { - var currentRule, cssSelectors, xPathExpression, cssSelector, splitRule, sequence, - elm = new HTMLArray(), cssRules = cssRule.replace(regex.rules, ",").split(","); - function attrToXPath (wrap) { - var pre = wrap? "[" : "", post = wrap? "]" : ""; - return function (match, p1, p2, p3, p4) { - p4 = (p4 || "").replace(regex.quoted, "$1"); - if (p1 === p4 && p1 === "readonly") { p3 = null; } - return pre + ({ - "^": "starts-with(@" + p1 + ", \"" + p4 + "\")", - "$": "substring(@" + p1 + ", (string-length(@" + p1 + ") - " + (p4.length - 1) + "), " + p4.length + ") = \"" + p4 + "\"", - "*": "contains(concat(\" \", @" + p1 + ", \" \"), \"" + p4 + "\")", - "|": "@" + p1 + "=\"" + p4 + "\" or starts-with(@" + p1 + ", \"" + p4 + "-\")", - "~": "contains(concat(\" \", @" + p1 + ", \" \"), \" " + p4 + " \")" - }[p2] || ("@" + p1 + (p3? "=\"" + p4 + "\"" : ""))) + post; - }; - } - function pseudoToXPath (tag, pseudoClass, pseudoValue) { - tag = /\-child$/.test(pseudoClass)? "*" : tag; - var pseudo = pseudoClass.split("-"), position = ((pseudo[1] === "last")? "(count(following-sibling::" : "(count(preceding-sibling::") + tag + ") + 1)", recur, hash; - switch (pseudo[0]) { - case "nth": return (pseudoValue !== "n" && (sequence = DOMAssistant.getSequence(pseudoValue)))? ((sequence.start === sequence.max)? position + " = " + sequence.start : position + " mod " + sequence.add + " = " + sequence.modVal + ((sequence.start > 1)? " and " + position + " >= " + sequence.start : "") + ((sequence.max > 0)? " and " + position + " <= " + sequence.max: "")) : ""; - case "not": return "not(" + ((recur = regex.pseudo.exec(pseudoValue))? pseudoToXPath(tag, recur[1]? recur[1].toLowerCase() : null, recur[3] || null) : pseudoValue.replace(regex.id, "[id=$1]").replace(regex.tag, "self::$0").replace(regex.classes, "contains(concat(\" \", @class, \" \"), \" $1 \")").replace(regex.attribs, attrToXPath())) + ")"; - case "first": return "not(preceding-sibling::" + tag + ")"; - case "last": return "not(following-sibling::" + tag + ")"; - case "only": return "not(preceding-sibling::" + tag + " or following-sibling::" + tag + ")"; - case "empty": return "not(child::*) and not(text())"; - case "contains": return "contains(., \"" + pseudoValue.replace(regex.quoted, "$1") + "\")"; - case "enabled": return "not(@disabled) and not(@type=\"hidden\")"; - case "disabled": return "@disabled"; - case "target": return "@name=\"" + (hash = document.location.hash.slice(1)) + "\" or @id=\"" + hash + "\""; - default: return "@" + pseudoClass + "=\"" + pseudoValue + "\""; - } - } - for (var i=0; (currentRule=cssRules[i]); i++) { - if (!(cssSelectors = currentRule.match(regex.selectorSplit)) || i && elm.indexOf.call(cssRules.slice(0, i), currentRule) > -1) { continue; } - xPathExpression = xPathExpression? xPathExpression + " | ." : "."; - for (var j=0, jl=cssSelectors.length; j<jl; j++) { - cssSelector = regex.selector.exec(cssSelectors[j]); - splitRule = { - tag: prefix + (cssSelector[1]? cssSelector[1] : "*"), - id: cssSelector[2], - allClasses: cssSelector[3], - allAttr: cssSelector[5], - allPseudos: cssSelector[10], - tagRelation: cssSelector[20] - }; - xPathExpression += - (splitRule.tagRelation? ({ ">": "/", "+": "/following-sibling::*[1]/self::", "~": "/following-sibling::" }[splitRule.tagRelation] || "") : ((j > 0 && regex.relation.test(cssSelectors[j-1]))? splitRule.tag : ("//" + splitRule.tag))) + - (splitRule.id || "").replace(regex.id, "[@id = \"$1\"]") + - (splitRule.allClasses || "").replace(regex.classes, "[contains(concat(\" \", @class, \" \"), \" $1 \")]") + - (splitRule.allAttr || "").replace(regex.attribs, attrToXPath(true)); - if (splitRule.allPseudos) { - var allPseudos = splitRule.allPseudos.match(regex.pseudos); - for (var k=0, kl=allPseudos.length; k<kl; k++) { - regex.pseudos.lastIndex = 0; - var pseudo = regex.pseudos.exec(allPseudos[k]), - pseudoClass = pseudo[1]? pseudo[1].toLowerCase() : null, - pseudoValue = pseudo[3] || null, - xpath = pseudoToXPath(splitRule.tag, pseudoClass, pseudoValue); - if (xpath.length) { - xPathExpression += "[" + xpath + "]"; - } - } - } - } - } - try { - var xPathNodes = document.evaluate(xPathExpression, this, nsResolver, 7, null), node, p=0; - while ((node = xPathNodes.snapshotItem(p++))) { elm.push(node); } - } catch (e) {} - return elm; - }; - return DOMAssistant.cssByXpath.call(this, cssRule); - }, - - cssSelection : function (cssRule) { - if (!cssRule) { return null; } - var special = regex.special.test(cssRule); - try { - if (document.querySelectorAll && !special) { - return pushAll(new HTMLArray(), this.querySelectorAll(cssRule)); - } - } catch (e) {} - return ((document.evaluate && !special && !/-of-type/.test(cssRule))? DOMAssistant.cssByXpath : DOMAssistant.cssByDOM).call(this, cssRule); - }, - - cssSelect : function (cssRule) { - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByClass : function (className, tag) { - var cssRule = (tag || "") + "." + className; - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByAttribute : function (attr, attrVal, tag, substrMatchSelector) { - var cssRule = (tag || "") + "[" + attr + ((attrVal && attrVal !== "*")? ((substrMatchSelector || "") + "=" + attrVal + "]") : "]"); - return DOMAssistant.cssSelection.call(this, cssRule); - }, - - elmsByTag : function (tag) { - return DOMAssistant.cssSelection.call(this, tag); - } - }; -}(); -DOMAssistant.initCore(); -DOMAssistant.Storage = function () { - var uniqueId = 1, data = [], expando = "_da" + +new Date(); - return { - hasData : function () { - var uid = this[expando]; - return !!uid && !!data[uid]; - }, - retrieve : function (key) { - if (!DOMAssistant.def(key)) { - return this[expando] || (this[expando] = uniqueId++); - } - if (!this[expando] || !data[this[expando]]) { return; } - return data[this[expando]][key]; - }, - - store : function (key, val) { - var uid = this[expando] || (this[expando] = uniqueId++); - data[uid] = data[uid] || {}; - if (typeof key === "object") { - for (var i in key) { - if (typeof i === "string") { - data[uid][i] = key[i]; - } - } - } - else { - data[uid][key] = val; - } - return this; - }, - - unstore : function (key) { - var uid = this[expando] || (this[expando] = uniqueId++); - if (data[uid]) { - if (DOMAssistant.def(key)) { - delete data[uid][key]; - } - else { - data[uid] = null; - } - } - return this; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Storage); -DOMAssistant.AJAX = function () { - var globalXMLHttp = null, - readyState = 0, - status = -1, - statusText = "", - requestPool = [], - createAjaxObj = function (url, method, callback, addToContent) { - var params = null; - if (/POST/i.test(method)) { - url = url.split("?"); - params = url[1]; - url = url[0]; - } - return { - url : url, - method : method, - callback : callback, - params : params, - headers : {}, - responseType : "text", - addToContent : addToContent || false - }; - }; - return { - publicMethods : [ - "ajax", - "get", - "post", - "load" - ], - - initRequest : function () { - var XMLHttp = null; - if (!!window.XMLHttpRequest && !DOMAssistant.isIE) { - XMLHttp = new XMLHttpRequest(); - DOMAssistant.AJAX.initRequest = function () { - return requestPool.length? requestPool.pop() : new XMLHttpRequest(); - }; - } - else if (!!window.ActiveXObject) { - var XMLHttpMS = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; - for (var i=0; i<XMLHttpMS.length; i++) { - try { - XMLHttp = new window.ActiveXObject(XMLHttpMS[i]); - DOMAssistant.AJAX.initRequest = function () { - return requestPool.length? requestPool.pop() : new window.ActiveXObject(XMLHttpMS[i]); - }; - break; - } - catch (e) { - XMLHttp = null; - } - } - } - return XMLHttp; - }, - - ajax : function (ajaxObj) { - if (!ajaxObj.noParse && ajaxObj.url && /\?/.test(ajaxObj.url) && ajaxObj.method && /POST/i.test(ajaxObj.method)) { - var url = ajaxObj.url.split("?"); - ajaxObj.url = url[0]; - ajaxObj.params = url[1] + ((url[1].length > 0 && ajaxObj.params)? ("&" + ajaxObj.params) : ""); - } - return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); - }, - - get : function (url, callback, addToContent) { - return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "GET", callback, addToContent)); - }, - - post : function (url, callback) { - return DOMAssistant.AJAX.makeCall.call(this, createAjaxObj(url, "POST", callback)); - }, - - load : function (url, addToContent) { - this.get(url, DOMAssistant.AJAX.replaceWithAJAXContent, addToContent); - }, - - makeCall : function (ajaxObj) { - var XMLHttp = DOMAssistant.AJAX.initRequest(); - if (XMLHttp) { - globalXMLHttp = XMLHttp; - (function (elm) { - var url = ajaxObj.url, - method = ajaxObj.method || "GET", - callback = ajaxObj.callback, - params = ajaxObj.params, - headers = ajaxObj.headers, - responseType = ajaxObj.responseType || "text", - addToContent = ajaxObj.addToContent, - timeout = ajaxObj.timeout || null, - ex = ajaxObj.exception, - timeoutId = null, - done = false; - XMLHttp.open(method, url, true); - XMLHttp.setRequestHeader("AJAX", "true"); - XMLHttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - if (method === "POST") { - XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - XMLHttp.setRequestHeader("Content-length", params? params.length : 0); - if (XMLHttp.overrideMimeType) { - XMLHttp.setRequestHeader("Connection", "close"); - } - } - if (responseType === "json") { - XMLHttp.setRequestHeader("Accept", "application/json, text/javascript, */*"); - } - for (var i in headers) { - if (typeof i === "string") { - XMLHttp.setRequestHeader(i, headers[i]); - } - } - if (typeof callback === "function") { - XMLHttp.onreadystatechange = function () { - try { - if (XMLHttp.readyState === 4 && !done) { - window.clearTimeout(timeoutId); - done = true; - status = XMLHttp.status; - statusText = XMLHttp.statusText; - readyState = 4; - if ((status || location.protocol !== "file:") && (status < 200 || status >= 300)) { - throw new Error(statusText); - } - var response = /xml/i.test(responseType)? XMLHttp.responseXML : XMLHttp.responseText; - if (/json/i.test(responseType) && !!response) { - response = (typeof JSON === "object" && typeof JSON.parse === "function")? JSON.parse(response) : eval("(" + response + ")"); - } - globalXMLHttp = null; - XMLHttp.onreadystatechange = function () {}; - requestPool.push(XMLHttp); - callback.call(elm, response, addToContent); - } - } - catch (e) { - globalXMLHttp = XMLHttp = null; - if (typeof ex === "function") { - ex.call(elm, e); - ex = null; - } - } - }; - } - XMLHttp.send(params); - if (timeout) { - timeoutId = window.setTimeout( function () { - if (!done) { - XMLHttp.abort(); - done = true; - if (typeof ex === "function") { - readyState = 0; - status = 408; - statusText = "Request timeout"; - globalXMLHttp = XMLHttp = null; - ex.call(elm, new Error(statusText)); - ex = null; - } - } - }, timeout); - } - })(this); - } - return this; - }, - - replaceWithAJAXContent : function (content, add) { - if (add) { - this.innerHTML += content; - } - else { - DOMAssistant.cleanUp(this); - this.innerHTML = content; - } - }, - - getReadyState : function () { - return (globalXMLHttp && DOMAssistant.def(globalXMLHttp.readyState))? globalXMLHttp.readyState : readyState; - }, - - getStatus : function () { - return status; - }, - - getStatusText : function () { - return statusText; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.AJAX); -DOMAssistant.CSS = function () { - var def = DOMAssistant.def, - direct = { display: true }; - return { - addClass : function (className) { - if (!this.hasClass(className)) { - var currentClass = this.className; - this.className = currentClass + (currentClass.length? " " : "") + className; - } - return this; - }, - - removeClass : function (className) { - return this.replaceClass(className); - }, - - replaceClass : function (className, newClass) { - var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i"); - this.className = this.className.replace(classToRemove, function (match, p1, p2) { - return newClass? (p1 + newClass + p2) : " "; - }).replace(/^\s+|\s+$/g, ""); - return this; - }, - - hasClass : function (className) { - return (" " + this.className + " ").indexOf(" " + className + " ") > -1; - }, - - setStyle : function (style, value) { - var css = this.style; - if ("filters" in this && (typeof style === "string"? /opacity/i.test(style) : def(style.opacity))) { - css.zoom = 1; - css.filter = (css.filter || "").replace(/alpha\([^)]*\)/, "") + "alpha(opacity=" + (def(style.opacity)? style.opacity : value) * 100 + ")"; - } - if (def(css.cssText)) { - var styleToSet = css.cssText; - if (typeof style === "object") { - for (var i in style) { - if (typeof i === "string") { - if (direct[i]) { css[i] = style[i]; } - styleToSet += ";" + i + ":" + style[i]; - } - } - } - else { - if (direct[style]) { css[style] = value; } - styleToSet += ";" + style + ":" + value; - } - css.cssText = styleToSet; - } - return this; - }, - - getStyle : function (cssRule) { - var val = "", f; - cssRule = cssRule.toLowerCase(); - if (document.defaultView && document.defaultView.getComputedStyle) { - val = document.defaultView.getComputedStyle(this, "").getPropertyValue(cssRule); - } - else if (this.currentStyle) { - if ("filters" in this && cssRule === "opacity") { - val = (f = this.style.filter || this.currentStyle.filter) && f.indexOf("opacity=") >= 0? parseFloat(f.match(/opacity=([^)]*)/)[1]) / 100 : 1; - } - else { - cssRule = cssRule.replace(/^float$/, "styleFloat").replace(/\-(\w)/g, function (match, p1) { - return p1.toUpperCase(); - }); - val = this.currentStyle[cssRule]; - } - if (val === "auto" && /^(width|height)$/.test(cssRule) && this.currentStyle.display !== "none") { - val = this["offset" + cssRule.charAt(0).toUpperCase() + cssRule.substr(1)] + "px"; - } - } - return val; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.CSS); -DOMAssistant.Content = function () { - var D$ = DOMAssistant.$$; - return { - init : function () { - DOMAssistant.setCache(false); - }, - - create : function (name, attr, append, content) { - var elm = D$(document.createElement(name)); - if (attr) { - elm = elm.setAttributes(attr); - } - if (DOMAssistant.def(content)) { - elm.addContent(content); - } - if (append) { - this.appendChild(elm); - } - return elm; - }, - - setAttributes : function (attr) { - if (DOMAssistant.isIE) { - var setAttr = function (elm, att, val) { - var attLower = att.toLowerCase(); - switch (attLower) { - case "name": - case "type": - case "multiple": - return D$(document.createElement(elm.outerHTML.replace(new RegExp(attLower + "(=[a-zA-Z]+)?"), " ").replace(">", " " + attLower + "=" + val + ">"))); - case "style": - elm.style.cssText = val; - return elm; - default: - elm[DOMAssistant.camel[attLower] || att] = val; - return elm; - } - }; - DOMAssistant.Content.setAttributes = function (attr) { - var elem = this; - var parent = this.parentNode; - for (var i in attr) { - if (typeof attr[i] === "string" || typeof attr[i] === "number") { - var newElem = setAttr(elem, i, attr[i]); - if (parent && /(name|type)/i.test(i)) { - if (elem.innerHTML) { - newElem.innerHTML = elem.innerHTML; - } - parent.replaceChild(newElem, elem); - } - elem = newElem; - } - } - return elem; - }; - } - else { - DOMAssistant.Content.setAttributes = function (attr) { - for (var i in attr) { - if (/class/i.test(i)) { - this.className = attr[i]; - } - else { - this.setAttribute(i, attr[i]); - } - } - return this; - }; - } - return DOMAssistant.Content.setAttributes.call(this, attr); - }, - - addContent : function (content) { - var type = typeof content; - if (type === "string" || type === "number") { - if (!this.firstChild) { - this.innerHTML = content; - } - else { - var tmp = document.createElement("div"); - tmp.innerHTML = content; - for (var i=tmp.childNodes.length-1, last=null; i>=0; i--) { - last = this.insertBefore(tmp.childNodes[i], last); - } - } - } - else if (type === "object" || (type === "function" && !!content.nodeName)) { - this.appendChild(content); - } - return this; - }, - - replaceContent : function (content) { - DOMAssistant.cleanUp(this); - return this.addContent(content); - }, - - replace : function (content, returnNew) { - var type = typeof content; - if (type === "string" || type === "number") { - var parent = this.parentNode; - var tmp = DOMAssistant.Content.create.call(parent, "div", null, false, content); - for (var i=tmp.childNodes.length; i--;) { - parent.insertBefore(tmp.childNodes[i], this.nextSibling); - } - content = this.nextSibling; - parent.removeChild(this); - } - else if (type === "object" || (type === "function" && !!content.nodeName)) { - this.parentNode.replaceChild(content, this); - } - return returnNew? content : this; - }, - - remove : function () { - DOMAssistant.cleanUp(this); - if (this.hasData()) { - if (this.removeEvent) { this.removeEvent(); } - this.unstore(); - } - this.parentNode.removeChild(this); - return null; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Content); -DOMAssistant.Events = function () { - var handler, - key = "_events", - w3cMode = !!document.addEventListener, - useCapture = { focus: true, blur: true }, - translate = DOMAssistant.isIE? { focus: "activate", blur: "deactivate", mouseenter: "mouseover", mouseleave: "mouseout" } : { mouseenter: "mouseover", mouseleave: "mouseout" }, - regex = { - special: /^submit|reset|change|select$/i, - mouseenterleave: /^mouse(enter|leave)$/i, - dom: /^DOM/, - on: /^on/i - }, - special = function (e) { - return DOMAssistant.isIE && regex.special.test(e); - }, - fix = function (e) { - return translate[e] || e; - }, - createEvent = function (e, type, target) { - e = e || window.event || {}; - if (e.event) { return e; } - var event = { - event: e, - type: type || e.type, - bubbles: e.bubbles || true, - cancelable: e.cancelable || false, - target: target || e.target || e.srcElement, - clientX: e.clientX || 0, - clientY: e.clientY || 0, - altKey: e.altKey || false, - ctrlKey: e.ctrlKey || false, - shiftKey: e.shiftKey || false, - button: e.button || null, - timeStamp: +new Date(), - preventDefault: function() { - if (e.preventDefault) { e.preventDefault(); } - this.returnValue = e.returnValue = false; - }, - stopPropagation: function() { - if (e.stopPropagation) { e.stopPropagation(); } - this.cancelBubble = e.cancelBubble = true; - } - }; - if (event.target && 3 === event.target.nodeType) { // Safari textnode bug - event.target = event.target.parentNode; - } - event.currentTarget = event.target; - event.relatedTarget = e.relatedTarget || (e.fromElement === event.target? e.toElement : e.fromElement) || null; - var de = document.documentElement, b = document.body; - event.pageX = DOMAssistant.def(e.pageX)? e.pageX : (event.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0)); - event.pageY = DOMAssistant.def(e.pageY)? e.pageY : (event.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0)); - if ("number" === typeof e.which) { - event.keyCode = e.keyCode; - event.charCode = event.which = e.which; - } - else if (e.keyCode) { - event.keyCode = event.charCode = e.keyCode; - } - return event; - }; - - return { - publicMethods : [ - "triggerEvent", - "addEvent", - "removeEvent", - "relayEvent", - "unrelayEvent", - "preventDefault", - "cancelBubble" - ], - - init : function () { - DOMAssistant.preventDefault = this.preventDefault; - DOMAssistant.cancelBubble = this.cancelBubble; - handler = this.handleEvent; - }, - - triggerEvent : function (evt, target, e) { - var fevt = fix(evt), - events = this.retrieve(key), - event = e || createEvent(e, fevt, target || this); - event.currentTarget = this; - if (events && events[fevt]) { - for (var i=0, iL=events[fevt].length; i<iL; i++) { - if (events[fevt][i].call(this, event) === false) { event.stopPropagation(); } - } - } - else if (typeof this["on" + fevt] === "function") { - this["on" + fevt].call(this, event); - } - var p = DOMAssistant.$$(this.parentNode); - if (!event.cancelBubble && p && p.nodeType === 1) { - p.triggerEvent(fevt, target, event); - } - return this; - }, - - addEvent : function (evt, func, relay, proxy, selector) { - var existingEvent, - fevt = fix(evt), - uid = fevt + this.retrieve(), - onevt = "on" + fevt; - if (!(func.attachedElements && func.attachedElements[uid])) { - var events = this.retrieve(key) || {}; - if (!events[fevt]) { - events[fevt] = []; - existingEvent = this[onevt]; - this[onevt] = null; - } - if (typeof this.window === "object") { this.window[onevt] = handler; } - else if (!events[fevt].length) { - if (w3cMode) { this.addEventListener(fevt, handler, useCapture[fevt]); } - else { this[onevt] = handler; } - } - if (existingEvent) { - events[fevt].push(existingEvent); - } - if (fevt !== evt) { func.evt = evt; } - func.relay = relay; - func.proxy = proxy; - func.selector = selector; - func.attachedElements = func.attachedElements || {}; - func.attachedElements[uid] = true; - events[fevt].push(func); - this.store(key, events); - } - return this; - }, - - handleEvent : function (evt) { - var currentEvt = (evt && regex.dom.test(evt.type) && w3cMode)? evt : createEvent(evt), - type = fix(currentEvt.type), - targ = currentEvt.target, - relatedTarg = currentEvt.relatedTarget, - eventColl = this.retrieve(key)[type].slice(0), eventCollLength, eventReturn, oevt; - if ((eventCollLength = eventColl.length)) { - for (var i=0; i<eventCollLength; i++) { - if (typeof eventColl[i] === "function") { - if ((oevt = eventColl[i].evt) && oevt !== type) { - currentEvt.type = oevt; - if (relatedTarg && regex.mouseenterleave.test(oevt)) { - if (eventColl[i].relay) { - var elms = eventColl[i].elms || (eventColl[i].elms = this.cssSelect(eventColl[i].selector)); - if (elms.indexOf(targ) < 0 || !DOMAssistant.hasChild.call(relatedTarg, targ)) { continue; } - } - else if (this === relatedTarg || this.hasChild(relatedTarg)) { continue; } - } - } - eventReturn = eventColl[i].call(this, currentEvt); - } - } - if (eventReturn === false) { currentEvt.stopPropagation(); } - return eventReturn; - } - }, - - removeEvent : function (evt, func, relay, proxy) { - var uid = (evt = fix(evt)) + this.retrieve(), - events = this.retrieve(key), - onevt = "on" + evt; - if (events && !evt) { - for (var ev in events) { - if (events[ev].length) { this.removeEvent(ev); } - } - var attr = this.attributes; - for (var att, j=attr.length; j--;) { - att = attr[j].nodeName.toLowerCase(); - if (regex.on.test(att) && typeof this[att] === "function") { - this[att] = null; - } - } - } - else if (events && events[evt]) { - var eventColl = events[evt]; - for (var fn, i=eventColl.length; i--;) { - fn = func || eventColl[i]; - if (eventColl[i] === fn && relay === fn.relay && proxy === fn.proxy) { - eventColl.splice(i, 1); - if (!!proxy && fn.selector) { - this.cssSelect(fn.selector).removeEvent(proxy); - } - if (fn.attachedElements) { - fn.attachedElements[uid] = null; - } - } - } - if (!events[evt].length) { - if (w3cMode) { this.removeEventListener(evt, handler, useCapture[evt]); } - else { this[onevt] = null; } - } - } - else if (this[onevt] && !func && !relay) { - this[onevt] = null; - } - return this; - }, - - relayEvent: function (evt, selector, fn, proxy) { - if (special(evt)) { - this.relayEvent("focus", selector, function() { - DOMAssistant.$$(this).removeEvent(evt).addEvent(evt, function(e) { - return fn.call(this, createEvent(e)); - }); - }, evt).relayEvent("blur", selector, function() { - DOMAssistant.$$(this).removeEvent(evt); - }, evt); - return this; - } - return this.addEvent(evt, function(e) { - e = createEvent(e); - var target = e.target, args = arguments, i = 0, elm, elms = this.cssSelect(selector); - while ((elm = elms[i++])) { - if ((elm === target || DOMAssistant.hasChild.call(elm, target)) && !elm.disabled) { - e.currentTarget = elm; - var retVal = fn.apply(elm, args); - if (!retVal) { e.preventDefault(); } - return retVal; - } - } - }, true, proxy, selector); - }, - - unrelayEvent: function (evt) { - if (special(evt)) { - return this.removeEvent("focus", null, true, evt).removeEvent("blur", null, true, evt); - } - return this.removeEvent(evt, null, true); - }, - - preventDefault : function (evt) { - if (evt.preventDefault) { evt.preventDefault(); } - evt.returnValue = false; - }, - - cancelBubble : function (evt) { - if (evt.stopPropagation) { evt.stopPropagation(); } - evt.cancelBubble = true; - } - }; -}(); -DOMAssistant.attach(DOMAssistant.Events); -DOMAssistant.DOMLoad = function () { - var DOMLoaded = false, - DOMLoadTimer = null, - functionsToCall = [], - addedStrings = {}, - errorHandling = null, - execFunctions = function () { - for (var i=0, il=functionsToCall.length; i<il; i++) { - try { - functionsToCall[i](); - } - catch (e) { - if (errorHandling && typeof errorHandling === "function") { - errorHandling(e); - } - } - } - functionsToCall = []; - }, - DOMHasLoaded = function () { - if (DOMLoaded) { - return; - } - DOMLoaded = true; - execFunctions(); - }; - /* Internet Explorer */ - /*@cc_on - @if (@_win32 || @_win64) - document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>"); - document.getElementById("ieScriptLoad").onreadystatechange = function() { - if (this.readyState === "complete") { - DOMHasLoaded(); - } - }; - @end @*/ - /* Mozilla, Chrome, Opera */ - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", DOMHasLoaded, false); - } - /* Safari, iCab, Konqueror */ - if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) { - DOMLoadTimer = setInterval(function () { - if (/loaded|complete/i.test(document.readyState)) { - DOMHasLoaded(); - clearInterval(DOMLoadTimer); - } - }, 10); - } - /* Other web browsers */ - window.onload = DOMHasLoaded; - - return { - DOMReady : function () { - for (var i=0, il=arguments.length, funcRef; i<il; i++) { - funcRef = arguments[i]; - if (!funcRef.DOMReady && !addedStrings[funcRef]) { - if (typeof funcRef === "string") { - addedStrings[funcRef] = true; - funcRef = new Function(funcRef); - } - funcRef.DOMReady = true; - functionsToCall.push(funcRef); - } - } - if (DOMLoaded) { - execFunctions(); - } - }, - - setErrorHandling : function (funcRef) { - errorHandling = funcRef; - } - }; -}(); -DOMAssistant.DOMReady = DOMAssistant.DOMLoad.DOMReady;
\ No newline at end of file |