1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.html;
16
17 import static org.htmlunit.html.DomElement.ATTRIBUTE_NOT_DEFINED;
18
19 import java.net.MalformedURLException;
20 import java.net.URL;
21
22 import org.htmlunit.html.DomElement;
23 import org.htmlunit.html.DomNode;
24 import org.htmlunit.html.DomText;
25 import org.htmlunit.html.HtmlElement;
26 import org.htmlunit.html.HtmlPage;
27 import org.htmlunit.html.HtmlScript;
28 import org.htmlunit.html.ScriptElement;
29 import org.htmlunit.html.ScriptElementSupport;
30 import org.htmlunit.javascript.configuration.JsxClass;
31 import org.htmlunit.javascript.configuration.JsxConstructor;
32 import org.htmlunit.javascript.configuration.JsxGetter;
33 import org.htmlunit.javascript.configuration.JsxSetter;
34 import org.htmlunit.javascript.host.dom.Node;
35
36
37
38
39
40
41
42
43
44
45 @JsxClass(domClass = HtmlScript.class)
46 public class HTMLScriptElement extends HTMLElement {
47
48
49
50
51 @Override
52 @JsxConstructor
53 public void jsConstructor() {
54 super.jsConstructor();
55 }
56
57
58
59
60
61 @JsxGetter
62 public String getSrc() {
63 final HtmlScript tmpScript = (HtmlScript) getDomNodeOrDie();
64 String src = tmpScript.getSrcAttribute();
65 if (ATTRIBUTE_NOT_DEFINED == src) {
66 return src;
67 }
68 try {
69 final URL expandedSrc = ((HtmlPage) tmpScript.getPage()).getFullyQualifiedUrl(src);
70 src = expandedSrc.toString();
71 }
72 catch (final MalformedURLException ignored) {
73
74 }
75 return src;
76 }
77
78
79
80
81
82 @JsxSetter
83 public void setSrc(final String src) {
84 getDomNodeOrDie().setAttribute(DomElement.SRC_ATTRIBUTE, src);
85 }
86
87
88
89
90
91 @JsxGetter
92 public String getText() {
93 final StringBuilder scriptCode = new StringBuilder();
94 for (final DomNode node : getDomNodeOrDie().getChildren()) {
95 if (node instanceof DomText) {
96 final DomText domText = (DomText) node;
97 scriptCode.append(domText.getData());
98 }
99 }
100 return scriptCode.toString();
101 }
102
103
104
105
106
107 @JsxSetter
108 public void setText(final String text) {
109 final HtmlElement htmlElement = getDomNodeOrDie();
110 htmlElement.removeAllChildren();
111 final DomNode textChild = new DomText(htmlElement.getPage(), text);
112 htmlElement.appendChild(textChild);
113
114 ScriptElementSupport.executeScriptIfNeeded((ScriptElement) htmlElement, false, false);
115 }
116
117
118
119
120
121 @JsxGetter
122 public String getType() {
123 return getDomNodeOrDie().getAttributeDirect(DomElement.TYPE_ATTRIBUTE);
124 }
125
126
127
128
129
130 @JsxSetter
131 public void setType(final String type) {
132 getDomNodeOrDie().setAttribute(DomElement.TYPE_ATTRIBUTE, type);
133 }
134
135
136
137
138
139
140
141 @Override
142 public Node appendChild(final Object childObject) {
143 final HtmlElement tmpScript = getDomNodeOrDie();
144 final boolean wasEmpty = tmpScript.getFirstChild() == null;
145 final Node node = super.appendChild(childObject);
146
147 if (wasEmpty) {
148 ScriptElementSupport.executeScriptIfNeeded((ScriptElement) tmpScript, false, false);
149 }
150 return node;
151 }
152
153
154
155
156
157 @JsxGetter
158 public boolean isAsync() {
159 return getDomNodeOrDie().hasAttribute("async");
160 }
161
162
163
164
165
166 @JsxSetter
167 public void setAsync(final boolean async) {
168 if (async) {
169 getDomNodeOrDie().setAttribute("async", "");
170 }
171 else {
172 getDomNodeOrDie().removeAttribute("async");
173 }
174 }
175 }