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 }