Add support for Element.getAttributeNames()
[WebKit-https.git] / Source / WebCore / dom / Element.idl
1 /*
2  * Copyright (C) 2006, 2007, 2009, 2015 Apple Inc. All rights reserved.
3  * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 [
22     CustomToJSObject,
23     JSCustomHeader,
24     JSGenerateToNativeObject,
25     ExportMacro=WEBCORE_EXPORT,
26 ] interface Element : Node {
27
28     // DOM Level 1 Core
29
30     readonly attribute DOMString? tagName;
31
32     DOMString? getAttribute(DOMString name);
33
34     [ObjCLegacyUnnamedParameters, RaisesException, InvokesCustomElementLifecycleCallbacks]
35
36     void setAttribute(DOMString name, DOMString value);
37
38     [InvokesCustomElementLifecycleCallbacks] void removeAttribute(DOMString name);
39     Attr? getAttributeNode(DOMString name);
40
41     [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr? setAttributeNode(Attr newAttr);
42     [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr removeAttributeNode(Attr oldAttr);
43
44 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
45     [ImplementedAs=getElementsByTagNameForObjC] NodeList getElementsByTagName(DOMString name);
46 #else
47     HTMLCollection getElementsByTagName(DOMString name);
48 #endif
49
50 #if !defined(LANGUAGE_OBJECTIVE_C)
51     // For ObjC this is defined on Node for legacy support.
52     readonly attribute NamedNodeMap attributes;
53     boolean hasAttributes();
54 #endif
55
56     // DOM Level 2 Core
57
58     [ObjCLegacyUnnamedParameters] DOMString? getAttributeNS(DOMString? namespaceURI, DOMString localName);
59
60     [ObjCLegacyUnnamedParameters, RaisesException, InvokesCustomElementLifecycleCallbacks]
61
62     void setAttributeNS(DOMString? namespaceURI, DOMString qualifiedName, DOMString value);
63
64     [ObjCLegacyUnnamedParameters, InvokesCustomElementLifecycleCallbacks] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
65
66 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
67     [ObjCLegacyUnnamedParameters, ImplementedAs=getElementsByTagNameNSForObjC] NodeList getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
68 #else
69     HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
70 #endif
71
72     [ObjCLegacyUnnamedParameters] Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
73     [RaisesException, InvokesCustomElementLifecycleCallbacks] Attr? setAttributeNodeNS(Attr newAttr);
74     boolean hasAttribute(DOMString name);
75
76     [ObjCLegacyUnnamedParameters] boolean hasAttributeNS(DOMString? namespaceURI, DOMString localName);
77
78     [ImplementedAs=cssomStyle] readonly attribute CSSStyleDeclaration style;
79
80     // DOM 4
81 #if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
82     [Reflect] attribute DOMString id;
83 #endif
84
85     // Common extensions
86
87 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
88     readonly attribute long offsetLeft;
89     readonly attribute long offsetTop;
90     readonly attribute long offsetWidth;
91     readonly attribute long offsetHeight;
92     readonly attribute long clientLeft;
93     readonly attribute long clientTop;
94     readonly attribute long clientWidth;
95     readonly attribute long clientHeight;
96 #else
97     readonly attribute double offsetLeft;
98     readonly attribute double offsetTop;
99     readonly attribute double offsetWidth;
100     readonly attribute double offsetHeight;
101     readonly attribute double clientLeft;
102     readonly attribute double clientTop;
103     readonly attribute double clientWidth;
104     readonly attribute double clientHeight;
105 #endif
106
107     attribute long scrollLeft;
108     attribute long scrollTop;
109     readonly attribute long scrollWidth;
110     readonly attribute long scrollHeight;
111
112     [ImplementedAs=bindingsOffsetParent] readonly attribute Element offsetParent;
113
114 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C || defined(LANGUAGE_GOBJECT) && LANGUAGE_GOBJECT
115     void focus();
116     void blur();
117 #endif
118
119     void scrollIntoView(optional boolean alignWithTop = true);
120
121     sequence<DOMString> getAttributeNames();
122
123     // WebKit extensions
124
125     void scrollIntoViewIfNeeded(optional boolean centerIfNeeded = true);
126     void scrollByLines(optional long lines = 0);
127     void scrollByPages(optional long pages = 0);
128
129     // HTML 5
130 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
131     [ImplementedAs=getElementsByClassNameForObjC] NodeList getElementsByClassName(DOMString name);
132 #else
133     HTMLCollection getElementsByClassName(DOMString name);
134 #endif
135     [TreatNullAs=EmptyString, SetterRaisesException] attribute DOMString innerHTML;
136     [TreatNullAs=EmptyString, SetterRaisesException] attribute DOMString outerHTML;
137
138
139     [Reflect=class] attribute DOMString className;
140     [PutForwards=value] readonly attribute DOMTokenList classList;
141
142 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
143     readonly attribute DOMStringMap dataset;
144 #endif
145
146     [RaisesException] boolean matches(DOMString selectors);
147     [RaisesException] Element closest(DOMString selectors);    
148     [ImplementedAs=matches, RaisesException] boolean webkitMatchesSelector(DOMString selectors);
149
150 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
151     // CSSOM View Module API
152     ClientRectList getClientRects();
153     ClientRect getBoundingClientRect();
154 #endif
155
156 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
157     // Objective-C extensions
158     readonly attribute DOMString innerText;
159 #endif
160
161 #if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
162     // Mozilla version
163     const unsigned short ALLOW_KEYBOARD_INPUT = 1;
164     void webkitRequestFullScreen(optional unsigned short flags = 0);
165
166     // W3C version
167     void webkitRequestFullscreen();
168 #endif
169
170 #if defined(ENABLE_INDIE_UI) && ENABLE_INDIE_UI
171     [Reflect] attribute DOMString uiactions;
172 #endif
173
174     [Conditional=POINTER_LOCK] void requestPointerLock();
175
176     // CSS Regions API
177     [Conditional=CSS_REGIONS] readonly attribute DOMString webkitRegionOverset;
178     [Conditional=CSS_REGIONS] sequence<Range> webkitGetRegionFlowRanges();
179
180     // Shadow DOM API
181 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
182     [EnabledAtRuntime=ShadowDOM, RaisesException] ShadowRoot attachShadow(ShadowRootInit init);
183     [EnabledAtRuntime=ShadowDOM, ImplementedAs=shadowRootForBindings, CallWith=ScriptState] readonly attribute ShadowRoot shadowRoot;
184     [EnabledAtRuntime=ShadowDOM, Reflect] attribute DOMString slot;
185 #endif
186
187     // Event Handlers
188
189     // Unique to Element and Document
190     // FIXME: Should these be exposed on Window as well (and therefore moved to GlobalEventHandlers.idl)?
191     [NotEnumerable] attribute EventHandler onbeforecopy;
192     [NotEnumerable] attribute EventHandler onbeforecut;
193     [NotEnumerable] attribute EventHandler onbeforepaste;
194     [NotEnumerable] attribute EventHandler oncopy;
195     [NotEnumerable] attribute EventHandler oncut;
196     [NotEnumerable] attribute EventHandler onpaste;
197     [NotEnumerable] attribute EventHandler onselectstart;
198     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenchange;
199     [NotEnumerable, Conditional=FULLSCREEN_API] attribute EventHandler onwebkitfullscreenerror;
200
201     // Unique to Element and DOMWindow
202     // FIXME: Should these be exposed on Document as well (and therefore moved to GlobalEventHandlers.idl)?
203     [NotEnumerable] attribute EventHandler onanimationend;
204     [NotEnumerable] attribute EventHandler onanimationiteration;
205     [NotEnumerable] attribute EventHandler onanimationstart;
206     [NotEnumerable] attribute EventHandler ontransitionend;
207     [NotEnumerable, ImplementedAs=onwebkitAnimationEnd] attribute EventHandler onwebkitanimationend;
208     [NotEnumerable, ImplementedAs=onwebkitAnimationIteration] attribute EventHandler onwebkitanimationiteration;
209     [NotEnumerable, ImplementedAs=onwebkitAnimationStart] attribute EventHandler onwebkitanimationstart;
210     [NotEnumerable, ImplementedAs=onwebkitTransitionEnd] attribute EventHandler onwebkittransitionend;
211     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturechange;
212     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongestureend;
213     [NotEnumerable, Conditional=IOS_GESTURE_EVENTS] attribute EventHandler ongesturestart;
214
215     // Unique to Element, HTMLBodyElement and HTMLFrameSetElement
216     [NotEnumerable] attribute EventHandler onfocusin;
217     [NotEnumerable] attribute EventHandler onfocusout;
218
219     // Unique to Element
220     [NotEnumerable] attribute EventHandler onbeforeload;
221     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyadded;
222     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeyerror;
223     [NotEnumerable, Conditional=ENCRYPTED_MEDIA] attribute EventHandler onwebkitkeymessage;
224     [NotEnumerable, Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2] attribute EventHandler onwebkitneedkey;
225     [NotEnumerable, Conditional=VIDEO_PRESENTATION_MODE] attribute EventHandler onwebkitpresentationmodechanged;
226     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitcurrentplaybacktargetiswirelesschanged;
227     [NotEnumerable, Conditional=WIRELESS_PLAYBACK_TARGET] attribute EventHandler onwebkitplaybacktargetavailabilitychanged;
228 };
229
230 enum ShadowRootMode { "open", "closed" };
231
232 dictionary ShadowRootInit {
233     required ShadowRootMode mode;
234 };
235
236 Element implements ChildNode;
237 Element implements NonDocumentTypeChildNode;
238 Element implements ParentNode;
239 Element implements Slotable;