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.net.MalformedURLException;
18
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21 import org.htmlunit.css.CssStyleSheet;
22 import org.htmlunit.html.HtmlLink;
23 import org.htmlunit.html.HtmlPage;
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 import org.htmlunit.javascript.host.css.CSSStyleSheet;
30 import org.htmlunit.javascript.host.dom.DOMTokenList;
31
32
33
34
35
36
37
38
39 @JsxClass(domClass = HtmlLink.class)
40 public class HTMLLinkElement extends HTMLElement {
41
42 private static final Log LOG = LogFactory.getLog(HTMLLinkElement.class);
43
44
45
46
47
48 private CSSStyleSheet sheet_;
49
50
51
52
53 @Override
54 @JsxConstructor
55 public void jsConstructor() {
56 super.jsConstructor();
57 }
58
59
60
61
62 @Override
63 public HtmlLink getDomNodeOrDie() {
64 return (HtmlLink) super.getDomNodeOrDie();
65 }
66
67
68
69
70
71 @JsxSetter
72 public void setHref(final String href) {
73 getDomNodeOrDie().setAttribute("href", href);
74 }
75
76
77
78
79
80 @JsxGetter
81 public String getHref() {
82 final HtmlLink link = getDomNodeOrDie();
83 final String href = link.getHrefAttribute();
84 if (href.isEmpty()) {
85 return href;
86 }
87 try {
88 return ((HtmlPage) link.getPage()).getFullyQualifiedUrl(href).toString();
89 }
90 catch (final MalformedURLException e) {
91 return href;
92 }
93 }
94
95
96
97
98
99 @JsxSetter
100 public void setRel(final String rel) {
101 getDomNodeOrDie().setAttribute("rel", rel);
102 }
103
104
105
106
107
108 @JsxGetter
109 public String getRel() {
110 return getDomNodeOrDie().getRelAttribute();
111 }
112
113
114
115
116
117 @JsxSetter
118 public void setRev(final String rel) {
119 getDomNodeOrDie().setAttribute("rev", rel);
120 }
121
122
123
124
125
126 @JsxGetter
127 public String getRev() {
128 return getDomNodeOrDie().getRevAttribute();
129 }
130
131
132
133
134
135 @JsxSetter
136 public void setType(final String type) {
137 getDomNodeOrDie().setAttribute("type", type);
138 }
139
140
141
142
143
144 @JsxGetter
145 public String getType() {
146 return getDomNodeOrDie().getTypeAttribute();
147 }
148
149
150
151
152
153
154 public CSSStyleSheet getSheet() {
155 if (sheet_ == null) {
156 try {
157 final CssStyleSheet sheet = getDomNodeOrDie().getSheet();
158 sheet_ = new CSSStyleSheet(this, getWindow(), sheet);
159 }
160 catch (final RuntimeException e) {
161
162 LOG.error("RuntimeException loading stylesheet", e);
163 throw JavaScriptEngine.reportRuntimeError("Exception: " + e);
164 }
165 catch (final Exception e) {
166
167 LOG.error("Exception loading stylesheet", e);
168 throw JavaScriptEngine.reportRuntimeError("Exception: " + e);
169 }
170 }
171 return sheet_;
172 }
173
174
175
176
177 @Override
178 protected boolean isEndTagForbidden() {
179 return true;
180 }
181
182
183
184
185
186 @JsxGetter
187 public DOMTokenList getRelList() {
188 return new DOMTokenList(this, "rel");
189 }
190
191
192
193
194
195 @JsxSetter
196 public void setRelList(final Object rel) {
197 if (JavaScriptEngine.isUndefined(rel)) {
198 setRel("undefined");
199 return;
200 }
201 setRel(JavaScriptEngine.toString(rel));
202 }
203
204
205
206
207 @Override
208 @JsxGetter
209 public boolean isDisabled() {
210 return super.isDisabled();
211 }
212
213
214
215
216 @Override
217 @JsxSetter
218 public void setDisabled(final boolean disabled) {
219 super.setDisabled(disabled);
220 }
221 }