1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/tests/mochitest/ajax/mochikit/MochiKit/DOM.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1276 @@ 1.4 +/*** 1.5 + 1.6 +MochiKit.DOM 1.4 1.7 + 1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc. 1.9 + 1.10 +(c) 2005 Bob Ippolito. All rights Reserved. 1.11 + 1.12 +***/ 1.13 + 1.14 +if (typeof(dojo) != 'undefined') { 1.15 + dojo.provide("MochiKit.DOM"); 1.16 + dojo.require("MochiKit.Base"); 1.17 +} 1.18 +if (typeof(JSAN) != 'undefined') { 1.19 + JSAN.use("MochiKit.Base", []); 1.20 +} 1.21 + 1.22 +try { 1.23 + if (typeof(MochiKit.Base) == 'undefined') { 1.24 + throw ""; 1.25 + } 1.26 +} catch (e) { 1.27 + throw "MochiKit.DOM depends on MochiKit.Base!"; 1.28 +} 1.29 + 1.30 +if (typeof(MochiKit.DOM) == 'undefined') { 1.31 + MochiKit.DOM = {}; 1.32 +} 1.33 + 1.34 +MochiKit.DOM.NAME = "MochiKit.DOM"; 1.35 +MochiKit.DOM.VERSION = "1.4"; 1.36 +MochiKit.DOM.__repr__ = function () { 1.37 + return "[" + this.NAME + " " + this.VERSION + "]"; 1.38 +}; 1.39 +MochiKit.DOM.toString = function () { 1.40 + return this.__repr__(); 1.41 +}; 1.42 + 1.43 +MochiKit.DOM.EXPORT = [ 1.44 + "removeEmptyTextNodes", 1.45 + "formContents", 1.46 + "currentWindow", 1.47 + "currentDocument", 1.48 + "withWindow", 1.49 + "withDocument", 1.50 + "registerDOMConverter", 1.51 + "coerceToDOM", 1.52 + "createDOM", 1.53 + "createDOMFunc", 1.54 + "isChildNode", 1.55 + "getNodeAttribute", 1.56 + "removeNodeAttribute", 1.57 + "setNodeAttribute", 1.58 + "updateNodeAttributes", 1.59 + "appendChildNodes", 1.60 + "insertSiblingNodesAfter", 1.61 + "insertSiblingNodesBefore", 1.62 + "replaceChildNodes", 1.63 + "removeElement", 1.64 + "swapDOM", 1.65 + "BUTTON", 1.66 + "TT", 1.67 + "PRE", 1.68 + "H1", 1.69 + "H2", 1.70 + "H3", 1.71 + "BR", 1.72 + "CANVAS", 1.73 + "HR", 1.74 + "LABEL", 1.75 + "TEXTAREA", 1.76 + "FORM", 1.77 + "STRONG", 1.78 + "SELECT", 1.79 + "OPTION", 1.80 + "OPTGROUP", 1.81 + "LEGEND", 1.82 + "FIELDSET", 1.83 + "P", 1.84 + "UL", 1.85 + "OL", 1.86 + "LI", 1.87 + "TD", 1.88 + "TR", 1.89 + "THEAD", 1.90 + "TBODY", 1.91 + "TFOOT", 1.92 + "TABLE", 1.93 + "TH", 1.94 + "INPUT", 1.95 + "SPAN", 1.96 + "A", 1.97 + "DIV", 1.98 + "IMG", 1.99 + "getElement", 1.100 + "$", 1.101 + "getElementsByTagAndClassName", 1.102 + "addToCallStack", 1.103 + "addLoadEvent", 1.104 + "focusOnLoad", 1.105 + "setElementClass", 1.106 + "toggleElementClass", 1.107 + "addElementClass", 1.108 + "removeElementClass", 1.109 + "swapElementClass", 1.110 + "hasElementClass", 1.111 + "escapeHTML", 1.112 + "toHTML", 1.113 + "emitHTML", 1.114 + "scrapeText", 1.115 + "isParent", 1.116 + "getFirstParentByTagAndClassName", 1.117 + "makeClipping", 1.118 + "undoClipping", 1.119 + "makePositioned", 1.120 + "undoPositioned", 1.121 + "getFirstElementByTagAndClassName" 1.122 +]; 1.123 + 1.124 +MochiKit.DOM.EXPORT_OK = [ 1.125 + "domConverters" 1.126 +]; 1.127 + 1.128 +MochiKit.DOM.DEPRECATED = [ 1.129 + ['computedStyle', 'MochiKit.Style.getStyle', '1.4'], 1.130 + /** @id MochiKit.DOM.elementDimensions */ 1.131 + ['elementDimensions', 'MochiKit.Style.getElementDimensions', '1.4'], 1.132 + /** @id MochiKit.DOM.elementPosition */ 1.133 + ['elementPosition', 'MochiKit.Style.getElementPosition', '1.4'], 1.134 + ['hideElement', 'MochiKit.Style.hideElement', '1.4'], 1.135 + /** @id MochiKit.DOM.setElementDimensions */ 1.136 + ['setElementDimensions', 'MochiKit.Style.setElementDimensions', '1.4'], 1.137 + /** @id MochiKit.DOM.setElementPosition */ 1.138 + ['setElementPosition', 'MochiKit.Style.setElementPosition', '1.4'], 1.139 + ['setDisplayForElement', 'MochiKit.Style.setDisplayForElement', '1.4'], 1.140 + /** @id MochiKit.DOM.setOpacity */ 1.141 + ['setOpacity', 'MochiKit.Style.setOpacity', '1.4'], 1.142 + ['showElement', 'MochiKit.Style.showElement', '1.4'], 1.143 + /** @id MochiKit.DOM.Coordinates */ 1.144 + ['Coordinates', 'MochiKit.Style.Coordinates', '1.4'], // FIXME: broken 1.145 + /** @id MochiKit.DOM.Dimensions */ 1.146 + ['Dimensions', 'MochiKit.Style.Dimensions', '1.4'] // FIXME: broken 1.147 +]; 1.148 + 1.149 +/** @id MochiKit.DOM.getViewportDimensions */ 1.150 +MochiKit.DOM.getViewportDimensions = new Function('' + 1.151 + 'if (!MochiKit["Style"]) {' + 1.152 + ' throw new Error("This function has been deprecated and depends on MochiKit.Style.");' + 1.153 + '}' + 1.154 + 'return MochiKit.Style.getViewportDimensions.apply(this, arguments);'); 1.155 + 1.156 +MochiKit.Base.update(MochiKit.DOM, { 1.157 + 1.158 + /** @id MochiKit.DOM.currentWindow */ 1.159 + currentWindow: function () { 1.160 + return MochiKit.DOM._window; 1.161 + }, 1.162 + 1.163 + /** @id MochiKit.DOM.currentDocument */ 1.164 + currentDocument: function () { 1.165 + return MochiKit.DOM._document; 1.166 + }, 1.167 + 1.168 + /** @id MochiKit.DOM.withWindow */ 1.169 + withWindow: function (win, func) { 1.170 + var self = MochiKit.DOM; 1.171 + var oldDoc = self._document; 1.172 + var oldWin = self._window; 1.173 + var rval; 1.174 + try { 1.175 + self._window = win; 1.176 + self._document = win.document; 1.177 + rval = func(); 1.178 + } catch (e) { 1.179 + self._window = oldWin; 1.180 + self._document = oldDoc; 1.181 + throw e; 1.182 + } 1.183 + self._window = oldWin; 1.184 + self._document = oldDoc; 1.185 + return rval; 1.186 + }, 1.187 + 1.188 + /** @id MochiKit.DOM.formContents */ 1.189 + formContents: function (elem/* = document.body */) { 1.190 + var names = []; 1.191 + var values = []; 1.192 + var m = MochiKit.Base; 1.193 + var self = MochiKit.DOM; 1.194 + if (typeof(elem) == "undefined" || elem === null) { 1.195 + elem = self._document.body; 1.196 + } else { 1.197 + elem = self.getElement(elem); 1.198 + } 1.199 + m.nodeWalk(elem, function (elem) { 1.200 + var name = elem.name; 1.201 + if (m.isNotEmpty(name)) { 1.202 + var tagName = elem.tagName.toUpperCase(); 1.203 + if (tagName === "INPUT" 1.204 + && (elem.type == "radio" || elem.type == "checkbox") 1.205 + && !elem.checked 1.206 + ) { 1.207 + return null; 1.208 + } 1.209 + if (tagName === "SELECT") { 1.210 + if (elem.type == "select-one") { 1.211 + if (elem.selectedIndex >= 0) { 1.212 + var opt = elem.options[elem.selectedIndex]; 1.213 + var v = opt.value; 1.214 + if (!v) { 1.215 + var h = opt.outerHTML; 1.216 + // internet explorer sure does suck. 1.217 + if (h && !h.match(/^[^>]+\svalue\s*=/i)) { 1.218 + v = opt.text; 1.219 + } 1.220 + } 1.221 + names.push(name); 1.222 + values.push(v); 1.223 + return null; 1.224 + } 1.225 + // no form elements? 1.226 + names.push(name); 1.227 + values.push(""); 1.228 + return null; 1.229 + } else { 1.230 + var opts = elem.options; 1.231 + if (!opts.length) { 1.232 + names.push(name); 1.233 + values.push(""); 1.234 + return null; 1.235 + } 1.236 + for (var i = 0; i < opts.length; i++) { 1.237 + var opt = opts[i]; 1.238 + if (!opt.selected) { 1.239 + continue; 1.240 + } 1.241 + var v = opt.value; 1.242 + if (!v) { 1.243 + var h = opt.outerHTML; 1.244 + // internet explorer sure does suck. 1.245 + if (h && !h.match(/^[^>]+\svalue\s*=/i)) { 1.246 + v = opt.text; 1.247 + } 1.248 + } 1.249 + names.push(name); 1.250 + values.push(v); 1.251 + } 1.252 + return null; 1.253 + } 1.254 + } 1.255 + if (tagName === "FORM" || tagName === "P" || tagName === "SPAN" 1.256 + || tagName === "DIV" 1.257 + ) { 1.258 + return elem.childNodes; 1.259 + } 1.260 + names.push(name); 1.261 + values.push(elem.value || ''); 1.262 + return null; 1.263 + } 1.264 + return elem.childNodes; 1.265 + }); 1.266 + return [names, values]; 1.267 + }, 1.268 + 1.269 + /** @id MochiKit.DOM.withDocument */ 1.270 + withDocument: function (doc, func) { 1.271 + var self = MochiKit.DOM; 1.272 + var oldDoc = self._document; 1.273 + var rval; 1.274 + try { 1.275 + self._document = doc; 1.276 + rval = func(); 1.277 + } catch (e) { 1.278 + self._document = oldDoc; 1.279 + throw e; 1.280 + } 1.281 + self._document = oldDoc; 1.282 + return rval; 1.283 + }, 1.284 + 1.285 + /** @id MochiKit.DOM.registerDOMConverter */ 1.286 + registerDOMConverter: function (name, check, wrap, /* optional */override) { 1.287 + MochiKit.DOM.domConverters.register(name, check, wrap, override); 1.288 + }, 1.289 + 1.290 + /** @id MochiKit.DOM.coerceToDOM */ 1.291 + coerceToDOM: function (node, ctx) { 1.292 + var m = MochiKit.Base; 1.293 + var im = MochiKit.Iter; 1.294 + var self = MochiKit.DOM; 1.295 + if (im) { 1.296 + var iter = im.iter; 1.297 + var repeat = im.repeat; 1.298 + var map = m.map; 1.299 + } 1.300 + var domConverters = self.domConverters; 1.301 + var coerceToDOM = arguments.callee; 1.302 + var NotFound = m.NotFound; 1.303 + while (true) { 1.304 + if (typeof(node) == 'undefined' || node === null) { 1.305 + return null; 1.306 + } 1.307 + // this is a safari childNodes object, avoiding crashes w/ attr 1.308 + // lookup 1.309 + if (typeof(node) == "function" && 1.310 + typeof(node.length) == "number" && 1.311 + !(node instanceof Function)) { 1.312 + node = im.list(node); 1.313 + } 1.314 + if (typeof(node.nodeType) != 'undefined' && node.nodeType > 0) { 1.315 + return node; 1.316 + } 1.317 + if (typeof(node) == 'number' || typeof(node) == 'boolean') { 1.318 + node = node.toString(); 1.319 + // FALL THROUGH 1.320 + } 1.321 + if (typeof(node) == 'string') { 1.322 + return self._document.createTextNode(node); 1.323 + } 1.324 + if (typeof(node.__dom__) == 'function') { 1.325 + node = node.__dom__(ctx); 1.326 + continue; 1.327 + } 1.328 + if (typeof(node.dom) == 'function') { 1.329 + node = node.dom(ctx); 1.330 + continue; 1.331 + } 1.332 + if (typeof(node) == 'function') { 1.333 + node = node.apply(ctx, [ctx]); 1.334 + continue; 1.335 + } 1.336 + 1.337 + if (im) { 1.338 + // iterable 1.339 + var iterNodes = null; 1.340 + try { 1.341 + iterNodes = iter(node); 1.342 + } catch (e) { 1.343 + // pass 1.344 + } 1.345 + if (iterNodes) { 1.346 + return map(coerceToDOM, iterNodes, repeat(ctx)); 1.347 + } 1.348 + } 1.349 + 1.350 + // adapter 1.351 + try { 1.352 + node = domConverters.match(node, ctx); 1.353 + continue; 1.354 + } catch (e) { 1.355 + if (e != NotFound) { 1.356 + throw e; 1.357 + } 1.358 + } 1.359 + 1.360 + // fallback 1.361 + return self._document.createTextNode(node.toString()); 1.362 + } 1.363 + // mozilla warnings aren't too bright 1.364 + return undefined; 1.365 + }, 1.366 + 1.367 + /** @id MochiKit.DOM.isChildNode */ 1.368 + isChildNode: function (node, maybeparent) { 1.369 + var self = MochiKit.DOM; 1.370 + if (typeof(node) == "string") { 1.371 + node = self.getElement(node); 1.372 + } 1.373 + if (typeof(maybeparent) == "string") { 1.374 + maybeparent = self.getElement(maybeparent); 1.375 + } 1.376 + if (node === maybeparent) { 1.377 + return true; 1.378 + } 1.379 + while (node && node.tagName.toUpperCase() != "BODY") { 1.380 + node = node.parentNode; 1.381 + if (node === maybeparent) { 1.382 + return true; 1.383 + } 1.384 + } 1.385 + return false; 1.386 + }, 1.387 + 1.388 + /** @id MochiKit.DOM.setNodeAttribute */ 1.389 + setNodeAttribute: function (node, attr, value) { 1.390 + var o = {}; 1.391 + o[attr] = value; 1.392 + try { 1.393 + return MochiKit.DOM.updateNodeAttributes(node, o); 1.394 + } catch (e) { 1.395 + // pass 1.396 + } 1.397 + return null; 1.398 + }, 1.399 + 1.400 + /** @id MochiKit.DOM.getNodeAttribute */ 1.401 + getNodeAttribute: function (node, attr) { 1.402 + var self = MochiKit.DOM; 1.403 + var rename = self.attributeArray.renames[attr]; 1.404 + node = self.getElement(node); 1.405 + try { 1.406 + if (rename) { 1.407 + return node[rename]; 1.408 + } 1.409 + return node.getAttribute(attr); 1.410 + } catch (e) { 1.411 + // pass 1.412 + } 1.413 + return null; 1.414 + }, 1.415 + 1.416 + /** @id MochiKit.DOM.removeNodeAttribute */ 1.417 + removeNodeAttribute: function (node, attr) { 1.418 + var self = MochiKit.DOM; 1.419 + var rename = self.attributeArray.renames[attr]; 1.420 + node = self.getElement(node); 1.421 + try { 1.422 + if (rename) { 1.423 + return node[rename]; 1.424 + } 1.425 + return node.removeAttribute(attr); 1.426 + } catch (e) { 1.427 + // pass 1.428 + } 1.429 + return null; 1.430 + }, 1.431 + 1.432 + /** @id MochiKit.DOM.updateNodeAttributes */ 1.433 + updateNodeAttributes: function (node, attrs) { 1.434 + var elem = node; 1.435 + var self = MochiKit.DOM; 1.436 + if (typeof(node) == 'string') { 1.437 + elem = self.getElement(node); 1.438 + } 1.439 + if (attrs) { 1.440 + var updatetree = MochiKit.Base.updatetree; 1.441 + if (self.attributeArray.compliant) { 1.442 + // not IE, good. 1.443 + for (var k in attrs) { 1.444 + var v = attrs[k]; 1.445 + if (typeof(v) == 'object' && typeof(elem[k]) == 'object') { 1.446 + if (k == "style" && MochiKit.Style) { 1.447 + MochiKit.Style.setStyle(elem, v); 1.448 + } else { 1.449 + updatetree(elem[k], v); 1.450 + } 1.451 + } else if (k.substring(0, 2) == "on") { 1.452 + if (typeof(v) == "string") { 1.453 + v = new Function(v); 1.454 + } 1.455 + elem[k] = v; 1.456 + } else { 1.457 + elem.setAttribute(k, v); 1.458 + } 1.459 + } 1.460 + } else { 1.461 + // IE is insane in the membrane 1.462 + var renames = self.attributeArray.renames; 1.463 + for (var k in attrs) { 1.464 + v = attrs[k]; 1.465 + var renamed = renames[k]; 1.466 + if (k == "style" && typeof(v) == "string") { 1.467 + elem.style.cssText = v; 1.468 + } else if (typeof(renamed) == "string") { 1.469 + elem[renamed] = v; 1.470 + } else if (typeof(elem[k]) == 'object' 1.471 + && typeof(v) == 'object') { 1.472 + if (k == "style" && MochiKit.Style) { 1.473 + MochiKit.Style.setStyle(elem, v); 1.474 + } else { 1.475 + updatetree(elem[k], v); 1.476 + } 1.477 + } else if (k.substring(0, 2) == "on") { 1.478 + if (typeof(v) == "string") { 1.479 + v = new Function(v); 1.480 + } 1.481 + elem[k] = v; 1.482 + } else { 1.483 + elem.setAttribute(k, v); 1.484 + } 1.485 + } 1.486 + } 1.487 + } 1.488 + return elem; 1.489 + }, 1.490 + 1.491 + /** @id MochiKit.DOM.appendChildNodes */ 1.492 + appendChildNodes: function (node/*, nodes...*/) { 1.493 + var elem = node; 1.494 + var self = MochiKit.DOM; 1.495 + if (typeof(node) == 'string') { 1.496 + elem = self.getElement(node); 1.497 + } 1.498 + var nodeStack = [ 1.499 + self.coerceToDOM( 1.500 + MochiKit.Base.extend(null, arguments, 1), 1.501 + elem 1.502 + ) 1.503 + ]; 1.504 + var concat = MochiKit.Base.concat; 1.505 + while (nodeStack.length) { 1.506 + var n = nodeStack.shift(); 1.507 + if (typeof(n) == 'undefined' || n === null) { 1.508 + // pass 1.509 + } else if (typeof(n.nodeType) == 'number') { 1.510 + elem.appendChild(n); 1.511 + } else { 1.512 + nodeStack = concat(n, nodeStack); 1.513 + } 1.514 + } 1.515 + return elem; 1.516 + }, 1.517 + 1.518 + 1.519 + /** @id MochiKit.DOM.insertSiblingNodesBefore */ 1.520 + insertSiblingNodesBefore: function (node/*, nodes...*/) { 1.521 + var elem = node; 1.522 + var self = MochiKit.DOM; 1.523 + if (typeof(node) == 'string') { 1.524 + elem = self.getElement(node); 1.525 + } 1.526 + var nodeStack = [ 1.527 + self.coerceToDOM( 1.528 + MochiKit.Base.extend(null, arguments, 1), 1.529 + elem 1.530 + ) 1.531 + ]; 1.532 + var parentnode = elem.parentNode; 1.533 + var concat = MochiKit.Base.concat; 1.534 + while (nodeStack.length) { 1.535 + var n = nodeStack.shift(); 1.536 + if (typeof(n) == 'undefined' || n === null) { 1.537 + // pass 1.538 + } else if (typeof(n.nodeType) == 'number') { 1.539 + parentnode.insertBefore(n, elem); 1.540 + } else { 1.541 + nodeStack = concat(n, nodeStack); 1.542 + } 1.543 + } 1.544 + return parentnode; 1.545 + }, 1.546 + 1.547 + /** @id MochiKit.DOM.insertSiblingNodesAfter */ 1.548 + insertSiblingNodesAfter: function (node/*, nodes...*/) { 1.549 + var elem = node; 1.550 + var self = MochiKit.DOM; 1.551 + 1.552 + if (typeof(node) == 'string') { 1.553 + elem = self.getElement(node); 1.554 + } 1.555 + var nodeStack = [ 1.556 + self.coerceToDOM( 1.557 + MochiKit.Base.extend(null, arguments, 1), 1.558 + elem 1.559 + ) 1.560 + ]; 1.561 + 1.562 + if (elem.nextSibling) { 1.563 + return self.insertSiblingNodesBefore(elem.nextSibling, nodeStack); 1.564 + } 1.565 + else { 1.566 + return self.appendChildNodes(elem.parentNode, nodeStack); 1.567 + } 1.568 + }, 1.569 + 1.570 + /** @id MochiKit.DOM.replaceChildNodes */ 1.571 + replaceChildNodes: function (node/*, nodes...*/) { 1.572 + var elem = node; 1.573 + var self = MochiKit.DOM; 1.574 + if (typeof(node) == 'string') { 1.575 + elem = self.getElement(node); 1.576 + arguments[0] = elem; 1.577 + } 1.578 + var child; 1.579 + while ((child = elem.firstChild)) { 1.580 + elem.removeChild(child); 1.581 + } 1.582 + if (arguments.length < 2) { 1.583 + return elem; 1.584 + } else { 1.585 + return self.appendChildNodes.apply(this, arguments); 1.586 + } 1.587 + }, 1.588 + 1.589 + /** @id MochiKit.DOM.createDOM */ 1.590 + createDOM: function (name, attrs/*, nodes... */) { 1.591 + var elem; 1.592 + var self = MochiKit.DOM; 1.593 + var m = MochiKit.Base; 1.594 + if (typeof(attrs) == "string" || typeof(attrs) == "number") { 1.595 + var args = m.extend([name, null], arguments, 1); 1.596 + return arguments.callee.apply(this, args); 1.597 + } 1.598 + if (typeof(name) == 'string') { 1.599 + // Internet Explorer is dumb 1.600 + var xhtml = self._xhtml; 1.601 + if (attrs && !self.attributeArray.compliant) { 1.602 + // http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/name_2.asp 1.603 + var contents = ""; 1.604 + if ('name' in attrs) { 1.605 + contents += ' name="' + self.escapeHTML(attrs.name) + '"'; 1.606 + } 1.607 + if (name == 'input' && 'type' in attrs) { 1.608 + contents += ' type="' + self.escapeHTML(attrs.type) + '"'; 1.609 + } 1.610 + if (contents) { 1.611 + name = "<" + name + contents + ">"; 1.612 + xhtml = false; 1.613 + } 1.614 + } 1.615 + var d = self._document; 1.616 + if (xhtml && d === document) { 1.617 + elem = d.createElementNS("http://www.w3.org/1999/xhtml", name); 1.618 + } else { 1.619 + elem = d.createElement(name); 1.620 + } 1.621 + } else { 1.622 + elem = name; 1.623 + } 1.624 + if (attrs) { 1.625 + self.updateNodeAttributes(elem, attrs); 1.626 + } 1.627 + if (arguments.length <= 2) { 1.628 + return elem; 1.629 + } else { 1.630 + var args = m.extend([elem], arguments, 2); 1.631 + return self.appendChildNodes.apply(this, args); 1.632 + } 1.633 + }, 1.634 + 1.635 + /** @id MochiKit.DOM.createDOMFunc */ 1.636 + createDOMFunc: function (/* tag, attrs, *nodes */) { 1.637 + var m = MochiKit.Base; 1.638 + return m.partial.apply( 1.639 + this, 1.640 + m.extend([MochiKit.DOM.createDOM], arguments) 1.641 + ); 1.642 + }, 1.643 + 1.644 + /** @id MochiKit.DOM.removeElement */ 1.645 + removeElement: function (elem) { 1.646 + var e = MochiKit.DOM.getElement(elem); 1.647 + e.parentNode.removeChild(e); 1.648 + return e; 1.649 + }, 1.650 + 1.651 + /** @id MochiKit.DOM.swapDOM */ 1.652 + swapDOM: function (dest, src) { 1.653 + var self = MochiKit.DOM; 1.654 + dest = self.getElement(dest); 1.655 + var parent = dest.parentNode; 1.656 + if (src) { 1.657 + src = self.getElement(src); 1.658 + parent.replaceChild(src, dest); 1.659 + } else { 1.660 + parent.removeChild(dest); 1.661 + } 1.662 + return src; 1.663 + }, 1.664 + 1.665 + /** @id MochiKit.DOM.getElement */ 1.666 + getElement: function (id) { 1.667 + var self = MochiKit.DOM; 1.668 + if (arguments.length == 1) { 1.669 + return ((typeof(id) == "string") ? 1.670 + self._document.getElementById(id) : id); 1.671 + } else { 1.672 + return MochiKit.Base.map(self.getElement, arguments); 1.673 + } 1.674 + }, 1.675 + 1.676 + /** @id MochiKit.DOM.getElementsByTagAndClassName */ 1.677 + getElementsByTagAndClassName: function (tagName, className, 1.678 + /* optional */parent) { 1.679 + var self = MochiKit.DOM; 1.680 + if (typeof(tagName) == 'undefined' || tagName === null) { 1.681 + tagName = '*'; 1.682 + } 1.683 + if (typeof(parent) == 'undefined' || parent === null) { 1.684 + parent = self._document; 1.685 + } 1.686 + parent = self.getElement(parent); 1.687 + var children = (parent.getElementsByTagName(tagName) 1.688 + || self._document.all); 1.689 + if (typeof(className) == 'undefined' || className === null) { 1.690 + return MochiKit.Base.extend(null, children); 1.691 + } 1.692 + 1.693 + var elements = []; 1.694 + for (var i = 0; i < children.length; i++) { 1.695 + var child = children[i]; 1.696 + var cls = child.className; 1.697 + if (!cls) { 1.698 + continue; 1.699 + } 1.700 + var classNames = cls.split(' '); 1.701 + for (var j = 0; j < classNames.length; j++) { 1.702 + if (classNames[j] == className) { 1.703 + elements.push(child); 1.704 + break; 1.705 + } 1.706 + } 1.707 + } 1.708 + 1.709 + return elements; 1.710 + }, 1.711 + 1.712 + _newCallStack: function (path, once) { 1.713 + var rval = function () { 1.714 + var callStack = arguments.callee.callStack; 1.715 + for (var i = 0; i < callStack.length; i++) { 1.716 + if (callStack[i].apply(this, arguments) === false) { 1.717 + break; 1.718 + } 1.719 + } 1.720 + if (once) { 1.721 + try { 1.722 + this[path] = null; 1.723 + } catch (e) { 1.724 + // pass 1.725 + } 1.726 + } 1.727 + }; 1.728 + rval.callStack = []; 1.729 + return rval; 1.730 + }, 1.731 + 1.732 + /** @id MochiKit.DOM.addToCallStack */ 1.733 + addToCallStack: function (target, path, func, once) { 1.734 + var self = MochiKit.DOM; 1.735 + var existing = target[path]; 1.736 + var regfunc = existing; 1.737 + if (!(typeof(existing) == 'function' 1.738 + && typeof(existing.callStack) == "object" 1.739 + && existing.callStack !== null)) { 1.740 + regfunc = self._newCallStack(path, once); 1.741 + if (typeof(existing) == 'function') { 1.742 + regfunc.callStack.push(existing); 1.743 + } 1.744 + target[path] = regfunc; 1.745 + } 1.746 + regfunc.callStack.push(func); 1.747 + }, 1.748 + 1.749 + /** @id MochiKit.DOM.addLoadEvent */ 1.750 + addLoadEvent: function (func) { 1.751 + var self = MochiKit.DOM; 1.752 + self.addToCallStack(self._window, "onload", func, true); 1.753 + 1.754 + }, 1.755 + 1.756 + /** @id MochiKit.DOM.focusOnLoad */ 1.757 + focusOnLoad: function (element) { 1.758 + var self = MochiKit.DOM; 1.759 + self.addLoadEvent(function () { 1.760 + element = self.getElement(element); 1.761 + if (element) { 1.762 + element.focus(); 1.763 + } 1.764 + }); 1.765 + }, 1.766 + 1.767 + /** @id MochiKit.DOM.setElementClass */ 1.768 + setElementClass: function (element, className) { 1.769 + var self = MochiKit.DOM; 1.770 + var obj = self.getElement(element); 1.771 + if (self.attributeArray.compliant) { 1.772 + obj.setAttribute("class", className); 1.773 + } else { 1.774 + obj.setAttribute("className", className); 1.775 + } 1.776 + }, 1.777 + 1.778 + /** @id MochiKit.DOM.toggleElementClass */ 1.779 + toggleElementClass: function (className/*, element... */) { 1.780 + var self = MochiKit.DOM; 1.781 + for (var i = 1; i < arguments.length; i++) { 1.782 + var obj = self.getElement(arguments[i]); 1.783 + if (!self.addElementClass(obj, className)) { 1.784 + self.removeElementClass(obj, className); 1.785 + } 1.786 + } 1.787 + }, 1.788 + 1.789 + /** @id MochiKit.DOM.addElementClass */ 1.790 + addElementClass: function (element, className) { 1.791 + var self = MochiKit.DOM; 1.792 + var obj = self.getElement(element); 1.793 + var cls = obj.className; 1.794 + // trivial case, no className yet 1.795 + if (cls == undefined || cls.length === 0) { 1.796 + self.setElementClass(obj, className); 1.797 + return true; 1.798 + } 1.799 + // the other trivial case, already set as the only class 1.800 + if (cls == className) { 1.801 + return false; 1.802 + } 1.803 + var classes = cls.split(" "); 1.804 + for (var i = 0; i < classes.length; i++) { 1.805 + // already present 1.806 + if (classes[i] == className) { 1.807 + return false; 1.808 + } 1.809 + } 1.810 + // append class 1.811 + self.setElementClass(obj, cls + " " + className); 1.812 + return true; 1.813 + }, 1.814 + 1.815 + /** @id MochiKit.DOM.removeElementClass */ 1.816 + removeElementClass: function (element, className) { 1.817 + var self = MochiKit.DOM; 1.818 + var obj = self.getElement(element); 1.819 + var cls = obj.className; 1.820 + // trivial case, no className yet 1.821 + if (cls == undefined || cls.length === 0) { 1.822 + return false; 1.823 + } 1.824 + // other trivial case, set only to className 1.825 + if (cls == className) { 1.826 + self.setElementClass(obj, ""); 1.827 + return true; 1.828 + } 1.829 + var classes = cls.split(" "); 1.830 + for (var i = 0; i < classes.length; i++) { 1.831 + // already present 1.832 + if (classes[i] == className) { 1.833 + // only check sane case where the class is used once 1.834 + classes.splice(i, 1); 1.835 + self.setElementClass(obj, classes.join(" ")); 1.836 + return true; 1.837 + } 1.838 + } 1.839 + // not found 1.840 + return false; 1.841 + }, 1.842 + 1.843 + /** @id MochiKit.DOM.swapElementClass */ 1.844 + swapElementClass: function (element, fromClass, toClass) { 1.845 + var obj = MochiKit.DOM.getElement(element); 1.846 + var res = MochiKit.DOM.removeElementClass(obj, fromClass); 1.847 + if (res) { 1.848 + MochiKit.DOM.addElementClass(obj, toClass); 1.849 + } 1.850 + return res; 1.851 + }, 1.852 + 1.853 + /** @id MochiKit.DOM.hasElementClass */ 1.854 + hasElementClass: function (element, className/*...*/) { 1.855 + var obj = MochiKit.DOM.getElement(element); 1.856 + var cls = obj.className; 1.857 + if (!cls) { 1.858 + return false; 1.859 + } 1.860 + var classes = cls.split(" "); 1.861 + for (var i = 1; i < arguments.length; i++) { 1.862 + var good = false; 1.863 + for (var j = 0; j < classes.length; j++) { 1.864 + if (classes[j] == arguments[i]) { 1.865 + good = true; 1.866 + break; 1.867 + } 1.868 + } 1.869 + if (!good) { 1.870 + return false; 1.871 + } 1.872 + } 1.873 + return true; 1.874 + }, 1.875 + 1.876 + /** @id MochiKit.DOM.escapeHTML */ 1.877 + escapeHTML: function (s) { 1.878 + return s.replace(/&/g, "&" 1.879 + ).replace(/"/g, """ 1.880 + ).replace(/</g, "<" 1.881 + ).replace(/>/g, ">"); 1.882 + }, 1.883 + 1.884 + /** @id MochiKit.DOM.toHTML */ 1.885 + toHTML: function (dom) { 1.886 + return MochiKit.DOM.emitHTML(dom).join(""); 1.887 + }, 1.888 + 1.889 + /** @id MochiKit.DOM.emitHTML */ 1.890 + emitHTML: function (dom, /* optional */lst) { 1.891 + if (typeof(lst) == 'undefined' || lst === null) { 1.892 + lst = []; 1.893 + } 1.894 + // queue is the call stack, we're doing this non-recursively 1.895 + var queue = [dom]; 1.896 + var self = MochiKit.DOM; 1.897 + var escapeHTML = self.escapeHTML; 1.898 + var attributeArray = self.attributeArray; 1.899 + while (queue.length) { 1.900 + dom = queue.pop(); 1.901 + if (typeof(dom) == 'string') { 1.902 + lst.push(dom); 1.903 + } else if (dom.nodeType == 1) { 1.904 + // we're not using higher order stuff here 1.905 + // because safari has heisenbugs.. argh. 1.906 + // 1.907 + // I think it might have something to do with 1.908 + // garbage collection and function calls. 1.909 + lst.push('<' + dom.tagName.toLowerCase()); 1.910 + var attributes = []; 1.911 + var domAttr = attributeArray(dom); 1.912 + for (var i = 0; i < domAttr.length; i++) { 1.913 + var a = domAttr[i]; 1.914 + attributes.push([ 1.915 + " ", 1.916 + a.name, 1.917 + '="', 1.918 + escapeHTML(a.value), 1.919 + '"' 1.920 + ]); 1.921 + } 1.922 + attributes.sort(); 1.923 + for (i = 0; i < attributes.length; i++) { 1.924 + var attrs = attributes[i]; 1.925 + for (var j = 0; j < attrs.length; j++) { 1.926 + lst.push(attrs[j]); 1.927 + } 1.928 + } 1.929 + if (dom.hasChildNodes()) { 1.930 + lst.push(">"); 1.931 + // queue is the FILO call stack, so we put the close tag 1.932 + // on first 1.933 + queue.push("</" + dom.tagName.toLowerCase() + ">"); 1.934 + var cnodes = dom.childNodes; 1.935 + for (i = cnodes.length - 1; i >= 0; i--) { 1.936 + queue.push(cnodes[i]); 1.937 + } 1.938 + } else { 1.939 + lst.push('/>'); 1.940 + } 1.941 + } else if (dom.nodeType == 3) { 1.942 + lst.push(escapeHTML(dom.nodeValue)); 1.943 + } 1.944 + } 1.945 + return lst; 1.946 + }, 1.947 + 1.948 + /** @id MochiKit.DOM.scrapeText */ 1.949 + scrapeText: function (node, /* optional */asArray) { 1.950 + var rval = []; 1.951 + (function (node) { 1.952 + var cn = node.childNodes; 1.953 + if (cn) { 1.954 + for (var i = 0; i < cn.length; i++) { 1.955 + arguments.callee.call(this, cn[i]); 1.956 + } 1.957 + } 1.958 + var nodeValue = node.nodeValue; 1.959 + if (typeof(nodeValue) == 'string') { 1.960 + rval.push(nodeValue); 1.961 + } 1.962 + })(MochiKit.DOM.getElement(node)); 1.963 + if (asArray) { 1.964 + return rval; 1.965 + } else { 1.966 + return rval.join(""); 1.967 + } 1.968 + }, 1.969 + 1.970 + /** @id MochiKit.DOM.removeEmptyTextNodes */ 1.971 + removeEmptyTextNodes: function (element) { 1.972 + element = MochiKit.DOM.getElement(element); 1.973 + for (var i = 0; i < element.childNodes.length; i++) { 1.974 + var node = element.childNodes[i]; 1.975 + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) { 1.976 + node.parentNode.removeChild(node); 1.977 + } 1.978 + } 1.979 + }, 1.980 + 1.981 + /** @id MochiKit.DOM.makeClipping */ 1.982 + makeClipping: function (element) { 1.983 + element = MochiKit.DOM.getElement(element); 1.984 + var oldOverflow = element.style.overflow; 1.985 + if ((MochiKit.Style.getStyle(element, 'overflow') || 'visible') != 'hidden') { 1.986 + element.style.overflow = 'hidden'; 1.987 + } 1.988 + return oldOverflow; 1.989 + }, 1.990 + 1.991 + /** @id MochiKit.DOM.undoClipping */ 1.992 + undoClipping: function (element, overflow) { 1.993 + element = MochiKit.DOM.getElement(element); 1.994 + if (!overflow) { 1.995 + return; 1.996 + } 1.997 + element.style.overflow = overflow; 1.998 + }, 1.999 + 1.1000 + /** @id MochiKit.DOM.makePositioned */ 1.1001 + makePositioned: function (element) { 1.1002 + element = MochiKit.DOM.getElement(element); 1.1003 + var pos = MochiKit.Style.getStyle(element, 'position'); 1.1004 + if (pos == 'static' || !pos) { 1.1005 + element.style.position = 'relative'; 1.1006 + // Opera returns the offset relative to the positioning context, 1.1007 + // when an element is position relative but top and left have 1.1008 + // not been defined 1.1009 + if (/Opera/.test(navigator.userAgent)) { 1.1010 + element.style.top = 0; 1.1011 + element.style.left = 0; 1.1012 + } 1.1013 + } 1.1014 + }, 1.1015 + 1.1016 + /** @id MochiKit.DOM.undoPositioned */ 1.1017 + undoPositioned: function (element) { 1.1018 + element = MochiKit.DOM.getElement(element); 1.1019 + if (element.style.position == 'relative') { 1.1020 + element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; 1.1021 + } 1.1022 + }, 1.1023 + 1.1024 + /** @id MochiKit.DOM.getFirstElementByTagAndClassName */ 1.1025 + getFirstElementByTagAndClassName: function (tagName, className, 1.1026 + /* optional */parent) { 1.1027 + var self = MochiKit.DOM; 1.1028 + if (typeof(tagName) == 'undefined' || tagName === null) { 1.1029 + tagName = '*'; 1.1030 + } 1.1031 + if (typeof(parent) == 'undefined' || parent === null) { 1.1032 + parent = self._document; 1.1033 + } 1.1034 + parent = self.getElement(parent); 1.1035 + var children = (parent.getElementsByTagName(tagName) 1.1036 + || self._document.all); 1.1037 + if (typeof(className) == 'undefined' || className === null) { 1.1038 + return children[0]; 1.1039 + } 1.1040 + 1.1041 + for (var i = 0; i < children.length; i++) { 1.1042 + var child = children[i]; 1.1043 + var classNames = child.className.split(' '); 1.1044 + for (var j = 0; j < classNames.length; j++) { 1.1045 + if (classNames[j] == className) { 1.1046 + return child; 1.1047 + } 1.1048 + } 1.1049 + } 1.1050 + }, 1.1051 + 1.1052 + /** @id MochiKit.DOM.getFirstParentByTagAndClassName */ 1.1053 + getFirstParentByTagAndClassName: function (elem, tagName, className) { 1.1054 + var self = MochiKit.DOM; 1.1055 + elem = self.getElement(elem); 1.1056 + if (typeof(tagName) == 'undefined' || tagName === null) { 1.1057 + tagName = '*'; 1.1058 + } else { 1.1059 + tagName = tagName.toUpperCase(); 1.1060 + } 1.1061 + if (typeof(className) == 'undefined' || className === null) { 1.1062 + className = null; 1.1063 + } 1.1064 + 1.1065 + var classList = ''; 1.1066 + var curTagName = ''; 1.1067 + while (elem && elem.tagName) { 1.1068 + elem = elem.parentNode; 1.1069 + if (tagName == '*' && className === null) { 1.1070 + return elem; 1.1071 + } 1.1072 + classList = elem.className.split(' '); 1.1073 + curTagName = elem.tagName.toUpperCase(); 1.1074 + if (className === null && tagName == curTagName) { 1.1075 + return elem; 1.1076 + } else if (className !== null) { 1.1077 + for (var i = 0; i < classList.length; i++) { 1.1078 + if (tagName == '*' && classList[i] == className) { 1.1079 + return elem; 1.1080 + } else if (tagName == curTagName && classList[i] == className) { 1.1081 + return elem; 1.1082 + } 1.1083 + } 1.1084 + } 1.1085 + } 1.1086 + return elem; 1.1087 + }, 1.1088 + 1.1089 + /** @id MochiKit.DOM.isParent */ 1.1090 + isParent: function (child, element) { 1.1091 + if (!child.parentNode || child == element) { 1.1092 + return false; 1.1093 + } 1.1094 + 1.1095 + if (child.parentNode == element) { 1.1096 + return true; 1.1097 + } 1.1098 + 1.1099 + return MochiKit.DOM.isParent(child.parentNode, element); 1.1100 + }, 1.1101 + 1.1102 + __new__: function (win) { 1.1103 + 1.1104 + var m = MochiKit.Base; 1.1105 + if (typeof(document) != "undefined") { 1.1106 + this._document = document; 1.1107 + var kXULNSURI = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 1.1108 + this._xhtml = (document.documentElement && 1.1109 + document.createElementNS && 1.1110 + document.documentElement.namespaceURI === kXULNSURI); 1.1111 + } else if (MochiKit.MockDOM) { 1.1112 + this._document = MochiKit.MockDOM.document; 1.1113 + } 1.1114 + this._window = win; 1.1115 + 1.1116 + this.domConverters = new m.AdapterRegistry(); 1.1117 + 1.1118 + var __tmpElement = this._document.createElement("span"); 1.1119 + var attributeArray; 1.1120 + if (__tmpElement && __tmpElement.attributes && 1.1121 + __tmpElement.attributes.length > 0) { 1.1122 + // for braindead browsers (IE) that insert extra junk 1.1123 + var filter = m.filter; 1.1124 + attributeArray = function (node) { 1.1125 + return filter(attributeArray.ignoreAttrFilter, node.attributes); 1.1126 + }; 1.1127 + attributeArray.ignoreAttr = {}; 1.1128 + var attrs = __tmpElement.attributes; 1.1129 + var ignoreAttr = attributeArray.ignoreAttr; 1.1130 + for (var i = 0; i < attrs.length; i++) { 1.1131 + var a = attrs[i]; 1.1132 + ignoreAttr[a.name] = a.value; 1.1133 + } 1.1134 + attributeArray.ignoreAttrFilter = function (a) { 1.1135 + return (attributeArray.ignoreAttr[a.name] != a.value); 1.1136 + }; 1.1137 + attributeArray.compliant = false; 1.1138 + attributeArray.renames = { 1.1139 + "class": "className", 1.1140 + "checked": "defaultChecked", 1.1141 + "usemap": "useMap", 1.1142 + "for": "htmlFor", 1.1143 + "readonly": "readOnly", 1.1144 + "colspan": "colSpan", 1.1145 + "bgcolor": "bgColor", 1.1146 + "cellspacing": "cellSpacing", 1.1147 + "cellpadding": "cellPadding" 1.1148 + }; 1.1149 + } else { 1.1150 + attributeArray = function (node) { 1.1151 + /*** 1.1152 + 1.1153 + Return an array of attributes for a given node, 1.1154 + filtering out attributes that don't belong for 1.1155 + that are inserted by "Certain Browsers". 1.1156 + 1.1157 + ***/ 1.1158 + return node.attributes; 1.1159 + }; 1.1160 + attributeArray.compliant = true; 1.1161 + attributeArray.renames = {}; 1.1162 + } 1.1163 + this.attributeArray = attributeArray; 1.1164 + 1.1165 + // FIXME: this really belongs in Base, and could probably be cleaner 1.1166 + var _deprecated = function(fromModule, arr) { 1.1167 + var modules = arr[1].split('.'); 1.1168 + var str = ''; 1.1169 + var obj = {}; 1.1170 + 1.1171 + str += 'if (!MochiKit.' + modules[1] + ') { throw new Error("'; 1.1172 + str += 'This function has been deprecated and depends on MochiKit.'; 1.1173 + str += modules[1] + '.");}'; 1.1174 + str += 'return MochiKit.' + modules[1] + '.' + arr[0]; 1.1175 + str += '.apply(this, arguments);'; 1.1176 + 1.1177 + obj[modules[2]] = new Function(str); 1.1178 + MochiKit.Base.update(MochiKit[fromModule], obj); 1.1179 + } 1.1180 + for (var i; i < MochiKit.DOM.DEPRECATED.length; i++) { 1.1181 + _deprecated('DOM', MochiKit.DOM.DEPRECATED[i]); 1.1182 + } 1.1183 + 1.1184 + // shorthand for createDOM syntax 1.1185 + var createDOMFunc = this.createDOMFunc; 1.1186 + /** @id MochiKit.DOM.UL */ 1.1187 + this.UL = createDOMFunc("ul"); 1.1188 + /** @id MochiKit.DOM.OL */ 1.1189 + this.OL = createDOMFunc("ol"); 1.1190 + /** @id MochiKit.DOM.LI */ 1.1191 + this.LI = createDOMFunc("li"); 1.1192 + /** @id MochiKit.DOM.TD */ 1.1193 + this.TD = createDOMFunc("td"); 1.1194 + /** @id MochiKit.DOM.TR */ 1.1195 + this.TR = createDOMFunc("tr"); 1.1196 + /** @id MochiKit.DOM.TBODY */ 1.1197 + this.TBODY = createDOMFunc("tbody"); 1.1198 + /** @id MochiKit.DOM.THEAD */ 1.1199 + this.THEAD = createDOMFunc("thead"); 1.1200 + /** @id MochiKit.DOM.TFOOT */ 1.1201 + this.TFOOT = createDOMFunc("tfoot"); 1.1202 + /** @id MochiKit.DOM.TABLE */ 1.1203 + this.TABLE = createDOMFunc("table"); 1.1204 + /** @id MochiKit.DOM.TH */ 1.1205 + this.TH = createDOMFunc("th"); 1.1206 + /** @id MochiKit.DOM.INPUT */ 1.1207 + this.INPUT = createDOMFunc("input"); 1.1208 + /** @id MochiKit.DOM.SPAN */ 1.1209 + this.SPAN = createDOMFunc("span"); 1.1210 + /** @id MochiKit.DOM.A */ 1.1211 + this.A = createDOMFunc("a"); 1.1212 + /** @id MochiKit.DOM.DIV */ 1.1213 + this.DIV = createDOMFunc("div"); 1.1214 + /** @id MochiKit.DOM.IMG */ 1.1215 + this.IMG = createDOMFunc("img"); 1.1216 + /** @id MochiKit.DOM.BUTTON */ 1.1217 + this.BUTTON = createDOMFunc("button"); 1.1218 + /** @id MochiKit.DOM.TT */ 1.1219 + this.TT = createDOMFunc("tt"); 1.1220 + /** @id MochiKit.DOM.PRE */ 1.1221 + this.PRE = createDOMFunc("pre"); 1.1222 + /** @id MochiKit.DOM.H1 */ 1.1223 + this.H1 = createDOMFunc("h1"); 1.1224 + /** @id MochiKit.DOM.H2 */ 1.1225 + this.H2 = createDOMFunc("h2"); 1.1226 + /** @id MochiKit.DOM.H3 */ 1.1227 + this.H3 = createDOMFunc("h3"); 1.1228 + /** @id MochiKit.DOM.BR */ 1.1229 + this.BR = createDOMFunc("br"); 1.1230 + /** @id MochiKit.DOM.HR */ 1.1231 + this.HR = createDOMFunc("hr"); 1.1232 + /** @id MochiKit.DOM.LABEL */ 1.1233 + this.LABEL = createDOMFunc("label"); 1.1234 + /** @id MochiKit.DOM.TEXTAREA */ 1.1235 + this.TEXTAREA = createDOMFunc("textarea"); 1.1236 + /** @id MochiKit.DOM.FORM */ 1.1237 + this.FORM = createDOMFunc("form"); 1.1238 + /** @id MochiKit.DOM.P */ 1.1239 + this.P = createDOMFunc("p"); 1.1240 + /** @id MochiKit.DOM.SELECT */ 1.1241 + this.SELECT = createDOMFunc("select"); 1.1242 + /** @id MochiKit.DOM.OPTION */ 1.1243 + this.OPTION = createDOMFunc("option"); 1.1244 + /** @id MochiKit.DOM.OPTGROUP */ 1.1245 + this.OPTGROUP = createDOMFunc("optgroup"); 1.1246 + /** @id MochiKit.DOM.LEGEND */ 1.1247 + this.LEGEND = createDOMFunc("legend"); 1.1248 + /** @id MochiKit.DOM.FIELDSET */ 1.1249 + this.FIELDSET = createDOMFunc("fieldset"); 1.1250 + /** @id MochiKit.DOM.STRONG */ 1.1251 + this.STRONG = createDOMFunc("strong"); 1.1252 + /** @id MochiKit.DOM.CANVAS */ 1.1253 + this.CANVAS = createDOMFunc("canvas"); 1.1254 + 1.1255 + /** @id MochiKit.DOM.$ */ 1.1256 + this.$ = this.getElement; 1.1257 + 1.1258 + this.EXPORT_TAGS = { 1.1259 + ":common": this.EXPORT, 1.1260 + ":all": m.concat(this.EXPORT, this.EXPORT_OK) 1.1261 + }; 1.1262 + 1.1263 + m.nameFunctions(this); 1.1264 + 1.1265 + } 1.1266 +}); 1.1267 + 1.1268 + 1.1269 +MochiKit.DOM.__new__(((typeof(window) == "undefined") ? this : window)); 1.1270 + 1.1271 +// 1.1272 +// XXX: Internet Explorer blows 1.1273 +// 1.1274 +if (MochiKit.__export__) { 1.1275 + withWindow = MochiKit.DOM.withWindow; 1.1276 + withDocument = MochiKit.DOM.withDocument; 1.1277 +} 1.1278 + 1.1279 +MochiKit.Base._exportSymbols(this, MochiKit.DOM);