1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.html;
16
17 import java.io.IOException;
18
19 import org.htmlunit.SgmlPage;
20 import org.htmlunit.html.DomElement;
21 import org.htmlunit.html.DomNode;
22 import org.htmlunit.html.HtmlElement;
23 import org.htmlunit.html.HtmlImage;
24 import org.htmlunit.javascript.JavaScriptEngine;
25 import org.htmlunit.javascript.configuration.JsxClass;
26 import org.htmlunit.javascript.configuration.JsxConstructor;
27 import org.htmlunit.javascript.configuration.JsxGetter;
28 import org.htmlunit.javascript.configuration.JsxSetter;
29
30
31
32
33
34
35
36
37
38
39
40 @JsxClass(domClass = HtmlImage.class)
41 public class HTMLImageElement extends HTMLElement {
42
43 private boolean endTagForbidden_ = true;
44
45
46
47
48 @Override
49 @JsxConstructor
50 public void jsConstructor() {
51 throw JavaScriptEngine.typeError("Invalid constructor.");
52 }
53
54
55
56
57 public void jsConstructorImage() {
58 final SgmlPage page = (SgmlPage) getWindow().getWebWindow().getEnclosedPage();
59 final DomElement fake =
60 page.getWebClient().getPageCreator().getHtmlParser()
61 .getFactory(HtmlImage.TAG_NAME)
62 .createElement(page, HtmlImage.TAG_NAME, null);
63 setDomNode(fake);
64 }
65
66
67
68
69 @Override
70 public void setDomNode(final DomNode domNode) {
71 super.setDomNode(domNode);
72 if ("image".equalsIgnoreCase(domNode.getLocalName())) {
73 endTagForbidden_ = false;
74 }
75 }
76
77
78
79
80
81 @JsxSetter
82 public void setSrc(final String src) {
83 final HtmlElement img = getDomNodeOrDie();
84 img.setAttribute(DomElement.SRC_ATTRIBUTE, src);
85 }
86
87
88
89
90
91 @JsxGetter
92 public String getSrc() {
93 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
94 return img.getSrc();
95 }
96
97
98
99
100
101 @Override
102 public void setOnload(final Object onload) {
103 super.setOnload(onload);
104
105
106 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
107 img.doOnLoad();
108 }
109
110
111
112
113
114 @JsxGetter
115 public String getAlt() {
116 return getDomNodeOrDie().getAttributeDirect("alt");
117 }
118
119
120
121
122
123 @JsxSetter
124 public void setAlt(final String alt) {
125 getDomNodeOrDie().setAttribute("alt", alt);
126 }
127
128
129
130
131
132 @JsxGetter
133 public String getBorder() {
134 return getDomNodeOrDie().getAttributeDirect("border");
135 }
136
137
138
139
140
141 @JsxSetter
142 public void setBorder(final String border) {
143 getDomNodeOrDie().setAttribute("border", border);
144 }
145
146
147
148
149
150 @JsxGetter
151 public String getAlign() {
152 return getDomNodeOrDie().getAttributeDirect("align");
153 }
154
155
156
157
158
159 @JsxSetter
160 public void setAlign(final String align) {
161 getDomNodeOrDie().setAttribute("align", align);
162 }
163
164
165
166
167
168 @JsxGetter
169 public int getWidth() {
170 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
171 return img.getWidthOrDefault();
172 }
173
174
175
176
177
178 @JsxSetter
179 public void setWidth(final String width) {
180 getDomNodeOrDie().setAttribute("width", width);
181 }
182
183
184
185
186
187 @JsxGetter
188 public int getHeight() {
189 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
190 return img.getHeightOrDefault();
191 }
192
193
194
195
196
197 @JsxSetter
198 public void setHeight(final String height) {
199 getDomNodeOrDie().setAttribute("height", height);
200 }
201
202
203
204
205 @Override
206 protected boolean isEndTagForbidden() {
207 return endTagForbidden_;
208 }
209
210
211
212
213
214 @JsxGetter
215 public boolean isComplete() {
216 return ((HtmlImage) getDomNodeOrDie()).isComplete();
217 }
218
219
220
221
222
223 @JsxGetter
224 public int getNaturalWidth() {
225 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
226 try {
227 return img.getWidth();
228 }
229 catch (final IOException e) {
230 return 0;
231 }
232 }
233
234
235
236
237
238 @JsxGetter
239 public int getNaturalHeight() {
240 final HtmlImage img = (HtmlImage) getDomNodeOrDie();
241 try {
242 return img.getHeight();
243 }
244 catch (final IOException e) {
245 return 0;
246 }
247 }
248
249
250
251
252
253 @JsxGetter
254 @Override
255 public String getName() {
256 return getDomNodeOrDie().getAttributeDirect(DomElement.NAME_ATTRIBUTE);
257 }
258
259
260
261
262
263 @JsxSetter
264 @Override
265 public void setName(final String name) {
266 getDomNodeOrDie().setAttribute(DomElement.NAME_ATTRIBUTE, name);
267 }
268
269 }