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