@p4ulcristian/iris-layout 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cljs-runtime/cljs.core.js +38746 -0
- package/dist/cljs-runtime/cljs.core.js.map +1 -0
- package/dist/cljs-runtime/cljs.pprint.js +8400 -0
- package/dist/cljs-runtime/cljs.pprint.js.map +1 -0
- package/dist/cljs-runtime/cljs.stacktrace.js +561 -0
- package/dist/cljs-runtime/cljs.stacktrace.js.map +1 -0
- package/dist/cljs-runtime/cljs_env.js +1286 -0
- package/dist/cljs-runtime/clojure.data.js +295 -0
- package/dist/cljs-runtime/clojure.data.js.map +1 -0
- package/dist/cljs-runtime/clojure.set.js +382 -0
- package/dist/cljs-runtime/clojure.set.js.map +1 -0
- package/dist/cljs-runtime/clojure.string.js +480 -0
- package/dist/cljs-runtime/clojure.string.js.map +1 -0
- package/dist/cljs-runtime/clojure.walk.js +132 -0
- package/dist/cljs-runtime/clojure.walk.js.map +1 -0
- package/dist/cljs-runtime/devtools.async.js +90 -0
- package/dist/cljs-runtime/devtools.async.js.map +1 -0
- package/dist/cljs-runtime/devtools.context.js +11 -0
- package/dist/cljs-runtime/devtools.context.js.map +1 -0
- package/dist/cljs-runtime/devtools.core.js +175 -0
- package/dist/cljs-runtime/devtools.core.js.map +1 -0
- package/dist/cljs-runtime/devtools.defaults.js +20 -0
- package/dist/cljs-runtime/devtools.defaults.js.map +1 -0
- package/dist/cljs-runtime/devtools.format.js +631 -0
- package/dist/cljs-runtime/devtools.format.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.budgeting.js +182 -0
- package/dist/cljs-runtime/devtools.formatters.budgeting.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.core.js +220 -0
- package/dist/cljs-runtime/devtools.formatters.core.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.helpers.js +228 -0
- package/dist/cljs-runtime/devtools.formatters.helpers.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.js +261 -0
- package/dist/cljs-runtime/devtools.formatters.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.markup.js +1174 -0
- package/dist/cljs-runtime/devtools.formatters.markup.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.printing.js +313 -0
- package/dist/cljs-runtime/devtools.formatters.printing.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.state.js +325 -0
- package/dist/cljs-runtime/devtools.formatters.state.js.map +1 -0
- package/dist/cljs-runtime/devtools.formatters.templating.js +666 -0
- package/dist/cljs-runtime/devtools.formatters.templating.js.map +1 -0
- package/dist/cljs-runtime/devtools.hints.js +193 -0
- package/dist/cljs-runtime/devtools.hints.js.map +1 -0
- package/dist/cljs-runtime/devtools.munging.js +1058 -0
- package/dist/cljs-runtime/devtools.munging.js.map +1 -0
- package/dist/cljs-runtime/devtools.prefs.js +87 -0
- package/dist/cljs-runtime/devtools.prefs.js.map +1 -0
- package/dist/cljs-runtime/devtools.preload.js +11 -0
- package/dist/cljs-runtime/devtools.preload.js.map +1 -0
- package/dist/cljs-runtime/devtools.protocols.js +98 -0
- package/dist/cljs-runtime/devtools.protocols.js.map +1 -0
- package/dist/cljs-runtime/devtools.reporter.js +81 -0
- package/dist/cljs-runtime/devtools.reporter.js.map +1 -0
- package/dist/cljs-runtime/devtools.toolbox.js +141 -0
- package/dist/cljs-runtime/devtools.toolbox.js.map +1 -0
- package/dist/cljs-runtime/devtools.util.js +517 -0
- package/dist/cljs-runtime/devtools.util.js.map +1 -0
- package/dist/cljs-runtime/devtools.version.js +9 -0
- package/dist/cljs-runtime/devtools.version.js.map +1 -0
- package/dist/cljs-runtime/goog.array.array.js +659 -0
- package/dist/cljs-runtime/goog.array.array.js.map +9 -0
- package/dist/cljs-runtime/goog.asserts.asserts.js +133 -0
- package/dist/cljs-runtime/goog.asserts.asserts.js.map +9 -0
- package/dist/cljs-runtime/goog.asserts.dom.js +90 -0
- package/dist/cljs-runtime/goog.asserts.dom.js.map +9 -0
- package/dist/cljs-runtime/goog.async.nexttick.js +93 -0
- package/dist/cljs-runtime/goog.async.nexttick.js.map +9 -0
- package/dist/cljs-runtime/goog.base.js +1261 -0
- package/dist/cljs-runtime/goog.base.js.map +9 -0
- package/dist/cljs-runtime/goog.collections.maps.js +82 -0
- package/dist/cljs-runtime/goog.collections.maps.js.map +9 -0
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js +44 -0
- package/dist/cljs-runtime/goog.debug.entrypointregistry.js.map +9 -0
- package/dist/cljs-runtime/goog.debug.error.js +30 -0
- package/dist/cljs-runtime/goog.debug.error.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.asserts.js +40 -0
- package/dist/cljs-runtime/goog.dom.asserts.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.browserfeature.js +21 -0
- package/dist/cljs-runtime/goog.dom.browserfeature.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.dom.js +1087 -0
- package/dist/cljs-runtime/goog.dom.dom.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.element.js +69 -0
- package/dist/cljs-runtime/goog.dom.element.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.htmlelement.js +7 -0
- package/dist/cljs-runtime/goog.dom.htmlelement.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.nodetype.js +6 -0
- package/dist/cljs-runtime/goog.dom.nodetype.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.safe.js +277 -0
- package/dist/cljs-runtime/goog.dom.safe.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.tagname.js +147 -0
- package/dist/cljs-runtime/goog.dom.tagname.js.map +9 -0
- package/dist/cljs-runtime/goog.dom.tags.js +10 -0
- package/dist/cljs-runtime/goog.dom.tags.js.map +9 -0
- package/dist/cljs-runtime/goog.flags.flags.js +12 -0
- package/dist/cljs-runtime/goog.flags.flags.js.map +9 -0
- package/dist/cljs-runtime/goog.fs.blob.js +38 -0
- package/dist/cljs-runtime/goog.fs.blob.js.map +9 -0
- package/dist/cljs-runtime/goog.fs.url.js +37 -0
- package/dist/cljs-runtime/goog.fs.url.js.map +9 -0
- package/dist/cljs-runtime/goog.functions.functions.js +211 -0
- package/dist/cljs-runtime/goog.functions.functions.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safehtml.js +321 -0
- package/dist/cljs-runtime/goog.html.safehtml.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safescript.js +65 -0
- package/dist/cljs-runtime/goog.html.safescript.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safestyle.js +175 -0
- package/dist/cljs-runtime/goog.html.safestyle.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safestylesheet.js +99 -0
- package/dist/cljs-runtime/goog.html.safestylesheet.js.map +9 -0
- package/dist/cljs-runtime/goog.html.safeurl.js +231 -0
- package/dist/cljs-runtime/goog.html.safeurl.js.map +9 -0
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js +123 -0
- package/dist/cljs-runtime/goog.html.trustedresourceurl.js.map +9 -0
- package/dist/cljs-runtime/goog.html.trustedtypes.js +16 -0
- package/dist/cljs-runtime/goog.html.trustedtypes.js.map +9 -0
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js +52 -0
- package/dist/cljs-runtime/goog.html.uncheckedconversions.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.browser.js +352 -0
- package/dist/cljs-runtime/goog.labs.useragent.browser.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.engine.js +73 -0
- package/dist/cljs-runtime/goog.labs.useragent.engine.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js +14 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropydata.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js +74 -0
- package/dist/cljs-runtime/goog.labs.useragent.highentropy.highentropyvalue.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.platform.js +147 -0
- package/dist/cljs-runtime/goog.labs.useragent.platform.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js +21 -0
- package/dist/cljs-runtime/goog.labs.useragent.useragent.js.map +9 -0
- package/dist/cljs-runtime/goog.labs.useragent.util.js +81 -0
- package/dist/cljs-runtime/goog.labs.useragent.util.js.map +9 -0
- package/dist/cljs-runtime/goog.math.coordinate.js +97 -0
- package/dist/cljs-runtime/goog.math.coordinate.js.map +9 -0
- package/dist/cljs-runtime/goog.math.integer.js +445 -0
- package/dist/cljs-runtime/goog.math.integer.js.map +9 -0
- package/dist/cljs-runtime/goog.math.long.js +437 -0
- package/dist/cljs-runtime/goog.math.long.js.map +9 -0
- package/dist/cljs-runtime/goog.math.math.js +158 -0
- package/dist/cljs-runtime/goog.math.math.js.map +9 -0
- package/dist/cljs-runtime/goog.math.size.js +76 -0
- package/dist/cljs-runtime/goog.math.size.js.map +9 -0
- package/dist/cljs-runtime/goog.object.object.js +284 -0
- package/dist/cljs-runtime/goog.object.object.js.map +9 -0
- package/dist/cljs-runtime/goog.reflect.reflect.js +32 -0
- package/dist/cljs-runtime/goog.reflect.reflect.js.map +9 -0
- package/dist/cljs-runtime/goog.string.const.js +35 -0
- package/dist/cljs-runtime/goog.string.const.js.map +9 -0
- package/dist/cljs-runtime/goog.string.internal.js +119 -0
- package/dist/cljs-runtime/goog.string.internal.js.map +9 -0
- package/dist/cljs-runtime/goog.string.string.js +462 -0
- package/dist/cljs-runtime/goog.string.string.js.map +9 -0
- package/dist/cljs-runtime/goog.string.stringbuffer.js +32 -0
- package/dist/cljs-runtime/goog.string.stringbuffer.js.map +9 -0
- package/dist/cljs-runtime/goog.string.typedstring.js +9 -0
- package/dist/cljs-runtime/goog.string.typedstring.js.map +9 -0
- package/dist/cljs-runtime/goog.structs.structs.js +199 -0
- package/dist/cljs-runtime/goog.structs.structs.js.map +9 -0
- package/dist/cljs-runtime/goog.uri.uri.js +628 -0
- package/dist/cljs-runtime/goog.uri.uri.js.map +9 -0
- package/dist/cljs-runtime/goog.uri.utils.js +326 -0
- package/dist/cljs-runtime/goog.uri.utils.js.map +9 -0
- package/dist/cljs-runtime/goog.useragent.useragent.js +139 -0
- package/dist/cljs-runtime/goog.useragent.useragent.js.map +9 -0
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js +202 -0
- package/dist/cljs-runtime/iris_layout.components.entity_card_group.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js +295 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js +33 -0
- package/dist/cljs-runtime/iris_layout.components.entity_tile_group.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.resizer.js +91 -0
- package/dist/cljs-runtime/iris_layout.components.resizer.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js +399 -0
- package/dist/cljs-runtime/iris_layout.components.touch_drag.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.core.js +1372 -0
- package/dist/cljs-runtime/iris_layout.core.js.map +1 -0
- package/dist/cljs-runtime/iris_layout.layout.js +328 -0
- package/dist/cljs-runtime/iris_layout.layout.js.map +1 -0
- package/dist/cljs-runtime/reagent.core.js +993 -0
- package/dist/cljs-runtime/reagent.core.js.map +1 -0
- package/dist/cljs-runtime/reagent.debug.js +75 -0
- package/dist/cljs-runtime/reagent.debug.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.batching.js +270 -0
- package/dist/cljs-runtime/reagent.impl.batching.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.component.js +758 -0
- package/dist/cljs-runtime/reagent.impl.component.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.input.js +175 -0
- package/dist/cljs-runtime/reagent.impl.input.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.protocols.js +99 -0
- package/dist/cljs-runtime/reagent.impl.protocols.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.template.js +660 -0
- package/dist/cljs-runtime/reagent.impl.template.js.map +1 -0
- package/dist/cljs-runtime/reagent.impl.util.js +748 -0
- package/dist/cljs-runtime/reagent.impl.util.js.map +1 -0
- package/dist/cljs-runtime/reagent.ratom.js +1668 -0
- package/dist/cljs-runtime/reagent.ratom.js.map +1 -0
- package/dist/cljs-runtime/shadow.esm.esm_import$react.js +5 -0
- package/dist/cljs-runtime/shadow.module.iris-layout.append.js +2 -0
- package/dist/cljs-runtime/shadow.module.iris-layout.prepend.js +2 -0
- package/dist/iris-layout.js +375 -355
- package/dist/styles.css +287 -9
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.dom.dom.js",
|
|
4
|
+
"lineCount":1070,
|
|
5
|
+
"mappings":"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",
|
|
6
|
+
"sources":["goog/dom/dom.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Utilities for manipulating the browser's Document Object Model\n * Inspiration taken *heavily* from mochikit (http://mochikit.com/).\n *\n * You can use {@link goog.dom.DomHelper} to create new dom helpers that refer\n * to a different document object. This is useful if you are working with\n * frames or multiple windows.\n *\n * @suppress {strictMissingProperties}\n */\n\n\n// TODO(arv): Rename/refactor getTextContent and getRawTextContent. The problem\n// is that getTextContent should mimic the DOM3 textContent. We should add a\n// getInnerText (or getText) which tries to return the visible text, innerText.\n\n\ngoog.provide('goog.dom');\ngoog.provide('goog.dom.Appendable');\ngoog.provide('goog.dom.DomHelper');\n\ngoog.require('goog.array');\ngoog.require('goog.asserts');\ngoog.require('goog.asserts.dom');\ngoog.require('goog.dom.BrowserFeature');\ngoog.require('goog.dom.NodeType');\ngoog.require('goog.dom.TagName');\ngoog.require('goog.dom.safe');\ngoog.require('goog.html.SafeHtml');\ngoog.require('goog.html.uncheckedconversions');\ngoog.require('goog.math.Coordinate');\ngoog.require('goog.math.Size');\ngoog.require('goog.object');\ngoog.require('goog.string');\ngoog.require('goog.string.Const');\ngoog.require('goog.string.Unicode');\ngoog.require('goog.userAgent');\n\n\n/**\n * @define {boolean} Whether we know at compile time that the browser is in\n * quirks mode.\n */\ngoog.dom.ASSUME_QUIRKS_MODE = goog.define('goog.dom.ASSUME_QUIRKS_MODE', false);\n\n\n/**\n * @define {boolean} Whether we know at compile time that the browser is in\n * standards compliance mode.\n */\ngoog.dom.ASSUME_STANDARDS_MODE =\n goog.define('goog.dom.ASSUME_STANDARDS_MODE', false);\n\n\n/**\n * Whether we know the compatibility mode at compile time.\n * @type {boolean}\n * @private\n */\ngoog.dom.COMPAT_MODE_KNOWN_ =\n goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE;\n\n\n/**\n * Gets the DomHelper object for the document where the element resides.\n * @param {(Node|Window)=} opt_element If present, gets the DomHelper for this\n * element.\n * @return {!goog.dom.DomHelper} The DomHelper.\n */\ngoog.dom.getDomHelper = function(opt_element) {\n 'use strict';\n return opt_element ?\n new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)) :\n (goog.dom.defaultDomHelper_ ||\n (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper()));\n};\n\n\n/**\n * Cached default DOM helper.\n * @type {!goog.dom.DomHelper|undefined}\n * @private\n */\ngoog.dom.defaultDomHelper_;\n\n\n/**\n * Gets the document object being used by the dom library.\n * @return {!Document} Document object.\n */\ngoog.dom.getDocument = function() {\n 'use strict';\n return document;\n};\n\n\n/**\n * Gets an element from the current document by element id.\n *\n * If an Element is passed in, it is returned.\n *\n * @param {string|Element} element Element ID or a DOM node.\n * @return {Element} The element with the given ID, or the node passed in.\n */\ngoog.dom.getElement = function(element) {\n 'use strict';\n return goog.dom.getElementHelper_(document, element);\n};\n\n\n/**\n * Gets an HTML element from the current document by element id.\n *\n * @param {string} id\n * @return {?HTMLElement} The element with the given ID or null if no such\n * element exists.\n */\ngoog.dom.getHTMLElement = function(id) {\n 'use strict'\n const element = goog.dom.getElement(id);\n if (!element) {\n return null;\n }\n return goog.asserts.dom.assertIsHtmlElement(element);\n};\n\n\n/**\n * Gets an element by id from the given document (if present).\n * If an element is given, it is returned.\n * @param {!Document} doc\n * @param {string|Element} element Element ID or a DOM node.\n * @return {Element} The resulting element.\n * @private\n */\ngoog.dom.getElementHelper_ = function(doc, element) {\n 'use strict';\n return typeof element === 'string' ? doc.getElementById(element) : element;\n};\n\n\n/**\n * Gets an element by id, asserting that the element is found.\n *\n * This is used when an element is expected to exist, and should fail with\n * an assertion error if it does not (if assertions are enabled).\n *\n * @param {string} id Element ID.\n * @return {!Element} The element with the given ID, if it exists.\n */\ngoog.dom.getRequiredElement = function(id) {\n 'use strict';\n return goog.dom.getRequiredElementHelper_(document, id);\n};\n\n\n/**\n * Gets an HTML element by id, asserting that the element is found.\n *\n * This is used when an element is expected to exist, and should fail with\n * an assertion error if it does not (if assertions are enabled).\n *\n * @param {string} id Element ID.\n * @return {!HTMLElement} The element with the given ID, if it exists.\n */\ngoog.dom.getRequiredHTMLElement = function(id) {\n 'use strict'\n return goog.asserts.dom.assertIsHtmlElement(\n goog.dom.getRequiredElementHelper_(document, id));\n};\n\n\n/**\n * Helper function for getRequiredElementHelper functions, both static and\n * on DomHelper. Asserts the element with the given id exists.\n * @param {!Document} doc\n * @param {string} id\n * @return {!Element} The element with the given ID, if it exists.\n * @private\n */\ngoog.dom.getRequiredElementHelper_ = function(doc, id) {\n 'use strict';\n // To prevent users passing in Elements as is permitted in getElement().\n goog.asserts.assertString(id);\n var element = goog.dom.getElementHelper_(doc, id);\n return goog.asserts.assert(element, 'No element found with id: ' + id);\n};\n\n\n/**\n * Alias for getElement.\n * @param {string|Element} element Element ID or a DOM node.\n * @return {Element} The element with the given ID, or the node passed in.\n * @deprecated Use {@link goog.dom.getElement} instead.\n */\ngoog.dom.$ = goog.dom.getElement;\n\n\n/**\n * Gets elements by tag name.\n * @param {!goog.dom.TagName<T>} tagName\n * @param {(!Document|!Element)=} opt_parent Parent element or document where to\n * look for elements. Defaults to document.\n * @return {!NodeList<R>} List of elements. The members of the list are\n * {!Element} if tagName is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.getElementsByTagName = function(tagName, opt_parent) {\n 'use strict';\n var parent = opt_parent || document;\n return parent.getElementsByTagName(String(tagName));\n};\n\n\n/**\n * Looks up elements by both tag and class name, using browser native functions\n * (`querySelectorAll`, `getElementsByTagName` or\n * `getElementsByClassName`) where possible. This function\n * is a useful, if limited, way of collecting a list of DOM elements\n * with certain characteristics. `querySelectorAll` offers a\n * more powerful and general solution which allows matching on CSS3\n * selector expressions.\n *\n * Note that tag names are case sensitive in the SVG namespace, and this\n * function converts opt_tag to uppercase for comparisons. For queries in the\n * SVG namespace you should use querySelector or querySelectorAll instead.\n * https://bugzilla.mozilla.org/show_bug.cgi?id=963870\n * https://bugs.webkit.org/show_bug.cgi?id=83438\n *\n * @see {https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll}\n *\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {!IArrayLike<R>} Array-like list of elements (only a length property\n * and numerical indices are guaranteed to exist). The members of the array\n * are {!Element} if opt_tag is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) {\n 'use strict';\n return goog.dom.getElementsByTagNameAndClass_(\n document, opt_tag, opt_class, opt_el);\n};\n\n\n/**\n * Gets the first element matching the tag and the class.\n *\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {?R} Reference to a DOM node. The return type is {?Element} if\n * tagName is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {?HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.getElementByTagNameAndClass = function(opt_tag, opt_class, opt_el) {\n 'use strict';\n return goog.dom.getElementByTagNameAndClass_(\n document, opt_tag, opt_class, opt_el);\n};\n\n\n/**\n * Returns a static, array-like list of the elements with the provided\n * className.\n *\n * @param {string} className the name of the class to look for.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {!IArrayLike<!Element>} The items found with the class name provided.\n */\ngoog.dom.getElementsByClass = function(className, opt_el) {\n 'use strict';\n var parent = opt_el || document;\n if (goog.dom.canUseQuerySelector_(parent)) {\n return parent.querySelectorAll('.' + className);\n }\n return goog.dom.getElementsByTagNameAndClass_(\n document, '*', className, opt_el);\n};\n\n\n/**\n * Returns the first element with the provided className.\n *\n * @param {string} className the name of the class to look for.\n * @param {Element|Document=} opt_el Optional element to look in.\n * @return {Element} The first item with the class name provided.\n */\ngoog.dom.getElementByClass = function(className, opt_el) {\n 'use strict';\n var parent = opt_el || document;\n var retVal = null;\n if (parent.getElementsByClassName) {\n retVal = parent.getElementsByClassName(className)[0];\n } else {\n retVal =\n goog.dom.getElementByTagNameAndClass_(document, '*', className, opt_el);\n }\n return retVal || null;\n};\n\n\n/**\n * Returns the first element with the provided className and asserts that it is\n * an HTML element.\n *\n * @param {string} className the name of the class to look for.\n * @param {!Element|!Document=} opt_parent Optional element to look in.\n * @return {?HTMLElement} The first item with the class name provided.\n */\ngoog.dom.getHTMLElementByClass = function(className, opt_parent) {\n 'use strict'\n const element = goog.dom.getElementByClass(className, opt_parent);\n if (!element) {\n return null;\n }\n return goog.asserts.dom.assertIsHtmlElement(element);\n};\n\n\n/**\n * Ensures an element with the given className exists, and then returns the\n * first element with the provided className.\n *\n * @param {string} className the name of the class to look for.\n * @param {!Element|!Document=} opt_root Optional element or document to look\n * in.\n * @return {!Element} The first item with the class name provided.\n * @throws {goog.asserts.AssertionError} Thrown if no element is found.\n */\ngoog.dom.getRequiredElementByClass = function(className, opt_root) {\n 'use strict';\n var retValue = goog.dom.getElementByClass(className, opt_root);\n return goog.asserts.assert(\n retValue, 'No element found with className: ' + className);\n};\n\n\n/**\n * Ensures an element with the given className exists, and then returns the\n * first element with the provided className after asserting that it is an\n * HTML element.\n *\n * @param {string} className the name of the class to look for.\n * @param {!Element|!Document=} opt_parent Optional element or document to look\n * in.\n * @return {!HTMLElement} The first item with the class name provided.\n */\ngoog.dom.getRequiredHTMLElementByClass = function(className, opt_parent) {\n 'use strict'\n const retValue = goog.dom.getElementByClass(className, opt_parent);\n goog.asserts.assert(\n retValue, 'No HTMLElement found with className: ' + className);\n return goog.asserts.dom.assertIsHtmlElement(retValue);\n};\n\n\n/**\n * Prefer the standardized (http://www.w3.org/TR/selectors-api/), native and\n * fast W3C Selectors API.\n * @param {!(Element|Document)} parent The parent document object.\n * @return {boolean} whether or not we can use parent.querySelector* APIs.\n * @private\n */\ngoog.dom.canUseQuerySelector_ = function(parent) {\n 'use strict';\n return !!(parent.querySelectorAll && parent.querySelector);\n};\n\n\n/**\n * Helper for `getElementsByTagNameAndClass`.\n * @param {!Document} doc The document to get the elements in.\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {!IArrayLike<R>} Array-like list of elements (only a length property\n * and numerical indices are guaranteed to exist). The members of the array\n * are {!Element} if opt_tag is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @private\n */\ngoog.dom.getElementsByTagNameAndClass_ = function(\n doc, opt_tag, opt_class, opt_el) {\n 'use strict';\n var parent = opt_el || doc;\n var tagName =\n (opt_tag && opt_tag != '*') ? String(opt_tag).toUpperCase() : '';\n\n if (goog.dom.canUseQuerySelector_(parent) && (tagName || opt_class)) {\n var query = tagName + (opt_class ? '.' + opt_class : '');\n return parent.querySelectorAll(query);\n }\n\n // Use the native getElementsByClassName if available, under the assumption\n // that even when the tag name is specified, there will be fewer elements to\n // filter through when going by class than by tag name\n if (opt_class && parent.getElementsByClassName) {\n var els = parent.getElementsByClassName(opt_class);\n\n if (tagName) {\n var arrayLike = {};\n var len = 0;\n\n // Filter for specific tags if requested.\n for (var i = 0, el; el = els[i]; i++) {\n if (tagName == el.nodeName) {\n arrayLike[len++] = el;\n }\n }\n arrayLike.length = len;\n\n return /** @type {!IArrayLike<!Element>} */ (arrayLike);\n } else {\n return els;\n }\n }\n\n var els = parent.getElementsByTagName(tagName || '*');\n\n if (opt_class) {\n var arrayLike = {};\n var len = 0;\n for (var i = 0, el; el = els[i]; i++) {\n var className = el.className;\n // Check if className has a split function since SVG className does not.\n if (typeof className.split == 'function' &&\n goog.array.contains(className.split(/\\s+/), opt_class)) {\n arrayLike[len++] = el;\n }\n }\n arrayLike.length = len;\n return /** @type {!IArrayLike<!Element>} */ (arrayLike);\n } else {\n return els;\n }\n};\n\n\n/**\n * Helper for goog.dom.getElementByTagNameAndClass.\n *\n * @param {!Document} doc The document to get the elements in.\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {?R} Reference to a DOM node. The return type is {?Element} if\n * tagName is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {?HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @private\n */\ngoog.dom.getElementByTagNameAndClass_ = function(\n doc, opt_tag, opt_class, opt_el) {\n 'use strict';\n var parent = opt_el || doc;\n var tag = (opt_tag && opt_tag != '*') ? String(opt_tag).toUpperCase() : '';\n if (goog.dom.canUseQuerySelector_(parent) && (tag || opt_class)) {\n return parent.querySelector(tag + (opt_class ? '.' + opt_class : ''));\n }\n var elements =\n goog.dom.getElementsByTagNameAndClass_(doc, opt_tag, opt_class, opt_el);\n return elements[0] || null;\n};\n\n\n\n/**\n * Alias for `getElementsByTagNameAndClass`.\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {Element=} opt_el Optional element to look in.\n * @return {!IArrayLike<R>} Array-like list of elements (only a length property\n * and numerical indices are guaranteed to exist). The members of the array\n * are {!Element} if opt_tag is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @deprecated Use {@link goog.dom.getElementsByTagNameAndClass} instead.\n */\ngoog.dom.$$ = goog.dom.getElementsByTagNameAndClass;\n\n\n/**\n * Sets multiple properties, and sometimes attributes, on an element. Note that\n * properties are simply object properties on the element instance, while\n * attributes are visible in the DOM. Many properties map to attributes with the\n * same names, some with different names, and there are also unmappable cases.\n *\n * This method sets properties by default (which means that custom attributes\n * are not supported). These are the exeptions (some of which is legacy):\n * - \"style\": Even though this is an attribute name, it is translated to a\n * property, \"style.cssText\". Note that this property sanitizes and formats\n * its value, unlike the attribute.\n * - \"class\": This is an attribute name, it is translated to the \"className\"\n * property.\n * - \"for\": This is an attribute name, it is translated to the \"htmlFor\"\n * property.\n * - Entries in {@see goog.dom.DIRECT_ATTRIBUTE_MAP_} are set as attributes,\n * this is probably due to browser quirks.\n * - \"aria-*\", \"data-*\": Always set as attributes, they have no property\n * counterparts.\n *\n * @param {Element} element DOM node to set properties on.\n * @param {Object} properties Hash of property:value pairs.\n * Property values can be strings or goog.string.TypedString values (such as\n * goog.html.SafeUrl).\n */\ngoog.dom.setProperties = function(element, properties) {\n 'use strict';\n goog.object.forEach(properties, function(val, key) {\n 'use strict';\n if (val && typeof val == 'object' && val.implementsGoogStringTypedString) {\n val = val.getTypedStringValue();\n }\n if (key == 'style') {\n element.style.cssText = val;\n } else if (key == 'class') {\n element.className = val;\n } else if (key == 'for') {\n element.htmlFor = val;\n } else if (goog.dom.DIRECT_ATTRIBUTE_MAP_.hasOwnProperty(key)) {\n element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val);\n } else if (\n goog.string.startsWith(key, 'aria-') ||\n goog.string.startsWith(key, 'data-')) {\n element.setAttribute(key, val);\n } else {\n element[key] = val;\n }\n });\n};\n\n\n/**\n * Map of attributes that should be set using\n * element.setAttribute(key, val) instead of element[key] = val. Used\n * by goog.dom.setProperties.\n *\n * @private {!Object<string, string>}\n * @const\n */\ngoog.dom.DIRECT_ATTRIBUTE_MAP_ = {\n 'cellpadding': 'cellPadding',\n 'cellspacing': 'cellSpacing',\n 'colspan': 'colSpan',\n 'frameborder': 'frameBorder',\n 'height': 'height',\n 'maxlength': 'maxLength',\n 'nonce': 'nonce',\n 'role': 'role',\n 'rowspan': 'rowSpan',\n 'type': 'type',\n 'usemap': 'useMap',\n 'valign': 'vAlign',\n 'width': 'width'\n};\n\n\n/**\n * Gets the dimensions of the viewport.\n *\n * Gecko Standards mode:\n * docEl.clientWidth Width of viewport excluding scrollbar.\n * win.innerWidth Width of viewport including scrollbar.\n * body.clientWidth Width of body element.\n *\n * docEl.clientHeight Height of viewport excluding scrollbar.\n * win.innerHeight Height of viewport including scrollbar.\n * body.clientHeight Height of document.\n *\n * Gecko Backwards compatible mode:\n * docEl.clientWidth Width of viewport excluding scrollbar.\n * win.innerWidth Width of viewport including scrollbar.\n * body.clientWidth Width of viewport excluding scrollbar.\n *\n * docEl.clientHeight Height of document.\n * win.innerHeight Height of viewport including scrollbar.\n * body.clientHeight Height of viewport excluding scrollbar.\n *\n * IE6/7 Standards mode:\n * docEl.clientWidth Width of viewport excluding scrollbar.\n * win.innerWidth Undefined.\n * body.clientWidth Width of body element.\n *\n * docEl.clientHeight Height of viewport excluding scrollbar.\n * win.innerHeight Undefined.\n * body.clientHeight Height of document element.\n *\n * IE5 + IE6/7 Backwards compatible mode:\n * docEl.clientWidth 0.\n * win.innerWidth Undefined.\n * body.clientWidth Width of viewport excluding scrollbar.\n *\n * docEl.clientHeight 0.\n * win.innerHeight Undefined.\n * body.clientHeight Height of viewport excluding scrollbar.\n *\n * Opera 9 Standards and backwards compatible mode:\n * docEl.clientWidth Width of viewport excluding scrollbar.\n * win.innerWidth Width of viewport including scrollbar.\n * body.clientWidth Width of viewport excluding scrollbar.\n *\n * docEl.clientHeight Height of document.\n * win.innerHeight Height of viewport including scrollbar.\n * body.clientHeight Height of viewport excluding scrollbar.\n *\n * WebKit:\n * Safari 2\n * docEl.clientHeight Same as scrollHeight.\n * docEl.clientWidth Same as innerWidth.\n * win.innerWidth Width of viewport excluding scrollbar.\n * win.innerHeight Height of the viewport including scrollbar.\n * frame.innerHeight Height of the viewport exluding scrollbar.\n *\n * Safari 3 (tested in 522)\n *\n * docEl.clientWidth Width of viewport excluding scrollbar.\n * docEl.clientHeight Height of viewport excluding scrollbar in strict mode.\n * body.clientHeight Height of viewport excluding scrollbar in quirks mode.\n *\n * @param {Window=} opt_window Optional window element to test.\n * @return {!goog.math.Size} Object with values 'width' and 'height'.\n */\ngoog.dom.getViewportSize = function(opt_window) {\n 'use strict';\n // TODO(arv): This should not take an argument\n return goog.dom.getViewportSize_(opt_window || window);\n};\n\n\n/**\n * Helper for `getViewportSize`.\n * @param {Window} win The window to get the view port size for.\n * @return {!goog.math.Size} Object with values 'width' and 'height'.\n * @private\n */\ngoog.dom.getViewportSize_ = function(win) {\n 'use strict';\n var doc = win.document;\n var el = goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body;\n return new goog.math.Size(el.clientWidth, el.clientHeight);\n};\n\n\n/**\n * Calculates the height of the document.\n *\n * @return {number} The height of the current document.\n */\ngoog.dom.getDocumentHeight = function() {\n 'use strict';\n return goog.dom.getDocumentHeight_(window);\n};\n\n/**\n * Calculates the height of the document of the given window.\n *\n * @param {!Window} win The window whose document height to retrieve.\n * @return {number} The height of the document of the given window.\n */\ngoog.dom.getDocumentHeightForWindow = function(win) {\n 'use strict';\n return goog.dom.getDocumentHeight_(win);\n};\n\n/**\n * Calculates the height of the document of the given window.\n *\n * Function code copied from the opensocial gadget api:\n * gadgets.window.adjustHeight(opt_height)\n *\n * @private\n * @param {!Window} win The window whose document height to retrieve.\n * @return {number} The height of the document of the given window.\n */\ngoog.dom.getDocumentHeight_ = function(win) {\n 'use strict';\n // NOTE(eae): This method will return the window size rather than the document\n // size in webkit quirks mode.\n var doc = win.document;\n var height = 0;\n\n if (doc) {\n // Calculating inner content height is hard and different between\n // browsers rendering in Strict vs. Quirks mode. We use a combination of\n // three properties within document.body and document.documentElement:\n // - scrollHeight\n // - offsetHeight\n // - clientHeight\n // These values differ significantly between browsers and rendering modes.\n // But there are patterns. It just takes a lot of time and persistence\n // to figure out.\n\n var body = doc.body;\n var docEl = /** @type {!HTMLElement} */ (doc.documentElement);\n if (!(docEl && body)) {\n return 0;\n }\n\n // Get the height of the viewport\n var vh = goog.dom.getViewportSize_(win).height;\n if (goog.dom.isCss1CompatMode_(doc) && docEl.scrollHeight) {\n // In Strict mode:\n // The inner content height is contained in either:\n // document.documentElement.scrollHeight\n // document.documentElement.offsetHeight\n // Based on studying the values output by different browsers,\n // use the value that's NOT equal to the viewport height found above.\n height =\n docEl.scrollHeight != vh ? docEl.scrollHeight : docEl.offsetHeight;\n } else {\n // In Quirks mode:\n // documentElement.clientHeight is equal to documentElement.offsetHeight\n // except in IE. In most browsers, document.documentElement can be used\n // to calculate the inner content height.\n // However, in other browsers (e.g. IE), document.body must be used\n // instead. How do we know which one to use?\n // If document.documentElement.clientHeight does NOT equal\n // document.documentElement.offsetHeight, then use document.body.\n var sh = docEl.scrollHeight;\n var oh = docEl.offsetHeight;\n if (docEl.clientHeight != oh) {\n sh = body.scrollHeight;\n oh = body.offsetHeight;\n }\n\n // Detect whether the inner content height is bigger or smaller\n // than the bounding box (viewport). If bigger, take the larger\n // value. If smaller, take the smaller value.\n if (sh > vh) {\n // Content is larger\n height = sh > oh ? sh : oh;\n } else {\n // Content is smaller\n height = sh < oh ? sh : oh;\n }\n }\n }\n\n return height;\n};\n\n\n/**\n * Gets the page scroll distance as a coordinate object.\n *\n * @param {Window=} opt_window Optional window element to test.\n * @return {!goog.math.Coordinate} Object with values 'x' and 'y'.\n * @deprecated Use {@link goog.dom.getDocumentScroll} instead.\n */\ngoog.dom.getPageScroll = function(opt_window) {\n 'use strict';\n var win = opt_window || goog.global || window;\n return goog.dom.getDomHelper(win.document).getDocumentScroll();\n};\n\n\n/**\n * Gets the document scroll distance as a coordinate object.\n *\n * @return {!goog.math.Coordinate} Object with values 'x' and 'y'.\n */\ngoog.dom.getDocumentScroll = function() {\n 'use strict';\n return goog.dom.getDocumentScroll_(document);\n};\n\n\n/**\n * Helper for `getDocumentScroll`.\n *\n * @param {!Document} doc The document to get the scroll for.\n * @return {!goog.math.Coordinate} Object with values 'x' and 'y'.\n * @private\n */\ngoog.dom.getDocumentScroll_ = function(doc) {\n 'use strict';\n var el = goog.dom.getDocumentScrollElement_(doc);\n var win = goog.dom.getWindow_(doc);\n if (goog.userAgent.IE && win.pageYOffset != el.scrollTop) {\n // The keyboard on IE10 touch devices shifts the page using the pageYOffset\n // without modifying scrollTop. For this case, we want the body scroll\n // offsets.\n return new goog.math.Coordinate(el.scrollLeft, el.scrollTop);\n }\n return new goog.math.Coordinate(\n win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop);\n};\n\n\n/**\n * Gets the document scroll element.\n * @return {!Element} Scrolling element.\n */\ngoog.dom.getDocumentScrollElement = function() {\n 'use strict';\n return goog.dom.getDocumentScrollElement_(document);\n};\n\n\n/**\n * Helper for `getDocumentScrollElement`.\n * @param {!Document} doc The document to get the scroll element for.\n * @return {!Element} Scrolling element.\n * @private\n */\ngoog.dom.getDocumentScrollElement_ = function(doc) {\n 'use strict';\n // Old WebKit needs body.scrollLeft in both quirks mode and strict mode. We\n // also default to the documentElement if the document does not have a body\n // (e.g. a SVG document).\n // Uses http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement to\n // avoid trying to guess about browser behavior from the UA string.\n if (doc.scrollingElement) {\n return doc.scrollingElement;\n }\n if (!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc)) {\n return doc.documentElement;\n }\n return doc.body || doc.documentElement;\n};\n\n\n/**\n * Gets the window object associated with the given document.\n *\n * @param {Document=} opt_doc Document object to get window for.\n * @return {!Window} The window associated with the given document.\n */\ngoog.dom.getWindow = function(opt_doc) {\n 'use strict';\n // TODO(arv): This should not take an argument.\n return opt_doc ? goog.dom.getWindow_(opt_doc) : window;\n};\n\n\n/**\n * Helper for `getWindow`.\n *\n * @param {!Document} doc Document object to get window for.\n * @return {!Window} The window associated with the given document.\n * @private\n */\ngoog.dom.getWindow_ = function(doc) {\n 'use strict';\n return /** @type {!Window} */ (doc.parentWindow || doc.defaultView);\n};\n\n\n/**\n * Returns a dom node with a set of attributes. This function accepts varargs\n * for subsequent nodes to be added. Subsequent nodes will be added to the\n * first node as childNodes.\n *\n * So:\n * <code>createDom(goog.dom.TagName.DIV, null, createDom(goog.dom.TagName.P),\n * createDom(goog.dom.TagName.P));</code> would return a div with two child\n * paragraphs\n *\n * This function uses {@link goog.dom.setProperties} to set attributes: the\n * `opt_attributes` parameter follows the same rules.\n *\n * @param {string|!goog.dom.TagName<T>} tagName Tag to create.\n * @param {?Object|?Array<string>|string=} opt_attributes If object, then a map\n * of name-value pairs for attributes. If a string, then this is the\n * className of the new element. If an array, the elements will be joined\n * together as the className of the new element.\n * @param {...(Object|string|Array|NodeList|null|undefined)} var_args Further\n * DOM nodes or strings for text nodes. If one of the var_args is an array\n * or NodeList, its elements will be added as childNodes instead.\n * @return {R} Reference to a DOM node. The return type is {!Element} if tagName\n * is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.createDom = function(tagName, opt_attributes, var_args) {\n 'use strict';\n return goog.dom.createDom_(document, arguments);\n};\n\n\n/**\n * Helper for `createDom`.\n * @param {!Document} doc The document to create the DOM in.\n * @param {!Arguments} args Argument object passed from the callers. See\n * `goog.dom.createDom` for details.\n * @return {!Element} Reference to a DOM node.\n * @private\n */\ngoog.dom.createDom_ = function(doc, args) {\n 'use strict';\n var tagName = String(args[0]);\n var attributes = args[1];\n\n var element = goog.dom.createElement_(doc, tagName);\n\n if (attributes) {\n if (typeof attributes === 'string') {\n element.className = attributes;\n } else if (Array.isArray(attributes)) {\n element.className = attributes.join(' ');\n } else {\n goog.dom.setProperties(element, attributes);\n }\n }\n\n if (args.length > 2) {\n goog.dom.append_(doc, element, args, 2);\n }\n\n return element;\n};\n\n\n/**\n * Appends a node with text or other nodes.\n * @param {!Document} doc The document to create new nodes in.\n * @param {!Node} parent The node to append nodes to.\n * @param {!Arguments} args The values to add. See `goog.dom.append`.\n * @param {number} startIndex The index of the array to start from.\n * @private\n */\ngoog.dom.append_ = function(doc, parent, args, startIndex) {\n 'use strict';\n function childHandler(child) {\n // TODO(user): More coercion, ala MochiKit?\n if (child) {\n parent.appendChild(\n typeof child === 'string' ? doc.createTextNode(child) : child);\n }\n }\n\n for (var i = startIndex; i < args.length; i++) {\n var arg = args[i];\n // TODO(attila): Fix isArrayLike to return false for a text node.\n if (goog.isArrayLike(arg) && !goog.dom.isNodeLike(arg)) {\n // If the argument is a node list, not a real array, use a clone,\n // because forEach can't be used to mutate a NodeList.\n goog.array.forEach(\n goog.dom.isNodeList(arg) ? goog.array.toArray(arg) : arg,\n childHandler);\n } else {\n childHandler(arg);\n }\n }\n};\n\n\n/**\n * Alias for `createDom`.\n * @param {string|!goog.dom.TagName<T>} tagName Tag to create.\n * @param {?Object|?Array<string>|string=} opt_attributes If object, then a map\n * of name-value pairs for attributes. If a string, then this is the\n * className of the new element. If an array, the elements will be joined\n * together as the className of the new element.\n * @param {...(Object|string|Array|NodeList|null|undefined)} var_args Further\n * DOM nodes or strings for text nodes. If one of the var_args is an array,\n * its children will be added as childNodes instead.\n * @return {R} Reference to a DOM node. The return type is {!Element} if tagName\n * is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @deprecated Use {@link goog.dom.createDom} instead.\n */\ngoog.dom.$dom = goog.dom.createDom;\n\n\n/**\n * Creates a new element.\n * @param {string|!goog.dom.TagName<T>} name Tag to create.\n * @return {R} The new element. The return type is {!Element} if name is\n * a string or a more specific type if it is a member of goog.dom.TagName\n * (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.createElement = function(name) {\n 'use strict';\n return goog.dom.createElement_(document, name);\n};\n\n\n/**\n * Creates a new element.\n * @param {!Document} doc The document to create the element in.\n * @param {string|!goog.dom.TagName<T>} name Tag to create.\n * @return {R} The new element. The return type is {!Element} if name is\n * a string or a more specific type if it is a member of goog.dom.TagName\n * (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @private\n */\ngoog.dom.createElement_ = function(doc, name) {\n 'use strict';\n name = String(name);\n if (doc.contentType === 'application/xhtml+xml') name = name.toLowerCase();\n return doc.createElement(name);\n};\n\n\n/**\n * Creates a new text node.\n * @param {number|string} content Content.\n * @return {!Text} The new text node.\n */\ngoog.dom.createTextNode = function(content) {\n 'use strict';\n return document.createTextNode(String(content));\n};\n\n\n/**\n * Create a table.\n * @param {number} rows The number of rows in the table. Must be >= 1.\n * @param {number} columns The number of columns in the table. Must be >= 1.\n * @param {boolean=} opt_fillWithNbsp If true, fills table entries with\n * `goog.string.Unicode.NBSP` characters.\n * @return {!Element} The created table.\n */\ngoog.dom.createTable = function(rows, columns, opt_fillWithNbsp) {\n 'use strict';\n // TODO(mlourenco): Return HTMLTableElement, also in prototype function.\n // Callers need to be updated to e.g. not assign numbers to table.cellSpacing.\n return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp);\n};\n\n\n/**\n * Create a table.\n * @param {!Document} doc Document object to use to create the table.\n * @param {number} rows The number of rows in the table. Must be >= 1.\n * @param {number} columns The number of columns in the table. Must be >= 1.\n * @param {boolean} fillWithNbsp If true, fills table entries with\n * `goog.string.Unicode.NBSP` characters.\n * @return {!HTMLTableElement} The created table.\n * @private\n */\ngoog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) {\n 'use strict';\n var table = goog.dom.createElement_(doc, goog.dom.TagName.TABLE);\n var tbody =\n table.appendChild(goog.dom.createElement_(doc, goog.dom.TagName.TBODY));\n for (var i = 0; i < rows; i++) {\n var tr = goog.dom.createElement_(doc, goog.dom.TagName.TR);\n for (var j = 0; j < columns; j++) {\n var td = goog.dom.createElement_(doc, goog.dom.TagName.TD);\n // IE <= 9 will create a text node if we set text content to the empty\n // string, so we avoid doing it unless necessary. This ensures that the\n // same DOM tree is returned on all browsers.\n if (fillWithNbsp) {\n goog.dom.setTextContent(td, goog.string.Unicode.NBSP);\n }\n tr.appendChild(td);\n }\n tbody.appendChild(tr);\n }\n return table;\n};\n\n\n\n/**\n * Creates a new Node from constant strings of HTML markup.\n * @param {...!goog.string.Const} var_args The HTML strings to concatenate then\n * convert into a node.\n * @return {!Node}\n */\ngoog.dom.constHtmlToNode = function(var_args) {\n 'use strict';\n var stringArray =\n Array.prototype.map.call(arguments, goog.string.Const.unwrap);\n var safeHtml =\n goog.html.uncheckedconversions\n .safeHtmlFromStringKnownToSatisfyTypeContract(\n goog.string.Const.from(\n 'Constant HTML string, that gets turned into a ' +\n 'Node later, so it will be automatically balanced.'),\n stringArray.join(''));\n return goog.dom.safeHtmlToNode(safeHtml);\n};\n\n\n/**\n * Converts HTML markup into a node. This is a safe version of\n * `goog.dom.htmlToDocumentFragment` which is now deleted.\n * @param {!goog.html.SafeHtml} html The HTML markup to convert.\n * @return {!Node} The resulting node.\n */\ngoog.dom.safeHtmlToNode = function(html) {\n 'use strict';\n return goog.dom.safeHtmlToNode_(document, html);\n};\n\n\n/**\n * Helper for `safeHtmlToNode`.\n * @param {!Document} doc The document.\n * @param {!goog.html.SafeHtml} html The HTML markup to convert.\n * @return {!Node} The resulting node.\n * @private\n */\ngoog.dom.safeHtmlToNode_ = function(doc, html) {\n 'use strict';\n var tempDiv = goog.dom.createElement_(doc, goog.dom.TagName.DIV);\n if (goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) {\n goog.dom.safe.setInnerHtml(\n tempDiv, goog.html.SafeHtml.concat(goog.html.SafeHtml.BR, html));\n tempDiv.removeChild(goog.asserts.assert(tempDiv.firstChild));\n } else {\n goog.dom.safe.setInnerHtml(tempDiv, html);\n }\n return goog.dom.childrenToNode_(doc, tempDiv);\n};\n\n\n/**\n * Helper for `safeHtmlToNode_`.\n * @param {!Document} doc The document.\n * @param {!Node} tempDiv The input node.\n * @return {!Node} The resulting node.\n * @private\n */\ngoog.dom.childrenToNode_ = function(doc, tempDiv) {\n 'use strict';\n if (tempDiv.childNodes.length == 1) {\n return tempDiv.removeChild(goog.asserts.assert(tempDiv.firstChild));\n } else {\n var fragment = doc.createDocumentFragment();\n while (tempDiv.firstChild) {\n fragment.appendChild(tempDiv.firstChild);\n }\n return fragment;\n }\n};\n\n\n/**\n * Returns true if the browser is in \"CSS1-compatible\" (standards-compliant)\n * mode, false otherwise.\n * @return {boolean} True if in CSS1-compatible mode.\n */\ngoog.dom.isCss1CompatMode = function() {\n 'use strict';\n return goog.dom.isCss1CompatMode_(document);\n};\n\n\n/**\n * Returns true if the browser is in \"CSS1-compatible\" (standards-compliant)\n * mode, false otherwise.\n * @param {!Document} doc The document to check.\n * @return {boolean} True if in CSS1-compatible mode.\n * @private\n */\ngoog.dom.isCss1CompatMode_ = function(doc) {\n 'use strict';\n if (goog.dom.COMPAT_MODE_KNOWN_) {\n return goog.dom.ASSUME_STANDARDS_MODE;\n }\n\n return doc.compatMode == 'CSS1Compat';\n};\n\n\n/**\n * Determines if the given node can contain children, intended to be used for\n * HTML generation.\n *\n * IE natively supports node.canHaveChildren but has inconsistent behavior.\n * Prior to IE8 the base tag allows children and in IE9 all nodes return true\n * for canHaveChildren.\n *\n * In practice all non-IE browsers allow you to add children to any node, but\n * the behavior is inconsistent:\n *\n * <pre>\n * var a = goog.dom.createElement(goog.dom.TagName.BR);\n * a.appendChild(document.createTextNode('foo'));\n * a.appendChild(document.createTextNode('bar'));\n * console.log(a.childNodes.length); // 2\n * console.log(a.innerHTML); // Chrome: \"\", IE9: \"foobar\", FF3.5: \"foobar\"\n * </pre>\n *\n * For more information, see:\n * http://dev.w3.org/html5/markup/syntax.html#syntax-elements\n *\n * TODO(user): Rename shouldAllowChildren() ?\n *\n * @param {Node} node The node to check.\n * @return {boolean} Whether the node can contain children.\n */\ngoog.dom.canHaveChildren = function(node) {\n 'use strict';\n if (node.nodeType != goog.dom.NodeType.ELEMENT) {\n return false;\n }\n switch (/** @type {!Element} */ (node).tagName) {\n case String(goog.dom.TagName.APPLET):\n case String(goog.dom.TagName.AREA):\n case String(goog.dom.TagName.BASE):\n case String(goog.dom.TagName.BR):\n case String(goog.dom.TagName.COL):\n case String(goog.dom.TagName.COMMAND):\n case String(goog.dom.TagName.EMBED):\n case String(goog.dom.TagName.FRAME):\n case String(goog.dom.TagName.HR):\n case String(goog.dom.TagName.IMG):\n case String(goog.dom.TagName.INPUT):\n case String(goog.dom.TagName.IFRAME):\n case String(goog.dom.TagName.ISINDEX):\n case String(goog.dom.TagName.KEYGEN):\n case String(goog.dom.TagName.LINK):\n case String(goog.dom.TagName.NOFRAMES):\n case String(goog.dom.TagName.NOSCRIPT):\n case String(goog.dom.TagName.META):\n case String(goog.dom.TagName.OBJECT):\n case String(goog.dom.TagName.PARAM):\n case String(goog.dom.TagName.SCRIPT):\n case String(goog.dom.TagName.SOURCE):\n case String(goog.dom.TagName.STYLE):\n case String(goog.dom.TagName.TRACK):\n case String(goog.dom.TagName.WBR):\n return false;\n }\n return true;\n};\n\n\n/**\n * Appends a child to a node.\n * @param {Node} parent Parent.\n * @param {Node} child Child.\n */\ngoog.dom.appendChild = function(parent, child) {\n 'use strict';\n goog.asserts.assert(\n parent != null && child != null,\n 'goog.dom.appendChild expects non-null arguments');\n parent.appendChild(child);\n};\n\n\n/**\n * Appends a node with text or other nodes.\n * @param {!Node} parent The node to append nodes to.\n * @param {...goog.dom.Appendable} var_args The things to append to the node.\n * If this is a Node it is appended as is.\n * If this is a string then a text node is appended.\n * If this is an array like object then fields 0 to length - 1 are appended.\n */\ngoog.dom.append = function(parent, var_args) {\n 'use strict';\n goog.dom.append_(goog.dom.getOwnerDocument(parent), parent, arguments, 1);\n};\n\n\n/**\n * Removes all the child nodes on a DOM node.\n * @param {Node} node Node to remove children from.\n * @return {void}\n */\ngoog.dom.removeChildren = function(node) {\n 'use strict';\n // Note: Iterations over live collections can be slow, this is the fastest\n // we could find. The double parenthesis are used to prevent JsCompiler and\n // strict warnings.\n var child;\n while ((child = node.firstChild)) {\n node.removeChild(child);\n }\n};\n\n\n/**\n * Inserts a new node before an existing reference node (i.e. as the previous\n * sibling). If the reference node has no parent, then does nothing.\n * @param {Node} newNode Node to insert.\n * @param {Node} refNode Reference node to insert before.\n */\ngoog.dom.insertSiblingBefore = function(newNode, refNode) {\n 'use strict';\n goog.asserts.assert(\n newNode != null && refNode != null,\n 'goog.dom.insertSiblingBefore expects non-null arguments');\n if (refNode.parentNode) {\n refNode.parentNode.insertBefore(newNode, refNode);\n }\n};\n\n\n/**\n * Inserts a new node after an existing reference node (i.e. as the next\n * sibling). If the reference node has no parent, then does nothing.\n * @param {Node} newNode Node to insert.\n * @param {Node} refNode Reference node to insert after.\n * @return {void}\n */\ngoog.dom.insertSiblingAfter = function(newNode, refNode) {\n 'use strict';\n goog.asserts.assert(\n newNode != null && refNode != null,\n 'goog.dom.insertSiblingAfter expects non-null arguments');\n if (refNode.parentNode) {\n refNode.parentNode.insertBefore(newNode, refNode.nextSibling);\n }\n};\n\n\n/**\n * Insert a child at a given index. If index is larger than the number of child\n * nodes that the parent currently has, the node is inserted as the last child\n * node.\n * @param {Element} parent The element into which to insert the child.\n * @param {Node} child The element to insert.\n * @param {number} index The index at which to insert the new child node. Must\n * not be negative.\n * @return {void}\n */\ngoog.dom.insertChildAt = function(parent, child, index) {\n 'use strict';\n // Note that if the second argument is null, insertBefore\n // will append the child at the end of the list of children.\n goog.asserts.assert(\n parent != null, 'goog.dom.insertChildAt expects a non-null parent');\n parent.insertBefore(\n /** @type {!Node} */ (child), parent.childNodes[index] || null);\n};\n\n\n/**\n * Removes a node from its parent.\n * @param {Node} node The node to remove.\n * @return {Node} The node removed if removed; else, null.\n */\ngoog.dom.removeNode = function(node) {\n 'use strict';\n return node && node.parentNode ? node.parentNode.removeChild(node) : null;\n};\n\n\n/**\n * Replaces a node in the DOM tree. Will do nothing if `oldNode` has no\n * parent.\n * @param {Node} newNode Node to insert.\n * @param {Node} oldNode Node to replace.\n */\ngoog.dom.replaceNode = function(newNode, oldNode) {\n 'use strict';\n goog.asserts.assert(\n newNode != null && oldNode != null,\n 'goog.dom.replaceNode expects non-null arguments');\n var parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n};\n\n\n/**\n * Replaces child nodes of `target` with child nodes of `source`. This is\n * roughly equivalent to `target.innerHTML = source.innerHTML` which is not\n * compatible with Trusted Types.\n * @param {?Node} target Node to clean and replace its children.\n * @param {?Node} source Node to get the children from. The nodes will be cloned\n * so they will stay in source.\n */\ngoog.dom.copyContents = function(target, source) {\n 'use strict';\n goog.asserts.assert(\n target != null && source != null,\n 'goog.dom.copyContents expects non-null arguments');\n var childNodes = source.cloneNode(/* deep= */ true).childNodes;\n goog.dom.removeChildren(target);\n while (childNodes.length) {\n target.appendChild(childNodes[0]);\n }\n};\n\n\n/**\n * Flattens an element. That is, removes it and replace it with its children.\n * Does nothing if the element is not in the document.\n * @param {Element} element The element to flatten.\n * @return {Element|undefined} The original element, detached from the document\n * tree, sans children; or undefined, if the element was not in the document\n * to begin with.\n */\ngoog.dom.flattenElement = function(element) {\n 'use strict';\n var child, parent = element.parentNode;\n if (parent && parent.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) {\n // Use IE DOM method (supported by Opera too) if available\n if (element.removeNode) {\n return /** @type {Element} */ (element.removeNode(false));\n } else {\n // Move all children of the original node up one level.\n while ((child = element.firstChild)) {\n parent.insertBefore(child, element);\n }\n\n // Detach the original element.\n return /** @type {Element} */ (goog.dom.removeNode(element));\n }\n }\n};\n\n\n/**\n * Returns an array containing just the element children of the given element.\n * @param {Element} element The element whose element children we want.\n * @return {!(Array<!Element>|NodeList<!Element>)} An array or array-like list\n * of just the element children of the given element.\n */\ngoog.dom.getChildren = function(element) {\n 'use strict';\n // We check if the children attribute is supported for child elements\n // since IE8 misuses the attribute by also including comments.\n if (element.children != undefined) {\n return element.children;\n }\n // Fall back to manually filtering the element's child nodes.\n return Array.prototype.filter.call(element.childNodes, function(node) {\n return node.nodeType == goog.dom.NodeType.ELEMENT;\n });\n};\n\n\n/**\n * Returns the first child node that is an element.\n * @param {Node} node The node to get the first child element of.\n * @return {Element} The first child node of `node` that is an element.\n */\ngoog.dom.getFirstElementChild = function(node) {\n 'use strict';\n if (node.firstElementChild !== undefined) {\n return /** @type {!Element} */ (node).firstElementChild;\n }\n return goog.dom.getNextElementNode_(node.firstChild, true);\n};\n\n\n/**\n * Returns the last child node that is an element.\n * @param {Node} node The node to get the last child element of.\n * @return {Element} The last child node of `node` that is an element.\n */\ngoog.dom.getLastElementChild = function(node) {\n 'use strict';\n if (node.lastElementChild !== undefined) {\n return /** @type {!Element} */ (node).lastElementChild;\n }\n return goog.dom.getNextElementNode_(node.lastChild, false);\n};\n\n\n/**\n * Returns the first next sibling that is an element.\n * @param {Node} node The node to get the next sibling element of.\n * @return {Element} The next sibling of `node` that is an element.\n */\ngoog.dom.getNextElementSibling = function(node) {\n 'use strict';\n if (node.nextElementSibling !== undefined) {\n return /** @type {!Element} */ (node).nextElementSibling;\n }\n return goog.dom.getNextElementNode_(node.nextSibling, true);\n};\n\n\n/**\n * Returns the first previous sibling that is an element.\n * @param {Node} node The node to get the previous sibling element of.\n * @return {Element} The first previous sibling of `node` that is\n * an element.\n */\ngoog.dom.getPreviousElementSibling = function(node) {\n 'use strict';\n if (node.previousElementSibling !== undefined) {\n return /** @type {!Element} */ (node).previousElementSibling;\n }\n return goog.dom.getNextElementNode_(node.previousSibling, false);\n};\n\n\n/**\n * Returns the first node that is an element in the specified direction,\n * starting with `node`.\n * @param {Node} node The node to get the next element from.\n * @param {boolean} forward Whether to look forwards or backwards.\n * @return {Element} The first element.\n * @private\n */\ngoog.dom.getNextElementNode_ = function(node, forward) {\n 'use strict';\n while (node && node.nodeType != goog.dom.NodeType.ELEMENT) {\n node = forward ? node.nextSibling : node.previousSibling;\n }\n\n return /** @type {Element} */ (node);\n};\n\n\n/**\n * Returns the next node in source order from the given node.\n * @param {Node} node The node.\n * @return {Node} The next node in the DOM tree, or null if this was the last\n * node.\n */\ngoog.dom.getNextNode = function(node) {\n 'use strict';\n if (!node) {\n return null;\n }\n\n if (node.firstChild) {\n return node.firstChild;\n }\n\n while (node && !node.nextSibling) {\n node = node.parentNode;\n }\n\n return node ? node.nextSibling : null;\n};\n\n\n/**\n * Returns the previous node in source order from the given node.\n * @param {Node} node The node.\n * @return {Node} The previous node in the DOM tree, or null if this was the\n * first node.\n */\ngoog.dom.getPreviousNode = function(node) {\n 'use strict';\n if (!node) {\n return null;\n }\n\n if (!node.previousSibling) {\n return node.parentNode;\n }\n\n node = node.previousSibling;\n while (node && node.lastChild) {\n node = node.lastChild;\n }\n\n return node;\n};\n\n\n/**\n * Whether the object looks like a DOM node.\n * @param {?} obj The object being tested for node likeness.\n * @return {boolean} Whether the object looks like a DOM node.\n */\ngoog.dom.isNodeLike = function(obj) {\n 'use strict';\n return goog.isObject(obj) && obj.nodeType > 0;\n};\n\n\n/**\n * Whether the object looks like an Element.\n * @param {?} obj The object being tested for Element likeness.\n * @return {boolean} Whether the object looks like an Element.\n */\ngoog.dom.isElement = function(obj) {\n 'use strict';\n return goog.isObject(obj) && obj.nodeType == goog.dom.NodeType.ELEMENT;\n};\n\n\n/**\n * Returns true if the specified value is a Window object. This includes the\n * global window for HTML pages, and iframe windows.\n * @param {?} obj Variable to test.\n * @return {boolean} Whether the variable is a window.\n */\ngoog.dom.isWindow = function(obj) {\n 'use strict';\n return goog.isObject(obj) && obj['window'] == obj;\n};\n\n\n/**\n * Returns an element's parent, if it's an Element.\n * @param {Element} element The DOM element.\n * @return {Element} The parent, or null if not an Element.\n */\ngoog.dom.getParentElement = function(element) {\n 'use strict';\n var parent;\n if (goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY) {\n parent = element.parentElement;\n if (parent) {\n return parent;\n }\n }\n parent = element.parentNode;\n return goog.dom.isElement(parent) ? /** @type {!Element} */ (parent) : null;\n};\n\n\n/**\n * Whether a node contains another node.\n * @param {?Node|undefined} parent The node that should contain the other node.\n * @param {?Node|undefined} descendant The node to test presence of.\n * @return {boolean} Whether the parent node contains the descendant node.\n */\ngoog.dom.contains = function(parent, descendant) {\n 'use strict';\n if (!parent || !descendant) {\n return false;\n }\n // We use browser specific methods for this if available since it is faster\n // that way.\n\n // IE DOM\n if (parent.contains && descendant.nodeType == goog.dom.NodeType.ELEMENT) {\n return parent == descendant || parent.contains(descendant);\n }\n\n // W3C DOM Level 3\n if (typeof parent.compareDocumentPosition != 'undefined') {\n return parent == descendant ||\n Boolean(parent.compareDocumentPosition(descendant) & 16);\n }\n\n // W3C DOM Level 1\n while (descendant && parent != descendant) {\n descendant = descendant.parentNode;\n }\n return descendant == parent;\n};\n\n\n/**\n * Compares the document order of two nodes, returning 0 if they are the same\n * node, a negative number if node1 is before node2, and a positive number if\n * node2 is before node1. Note that we compare the order the tags appear in the\n * document so in the tree <b><i>text</i></b> the B node is considered to be\n * before the I node.\n *\n * @param {Node} node1 The first node to compare.\n * @param {Node} node2 The second node to compare.\n * @return {number} 0 if the nodes are the same node, a negative number if node1\n * is before node2, and a positive number if node2 is before node1.\n */\ngoog.dom.compareNodeOrder = function(node1, node2) {\n 'use strict';\n // Fall out quickly for equality.\n if (node1 == node2) {\n return 0;\n }\n\n // Use compareDocumentPosition where available\n if (node1.compareDocumentPosition) {\n // 4 is the bitmask for FOLLOWS.\n return node1.compareDocumentPosition(node2) & 2 ? 1 : -1;\n }\n\n // Special case for document nodes on IE 7 and 8.\n if (goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) {\n if (node1.nodeType == goog.dom.NodeType.DOCUMENT) {\n return -1;\n }\n if (node2.nodeType == goog.dom.NodeType.DOCUMENT) {\n return 1;\n }\n }\n\n // Process in IE using sourceIndex - we check to see if the first node has\n // a source index or if its parent has one.\n if ('sourceIndex' in node1 ||\n (node1.parentNode && 'sourceIndex' in node1.parentNode)) {\n var isElement1 = node1.nodeType == goog.dom.NodeType.ELEMENT;\n var isElement2 = node2.nodeType == goog.dom.NodeType.ELEMENT;\n\n if (isElement1 && isElement2) {\n return node1.sourceIndex - node2.sourceIndex;\n } else {\n var parent1 = node1.parentNode;\n var parent2 = node2.parentNode;\n\n if (parent1 == parent2) {\n return goog.dom.compareSiblingOrder_(node1, node2);\n }\n\n if (!isElement1 && goog.dom.contains(parent1, node2)) {\n return -1 * goog.dom.compareParentsDescendantNodeIe_(node1, node2);\n }\n\n\n if (!isElement2 && goog.dom.contains(parent2, node1)) {\n return goog.dom.compareParentsDescendantNodeIe_(node2, node1);\n }\n\n return (isElement1 ? node1.sourceIndex : parent1.sourceIndex) -\n (isElement2 ? node2.sourceIndex : parent2.sourceIndex);\n }\n }\n\n // For Safari, we compare ranges.\n var doc = goog.dom.getOwnerDocument(node1);\n\n var range1, range2;\n range1 = doc.createRange();\n range1.selectNode(node1);\n range1.collapse(true);\n\n range2 = doc.createRange();\n range2.selectNode(node2);\n range2.collapse(true);\n\n return range1.compareBoundaryPoints(\n goog.global['Range'].START_TO_END, range2);\n};\n\n\n/**\n * Utility function to compare the position of two nodes, when\n * `textNode`'s parent is an ancestor of `node`. If this entry\n * condition is not met, this function will attempt to reference a null object.\n * @param {!Node} textNode The textNode to compare.\n * @param {Node} node The node to compare.\n * @return {number} -1 if node is before textNode, +1 otherwise.\n * @private\n */\ngoog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) {\n 'use strict';\n var parent = textNode.parentNode;\n if (parent == node) {\n // If textNode is a child of node, then node comes first.\n return -1;\n }\n var sibling = node;\n while (sibling.parentNode != parent) {\n sibling = sibling.parentNode;\n }\n return goog.dom.compareSiblingOrder_(sibling, textNode);\n};\n\n\n/**\n * Utility function to compare the position of two nodes known to be non-equal\n * siblings.\n * @param {Node} node1 The first node to compare.\n * @param {!Node} node2 The second node to compare.\n * @return {number} -1 if node1 is before node2, +1 otherwise.\n * @private\n */\ngoog.dom.compareSiblingOrder_ = function(node1, node2) {\n 'use strict';\n var s = node2;\n while ((s = s.previousSibling)) {\n if (s == node1) {\n // We just found node1 before node2.\n return -1;\n }\n }\n\n // Since we didn't find it, node1 must be after node2.\n return 1;\n};\n\n\n/**\n * Find the deepest common ancestor of the given nodes.\n * @param {...Node} var_args The nodes to find a common ancestor of.\n * @return {Node} The common ancestor of the nodes, or null if there is none.\n * null will only be returned if two or more of the nodes are from different\n * documents.\n */\ngoog.dom.findCommonAncestor = function(var_args) {\n 'use strict';\n var i, count = arguments.length;\n if (!count) {\n return null;\n } else if (count == 1) {\n return arguments[0];\n }\n\n var paths = [];\n var minLength = Infinity;\n for (i = 0; i < count; i++) {\n // Compute the list of ancestors.\n var ancestors = [];\n var node = arguments[i];\n while (node) {\n ancestors.unshift(node);\n node = node.parentNode;\n }\n\n // Save the list for comparison.\n paths.push(ancestors);\n minLength = Math.min(minLength, ancestors.length);\n }\n var output = null;\n for (i = 0; i < minLength; i++) {\n var first = paths[0][i];\n for (var j = 1; j < count; j++) {\n if (first != paths[j][i]) {\n return output;\n }\n }\n output = first;\n }\n return output;\n};\n\n\n/**\n * Returns whether node is in a document or detached. Throws an error if node\n * itself is a document. This specifically handles two cases beyond naive use of\n * builtins: (1) it works correctly in IE, and (2) it works for elements from\n * different documents/iframes. If neither of these considerations are relevant\n * then a simple `document.contains(node)` may be used instead.\n * @param {!Node} node\n * @return {boolean}\n */\ngoog.dom.isInDocument = function(node) {\n 'use strict';\n return (node.ownerDocument.compareDocumentPosition(node) & 16) == 16;\n};\n\n\n/**\n * Returns the owner document for a node.\n * @param {Node|Window} node The node to get the document for.\n * @return {!Document} The document owning the node.\n */\ngoog.dom.getOwnerDocument = function(node) {\n 'use strict';\n // TODO(nnaze): Update param signature to be non-nullable.\n goog.asserts.assert(node, 'Node cannot be null or undefined.');\n return /** @type {!Document} */ (\n node.nodeType == goog.dom.NodeType.DOCUMENT ?\n node :\n node.ownerDocument || node.document);\n};\n\n\n/**\n * Cross-browser function for getting the document element of a frame or iframe.\n * @param {Element} frame Frame element.\n * @return {!Document} The frame content document.\n */\ngoog.dom.getFrameContentDocument = function(frame) {\n 'use strict';\n return frame.contentDocument ||\n /** @type {!HTMLFrameElement} */ (frame).contentWindow.document;\n};\n\n\n/**\n * Cross-browser function for getting the window of a frame or iframe.\n * @param {Element} frame Frame element.\n * @return {Window} The window associated with the given frame, or null if none\n * exists.\n */\ngoog.dom.getFrameContentWindow = function(frame) {\n 'use strict';\n try {\n return frame.contentWindow ||\n (frame.contentDocument ? goog.dom.getWindow(frame.contentDocument) :\n null);\n } catch (e) {\n // NOTE(user): In IE8, checking the contentWindow or contentDocument\n // properties will throw a \"Unspecified Error\" exception if the iframe is\n // not inserted in the DOM. If we get this we can be sure that no window\n // exists, so return null.\n }\n return null;\n};\n\n\n/**\n * Sets the text content of a node, with cross-browser support.\n * @param {Node} node The node to change the text content of.\n * @param {string|number} text The value that should replace the node's content.\n * @return {void}\n */\ngoog.dom.setTextContent = function(node, text) {\n 'use strict';\n goog.asserts.assert(\n node != null,\n 'goog.dom.setTextContent expects a non-null value for node');\n\n if ('textContent' in node) {\n node.textContent = text;\n } else if (node.nodeType == goog.dom.NodeType.TEXT) {\n /** @type {!Text} */ (node).data = String(text);\n } else if (\n node.firstChild && node.firstChild.nodeType == goog.dom.NodeType.TEXT) {\n // If the first child is a text node we just change its data and remove the\n // rest of the children.\n while (node.lastChild != node.firstChild) {\n node.removeChild(goog.asserts.assert(node.lastChild));\n }\n /** @type {!Text} */ (node.firstChild).data = String(text);\n } else {\n goog.dom.removeChildren(node);\n var doc = goog.dom.getOwnerDocument(node);\n node.appendChild(doc.createTextNode(String(text)));\n }\n};\n\n\n/**\n * Gets the outerHTML of a node, which is like innerHTML, except that it\n * actually contains the HTML of the node itself.\n * @param {Element} element The element to get the HTML of.\n * @return {string} The outerHTML of the given element.\n */\ngoog.dom.getOuterHtml = function(element) {\n 'use strict';\n goog.asserts.assert(\n element !== null,\n 'goog.dom.getOuterHtml expects a non-null value for element');\n // IE, Opera and WebKit all have outerHTML.\n if ('outerHTML' in element) {\n return element.outerHTML;\n } else {\n var doc = goog.dom.getOwnerDocument(element);\n var div = goog.dom.createElement_(doc, goog.dom.TagName.DIV);\n div.appendChild(element.cloneNode(true));\n return div.innerHTML;\n }\n};\n\n\n/**\n * Finds the first descendant node that matches the filter function, using depth\n * first search. This function offers the most general purpose way of finding a\n * matching element.\n *\n * Prefer using `querySelector` if the matching criteria can be expressed as a\n * CSS selector, or `goog.dom.findElement` if you would filter for `nodeType ==\n * Node.ELEMENT_NODE`.\n *\n * @param {Node} root The root of the tree to search.\n * @param {function(Node) : boolean} p The filter function.\n * @return {Node|undefined} The found node or undefined if none is found.\n */\ngoog.dom.findNode = function(root, p) {\n 'use strict';\n var rv = [];\n var found = goog.dom.findNodes_(root, p, rv, true);\n return found ? rv[0] : undefined;\n};\n\n\n/**\n * Finds all the descendant nodes that match the filter function, using depth\n * first search. This function offers the most general-purpose way\n * of finding a set of matching elements.\n *\n * Prefer using `querySelectorAll` if the matching criteria can be expressed as\n * a CSS selector, or `goog.dom.findElements` if you would filter for\n * `nodeType == Node.ELEMENT_NODE`.\n *\n * @param {Node} root The root of the tree to search.\n * @param {function(Node) : boolean} p The filter function.\n * @return {!Array<!Node>} The found nodes or an empty array if none are found.\n */\ngoog.dom.findNodes = function(root, p) {\n 'use strict';\n var rv = [];\n goog.dom.findNodes_(root, p, rv, false);\n return rv;\n};\n\n\n/**\n * Finds the first or all the descendant nodes that match the filter function,\n * using a depth first search.\n * @param {Node} root The root of the tree to search.\n * @param {function(Node) : boolean} p The filter function.\n * @param {!Array<!Node>} rv The found nodes are added to this array.\n * @param {boolean} findOne If true we exit after the first found node.\n * @return {boolean} Whether the search is complete or not. True in case findOne\n * is true and the node is found. False otherwise.\n * @private\n */\ngoog.dom.findNodes_ = function(root, p, rv, findOne) {\n 'use strict';\n if (root != null) {\n var child = root.firstChild;\n while (child) {\n if (p(child)) {\n rv.push(child);\n if (findOne) {\n return true;\n }\n }\n if (goog.dom.findNodes_(child, p, rv, findOne)) {\n return true;\n }\n child = child.nextSibling;\n }\n }\n return false;\n};\n\n\n/**\n * Finds the first descendant element (excluding `root`) that matches the filter\n * function, using depth first search. Prefer using `querySelector` if the\n * matching criteria can be expressed as a CSS selector.\n *\n * @param {!Element | !Document} root\n * @param {function(!Element): boolean} pred Filter function.\n * @return {?Element} First matching element or null if there is none.\n */\ngoog.dom.findElement = function(root, pred) {\n 'use strict';\n var stack = goog.dom.getChildrenReverse_(root);\n while (stack.length > 0) {\n var next = stack.pop();\n if (pred(next)) return next;\n for (var c = next.lastElementChild; c; c = c.previousElementSibling) {\n stack.push(c);\n }\n }\n return null;\n};\n\n\n/**\n * Finds all the descendant elements (excluding `root`) that match the filter\n * function, using depth first search. Prefer using `querySelectorAll` if the\n * matching criteria can be expressed as a CSS selector.\n *\n * @param {!Element | !Document} root\n * @param {function(!Element): boolean} pred Filter function.\n * @return {!Array<!Element>}\n */\ngoog.dom.findElements = function(root, pred) {\n 'use strict';\n var result = [], stack = goog.dom.getChildrenReverse_(root);\n while (stack.length > 0) {\n var next = stack.pop();\n if (pred(next)) result.push(next);\n for (var c = next.lastElementChild; c; c = c.previousElementSibling) {\n stack.push(c);\n }\n }\n return result;\n};\n\n\n/**\n * @param {!Element | !Document} node\n * @return {!Array<!Element>} node's child elements in reverse order.\n * @private\n */\ngoog.dom.getChildrenReverse_ = function(node) {\n 'use strict';\n // document.lastElementChild doesn't exist in IE9; fall back to\n // documentElement.\n if (node.nodeType == goog.dom.NodeType.DOCUMENT) {\n return [node.documentElement];\n } else {\n var children = [];\n for (var c = node.lastElementChild; c; c = c.previousElementSibling) {\n children.push(c);\n }\n return children;\n }\n};\n\n\n/**\n * Map of tags whose content to ignore when calculating text length.\n * @private {!Object<string, number>}\n * @const\n */\ngoog.dom.TAGS_TO_IGNORE_ = {\n 'SCRIPT': 1,\n 'STYLE': 1,\n 'HEAD': 1,\n 'IFRAME': 1,\n 'OBJECT': 1\n};\n\n\n/**\n * Map of tags which have predefined values with regard to whitespace.\n * @private {!Object<string, string>}\n * @const\n */\ngoog.dom.PREDEFINED_TAG_VALUES_ = {\n 'IMG': ' ',\n 'BR': '\\n'\n};\n\n\n/**\n * Returns true if the element has a tab index that allows it to receive\n * keyboard focus (tabIndex >= 0), false otherwise. Note that some elements\n * natively support keyboard focus, even if they have no tab index.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element has a tab index that allows keyboard\n * focus.\n */\ngoog.dom.isFocusableTabIndex = function(element) {\n 'use strict';\n return goog.dom.hasSpecifiedTabIndex_(element) &&\n goog.dom.isTabIndexFocusable_(element);\n};\n\n\n/**\n * Enables or disables keyboard focus support on the element via its tab index.\n * Only elements for which {@link goog.dom.isFocusableTabIndex} returns true\n * (or elements that natively support keyboard focus, like form elements) can\n * receive keyboard focus. See http://go/tabindex for more info.\n * @param {Element} element Element whose tab index is to be changed.\n * @param {boolean} enable Whether to set or remove a tab index on the element\n * that supports keyboard focus.\n * @return {void}\n */\ngoog.dom.setFocusableTabIndex = function(element, enable) {\n 'use strict';\n if (enable) {\n element.tabIndex = 0;\n } else {\n // Set tabIndex to -1 first, then remove it. This is a workaround for\n // Safari (confirmed in version 4 on Windows). When removing the attribute\n // without setting it to -1 first, the element remains keyboard focusable\n // despite not having a tabIndex attribute anymore.\n element.tabIndex = -1;\n element.removeAttribute('tabIndex'); // Must be camelCase!\n }\n};\n\n\n/**\n * Returns true if the element can be focused, i.e. it has a tab index that\n * allows it to receive keyboard focus (tabIndex >= 0), or it is an element\n * that natively supports keyboard focus.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element allows keyboard focus.\n */\ngoog.dom.isFocusable = function(element) {\n 'use strict';\n var focusable;\n // Some elements can have unspecified tab index and still receive focus.\n if (goog.dom.nativelySupportsFocus_(element)) {\n // Make sure the element is not disabled ...\n focusable = !element.disabled &&\n // ... and if a tab index is specified, it allows focus.\n (!goog.dom.hasSpecifiedTabIndex_(element) ||\n goog.dom.isTabIndexFocusable_(element));\n } else {\n focusable = goog.dom.isFocusableTabIndex(element);\n }\n\n // IE requires elements to be visible in order to focus them.\n return focusable && goog.userAgent.IE ?\n goog.dom.hasNonZeroBoundingRect_(/** @type {!HTMLElement} */ (element)) :\n focusable;\n};\n\n\n/**\n * Returns true if the element has a specified tab index.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element has a specified tab index.\n * @private\n */\ngoog.dom.hasSpecifiedTabIndex_ = function(element) {\n 'use strict';\n return element.hasAttribute('tabindex');\n};\n\n\n/**\n * Returns true if the element's tab index allows the element to be focused.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element's tab index allows focus.\n * @private\n */\ngoog.dom.isTabIndexFocusable_ = function(element) {\n 'use strict';\n var index = /** @type {!HTMLElement} */ (element).tabIndex;\n // NOTE: IE9 puts tabIndex in 16-bit int, e.g. -2 is 65534.\n return typeof (index) === 'number' && index >= 0 && index < 32768;\n};\n\n\n/**\n * Returns true if the element is focusable even when tabIndex is not set.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element natively supports focus.\n * @private\n */\ngoog.dom.nativelySupportsFocus_ = function(element) {\n 'use strict';\n return (\n element.tagName == goog.dom.TagName.A && element.hasAttribute('href') ||\n element.tagName == goog.dom.TagName.INPUT ||\n element.tagName == goog.dom.TagName.TEXTAREA ||\n element.tagName == goog.dom.TagName.SELECT ||\n element.tagName == goog.dom.TagName.BUTTON);\n};\n\n\n/**\n * Returns true if the element has a bounding rectangle that would be visible\n * (i.e. its width and height are greater than zero).\n * @param {!HTMLElement} element Element to check.\n * @return {boolean} Whether the element has a non-zero bounding rectangle.\n * @private\n */\ngoog.dom.hasNonZeroBoundingRect_ = function(element) {\n 'use strict';\n var rect;\n if (typeof element['getBoundingClientRect'] !== 'function' ||\n // In IE, getBoundingClientRect throws on detached nodes.\n (goog.userAgent.IE && element.parentElement == null)) {\n rect = {'height': element.offsetHeight, 'width': element.offsetWidth};\n } else {\n rect = element.getBoundingClientRect();\n }\n return rect != null && rect.height > 0 && rect.width > 0;\n};\n\n\n/**\n * Returns the text content of the current node, without markup and invisible\n * symbols. New lines are stripped and whitespace is collapsed,\n * such that each character would be visible.\n *\n * In browsers that support it, innerText is used. Other browsers attempt to\n * simulate it via node traversal. Line breaks are canonicalized in IE.\n *\n * @param {Node} node The node from which we are getting content.\n * @return {string} The text content.\n */\ngoog.dom.getTextContent = function(node) {\n 'use strict';\n var textContent;\n var buf = [];\n goog.dom.getTextContent_(node, buf, true);\n textContent = buf.join('');\n\n // Strip ­ entities. goog.format.insertWordBreaks inserts them in Opera.\n textContent = textContent.replace(/ \\xAD /g, ' ').replace(/\\xAD/g, '');\n // Strip ​ entities. goog.format.insertWordBreaks inserts them in IE8.\n textContent = textContent.replace(/\\u200B/g, '');\n\n textContent = textContent.replace(/ +/g, ' ');\n if (textContent != ' ') {\n textContent = textContent.replace(/^\\s*/, '');\n }\n\n return textContent;\n};\n\n\n/**\n * Returns the text content of the current node, without markup.\n *\n * Unlike `getTextContent` this method does not collapse whitespaces\n * or normalize lines breaks.\n *\n * @param {Node} node The node from which we are getting content.\n * @return {string} The raw text content.\n */\ngoog.dom.getRawTextContent = function(node) {\n 'use strict';\n var buf = [];\n goog.dom.getTextContent_(node, buf, false);\n\n return buf.join('');\n};\n\n\n/**\n * Recursive support function for text content retrieval.\n *\n * @param {Node} node The node from which we are getting content.\n * @param {Array<string>} buf string buffer.\n * @param {boolean} normalizeWhitespace Whether to normalize whitespace.\n * @private\n */\ngoog.dom.getTextContent_ = function(node, buf, normalizeWhitespace) {\n 'use strict';\n if (node.nodeName in goog.dom.TAGS_TO_IGNORE_) {\n // ignore certain tags\n } else if (node.nodeType == goog.dom.NodeType.TEXT) {\n if (normalizeWhitespace) {\n buf.push(String(node.nodeValue).replace(/(\\r\\n|\\r|\\n)/g, ''));\n } else {\n buf.push(node.nodeValue);\n }\n } else if (node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {\n buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName]);\n } else {\n var child = node.firstChild;\n while (child) {\n goog.dom.getTextContent_(child, buf, normalizeWhitespace);\n child = child.nextSibling;\n }\n }\n};\n\n\n/**\n * Returns the text length of the text contained in a node, without markup. This\n * is equivalent to the selection length if the node was selected, or the number\n * of cursor movements to traverse the node. Images & BRs take one space. New\n * lines are ignored.\n *\n * @param {Node} node The node whose text content length is being calculated.\n * @return {number} The length of `node`'s text content.\n */\ngoog.dom.getNodeTextLength = function(node) {\n 'use strict';\n return goog.dom.getTextContent(node).length;\n};\n\n\n/**\n * Returns the text offset of a node relative to one of its ancestors. The text\n * length is the same as the length calculated by goog.dom.getNodeTextLength.\n *\n * @param {Node} node The node whose offset is being calculated.\n * @param {Node=} opt_offsetParent The node relative to which the offset will\n * be calculated. Defaults to the node's owner document's body.\n * @return {number} The text offset.\n */\ngoog.dom.getNodeTextOffset = function(node, opt_offsetParent) {\n 'use strict';\n var root = opt_offsetParent || goog.dom.getOwnerDocument(node).body;\n var buf = [];\n while (node && node != root) {\n var cur = node;\n while ((cur = cur.previousSibling)) {\n buf.unshift(goog.dom.getTextContent(cur));\n }\n node = node.parentNode;\n }\n // Trim left to deal with FF cases when there might be line breaks and empty\n // nodes at the front of the text\n return goog.string.trimLeft(buf.join('')).replace(/ +/g, ' ').length;\n};\n\n\n/**\n * Returns the node at a given offset in a parent node. If an object is\n * provided for the optional third parameter, the node and the remainder of the\n * offset will stored as properties of this object.\n * @param {Node} parent The parent node.\n * @param {number} offset The offset into the parent node.\n * @param {Object=} opt_result Object to be used to store the return value. The\n * return value will be stored in the form {node: Node, remainder: number}\n * if this object is provided.\n * @return {Node} The node at the given offset.\n */\ngoog.dom.getNodeAtOffset = function(parent, offset, opt_result) {\n 'use strict';\n var stack = [parent], pos = 0, cur = null;\n while (stack.length > 0 && pos < offset) {\n cur = stack.pop();\n if (cur.nodeName in goog.dom.TAGS_TO_IGNORE_) {\n // ignore certain tags\n } else if (cur.nodeType == goog.dom.NodeType.TEXT) {\n var text = cur.nodeValue.replace(/(\\r\\n|\\r|\\n)/g, '').replace(/ +/g, ' ');\n pos += text.length;\n } else if (cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {\n pos += goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length;\n } else {\n for (var i = cur.childNodes.length - 1; i >= 0; i--) {\n stack.push(cur.childNodes[i]);\n }\n }\n }\n if (goog.isObject(opt_result)) {\n opt_result.remainder = cur ? cur.nodeValue.length + offset - pos - 1 : 0;\n opt_result.node = cur;\n }\n\n return cur;\n};\n\n\n/**\n * Returns true if the object is a `NodeList`. To qualify as a NodeList,\n * the object must have a numeric length property and an item function (which\n * has type 'string' on IE for some reason).\n * @param {Object} val Object to test.\n * @return {boolean} Whether the object is a NodeList.\n */\ngoog.dom.isNodeList = function(val) {\n 'use strict';\n // TODO(attila): Now the isNodeList is part of goog.dom we can use\n // goog.userAgent to make this simpler.\n // A NodeList must have a length property of type 'number' on all platforms.\n if (val && typeof val.length == 'number') {\n // A NodeList is an object everywhere except Safari, where it's a function.\n if (goog.isObject(val)) {\n // A NodeList must have an item function (on non-IE platforms) or an item\n // property of type 'string' (on IE).\n return typeof val.item == 'function' || typeof val.item == 'string';\n } else if (typeof val === 'function') {\n // On Safari, a NodeList is a function with an item property that is also\n // a function.\n return typeof /** @type {?} */ (val.item) == 'function';\n }\n }\n\n // Not a NodeList.\n return false;\n};\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that has the passed\n * tag name and/or class name. If the passed element matches the specified\n * criteria, the element itself is returned.\n * @param {Node} element The DOM node to start with.\n * @param {?(goog.dom.TagName<T>|string)=} opt_tag The tag name to match (or\n * null/undefined to match only based on class name).\n * @param {?string=} opt_class The class name to match (or null/undefined to\n * match only based on tag name).\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {?R} The first ancestor that matches the passed criteria, or\n * null if no match is found. The return type is {?Element} if opt_tag is\n * not a member of goog.dom.TagName or a more specific type if it is (e.g.\n * {?HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.getAncestorByTagNameAndClass = function(\n element, opt_tag, opt_class, opt_maxSearchSteps) {\n 'use strict';\n if (!opt_tag && !opt_class) {\n return null;\n }\n var tagName = opt_tag ? String(opt_tag).toUpperCase() : null;\n return /** @type {Element} */ (goog.dom.getAncestor(element, function(node) {\n 'use strict';\n return (!tagName || node.nodeName == tagName) &&\n (!opt_class ||\n typeof node.className === 'string' &&\n goog.array.contains(node.className.split(/\\s+/), opt_class));\n }, true, opt_maxSearchSteps));\n};\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that has the passed\n * class name. If the passed element matches the specified criteria, the\n * element itself is returned.\n * @param {Node} element The DOM node to start with.\n * @param {string} className The class name to match.\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {Element} The first ancestor that matches the passed criteria, or\n * null if none match.\n */\ngoog.dom.getAncestorByClass = function(element, className, opt_maxSearchSteps) {\n 'use strict';\n return goog.dom.getAncestorByTagNameAndClass(\n element, null, className, opt_maxSearchSteps);\n};\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that passes the\n * matcher function.\n * @param {Node} element The DOM node to start with.\n * @param {function(!Node) : boolean} matcher A function that returns true if\n * the passed node matches the desired criteria.\n * @param {boolean=} opt_includeNode If true, the node itself is included in\n * the search (the first call to the matcher will pass startElement as\n * the node to test).\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {Node} DOM node that matched the matcher, or null if there was\n * no match.\n */\ngoog.dom.getAncestor = function(\n element, matcher, opt_includeNode, opt_maxSearchSteps) {\n 'use strict';\n if (element && !opt_includeNode) {\n element = element.parentNode;\n }\n var steps = 0;\n while (element &&\n (opt_maxSearchSteps == null || steps <= opt_maxSearchSteps)) {\n goog.asserts.assert(element.name != 'parentNode');\n if (matcher(element)) {\n return element;\n }\n element = element.parentNode;\n steps++;\n }\n // Reached the root of the DOM without a match\n return null;\n};\n\n\n/**\n * Determines the active element in the given document.\n * @param {Document} doc The document to look in.\n * @return {Element} The active element.\n */\ngoog.dom.getActiveElement = function(doc) {\n 'use strict';\n // While in an iframe, IE9 will throw \"Unspecified error\" when accessing\n // activeElement.\n try {\n var activeElement = doc && doc.activeElement;\n // While not in an iframe, IE9-11 sometimes gives null.\n // While in an iframe, IE11 sometimes returns an empty object.\n return activeElement && activeElement.nodeName ? activeElement : null;\n } catch (e) {\n return null;\n }\n};\n\n\n/**\n * Gives the current devicePixelRatio.\n *\n * By default, this is the value of window.devicePixelRatio (which should be\n * preferred if present).\n *\n * If window.devicePixelRatio is not present, the ratio is calculated with\n * window.matchMedia, if present. Otherwise, gives 1.0.\n *\n * Some browsers (including Chrome) consider the browser zoom level in the pixel\n * ratio, so the value may change across multiple calls.\n *\n * @return {number} The number of actual pixels per virtual pixel.\n */\ngoog.dom.getPixelRatio = function() {\n 'use strict';\n var win = goog.dom.getWindow();\n if (win.devicePixelRatio !== undefined) {\n return win.devicePixelRatio;\n } else if (win.matchMedia) {\n // Should be for IE10 and FF6-17 (this basically clamps to lower)\n // Note that the order of these statements is important\n return goog.dom.matchesPixelRatio_(3) || goog.dom.matchesPixelRatio_(2) ||\n goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(1) ||\n .75;\n }\n return 1;\n};\n\n\n/**\n * Calculates a mediaQuery to check if the current device supports the\n * given actual to virtual pixel ratio.\n * @param {number} pixelRatio The ratio of actual pixels to virtual pixels.\n * @return {number} pixelRatio if applicable, otherwise 0.\n * @private\n */\ngoog.dom.matchesPixelRatio_ = function(pixelRatio) {\n 'use strict';\n var win = goog.dom.getWindow();\n /**\n * Due to the 1:96 fixed ratio of CSS in to CSS px, 1dppx is equivalent to\n * 96dpi.\n * @const {number}\n */\n var dpiPerDppx = 96;\n var query =\n // FF16-17\n '(min-resolution: ' + pixelRatio + 'dppx),' +\n // FF6-15\n '(min--moz-device-pixel-ratio: ' + pixelRatio + '),' +\n // IE10 (this works for the two browsers above too but I don't want to\n // trust the 1:96 fixed ratio magic)\n '(min-resolution: ' + (pixelRatio * dpiPerDppx) + 'dpi)';\n return win.matchMedia(query).matches ? pixelRatio : 0;\n};\n\n\n/**\n * Gets '2d' context of a canvas. Shortcut for canvas.getContext('2d') with a\n * type information.\n * @param {!HTMLCanvasElement|!OffscreenCanvas} canvas\n * @return {!CanvasRenderingContext2D}\n */\ngoog.dom.getCanvasContext2D = function(canvas) {\n 'use strict';\n return /** @type {!CanvasRenderingContext2D} */ (canvas.getContext('2d'));\n};\n\n\n\n/**\n * Create an instance of a DOM helper with a new document object.\n * @param {Document=} opt_document Document object to associate with this\n * DOM helper.\n * @constructor\n */\ngoog.dom.DomHelper = function(opt_document) {\n 'use strict';\n /**\n * Reference to the document object to use\n * @type {!Document}\n * @private\n */\n this.document_ = opt_document || goog.global.document || document;\n};\n\n\n/**\n * Gets the dom helper object for the document where the element resides.\n * @param {Node=} opt_node If present, gets the DomHelper for this node.\n * @return {!goog.dom.DomHelper} The DomHelper.\n */\ngoog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper;\n\n\n/**\n * Sets the document object.\n * @param {!Document} document Document object.\n */\ngoog.dom.DomHelper.prototype.setDocument = function(document) {\n 'use strict';\n this.document_ = document;\n};\n\n\n/**\n * Gets the document object being used by the dom library.\n * @return {!Document} Document object.\n */\ngoog.dom.DomHelper.prototype.getDocument = function() {\n 'use strict';\n return this.document_;\n};\n\n\n/**\n * Alias for `getElementById`. If a DOM node is passed in then we just\n * return that.\n * @param {string|Element} element Element ID or a DOM node.\n * @return {Element} The element with the given ID, or the node passed in.\n */\ngoog.dom.DomHelper.prototype.getElement = function(element) {\n 'use strict';\n return goog.dom.getElementHelper_(this.document_, element);\n};\n\n\n/**\n * Gets an element by id, asserting that the element is found.\n *\n * This is used when an element is expected to exist, and should fail with\n * an assertion error if it does not (if assertions are enabled).\n *\n * @param {string} id Element ID.\n * @return {!Element} The element with the given ID, if it exists.\n */\ngoog.dom.DomHelper.prototype.getRequiredElement = function(id) {\n 'use strict';\n return goog.dom.getRequiredElementHelper_(this.document_, id);\n};\n\n\n/**\n * Alias for `getElement`.\n * @param {string|Element} element Element ID or a DOM node.\n * @return {Element} The element with the given ID, or the node passed in.\n * @deprecated Use {@link goog.dom.DomHelper.prototype.getElement} instead.\n */\ngoog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement;\n\n\n/**\n * Gets elements by tag name.\n * @param {!goog.dom.TagName<T>} tagName\n * @param {(!Document|!Element)=} opt_parent Parent element or document where to\n * look for elements. Defaults to document of this DomHelper.\n * @return {!NodeList<R>} List of elements. The members of the list are\n * {!Element} if tagName is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.getElementsByTagName = function(\n tagName, opt_parent) {\n 'use strict';\n var parent = opt_parent || this.document_;\n return parent.getElementsByTagName(String(tagName));\n};\n\n\n/**\n * Looks up elements by both tag and class name, using browser native functions\n * (`querySelectorAll`, `getElementsByTagName` or\n * `getElementsByClassName`) where possible. The returned array is a live\n * NodeList or a static list depending on the code path taken.\n *\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name or * for all\n * tags.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {!IArrayLike<R>} Array-like list of elements (only a length property\n * and numerical indices are guaranteed to exist). The members of the array\n * are {!Element} if opt_tag is not a member of goog.dom.TagName or more\n * specific types if it is (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(\n opt_tag, opt_class, opt_el) {\n 'use strict';\n return goog.dom.getElementsByTagNameAndClass_(\n this.document_, opt_tag, opt_class, opt_el);\n};\n\n\n/**\n * Gets the first element matching the tag and the class.\n *\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {(Document|Element)=} opt_el Optional element to look in.\n * @return {?R} Reference to a DOM node. The return type is {?Element} if\n * tagName is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {?HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.getElementByTagNameAndClass = function(\n opt_tag, opt_class, opt_el) {\n 'use strict';\n return goog.dom.getElementByTagNameAndClass_(\n this.document_, opt_tag, opt_class, opt_el);\n};\n\n\n/**\n * Returns an array of all the elements with the provided className.\n * @param {string} className the name of the class to look for.\n * @param {Element|Document=} opt_el Optional element to look in.\n * @return {!IArrayLike<!Element>} The items found with the class name provided.\n */\ngoog.dom.DomHelper.prototype.getElementsByClass = function(className, opt_el) {\n 'use strict';\n var doc = opt_el || this.document_;\n return goog.dom.getElementsByClass(className, doc);\n};\n\n\n/**\n * Returns the first element we find matching the provided class name.\n * @param {string} className the name of the class to look for.\n * @param {(Element|Document)=} opt_el Optional element to look in.\n * @return {Element} The first item found with the class name provided.\n */\ngoog.dom.DomHelper.prototype.getElementByClass = function(className, opt_el) {\n 'use strict';\n var doc = opt_el || this.document_;\n return goog.dom.getElementByClass(className, doc);\n};\n\n\n/**\n * Ensures an element with the given className exists, and then returns the\n * first element with the provided className.\n * @param {string} className the name of the class to look for.\n * @param {(!Element|!Document)=} opt_root Optional element or document to look\n * in.\n * @return {!Element} The first item found with the class name provided.\n * @throws {goog.asserts.AssertionError} Thrown if no element is found.\n */\ngoog.dom.DomHelper.prototype.getRequiredElementByClass = function(\n className, opt_root) {\n 'use strict';\n var root = opt_root || this.document_;\n return goog.dom.getRequiredElementByClass(className, root);\n};\n\n\n/**\n * Alias for `getElementsByTagNameAndClass`.\n * @deprecated Use DomHelper getElementsByTagNameAndClass.\n *\n * @param {(string|?goog.dom.TagName<T>)=} opt_tag Element tag name.\n * @param {?string=} opt_class Optional class name.\n * @param {Element=} opt_el Optional element to look in.\n * @return {!IArrayLike<R>} Array-like list of elements (only a length property\n * and numerical indices are guaranteed to exist). The members of the array\n * are {!Element} if opt_tag is a string or more specific types if it is\n * a member of goog.dom.TagName (e.g. {!HTMLAnchorElement} for\n * goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.$$ =\n goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;\n\n\n/**\n * Sets a number of properties on a node.\n * @param {Element} element DOM node to set properties on.\n * @param {Object} properties Hash of property:value pairs.\n */\ngoog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties;\n\n\n/**\n * Gets the dimensions of the viewport.\n * @param {Window=} opt_window Optional window element to test. Defaults to\n * the window of the Dom Helper.\n * @return {!goog.math.Size} Object with values 'width' and 'height'.\n */\ngoog.dom.DomHelper.prototype.getViewportSize = function(opt_window) {\n 'use strict';\n // TODO(arv): This should not take an argument. That breaks the rule of a\n // a DomHelper representing a single frame/window/document.\n return goog.dom.getViewportSize(opt_window || this.getWindow());\n};\n\n\n/**\n * Calculates the height of the document.\n *\n * @return {number} The height of the document.\n */\ngoog.dom.DomHelper.prototype.getDocumentHeight = function() {\n 'use strict';\n return goog.dom.getDocumentHeight_(this.getWindow());\n};\n\n\n/**\n * Typedef for use with goog.dom.createDom and goog.dom.append.\n * @typedef {Object|string|Array|NodeList}\n */\ngoog.dom.Appendable;\n\n\n/**\n * Returns a dom node with a set of attributes. This function accepts varargs\n * for subsequent nodes to be added. Subsequent nodes will be added to the\n * first node as childNodes.\n *\n * So:\n * <code>createDom(goog.dom.TagName.DIV, null, createDom(goog.dom.TagName.P),\n * createDom(goog.dom.TagName.P));</code> would return a div with two child\n * paragraphs\n *\n * An easy way to move all child nodes of an existing element to a new parent\n * element is:\n * <code>createDom(goog.dom.TagName.DIV, null, oldElement.childNodes);</code>\n * which will remove all child nodes from the old element and add them as\n * child nodes of the new DIV.\n *\n * @param {string|!goog.dom.TagName<T>} tagName Tag to create.\n * @param {?Object|?Array<string>|string=} opt_attributes If object, then a map\n * of name-value pairs for attributes. If a string, then this is the\n * className of the new element. If an array, the elements will be joined\n * together as the className of the new element.\n * @param {...(goog.dom.Appendable|undefined)} var_args Further DOM nodes or\n * strings for text nodes. If one of the var_args is an array or\n * NodeList, its elements will be added as childNodes instead.\n * @return {R} Reference to a DOM node. The return type is {!Element} if tagName\n * is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.createDom = function(\n tagName, opt_attributes, var_args) {\n 'use strict';\n return goog.dom.createDom_(this.document_, arguments);\n};\n\n\n/**\n * Alias for `createDom`.\n * @param {string|!goog.dom.TagName<T>} tagName Tag to create.\n * @param {?Object|?Array<string>|string=} opt_attributes If object, then a map\n * of name-value pairs for attributes. If a string, then this is the\n * className of the new element. If an array, the elements will be joined\n * together as the className of the new element.\n * @param {...(goog.dom.Appendable|undefined)} var_args Further DOM nodes or\n * strings for text nodes. If one of the var_args is an array, its children\n * will be added as childNodes instead.\n * @return {R} Reference to a DOM node. The return type is {!Element} if tagName\n * is a string or a more specific type if it is a member of\n * goog.dom.TagName (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n * @deprecated Use {@link goog.dom.DomHelper.prototype.createDom} instead.\n */\ngoog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom;\n\n\n/**\n * Creates a new element.\n * @param {string|!goog.dom.TagName<T>} name Tag to create.\n * @return {R} The new element. The return type is {!Element} if name is\n * a string or a more specific type if it is a member of goog.dom.TagName\n * (e.g. {!HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.createElement = function(name) {\n 'use strict';\n return goog.dom.createElement_(this.document_, name);\n};\n\n\n/**\n * Creates a new text node.\n * @param {number|string} content Content.\n * @return {!Text} The new text node.\n */\ngoog.dom.DomHelper.prototype.createTextNode = function(content) {\n 'use strict';\n return this.document_.createTextNode(String(content));\n};\n\n\n/**\n * Create a table.\n * @param {number} rows The number of rows in the table. Must be >= 1.\n * @param {number} columns The number of columns in the table. Must be >= 1.\n * @param {boolean=} opt_fillWithNbsp If true, fills table entries with\n * `goog.string.Unicode.NBSP` characters.\n * @return {!HTMLElement} The created table.\n */\ngoog.dom.DomHelper.prototype.createTable = function(\n rows, columns, opt_fillWithNbsp) {\n 'use strict';\n return goog.dom.createTable_(\n this.document_, rows, columns, !!opt_fillWithNbsp);\n};\n\n\n/**\n * Converts an HTML into a node or a document fragment. A single Node is used if\n * `html` only generates a single node. If `html` generates multiple\n * nodes then these are put inside a `DocumentFragment`. This is a safe\n * version of `goog.dom.DomHelper#htmlToDocumentFragment` which is now\n * deleted.\n * @param {!goog.html.SafeHtml} html The HTML markup to convert.\n * @return {!Node} The resulting node.\n */\ngoog.dom.DomHelper.prototype.safeHtmlToNode = function(html) {\n 'use strict';\n return goog.dom.safeHtmlToNode_(this.document_, html);\n};\n\n\n/**\n * Returns true if the browser is in \"CSS1-compatible\" (standards-compliant)\n * mode, false otherwise.\n * @return {boolean} True if in CSS1-compatible mode.\n */\ngoog.dom.DomHelper.prototype.isCss1CompatMode = function() {\n 'use strict';\n return goog.dom.isCss1CompatMode_(this.document_);\n};\n\n\n/**\n * Gets the window object associated with the document.\n * @return {!Window} The window associated with the given document.\n */\ngoog.dom.DomHelper.prototype.getWindow = function() {\n 'use strict';\n return goog.dom.getWindow_(this.document_);\n};\n\n\n/**\n * Gets the document scroll element.\n * @return {!Element} Scrolling element.\n */\ngoog.dom.DomHelper.prototype.getDocumentScrollElement = function() {\n 'use strict';\n return goog.dom.getDocumentScrollElement_(this.document_);\n};\n\n\n/**\n * Gets the document scroll distance as a coordinate object.\n * @return {!goog.math.Coordinate} Object with properties 'x' and 'y'.\n */\ngoog.dom.DomHelper.prototype.getDocumentScroll = function() {\n 'use strict';\n return goog.dom.getDocumentScroll_(this.document_);\n};\n\n\n/**\n * Determines the active element in the given document.\n * @param {Document=} opt_doc The document to look in.\n * @return {Element} The active element.\n */\ngoog.dom.DomHelper.prototype.getActiveElement = function(opt_doc) {\n 'use strict';\n return goog.dom.getActiveElement(opt_doc || this.document_);\n};\n\n\n/**\n * Appends a child to a node.\n * @param {Node} parent Parent.\n * @param {Node} child Child.\n */\ngoog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild;\n\n\n/**\n * Appends a node with text or other nodes.\n * @param {!Node} parent The node to append nodes to.\n * @param {...goog.dom.Appendable} var_args The things to append to the node.\n * If this is a Node it is appended as is.\n * If this is a string then a text node is appended.\n * If this is an array like object then fields 0 to length - 1 are appended.\n */\ngoog.dom.DomHelper.prototype.append = goog.dom.append;\n\n\n/**\n * Determines if the given node can contain children, intended to be used for\n * HTML generation.\n *\n * @param {Node} node The node to check.\n * @return {boolean} Whether the node can contain children.\n */\ngoog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren;\n\n\n/**\n * Removes all the child nodes on a DOM node.\n * @param {Node} node Node to remove children from.\n */\ngoog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren;\n\n\n/**\n * Inserts a new node before an existing reference node (i.e., as the previous\n * sibling). If the reference node has no parent, then does nothing.\n * @param {Node} newNode Node to insert.\n * @param {Node} refNode Reference node to insert before.\n */\ngoog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore;\n\n\n/**\n * Inserts a new node after an existing reference node (i.e., as the next\n * sibling). If the reference node has no parent, then does nothing.\n * @param {Node} newNode Node to insert.\n * @param {Node} refNode Reference node to insert after.\n */\ngoog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter;\n\n\n/**\n * Insert a child at a given index. If index is larger than the number of child\n * nodes that the parent currently has, the node is inserted as the last child\n * node.\n * @param {Element} parent The element into which to insert the child.\n * @param {Node} child The element to insert.\n * @param {number} index The index at which to insert the new child node. Must\n * not be negative.\n */\ngoog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt;\n\n\n/**\n * Removes a node from its parent.\n * @param {Node} node The node to remove.\n * @return {Node} The node removed if removed; else, null.\n */\ngoog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode;\n\n\n/**\n * Replaces a node in the DOM tree. Will do nothing if `oldNode` has no\n * parent.\n * @param {Node} newNode Node to insert.\n * @param {Node} oldNode Node to replace.\n */\ngoog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode;\n\n\n/**\n * Replaces child nodes of `target` with child nodes of `source`. This is\n * roughly equivalent to `target.innerHTML = source.innerHTML` which is not\n * compatible with Trusted Types.\n * @param {?Node} target Node to clean and replace its children.\n * @param {?Node} source Node to get the children from. The nodes will be cloned\n * so they will stay in source.\n */\ngoog.dom.DomHelper.prototype.copyContents = goog.dom.copyContents;\n\n\n/**\n * Flattens an element. That is, removes it and replace it with its children.\n * @param {Element} element The element to flatten.\n * @return {Element|undefined} The original element, detached from the document\n * tree, sans children, or undefined if the element was already not in the\n * document.\n */\ngoog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement;\n\n\n/**\n * Returns an array containing just the element children of the given element.\n * @param {Element} element The element whose element children we want.\n * @return {!(Array<!Element>|NodeList<!Element>)} An array or array-like list\n * of just the element children of the given element.\n */\ngoog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren;\n\n\n/**\n * Returns the first child node that is an element.\n * @param {Node} node The node to get the first child element of.\n * @return {Element} The first child node of `node` that is an element.\n */\ngoog.dom.DomHelper.prototype.getFirstElementChild =\n goog.dom.getFirstElementChild;\n\n\n/**\n * Returns the last child node that is an element.\n * @param {Node} node The node to get the last child element of.\n * @return {Element} The last child node of `node` that is an element.\n */\ngoog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild;\n\n\n/**\n * Returns the first next sibling that is an element.\n * @param {Node} node The node to get the next sibling element of.\n * @return {Element} The next sibling of `node` that is an element.\n */\ngoog.dom.DomHelper.prototype.getNextElementSibling =\n goog.dom.getNextElementSibling;\n\n\n/**\n * Returns the first previous sibling that is an element.\n * @param {Node} node The node to get the previous sibling element of.\n * @return {Element} The first previous sibling of `node` that is\n * an element.\n */\ngoog.dom.DomHelper.prototype.getPreviousElementSibling =\n goog.dom.getPreviousElementSibling;\n\n\n/**\n * Returns the next node in source order from the given node.\n * @param {Node} node The node.\n * @return {Node} The next node in the DOM tree, or null if this was the last\n * node.\n */\ngoog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode;\n\n\n/**\n * Returns the previous node in source order from the given node.\n * @param {Node} node The node.\n * @return {Node} The previous node in the DOM tree, or null if this was the\n * first node.\n */\ngoog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode;\n\n\n/**\n * Whether the object looks like a DOM node.\n * @param {?} obj The object being tested for node likeness.\n * @return {boolean} Whether the object looks like a DOM node.\n */\ngoog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike;\n\n\n/**\n * Whether the object looks like an Element.\n * @param {?} obj The object being tested for Element likeness.\n * @return {boolean} Whether the object looks like an Element.\n */\ngoog.dom.DomHelper.prototype.isElement = goog.dom.isElement;\n\n\n/**\n * Returns true if the specified value is a Window object. This includes the\n * global window for HTML pages, and iframe windows.\n * @param {?} obj Variable to test.\n * @return {boolean} Whether the variable is a window.\n */\ngoog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow;\n\n\n/**\n * Returns an element's parent, if it's an Element.\n * @param {Element} element The DOM element.\n * @return {Element} The parent, or null if not an Element.\n */\ngoog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement;\n\n\n/**\n * Whether a node contains another node.\n * @param {Node} parent The node that should contain the other node.\n * @param {Node} descendant The node to test presence of.\n * @return {boolean} Whether the parent node contains the descendant node.\n */\ngoog.dom.DomHelper.prototype.contains = goog.dom.contains;\n\n\n/**\n * Compares the document order of two nodes, returning 0 if they are the same\n * node, a negative number if node1 is before node2, and a positive number if\n * node2 is before node1. Note that we compare the order the tags appear in the\n * document so in the tree <b><i>text</i></b> the B node is considered to be\n * before the I node.\n *\n * @param {Node} node1 The first node to compare.\n * @param {Node} node2 The second node to compare.\n * @return {number} 0 if the nodes are the same node, a negative number if node1\n * is before node2, and a positive number if node2 is before node1.\n */\ngoog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder;\n\n\n/**\n * Find the deepest common ancestor of the given nodes.\n * @param {...Node} var_args The nodes to find a common ancestor of.\n * @return {Node} The common ancestor of the nodes, or null if there is none.\n * null will only be returned if two or more of the nodes are from different\n * documents.\n */\ngoog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor;\n\n\n/**\n * Returns the owner document for a node.\n * @param {Node} node The node to get the document for.\n * @return {!Document} The document owning the node.\n */\ngoog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument;\n\n\n/**\n * Cross browser function for getting the document element of an iframe.\n * @param {Element} iframe Iframe element.\n * @return {!Document} The frame content document.\n */\ngoog.dom.DomHelper.prototype.getFrameContentDocument =\n goog.dom.getFrameContentDocument;\n\n\n/**\n * Cross browser function for getting the window of a frame or iframe.\n * @param {Element} frame Frame element.\n * @return {Window} The window associated with the given frame.\n */\ngoog.dom.DomHelper.prototype.getFrameContentWindow =\n goog.dom.getFrameContentWindow;\n\n\n/**\n * Sets the text content of a node, with cross-browser support.\n * @param {Node} node The node to change the text content of.\n * @param {string|number} text The value that should replace the node's content.\n */\ngoog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent;\n\n\n/**\n * Gets the outerHTML of a node, which islike innerHTML, except that it\n * actually contains the HTML of the node itself.\n * @param {Element} element The element to get the HTML of.\n * @return {string} The outerHTML of the given element.\n */\ngoog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml;\n\n\n/**\n * Finds the first descendant node that matches the filter function. This does\n * a depth first search.\n * @param {Node} root The root of the tree to search.\n * @param {function(Node) : boolean} p The filter function.\n * @return {Node|undefined} The found node or undefined if none is found.\n */\ngoog.dom.DomHelper.prototype.findNode = goog.dom.findNode;\n\n\n/**\n * Finds all the descendant nodes that matches the filter function. This does a\n * depth first search.\n * @param {Node} root The root of the tree to search.\n * @param {function(Node) : boolean} p The filter function.\n * @return {Array<Node>} The found nodes or an empty array if none are found.\n */\ngoog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;\n\n\n/**\n * Returns true if the element has a tab index that allows it to receive\n * keyboard focus (tabIndex >= 0), false otherwise. Note that some elements\n * natively support keyboard focus, even if they have no tab index.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element has a tab index that allows keyboard\n * focus.\n */\ngoog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex;\n\n\n/**\n * Enables or disables keyboard focus support on the element via its tab index.\n * Only elements for which {@link goog.dom.isFocusableTabIndex} returns true\n * (or elements that natively support keyboard focus, like form elements) can\n * receive keyboard focus. See http://go/tabindex for more info.\n * @param {Element} element Element whose tab index is to be changed.\n * @param {boolean} enable Whether to set or remove a tab index on the element\n * that supports keyboard focus.\n */\ngoog.dom.DomHelper.prototype.setFocusableTabIndex =\n goog.dom.setFocusableTabIndex;\n\n\n/**\n * Returns true if the element can be focused, i.e. it has a tab index that\n * allows it to receive keyboard focus (tabIndex >= 0), or it is an element\n * that natively supports keyboard focus.\n * @param {!Element} element Element to check.\n * @return {boolean} Whether the element allows keyboard focus.\n */\ngoog.dom.DomHelper.prototype.isFocusable = goog.dom.isFocusable;\n\n\n/**\n * Returns the text contents of the current node, without markup. New lines are\n * stripped and whitespace is collapsed, such that each character would be\n * visible.\n *\n * In browsers that support it, innerText is used. Other browsers attempt to\n * simulate it via node traversal. Line breaks are canonicalized in IE.\n *\n * @param {Node} node The node from which we are getting content.\n * @return {string} The text content.\n */\ngoog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent;\n\n\n/**\n * Returns the text length of the text contained in a node, without markup. This\n * is equivalent to the selection length if the node was selected, or the number\n * of cursor movements to traverse the node. Images & BRs take one space. New\n * lines are ignored.\n *\n * @param {Node} node The node whose text content length is being calculated.\n * @return {number} The length of `node`'s text content.\n */\ngoog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength;\n\n\n/**\n * Returns the text offset of a node relative to one of its ancestors. The text\n * length is the same as the length calculated by\n * `goog.dom.getNodeTextLength`.\n *\n * @param {Node} node The node whose offset is being calculated.\n * @param {Node=} opt_offsetParent Defaults to the node's owner document's body.\n * @return {number} The text offset.\n */\ngoog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset;\n\n\n/**\n * Returns the node at a given offset in a parent node. If an object is\n * provided for the optional third parameter, the node and the remainder of the\n * offset will stored as properties of this object.\n * @param {Node} parent The parent node.\n * @param {number} offset The offset into the parent node.\n * @param {Object=} opt_result Object to be used to store the return value. The\n * return value will be stored in the form {node: Node, remainder: number}\n * if this object is provided.\n * @return {Node} The node at the given offset.\n */\ngoog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset;\n\n\n/**\n * Returns true if the object is a `NodeList`. To qualify as a NodeList,\n * the object must have a numeric length property and an item function (which\n * has type 'string' on IE for some reason).\n * @param {Object} val Object to test.\n * @return {boolean} Whether the object is a NodeList.\n */\ngoog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList;\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that has the passed\n * tag name and/or class name. If the passed element matches the specified\n * criteria, the element itself is returned.\n * @param {Node} element The DOM node to start with.\n * @param {?(goog.dom.TagName<T>|string)=} opt_tag The tag name to match (or\n * null/undefined to match only based on class name).\n * @param {?string=} opt_class The class name to match (or null/undefined to\n * match only based on tag name).\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {?R} The first ancestor that matches the passed criteria, or\n * null if no match is found. The return type is {?Element} if opt_tag is\n * not a member of goog.dom.TagName or a more specific type if it is (e.g.\n * {?HTMLAnchorElement} for goog.dom.TagName.A).\n * @template T\n * @template R := cond(isUnknown(T), 'Element', T) =:\n */\ngoog.dom.DomHelper.prototype.getAncestorByTagNameAndClass =\n goog.dom.getAncestorByTagNameAndClass;\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that has the passed\n * class name. If the passed element matches the specified criteria, the\n * element itself is returned.\n * @param {Node} element The DOM node to start with.\n * @param {string} class The class name to match.\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {Element} The first ancestor that matches the passed criteria, or\n * null if none match.\n */\ngoog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass;\n\n\n/**\n * Walks up the DOM hierarchy returning the first ancestor that passes the\n * matcher function.\n * @param {Node} element The DOM node to start with.\n * @param {function(Node) : boolean} matcher A function that returns true if the\n * passed node matches the desired criteria.\n * @param {boolean=} opt_includeNode If true, the node itself is included in\n * the search (the first call to the matcher will pass startElement as\n * the node to test).\n * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the\n * dom.\n * @return {Node} DOM node that matched the matcher, or null if there was\n * no match.\n */\ngoog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor;\n\n\n/**\n * Gets '2d' context of a canvas. Shortcut for canvas.getContext('2d') with a\n * type information.\n * @param {!HTMLCanvasElement} canvas\n * @return {!CanvasRenderingContext2D}\n */\ngoog.dom.DomHelper.prototype.getCanvasContext2D = goog.dom.getCanvasContext2D;\n"],
|
|
8
|
+
"names":["goog","provide","require","dom","ASSUME_QUIRKS_MODE","define","ASSUME_STANDARDS_MODE","COMPAT_MODE_KNOWN_","getDomHelper","goog.dom.getDomHelper","opt_element","DomHelper","getOwnerDocument","defaultDomHelper_","getDocument","goog.dom.getDocument","document","getElement","goog.dom.getElement","element","getElementHelper_","getHTMLElement","goog.dom.getHTMLElement","id","asserts","assertIsHtmlElement","goog.dom.getElementHelper_","doc","getElementById","getRequiredElement","goog.dom.getRequiredElement","getRequiredElementHelper_","getRequiredHTMLElement","goog.dom.getRequiredHTMLElement","goog.dom.getRequiredElementHelper_","assertString","assert","$","getElementsByTagName","goog.dom.getElementsByTagName","tagName","opt_parent","parent","String","getElementsByTagNameAndClass","goog.dom.getElementsByTagNameAndClass","opt_tag","opt_class","opt_el","getElementsByTagNameAndClass_","getElementByTagNameAndClass","goog.dom.getElementByTagNameAndClass","getElementByTagNameAndClass_","getElementsByClass","goog.dom.getElementsByClass","className","canUseQuerySelector_","querySelectorAll","getElementByClass","goog.dom.getElementByClass","retVal","getElementsByClassName","getHTMLElementByClass","goog.dom.getHTMLElementByClass","getRequiredElementByClass","goog.dom.getRequiredElementByClass","opt_root","retValue","getRequiredHTMLElementByClass","goog.dom.getRequiredHTMLElementByClass","goog.dom.canUseQuerySelector_","querySelector","goog.dom.getElementsByTagNameAndClass_","toUpperCase","query","els","arrayLike","len","i","el","nodeName","length","split","array","contains","goog.dom.getElementByTagNameAndClass_","tag","elements","$$","setProperties","goog.dom.setProperties","properties","object","forEach","val","key","implementsGoogStringTypedString","getTypedStringValue","style","cssText","htmlFor","DIRECT_ATTRIBUTE_MAP_","hasOwnProperty","setAttribute","string","startsWith","getViewportSize","goog.dom.getViewportSize","opt_window","getViewportSize_","window","goog.dom.getViewportSize_","win","isCss1CompatMode_","documentElement","body","math","Size","clientWidth","clientHeight","getDocumentHeight","goog.dom.getDocumentHeight","getDocumentHeight_","getDocumentHeightForWindow","goog.dom.getDocumentHeightForWindow","goog.dom.getDocumentHeight_","height","docEl","vh","scrollHeight","offsetHeight","sh","oh","getPageScroll","goog.dom.getPageScroll","global","getDocumentScroll","goog.dom.getDocumentScroll","getDocumentScroll_","goog.dom.getDocumentScroll_","getDocumentScrollElement_","getWindow_","userAgent","IE","pageYOffset","scrollTop","Coordinate","scrollLeft","pageXOffset","getDocumentScrollElement","goog.dom.getDocumentScrollElement","goog.dom.getDocumentScrollElement_","scrollingElement","WEBKIT","getWindow","goog.dom.getWindow","opt_doc","goog.dom.getWindow_","parentWindow","defaultView","createDom","goog.dom.createDom","opt_attributes","var_args","createDom_","arguments","goog.dom.createDom_","args","attributes","createElement_","Array","isArray","join","append_","goog.dom.append_","startIndex","childHandler","child","appendChild","createTextNode","arg","isArrayLike","isNodeLike","isNodeList","toArray","$dom","createElement","goog.dom.createElement","name","goog.dom.createElement_","contentType","toLowerCase","goog.dom.createTextNode","content","createTable","goog.dom.createTable","rows","columns","opt_fillWithNbsp","createTable_","goog.dom.createTable_","fillWithNbsp","table","TagName","TABLE","tbody","TBODY","tr","TR","j","td","TD","setTextContent","Unicode","NBSP","constHtmlToNode","goog.dom.constHtmlToNode","stringArray","prototype","map","call","Const","unwrap","safeHtml","html","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","from","safeHtmlToNode","goog.dom.safeHtmlToNode","safeHtmlToNode_","goog.dom.safeHtmlToNode_","tempDiv","DIV","BrowserFeature","INNER_HTML_NEEDS_SCOPED_ELEMENT","safe","setInnerHtml","SafeHtml","concat","BR","removeChild","firstChild","childrenToNode_","goog.dom.childrenToNode_","childNodes","fragment","createDocumentFragment","isCss1CompatMode","goog.dom.isCss1CompatMode","goog.dom.isCss1CompatMode_","compatMode","canHaveChildren","goog.dom.canHaveChildren","node","nodeType","NodeType","ELEMENT","APPLET","AREA","BASE","COL","COMMAND","EMBED","FRAME","HR","IMG","INPUT","IFRAME","ISINDEX","KEYGEN","LINK","NOFRAMES","NOSCRIPT","META","OBJECT","PARAM","SCRIPT","SOURCE","STYLE","TRACK","WBR","goog.dom.appendChild","append","goog.dom.append","removeChildren","goog.dom.removeChildren","insertSiblingBefore","goog.dom.insertSiblingBefore","newNode","refNode","parentNode","insertBefore","insertSiblingAfter","goog.dom.insertSiblingAfter","nextSibling","insertChildAt","goog.dom.insertChildAt","index","removeNode","goog.dom.removeNode","replaceNode","goog.dom.replaceNode","oldNode","replaceChild","copyContents","goog.dom.copyContents","target","source","cloneNode","flattenElement","goog.dom.flattenElement","DOCUMENT_FRAGMENT","getChildren","goog.dom.getChildren","children","undefined","filter","getFirstElementChild","goog.dom.getFirstElementChild","firstElementChild","getNextElementNode_","getLastElementChild","goog.dom.getLastElementChild","lastElementChild","lastChild","getNextElementSibling","goog.dom.getNextElementSibling","nextElementSibling","getPreviousElementSibling","goog.dom.getPreviousElementSibling","previousElementSibling","previousSibling","goog.dom.getNextElementNode_","forward","getNextNode","goog.dom.getNextNode","getPreviousNode","goog.dom.getPreviousNode","goog.dom.isNodeLike","obj","isObject","isElement","goog.dom.isElement","isWindow","goog.dom.isWindow","getParentElement","goog.dom.getParentElement","CAN_USE_PARENT_ELEMENT_PROPERTY","parentElement","goog.dom.contains","descendant","compareDocumentPosition","Boolean","compareNodeOrder","goog.dom.compareNodeOrder","node1","node2","isDocumentModeOrHigher","DOCUMENT","isElement1","isElement2","sourceIndex","parent1","parent2","compareSiblingOrder_","compareParentsDescendantNodeIe_","range1","range2","createRange","selectNode","collapse","compareBoundaryPoints","START_TO_END","goog.dom.compareParentsDescendantNodeIe_","textNode","sibling","goog.dom.compareSiblingOrder_","s","findCommonAncestor","goog.dom.findCommonAncestor","count","paths","minLength","Infinity","ancestors","unshift","push","Math","min","output","first","isInDocument","goog.dom.isInDocument","ownerDocument","goog.dom.getOwnerDocument","getFrameContentDocument","goog.dom.getFrameContentDocument","frame","contentDocument","contentWindow","getFrameContentWindow","goog.dom.getFrameContentWindow","e","goog.dom.setTextContent","text","textContent","TEXT","data","getOuterHtml","goog.dom.getOuterHtml","outerHTML","div","innerHTML","findNode","goog.dom.findNode","root","p","rv","found","findNodes_","findNodes","goog.dom.findNodes","goog.dom.findNodes_","findOne","findElement","goog.dom.findElement","pred","stack","getChildrenReverse_","next","pop","c","findElements","goog.dom.findElements","result","goog.dom.getChildrenReverse_","TAGS_TO_IGNORE_","PREDEFINED_TAG_VALUES_","isFocusableTabIndex","goog.dom.isFocusableTabIndex","hasSpecifiedTabIndex_","isTabIndexFocusable_","setFocusableTabIndex","goog.dom.setFocusableTabIndex","enable","tabIndex","removeAttribute","isFocusable","goog.dom.isFocusable","focusable","nativelySupportsFocus_","disabled","hasNonZeroBoundingRect_","goog.dom.hasSpecifiedTabIndex_","hasAttribute","goog.dom.isTabIndexFocusable_","goog.dom.nativelySupportsFocus_","A","TEXTAREA","SELECT","BUTTON","goog.dom.hasNonZeroBoundingRect_","rect","offsetWidth","getBoundingClientRect","width","getTextContent","goog.dom.getTextContent","buf","getTextContent_","replace","getRawTextContent","goog.dom.getRawTextContent","goog.dom.getTextContent_","normalizeWhitespace","nodeValue","getNodeTextLength","goog.dom.getNodeTextLength","getNodeTextOffset","goog.dom.getNodeTextOffset","opt_offsetParent","cur","trimLeft","getNodeAtOffset","goog.dom.getNodeAtOffset","offset","opt_result","pos","remainder","goog.dom.isNodeList","item","getAncestorByTagNameAndClass","goog.dom.getAncestorByTagNameAndClass","opt_maxSearchSteps","getAncestor","getAncestorByClass","goog.dom.getAncestorByClass","goog.dom.getAncestor","matcher","opt_includeNode","steps","getActiveElement","goog.dom.getActiveElement","activeElement","getPixelRatio","goog.dom.getPixelRatio","devicePixelRatio","matchMedia","matchesPixelRatio_","goog.dom.matchesPixelRatio_","pixelRatio","dpiPerDppx","matches","getCanvasContext2D","goog.dom.getCanvasContext2D","canvas","getContext","goog.dom.DomHelper","opt_document","document_","setDocument","goog.dom.DomHelper.prototype.setDocument","goog.dom.DomHelper.prototype.getDocument","goog.dom.DomHelper.prototype.getElement","goog.dom.DomHelper.prototype.getRequiredElement","goog.dom.DomHelper.prototype.getElementsByTagName","goog.dom.DomHelper.prototype.getElementsByTagNameAndClass","goog.dom.DomHelper.prototype.getElementByTagNameAndClass","goog.dom.DomHelper.prototype.getElementsByClass","goog.dom.DomHelper.prototype.getElementByClass","goog.dom.DomHelper.prototype.getRequiredElementByClass","goog.dom.DomHelper.prototype.getViewportSize","goog.dom.DomHelper.prototype.getDocumentHeight","Appendable","goog.dom.DomHelper.prototype.createDom","goog.dom.DomHelper.prototype.createElement","goog.dom.DomHelper.prototype.createTextNode","goog.dom.DomHelper.prototype.createTable","goog.dom.DomHelper.prototype.safeHtmlToNode","goog.dom.DomHelper.prototype.isCss1CompatMode","goog.dom.DomHelper.prototype.getWindow","goog.dom.DomHelper.prototype.getDocumentScrollElement","goog.dom.DomHelper.prototype.getDocumentScroll","goog.dom.DomHelper.prototype.getActiveElement"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
import "./goog.dom.nodetype.js";
|
|
3
|
+
import "./goog.dom.tagname.js";
|
|
4
|
+
goog.loadModule(function(exports) {
|
|
5
|
+
"use strict";
|
|
6
|
+
goog.module("goog.dom.element");
|
|
7
|
+
goog.module.declareLegacyNamespace();
|
|
8
|
+
const NodeType = goog.require("goog.dom.NodeType");
|
|
9
|
+
const TagName = goog.require("goog.dom.TagName");
|
|
10
|
+
const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
|
|
11
|
+
const isElement = value => {
|
|
12
|
+
return goog.isObject(value) && value.nodeType === NodeType.ELEMENT;
|
|
13
|
+
};
|
|
14
|
+
const isHtmlElement = value => {
|
|
15
|
+
return goog.isObject(value) && isElement(value) && (!value.namespaceURI || value.namespaceURI === HTML_NAMESPACE);
|
|
16
|
+
};
|
|
17
|
+
const isHtmlElementOfType = (value, tagName) => {
|
|
18
|
+
return goog.isObject(value) && isHtmlElement(value) && value.tagName.toUpperCase() === tagName.toString();
|
|
19
|
+
};
|
|
20
|
+
const isHtmlAnchorElement = value => {
|
|
21
|
+
return isHtmlElementOfType(value, TagName.A);
|
|
22
|
+
};
|
|
23
|
+
const isHtmlButtonElement = value => {
|
|
24
|
+
return isHtmlElementOfType(value, TagName.BUTTON);
|
|
25
|
+
};
|
|
26
|
+
const isHtmlLinkElement = value => {
|
|
27
|
+
return isHtmlElementOfType(value, TagName.LINK);
|
|
28
|
+
};
|
|
29
|
+
const isHtmlImageElement = value => {
|
|
30
|
+
return isHtmlElementOfType(value, TagName.IMG);
|
|
31
|
+
};
|
|
32
|
+
const isHtmlAudioElement = value => {
|
|
33
|
+
return isHtmlElementOfType(value, TagName.AUDIO);
|
|
34
|
+
};
|
|
35
|
+
const isHtmlVideoElement = value => {
|
|
36
|
+
return isHtmlElementOfType(value, TagName.VIDEO);
|
|
37
|
+
};
|
|
38
|
+
const isHtmlInputElement = value => {
|
|
39
|
+
return isHtmlElementOfType(value, TagName.INPUT);
|
|
40
|
+
};
|
|
41
|
+
const isHtmlTextAreaElement = value => {
|
|
42
|
+
return isHtmlElementOfType(value, TagName.TEXTAREA);
|
|
43
|
+
};
|
|
44
|
+
const isHtmlCanvasElement = value => {
|
|
45
|
+
return isHtmlElementOfType(value, TagName.CANVAS);
|
|
46
|
+
};
|
|
47
|
+
const isHtmlEmbedElement = value => {
|
|
48
|
+
return isHtmlElementOfType(value, TagName.EMBED);
|
|
49
|
+
};
|
|
50
|
+
const isHtmlFormElement = value => {
|
|
51
|
+
return isHtmlElementOfType(value, TagName.FORM);
|
|
52
|
+
};
|
|
53
|
+
const isHtmlFrameElement = value => {
|
|
54
|
+
return isHtmlElementOfType(value, TagName.FRAME);
|
|
55
|
+
};
|
|
56
|
+
const isHtmlIFrameElement = value => {
|
|
57
|
+
return isHtmlElementOfType(value, TagName.IFRAME);
|
|
58
|
+
};
|
|
59
|
+
const isHtmlObjectElement = value => {
|
|
60
|
+
return isHtmlElementOfType(value, TagName.OBJECT);
|
|
61
|
+
};
|
|
62
|
+
const isHtmlScriptElement = value => {
|
|
63
|
+
return isHtmlElementOfType(value, TagName.SCRIPT);
|
|
64
|
+
};
|
|
65
|
+
exports = {isElement, isHtmlElement, isHtmlElementOfType, isHtmlAnchorElement, isHtmlButtonElement, isHtmlLinkElement, isHtmlImageElement, isHtmlAudioElement, isHtmlVideoElement, isHtmlInputElement, isHtmlTextAreaElement, isHtmlCanvasElement, isHtmlEmbedElement, isHtmlFormElement, isHtmlFrameElement, isHtmlIFrameElement, isHtmlObjectElement, isHtmlScriptElement};
|
|
66
|
+
return exports;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=goog.dom.element.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.dom.element.js",
|
|
4
|
+
"lineCount":65,
|
|
5
|
+
"mappings":"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",
|
|
6
|
+
"sources":["goog/dom/element.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.module('goog.dom.element');\ngoog.module.declareLegacyNamespace();\n\nconst NodeType = goog.require('goog.dom.NodeType');\nconst TagName = goog.require('goog.dom.TagName');\n\n/** @const {string} */\nconst HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n\n/**\n * Determines if a value is a DOM Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isElement = (value) => {\n return goog.isObject(value) &&\n /** @type {!Node} */ (value).nodeType === NodeType.ELEMENT;\n};\n\n/**\n * Determines if a value is a DOM HTML Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlElement = (value) => {\n return goog.isObject(value) && isElement(value) &&\n // namespaceURI of old browsers (FF < 3.6, IE < 9) will be null.\n (!/** @type {!Element} */ (value).namespaceURI ||\n /** @type {!Element} */ (value).namespaceURI === HTML_NAMESPACE);\n};\n\n/**\n * Determines if a value is a DOM HTML Element of a specified tag name. For\n * modern browsers, tags that provide access to special DOM APIs are implemented\n * as special subclasses of HTMLElement.\n * @param {*} value\n * @param {!TagName} tagName\n * @return {boolean}\n */\nconst isHtmlElementOfType = (value, tagName) => {\n return goog.isObject(value) && isHtmlElement(value) &&\n // Some uncommon JS environments (e.g. Cobalt 9) have issues with tag\n // capitalization.\n (/** @type {!HTMLElement} */ (value).tagName.toUpperCase() ===\n tagName.toString());\n};\n\n/**\n * Determines if a value is an <A> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlAnchorElement = (value) => {\n return isHtmlElementOfType(value, TagName.A);\n};\n\n/**\n * Determines if a value is a <BUTTON> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlButtonElement = (value) => {\n return isHtmlElementOfType(value, TagName.BUTTON);\n};\n\n/**\n * Determines if a value is a <LINK> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlLinkElement = (value) => {\n return isHtmlElementOfType(value, TagName.LINK);\n};\n\n/**\n * Determines if a value is an <IMG> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlImageElement = (value) => {\n return isHtmlElementOfType(value, TagName.IMG);\n};\n\n/**\n * Determines if a value is an <AUDIO> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlAudioElement = (value) => {\n return isHtmlElementOfType(value, TagName.AUDIO);\n};\n\n/**\n * Determines if a value is a <VIDEO> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlVideoElement = (value) => {\n return isHtmlElementOfType(value, TagName.VIDEO);\n};\n\n/**\n * Determines if a value is an <INPUT> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlInputElement = (value) => {\n return isHtmlElementOfType(value, TagName.INPUT);\n};\n\n/**\n * Determines if a value is a <TEXTAREA> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlTextAreaElement = (value) => {\n return isHtmlElementOfType(value, TagName.TEXTAREA);\n};\n\n/**\n * Determines if a value is a <CANVAS> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlCanvasElement = (value) => {\n return isHtmlElementOfType(value, TagName.CANVAS);\n};\n\n/**\n * Determines if a value is an <EMBED> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlEmbedElement = (value) => {\n return isHtmlElementOfType(value, TagName.EMBED);\n};\n\n/**\n * Determines if a value is a <FORM> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlFormElement = (value) => {\n return isHtmlElementOfType(value, TagName.FORM);\n};\n\n/**\n * Determines if a value is a <FRAME> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlFrameElement = (value) => {\n return isHtmlElementOfType(value, TagName.FRAME);\n};\n\n/**\n * Determines if a value is an <IFRAME> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlIFrameElement = (value) => {\n return isHtmlElementOfType(value, TagName.IFRAME);\n};\n\n/**\n * Determines if a value is an <OBJECT> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlObjectElement = (value) => {\n return isHtmlElementOfType(value, TagName.OBJECT);\n};\n\n/**\n * Determines if a value is a <SCRIPT> Element.\n * @param {*} value\n * @return {boolean}\n */\nconst isHtmlScriptElement = (value) => {\n return isHtmlElementOfType(value, TagName.SCRIPT);\n};\n\nexports = {\n isElement,\n isHtmlElement,\n isHtmlElementOfType,\n isHtmlAnchorElement,\n isHtmlButtonElement,\n isHtmlLinkElement,\n isHtmlImageElement,\n isHtmlAudioElement,\n isHtmlVideoElement,\n isHtmlInputElement,\n isHtmlTextAreaElement,\n isHtmlCanvasElement,\n isHtmlEmbedElement,\n isHtmlFormElement,\n isHtmlFrameElement,\n isHtmlIFrameElement,\n isHtmlObjectElement,\n isHtmlScriptElement,\n};\n"],
|
|
8
|
+
"names":["goog","module","declareLegacyNamespace","NodeType","require","TagName","HTML_NAMESPACE","isElement","value","isObject","nodeType","ELEMENT","isHtmlElement","namespaceURI","isHtmlElementOfType","tagName","toUpperCase","toString","isHtmlAnchorElement","A","isHtmlButtonElement","BUTTON","isHtmlLinkElement","LINK","isHtmlImageElement","IMG","isHtmlAudioElement","AUDIO","isHtmlVideoElement","VIDEO","isHtmlInputElement","INPUT","isHtmlTextAreaElement","TEXTAREA","isHtmlCanvasElement","CANVAS","isHtmlEmbedElement","EMBED","isHtmlFormElement","FORM","isHtmlFrameElement","FRAME","isHtmlIFrameElement","IFRAME","isHtmlObjectElement","OBJECT","isHtmlScriptElement","SCRIPT","exports"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.dom.htmlelement.js",
|
|
4
|
+
"lineCount":4,
|
|
5
|
+
"mappings":"AAMAA,IAAKC,CAAAA,OAAL,CAAa,sBAAb,CAAA;AAcAD,IAAKE,CAAAA,GAAIC,CAAAA,WAAT,GAAuBC,QAAQ,EAAG;CAAlC;;",
|
|
6
|
+
"sources":["goog/dom/htmlelement.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('goog.dom.HtmlElement');\n\n\n\n/**\n * This subclass of HTMLElement is used when only a HTMLElement is possible and\n * not any of its subclasses. Normally, a type can refer to an instance of\n * itself or an instance of any subtype. More concretely, if HTMLElement is used\n * then the compiler must assume that it might still be e.g. HTMLScriptElement.\n * With this, the type check knows that it couldn't be any special element.\n *\n * @constructor\n * @extends {HTMLElement}\n */\ngoog.dom.HtmlElement = function() {};\n"],
|
|
8
|
+
"names":["goog","provide","dom","HtmlElement","goog.dom.HtmlElement"]
|
|
9
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "./cljs_env.js";
|
|
2
|
+
|
|
3
|
+
goog.provide("goog.dom.NodeType");
|
|
4
|
+
goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12};
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=goog.dom.nodetype.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version":3,
|
|
3
|
+
"file":"goog.dom.nodetype.js",
|
|
4
|
+
"lineCount":3,
|
|
5
|
+
"mappings":"AAUAA,IAAKC,CAAAA,OAAL,CAAa,mBAAb,CAAA;AAgBAD,IAAKE,CAAAA,GAAIC,CAAAA,QAAT,GAAoB,CAClBC,QAAS,CADS,EAElBC,UAAW,CAFO,EAGlBC,KAAM,CAHY,EAIlBC,cAAe,CAJG,EAKlBC,iBAAkB,CALA,EAMlBC,OAAQ,CANU,EAOlBC,uBAAwB,CAPN,EAQlBC,QAAS,CARS,EASlBC,SAAU,CATQ,EAUlBC,cAAe,EAVG,EAWlBC,kBAAmB,EAXD,EAYlBC,SAAU,EAZQ,CAApB;;",
|
|
6
|
+
"sources":["goog/dom/nodetype.js"],
|
|
7
|
+
"sourcesContent":["/**\n * @license\n * Copyright The Closure Library Authors.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Definition of goog.dom.NodeType.\n */\n\ngoog.provide('goog.dom.NodeType');\n\n\n/**\n * Constants for the nodeType attribute in the Node interface.\n *\n * These constants match those specified in the Node interface. These are\n * usually present on the Node object in recent browsers, but not in older\n * browsers (specifically, early IEs) and thus are given here.\n *\n * In some browsers (early IEs), these are not defined on the Node object,\n * so they are provided here.\n *\n * See http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247\n * @enum {number}\n */\ngoog.dom.NodeType = {\n ELEMENT: 1,\n ATTRIBUTE: 2,\n TEXT: 3,\n CDATA_SECTION: 4,\n ENTITY_REFERENCE: 5,\n ENTITY: 6,\n PROCESSING_INSTRUCTION: 7,\n COMMENT: 8,\n DOCUMENT: 9,\n DOCUMENT_TYPE: 10,\n DOCUMENT_FRAGMENT: 11,\n NOTATION: 12\n};\n"],
|
|
8
|
+
"names":["goog","provide","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION"]
|
|
9
|
+
}
|