Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
seleniumhq
GitHub Repository: seleniumhq/selenium
Path: blob/trunk/third_party/closure/goog/dom/element.js
4509 views
1
/**
2
* @license
3
* Copyright The Closure Library Authors.
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
7
goog.module('goog.dom.element');
8
goog.module.declareLegacyNamespace();
9
10
const NodeType = goog.require('goog.dom.NodeType');
11
const TagName = goog.require('goog.dom.TagName');
12
const utils = goog.require('goog.utils');
13
14
/** @const {string} */
15
const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
16
17
/**
18
* Determines if a value is a DOM Element.
19
* @param {*} value
20
* @return {boolean}
21
*/
22
const isElement = (value) => {
23
return utils.isObject(value) &&
24
/** @type {!Node} */ (value).nodeType === NodeType.ELEMENT;
25
};
26
27
/**
28
* Determines if a value is a DOM HTML Element.
29
* @param {*} value
30
* @return {boolean}
31
*/
32
const isHtmlElement = (value) => {
33
return utils.isObject(value) && isElement(value) &&
34
// namespaceURI of old browsers (FF < 3.6, IE < 9) will be null.
35
(!/** @type {!Element} */ (value).namespaceURI ||
36
/** @type {!Element} */ (value).namespaceURI === HTML_NAMESPACE);
37
};
38
39
/**
40
* Determines if a value is a DOM HTML Element of a specified tag name. For
41
* modern browsers, tags that provide access to special DOM APIs are implemented
42
* as special subclasses of HTMLElement.
43
* @param {*} value
44
* @param {!TagName} tagName
45
* @return {boolean}
46
*/
47
const isHtmlElementOfType = (value, tagName) => {
48
return utils.isObject(value) && isHtmlElement(value) &&
49
// Some uncommon JS environments (e.g. Cobalt 9) have issues with tag
50
// capitalization.
51
(/** @type {!HTMLElement} */ (value).tagName.toUpperCase() ===
52
tagName.toString());
53
};
54
55
/**
56
* Determines if a value is an <A> Element.
57
* @param {*} value
58
* @return {boolean}
59
*/
60
const isHtmlAnchorElement = (value) => {
61
return isHtmlElementOfType(value, TagName.A);
62
};
63
64
/**
65
* Determines if a value is a <BUTTON> Element.
66
* @param {*} value
67
* @return {boolean}
68
*/
69
const isHtmlButtonElement = (value) => {
70
return isHtmlElementOfType(value, TagName.BUTTON);
71
};
72
73
/**
74
* Determines if a value is a <LINK> Element.
75
* @param {*} value
76
* @return {boolean}
77
*/
78
const isHtmlLinkElement = (value) => {
79
return isHtmlElementOfType(value, TagName.LINK);
80
};
81
82
/**
83
* Determines if a value is an <IMG> Element.
84
* @param {*} value
85
* @return {boolean}
86
*/
87
const isHtmlImageElement = (value) => {
88
return isHtmlElementOfType(value, TagName.IMG);
89
};
90
91
/**
92
* Determines if a value is an <AUDIO> Element.
93
* @param {*} value
94
* @return {boolean}
95
*/
96
const isHtmlAudioElement = (value) => {
97
return isHtmlElementOfType(value, TagName.AUDIO);
98
};
99
100
/**
101
* Determines if a value is a <VIDEO> Element.
102
* @param {*} value
103
* @return {boolean}
104
*/
105
const isHtmlVideoElement = (value) => {
106
return isHtmlElementOfType(value, TagName.VIDEO);
107
};
108
109
/**
110
* Determines if a value is an <INPUT> Element.
111
* @param {*} value
112
* @return {boolean}
113
*/
114
const isHtmlInputElement = (value) => {
115
return isHtmlElementOfType(value, TagName.INPUT);
116
};
117
118
/**
119
* Determines if a value is a <TEXTAREA> Element.
120
* @param {*} value
121
* @return {boolean}
122
*/
123
const isHtmlTextAreaElement = (value) => {
124
return isHtmlElementOfType(value, TagName.TEXTAREA);
125
};
126
127
/**
128
* Determines if a value is a <CANVAS> Element.
129
* @param {*} value
130
* @return {boolean}
131
*/
132
const isHtmlCanvasElement = (value) => {
133
return isHtmlElementOfType(value, TagName.CANVAS);
134
};
135
136
/**
137
* Determines if a value is an <EMBED> Element.
138
* @param {*} value
139
* @return {boolean}
140
*/
141
const isHtmlEmbedElement = (value) => {
142
return isHtmlElementOfType(value, TagName.EMBED);
143
};
144
145
/**
146
* Determines if a value is a <FORM> Element.
147
* @param {*} value
148
* @return {boolean}
149
*/
150
const isHtmlFormElement = (value) => {
151
return isHtmlElementOfType(value, TagName.FORM);
152
};
153
154
/**
155
* Determines if a value is a <FRAME> Element.
156
* @param {*} value
157
* @return {boolean}
158
*/
159
const isHtmlFrameElement = (value) => {
160
return isHtmlElementOfType(value, TagName.FRAME);
161
};
162
163
/**
164
* Determines if a value is an <IFRAME> Element.
165
* @param {*} value
166
* @return {boolean}
167
*/
168
const isHtmlIFrameElement = (value) => {
169
return isHtmlElementOfType(value, TagName.IFRAME);
170
};
171
172
/**
173
* Determines if a value is an <OBJECT> Element.
174
* @param {*} value
175
* @return {boolean}
176
*/
177
const isHtmlObjectElement = (value) => {
178
return isHtmlElementOfType(value, TagName.OBJECT);
179
};
180
181
/**
182
* Determines if a value is a <SCRIPT> Element.
183
* @param {*} value
184
* @return {boolean}
185
*/
186
const isHtmlScriptElement = (value) => {
187
return isHtmlElementOfType(value, TagName.SCRIPT);
188
};
189
190
exports = {
191
isElement,
192
isHtmlElement,
193
isHtmlElementOfType,
194
isHtmlAnchorElement,
195
isHtmlButtonElement,
196
isHtmlLinkElement,
197
isHtmlImageElement,
198
isHtmlAudioElement,
199
isHtmlVideoElement,
200
isHtmlInputElement,
201
isHtmlTextAreaElement,
202
isHtmlCanvasElement,
203
isHtmlEmbedElement,
204
isHtmlFormElement,
205
isHtmlFrameElement,
206
isHtmlIFrameElement,
207
isHtmlObjectElement,
208
isHtmlScriptElement,
209
};
210
211