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 domText) {
96 scriptCode.append(domText.getData());
97 }
98 }
99 return scriptCode.toString();
100 }
101
102
103
104
105
106 @JsxSetter
107 public void setText(final String text) {
108 final HtmlElement htmlElement = getDomNodeOrDie();
109 htmlElement.removeAllChildren();
110 final DomNode textChild = new DomText(htmlElement.getPage(), text);
111 htmlElement.appendChild(textChild);
112
113 ScriptElementSupport.executeScriptIfNeeded((ScriptElement) htmlElement, false, false);
114 }
115
116
117
118
119
120 @JsxGetter
121 public String getType() {
122 return getDomNodeOrDie().getAttributeDirect(DomElement.TYPE_ATTRIBUTE);
123 }
124
125
126
127
128
129 @JsxSetter
130 public void setType(final String type) {
131 getDomNodeOrDie().setAttribute(DomElement.TYPE_ATTRIBUTE, type);
132 }
133
134
135
136
137
138
139
140 @Override
141 public Node appendChild(final Object childObject) {
142 final HtmlElement tmpScript = getDomNodeOrDie();
143 final boolean wasEmpty = tmpScript.getFirstChild() == null;
144 final Node node = super.appendChild(childObject);
145
146 if (wasEmpty) {
147 ScriptElementSupport.executeScriptIfNeeded((ScriptElement) tmpScript, false, false);
148 }
149 return node;
150 }
151
152
153
154
155
156 @JsxGetter
157 public boolean isAsync() {
158 return getDomNodeOrDie().hasAttribute("async");
159 }
160
161
162
163
164
165 @JsxSetter
166 public void setAsync(final boolean async) {
167 if (async) {
168 getDomNodeOrDie().setAttribute("async", "");
169 }
170 else {
171 getDomNodeOrDie().removeAttribute("async");
172 }
173 }
174 }