Bug 1409040 - Add element.isElement shorthand. r?maja_zf
Introduces new element.isElement shorthand API for identifying DOM-,
SVG-, and XUL elements.
It is the equivalent of this:
if (element.isDOMElement(el) ||
element.isSVGElement(el) ||
element.isXULElement(el)) {
// ...
}
MozReview-Commit-ID: H8MDkP5bQmW
--- a/testing/marionette/element.js
+++ b/testing/marionette/element.js
@@ -1045,16 +1045,32 @@ element.isKeyboardInteractable = () => t
*/
element.scrollIntoView = function(el) {
if (el.scrollIntoView) {
el.scrollIntoView({block: "end", inline: "nearest", behavior: "instant"});
}
};
/**
+ * Ascertains whether <var>node</var> is a DOM-, SVG-, or XUL element.
+ *
+ * @param {*} node
+ * Element thought to be an <code>Element</code>,
+ * <code>SVGElement</code>, or <code>XULElement</code>.
+ *
+ * @return {boolean}
+ * True if <var>node</var> is an element, false otherwise.
+ */
+element.isElement = function(node) {
+ return element.isDOMElement(node) ||
+ element.isSVGElement(node) ||
+ element.isXULElement(node);
+};
+
+/**
* Ascertains whether <var>node</var> is a DOM element.
*
* @param {*} node
* Element thought to be an <code>Element</code>.
*
* @return {boolean}
* True if <var>node</var> is a DOM element, false otherwise.
*/
--- a/testing/marionette/evaluate.js
+++ b/testing/marionette/evaluate.js
@@ -264,18 +264,18 @@ evaluate.toJSON = function(obj, seenEls)
t == "[object Number]" ||
t == "[object String]") {
return obj;
// Array, NodeList, HTMLCollection, et al.
} else if (element.isCollection(obj)) {
return [...obj].map(el => evaluate.toJSON(el, seenEls));
- // HTMLElement
- } else if ("nodeType" in obj && obj.nodeType == obj.ELEMENT_NODE) {
+ // Element, SVGElement, XULElement
+ } else if (element.isElement(obj)) {
let uuid = seenEls.add(obj);
return element.makeWebElement(uuid);
// custom JSON representation
} else if (typeof obj.toJSON == "function") {
let unsafeJSON = obj.toJSON();
return evaluate.toJSON(unsafeJSON, seenEls);
}
--- a/testing/marionette/test_element.js
+++ b/testing/marionette/test_element.js
@@ -110,16 +110,29 @@ add_test(function test_isSelected() {
// anything else should not be selected
for (let typ of [domEl, undefined, null, "foo", true, [], {}]) {
ok(!element.isSelected(typ));
}
run_next_test();
});
+add_test(function test_isElement() {
+ ok(element.isElement(domEl));
+ ok(element.isElement(svgEl));
+ ok(element.isElement(xulEl));
+ ok(!element.isElement(domWin));
+ ok(!element.isElement(domFrame));
+ for (let typ of [true, 42, {}, [], undefined, null]) {
+ ok(!element.isElement(typ));
+ }
+
+ run_next_test();
+});
+
add_test(function test_isDOMElement() {
ok(element.isDOMElement(domEl));
ok(!element.isDOMElement(svgEl));
ok(!element.isDOMElement(xulEl));
ok(!element.isDOMElement(domWin));
ok(!element.isDOMElement(domFrame));
for (let typ of [true, 42, {}, [], undefined, null]) {
ok(!element.isDOMElement(typ));