Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(502)

Unified Diff: third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js

Issue 1257313003: Update Google Input Tools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Free up grd resources. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js
index 1cb0dcad8f3a895c6a16c974c9a13587d1046a61..0da501d8760456f88f3f30741cbc08ea6261b88f 100644
--- a/third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js
+++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/dom/dom.js
@@ -20,6 +20,7 @@
* to a different document object. This is useful if you are working with
* frames or multiple windows.
*
+ * @author arv@google.com (Erik Arvidsson)
*/
@@ -37,11 +38,13 @@ goog.require('goog.asserts');
goog.require('goog.dom.BrowserFeature');
goog.require('goog.dom.NodeType');
goog.require('goog.dom.TagName');
-goog.require('goog.functions');
+goog.require('goog.dom.safe');
+goog.require('goog.html.SafeHtml');
goog.require('goog.math.Coordinate');
goog.require('goog.math.Size');
goog.require('goog.object');
goog.require('goog.string');
+goog.require('goog.string.Unicode');
goog.require('goog.userAgent');
@@ -227,7 +230,9 @@ goog.dom.getElementsByClass = function(className, opt_el) {
goog.dom.getElementByClass = function(className, opt_el) {
var parent = opt_el || document;
var retVal = null;
- if (goog.dom.canUseQuerySelector_(parent)) {
+ if (parent.getElementsByClassName) {
+ retVal = parent.getElementsByClassName(className)[0];
+ } else if (goog.dom.canUseQuerySelector_(parent)) {
retVal = parent.querySelector('.' + className);
} else {
retVal = goog.dom.getElementsByTagNameAndClass_(
@@ -357,7 +362,7 @@ goog.dom.setProperties = function(element, properties) {
element.className = val;
} else if (key == 'for') {
element.htmlFor = val;
- } else if (key in goog.dom.DIRECT_ATTRIBUTE_MAP_) {
+ } else if (goog.dom.DIRECT_ATTRIBUTE_MAP_.hasOwnProperty(key)) {
element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val);
} else if (goog.string.startsWith(key, 'aria-') ||
goog.string.startsWith(key, 'data-')) {
@@ -374,8 +379,8 @@ goog.dom.setProperties = function(element, properties) {
* element.setAttribute(key, val) instead of element[key] = val. Used
* by goog.dom.setProperties.
*
- * @type {Object}
- * @private
+ * @private {!Object<string, string>}
+ * @const
*/
goog.dom.DIRECT_ATTRIBUTE_MAP_ = {
'cellpadding': 'cellPadding',
@@ -494,7 +499,7 @@ goog.dom.getDocumentHeight = function() {
* gadgets.window.adjustHeight(opt_height)
*
* @private
- * @param {Window} win The window whose document height to retrieve.
+ * @param {!Window} win The window whose document height to retrieve.
* @return {number} The height of the document of the given window.
*/
goog.dom.getDocumentHeight_ = function(win) {
@@ -514,11 +519,9 @@ goog.dom.getDocumentHeight_ = function(win) {
// But there are patterns. It just takes a lot of time and persistence
// to figure out.
- // If the window has no contents, it has no height. (In IE10,
- // document.body & document.documentElement are null in an empty iFrame.)
var body = doc.body;
- var docEl = doc.documentElement;
- if (!body && !docEl) {
+ var docEl = /** @type {!HTMLElement} */ (doc.documentElement);
+ if (!(docEl && body)) {
return 0;
}
@@ -627,9 +630,14 @@ goog.dom.getDocumentScrollElement = function() {
* @private
*/
goog.dom.getDocumentScrollElement_ = function(doc) {
- // WebKit needs body.scrollLeft in both quirks mode and strict mode. We also
- // default to the documentElement if the document does not have a body (e.g.
- // a SVG document).
+ // Old WebKit needs body.scrollLeft in both quirks mode and strict mode. We
+ // also default to the documentElement if the document does not have a body
+ // (e.g. a SVG document).
+ // Uses http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement to
+ // avoid trying to guess about browser behavior from the UA string.
+ if (doc.scrollingElement) {
+ return doc.scrollingElement;
+ }
if (!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc)) {
return doc.documentElement;
}
@@ -671,12 +679,12 @@ goog.dom.getWindow_ = function(doc) {
* would return a div with two child paragraphs
*
* @param {string} tagName Tag to create.
- * @param {(Object|Array.<string>|string)=} opt_attributes If object, then a map
+ * @param {(Object|Array<string>|string)=} opt_attributes If object, then a map
* of name-value pairs for attributes. If a string, then this is the
* className of the new element. If an array, the elements will be joined
* together as the className of the new element.
* @param {...(Object|string|Array|NodeList)} var_args Further DOM nodes or
- * strings for text nodes. If one of the var_args is an array or NodeList,i
+ * strings for text nodes. If one of the var_args is an array or NodeList,
* its elements will be added as childNodes instead.
* @return {!Element} Reference to a DOM node.
*/
@@ -818,10 +826,13 @@ goog.dom.createTextNode = function(content) {
* Create a table.
* @param {number} rows The number of rows in the table. Must be >= 1.
* @param {number} columns The number of columns in the table. Must be >= 1.
- * @param {boolean=} opt_fillWithNbsp If true, fills table entries with nsbps.
+ * @param {boolean=} opt_fillWithNbsp If true, fills table entries with
+ * {@code goog.string.Unicode.NBSP} characters.
* @return {!Element} The created table.
*/
goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) {
+ // TODO(user): Return HTMLTableElement, also in prototype function.
+ // Callers need to be updated to e.g. not assign numbers to table.cellSpacing.
return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp);
};
@@ -831,26 +842,60 @@ goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) {
* @param {!Document} doc Document object to use to create the table.
* @param {number} rows The number of rows in the table. Must be >= 1.
* @param {number} columns The number of columns in the table. Must be >= 1.
- * @param {boolean} fillWithNbsp If true, fills table entries with nsbps.
- * @return {!Element} The created table.
+ * @param {boolean} fillWithNbsp If true, fills table entries with
+ * {@code goog.string.Unicode.NBSP} characters.
+ * @return {!HTMLTableElement} The created table.
* @private
*/
goog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) {
- var rowHtml = ['<tr>'];
- for (var i = 0; i < columns; i++) {
- rowHtml.push(fillWithNbsp ? '<td>&nbsp;</td>' : '<td></td>');
- }
- rowHtml.push('</tr>');
- rowHtml = rowHtml.join('');
- var totalHtml = ['<table>'];
- for (i = 0; i < rows; i++) {
- totalHtml.push(rowHtml);
+ var table = /** @type {!HTMLTableElement} */
+ (doc.createElement(goog.dom.TagName.TABLE));
+ var tbody = table.appendChild(doc.createElement(goog.dom.TagName.TBODY));
+ for (var i = 0; i < rows; i++) {
+ var tr = doc.createElement(goog.dom.TagName.TR);
+ for (var j = 0; j < columns; j++) {
+ var td = doc.createElement(goog.dom.TagName.TD);
+ // IE <= 9 will create a text node if we set text content to the empty
+ // string, so we avoid doing it unless necessary. This ensures that the
+ // same DOM tree is returned on all browsers.
+ if (fillWithNbsp) {
+ goog.dom.setTextContent(td, goog.string.Unicode.NBSP);
+ }
+ tr.appendChild(td);
+ }
+ tbody.appendChild(tr);
}
- totalHtml.push('</table>');
+ return table;
+};
+
+
+/**
+ * Converts HTML markup into a node.
+ * @param {!goog.html.SafeHtml} html The HTML markup to convert.
+ * @return {!Node} The resulting node.
+ */
+goog.dom.safeHtmlToNode = function(html) {
+ return goog.dom.safeHtmlToNode_(document, html);
+};
- var elem = doc.createElement(goog.dom.TagName.DIV);
- elem.innerHTML = totalHtml.join('');
- return /** @type {!Element} */ (elem.removeChild(elem.firstChild));
+
+/**
+ * Helper for {@code safeHtmlToNode}.
+ * @param {!Document} doc The document.
+ * @param {!goog.html.SafeHtml} html The HTML markup to convert.
+ * @return {!Node} The resulting node.
+ * @private
+ */
+goog.dom.safeHtmlToNode_ = function(doc, html) {
+ var tempDiv = doc.createElement(goog.dom.TagName.DIV);
+ if (goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) {
+ goog.dom.safe.setInnerHtml(tempDiv,
+ goog.html.SafeHtml.concat(goog.html.SafeHtml.create('br'), html));
+ tempDiv.removeChild(tempDiv.firstChild);
+ } else {
+ goog.dom.safe.setInnerHtml(tempDiv, html);
+ }
+ return goog.dom.childrenToNode_(doc, tempDiv);
};
@@ -869,6 +914,7 @@ goog.dom.htmlToDocumentFragment = function(htmlString) {
};
+// TODO(jakubvrana): Merge with {@code safeHtmlToNode_}.
/**
* Helper for {@code htmlToDocumentFragment}.
*
@@ -878,15 +924,27 @@ goog.dom.htmlToDocumentFragment = function(htmlString) {
* @private
*/
goog.dom.htmlToDocumentFragment_ = function(doc, htmlString) {
- var tempDiv = doc.createElement('div');
+ var tempDiv = doc.createElement(goog.dom.TagName.DIV);
if (goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) {
tempDiv.innerHTML = '<br>' + htmlString;
tempDiv.removeChild(tempDiv.firstChild);
} else {
tempDiv.innerHTML = htmlString;
}
+ return goog.dom.childrenToNode_(doc, tempDiv);
+};
+
+
+/**
+ * Helper for {@code htmlToDocumentFragment_}.
+ * @param {!Document} doc The document.
+ * @param {!Node} tempDiv The input node.
+ * @return {!Node} The resulting node.
+ * @private
+ */
+goog.dom.childrenToNode_ = function(doc, tempDiv) {
if (tempDiv.childNodes.length == 1) {
- return /** @type {!Node} */ (tempDiv.removeChild(tempDiv.firstChild));
+ return tempDiv.removeChild(tempDiv.firstChild);
} else {
var fragment = doc.createDocumentFragment();
while (tempDiv.firstChild) {
@@ -910,7 +968,7 @@ goog.dom.isCss1CompatMode = function() {
/**
* Returns true if the browser is in "CSS1-compatible" (standards-compliant)
* mode, false otherwise.
- * @param {Document} doc The document to check.
+ * @param {!Document} doc The document to check.
* @return {boolean} True if in CSS1-compatible mode.
* @private
*/
@@ -935,7 +993,7 @@ goog.dom.isCss1CompatMode_ = function(doc) {
* the behavior is inconsistent:
*
* <pre>
- * var a = document.createElement('br');
+ * var a = document.createElement(goog.dom.TagName.BR);
* a.appendChild(document.createTextNode('foo'));
* a.appendChild(document.createTextNode('bar'));
* console.log(a.childNodes.length); // 2
@@ -954,7 +1012,7 @@ goog.dom.canHaveChildren = function(node) {
if (node.nodeType != goog.dom.NodeType.ELEMENT) {
return false;
}
- switch (node.tagName) {
+ switch (/** @type {!Element} */ (node).tagName) {
case goog.dom.TagName.APPLET:
case goog.dom.TagName.AREA:
case goog.dom.TagName.BASE:
@@ -1143,8 +1201,8 @@ goog.dom.getChildren = function(element) {
* @return {Element} The first child node of {@code node} that is an element.
*/
goog.dom.getFirstElementChild = function(node) {
- if (node.firstElementChild != undefined) {
- return /** @type {Element} */(node).firstElementChild;
+ if (goog.isDef(node.firstElementChild)) {
+ return /** @type {!Element} */(node).firstElementChild;
}
return goog.dom.getNextElementNode_(node.firstChild, true);
};
@@ -1156,8 +1214,8 @@ goog.dom.getFirstElementChild = function(node) {
* @return {Element} The last child node of {@code node} that is an element.
*/
goog.dom.getLastElementChild = function(node) {
- if (node.lastElementChild != undefined) {
- return /** @type {Element} */(node).lastElementChild;
+ if (goog.isDef(node.lastElementChild)) {
+ return /** @type {!Element} */(node).lastElementChild;
}
return goog.dom.getNextElementNode_(node.lastChild, false);
};
@@ -1169,8 +1227,8 @@ goog.dom.getLastElementChild = function(node) {
* @return {Element} The next sibling of {@code node} that is an element.
*/
goog.dom.getNextElementSibling = function(node) {
- if (node.nextElementSibling != undefined) {
- return /** @type {Element} */(node).nextElementSibling;
+ if (goog.isDef(node.nextElementSibling)) {
+ return /** @type {!Element} */(node).nextElementSibling;
}
return goog.dom.getNextElementNode_(node.nextSibling, true);
};
@@ -1183,8 +1241,8 @@ goog.dom.getNextElementSibling = function(node) {
* an element.
*/
goog.dom.getPreviousElementSibling = function(node) {
- if (node.previousElementSibling != undefined) {
- return /** @type {Element} */(node).previousElementSibling;
+ if (goog.isDef(node.previousElementSibling)) {
+ return /** @type {!Element} */(node).previousElementSibling;
}
return goog.dom.getNextElementNode_(node.previousSibling, false);
};
@@ -1426,7 +1484,7 @@ goog.dom.compareNodeOrder = function(node1, node2) {
* Utility function to compare the position of two nodes, when
* {@code textNode}'s parent is an ancestor of {@code node}. If this entry
* condition is not met, this function will attempt to reference a null object.
- * @param {Node} textNode The textNode to compare.
+ * @param {!Node} textNode The textNode to compare.
* @param {Node} node The node to compare.
* @return {number} -1 if node is before textNode, +1 otherwise.
* @private
@@ -1449,7 +1507,7 @@ goog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) {
* Utility function to compare the position of two nodes known to be non-equal
* siblings.
* @param {Node} node1 The first node to compare.
- * @param {Node} node2 The second node to compare.
+ * @param {!Node} node2 The second node to compare.
* @return {number} -1 if node1 is before node2, +1 otherwise.
* @private
*/
@@ -1588,7 +1646,7 @@ goog.dom.getOuterHtml = function(element) {
return element.outerHTML;
} else {
var doc = goog.dom.getOwnerDocument(element);
- var div = doc.createElement('div');
+ var div = doc.createElement(goog.dom.TagName.DIV);
div.appendChild(element.cloneNode(true));
return div.innerHTML;
}
@@ -1625,7 +1683,7 @@ goog.dom.findNode = function(root, p) {
* @param {Node} root The root of the tree to search.
* @param {function(Node) : boolean} p The filter function.
- * @return {!Array.<!Node>} The found nodes or an empty array if none are found.
+ * @return {!Array<!Node>} The found nodes or an empty array if none are found.
*/
goog.dom.findNodes = function(root, p) {
var rv = [];
@@ -1639,7 +1697,7 @@ goog.dom.findNodes = function(root, p) {
* using a depth first search.
* @param {Node} root The root of the tree to search.
* @param {function(Node) : boolean} p The filter function.
- * @param {!Array.<!Node>} rv The found nodes are added to this array.
+ * @param {!Array<!Node>} rv The found nodes are added to this array.
* @param {boolean} findOne If true we exit after the first found node.
* @return {boolean} Whether the search is complete or not. True in case findOne
* is true and the node is found. False otherwise.
@@ -1667,8 +1725,8 @@ goog.dom.findNodes_ = function(root, p, rv, findOne) {
/**
* Map of tags whose content to ignore when calculating text length.
- * @type {Object}
- * @private
+ * @private {!Object<string, number>}
+ * @const
*/
goog.dom.TAGS_TO_IGNORE_ = {
'SCRIPT': 1,
@@ -1681,8 +1739,8 @@ goog.dom.TAGS_TO_IGNORE_ = {
/**
* Map of tags which have predefined values with regard to whitespace.
- * @type {Object}
- * @private
+ * @private {!Object<string, string>}
+ * @const
*/
goog.dom.PREDEFINED_TAG_VALUES_ = {'IMG': ' ', 'BR': '\n'};
@@ -1691,7 +1749,7 @@ goog.dom.PREDEFINED_TAG_VALUES_ = {'IMG': ' ', 'BR': '\n'};
* Returns true if the element has a tab index that allows it to receive
* keyboard focus (tabIndex >= 0), false otherwise. Note that some elements
* natively support keyboard focus, even if they have no tab index.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element has a tab index that allows keyboard
* focus.
* @see http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
@@ -1729,7 +1787,7 @@ goog.dom.setFocusableTabIndex = function(element, enable) {
* Returns true if the element can be focused, i.e. it has a tab index that
* allows it to receive keyboard focus (tabIndex >= 0), or it is an element
* that natively supports keyboard focus.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element allows keyboard focus.
*/
goog.dom.isFocusable = function(element) {
@@ -1753,7 +1811,7 @@ goog.dom.isFocusable = function(element) {
/**
* Returns true if the element has a specified tab index.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element has a specified tab index.
* @private
*/
@@ -1768,7 +1826,7 @@ goog.dom.hasSpecifiedTabIndex_ = function(element) {
/**
* Returns true if the element's tab index allows the element to be focused.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element's tab index allows focus.
* @private
*/
@@ -1781,7 +1839,7 @@ goog.dom.isTabIndexFocusable_ = function(element) {
/**
* Returns true if the element is focusable even when tabIndex is not set.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element natively supports focus.
* @private
*/
@@ -1797,7 +1855,7 @@ goog.dom.nativelySupportsFocus_ = function(element) {
/**
* Returns true if the element has a bounding rectangle that would be visible
* (i.e. its width and height are greater than zero).
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element has a non-zero bounding rectangle.
* @private
*/
@@ -1874,7 +1932,7 @@ goog.dom.getRawTextContent = function(node) {
* Recursive support function for text content retrieval.
*
* @param {Node} node The node from which we are getting content.
- * @param {Array} buf string buffer.
+ * @param {Array<string>} buf string buffer.
* @param {boolean} normalizeWhitespace Whether to normalize whitespace.
* @private
*/
@@ -2013,10 +2071,13 @@ goog.dom.isNodeList = function(val) {
* null/undefined to match only based on class name).
* @param {?string=} opt_class The class name to match (or null/undefined to
* match only based on tag name).
+ * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the
+ * dom.
* @return {Element} The first ancestor that matches the passed criteria, or
* null if no match is found.
*/
-goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) {
+goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class,
+ opt_maxSearchSteps) {
if (!opt_tag && !opt_class) {
return null;
}
@@ -2026,7 +2087,7 @@ goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) {
return (!tagName || node.nodeName == tagName) &&
(!opt_class || goog.isString(node.className) &&
goog.array.contains(node.className.split(/\s+/), opt_class));
- }, true));
+ }, true, opt_maxSearchSteps));
};
@@ -2036,11 +2097,14 @@ goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) {
* element itself is returned.
* @param {Node} element The DOM node to start with.
* @param {string} className The class name to match.
+ * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the
+ * dom.
* @return {Element} The first ancestor that matches the passed criteria, or
* null if none match.
*/
-goog.dom.getAncestorByClass = function(element, className) {
- return goog.dom.getAncestorByTagNameAndClass(element, null, className);
+goog.dom.getAncestorByClass = function(element, className, opt_maxSearchSteps) {
+ return goog.dom.getAncestorByTagNameAndClass(element, null, className,
+ opt_maxSearchSteps);
};
@@ -2066,6 +2130,7 @@ goog.dom.getAncestor = function(
var ignoreSearchSteps = opt_maxSearchSteps == null;
var steps = 0;
while (element && (ignoreSearchSteps || steps <= opt_maxSearchSteps)) {
+ goog.asserts.assert(element.name != 'parentNode');
if (matcher(element)) {
return element;
}
@@ -2100,24 +2165,20 @@ goog.dom.getActiveElement = function(doc) {
/**
- * @private {number} Cached version of the devicePixelRatio.
- */
-goog.dom.devicePixelRatio_;
-
-
-/**
- * Gives the devicePixelRatio, or attempts to determine if not present.
+ * Gives the current devicePixelRatio.
+ *
+ * By default, this is the value of window.devicePixelRatio (which should be
+ * preferred if present).
*
- * By default, this is the same value given by window.devicePixelRatio. If
- * devicePixelRatio is not defined, the ratio is calculated with
+ * If window.devicePixelRatio is not present, the ratio is calculated with
* window.matchMedia, if present. Otherwise, gives 1.0.
*
- * This function is cached so that the pixel ratio is calculated only once
- * and only calculated when first requested.
+ * Some browsers (including Chrome) consider the browser zoom level in the pixel
+ * ratio, so the value may change across multiple calls.
*
* @return {number} The number of actual pixels per virtual pixel.
*/
-goog.dom.getPixelRatio = goog.functions.cacheReturnValue(function() {
+goog.dom.getPixelRatio = function() {
var win = goog.dom.getWindow();
// devicePixelRatio does not work on Mobile firefox.
@@ -2134,7 +2195,7 @@ goog.dom.getPixelRatio = goog.functions.cacheReturnValue(function() {
goog.dom.matchesPixelRatio_(3) || 1;
}
return 1;
-});
+};
/**
@@ -2418,8 +2479,9 @@ goog.dom.DomHelper.prototype.createTextNode = function(content) {
* Create a table.
* @param {number} rows The number of rows in the table. Must be >= 1.
* @param {number} columns The number of columns in the table. Must be >= 1.
- * @param {boolean=} opt_fillWithNbsp If true, fills table entries with nsbps.
- * @return {!Element} The created table.
+ * @param {boolean=} opt_fillWithNbsp If true, fills table entries with
+ * {@code goog.string.Unicode.NBSP} characters.
+ * @return {!HTMLElement} The created table.
*/
goog.dom.DomHelper.prototype.createTable = function(rows, columns,
opt_fillWithNbsp) {
@@ -2429,6 +2491,18 @@ goog.dom.DomHelper.prototype.createTable = function(rows, columns,
/**
+ * Converts an HTML into a node or a document fragment. A single Node is used if
+ * {@code html} only generates a single node. If {@code html} generates multiple
+ * nodes then these are put inside a {@code DocumentFragment}.
+ * @param {!goog.html.SafeHtml} html The HTML markup to convert.
+ * @return {!Node} The resulting node.
+ */
+goog.dom.DomHelper.prototype.safeHtmlToNode = function(html) {
+ return goog.dom.safeHtmlToNode_(this.document_, html);
+};
+
+
+/**
* Converts an HTML string into a node or a document fragment. A single Node
* is used if the {@code htmlString} only generates a single node. If the
* {@code htmlString} generates multiple nodes then these are put inside a
@@ -2770,7 +2844,7 @@ goog.dom.DomHelper.prototype.findNode = goog.dom.findNode;
* depth first search.
* @param {Node} root The root of the tree to search.
* @param {function(Node) : boolean} p The filter function.
- * @return {Array.<Node>} The found nodes or an empty array if none are found.
+ * @return {Array<Node>} The found nodes or an empty array if none are found.
*/
goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;
@@ -2779,7 +2853,7 @@ goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;
* Returns true if the element has a tab index that allows it to receive
* keyboard focus (tabIndex >= 0), false otherwise. Note that some elements
* natively support keyboard focus, even if they have no tab index.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element has a tab index that allows keyboard
* focus.
*/
@@ -2803,7 +2877,7 @@ goog.dom.DomHelper.prototype.setFocusableTabIndex =
* Returns true if the element can be focused, i.e. it has a tab index that
* allows it to receive keyboard focus (tabIndex >= 0), or it is an element
* that natively supports keyboard focus.
- * @param {Element} element Element to check.
+ * @param {!Element} element Element to check.
* @return {boolean} Whether the element allows keyboard focus.
*/
goog.dom.DomHelper.prototype.isFocusable = goog.dom.isFocusable;
@@ -2880,6 +2954,8 @@ goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList;
* null/undefined to match only based on class name).
* @param {?string=} opt_class The class name to match (or null/undefined to
* match only based on tag name).
+ * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the
+ * dom.
* @return {Element} The first ancestor that matches the passed criteria, or
* null if no match is found.
*/
@@ -2893,6 +2969,8 @@ goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass =
* element itself is returned.
* @param {Node} element The DOM node to start with.
* @param {string} class The class name to match.
+ * @param {number=} opt_maxSearchSteps Maximum number of levels to search up the
+ * dom.
* @return {Element} The first ancestor that matches the passed criteria, or
* null if none match.
*/

Powered by Google App Engine
This is Rietveld 408576698