1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.host.dom;
16
17 import org.htmlunit.corejs.javascript.Context;
18 import org.htmlunit.corejs.javascript.Function;
19 import org.htmlunit.corejs.javascript.Scriptable;
20 import org.htmlunit.html.DomCharacterData;
21 import org.htmlunit.html.DomElement;
22 import org.htmlunit.javascript.JavaScriptEngine;
23 import org.htmlunit.javascript.configuration.JsxClass;
24 import org.htmlunit.javascript.configuration.JsxConstructor;
25 import org.htmlunit.javascript.configuration.JsxFunction;
26 import org.htmlunit.javascript.configuration.JsxGetter;
27 import org.htmlunit.javascript.configuration.JsxSetter;
28 import org.htmlunit.javascript.host.Element;
29
30
31
32
33
34
35
36
37
38 @JsxClass
39 public class CharacterData extends Node {
40
41
42
43
44 @Override
45 @JsxConstructor
46 public void jsConstructor() {
47 super.jsConstructor();
48 }
49
50
51
52
53
54 @JsxGetter
55 public String getData() {
56 return getDomCharacterDataOrDie().getData();
57 }
58
59
60
61
62
63 @JsxSetter
64 public void setData(final String newValue) {
65 getDomCharacterDataOrDie().setData(newValue);
66 }
67
68
69
70
71
72 @JsxGetter
73 public int getLength() {
74 return getDomCharacterDataOrDie().getLength();
75 }
76
77
78
79
80
81 @JsxFunction
82 public void appendData(final String arg) {
83 getDomCharacterDataOrDie().appendData(arg);
84 }
85
86
87
88
89
90
91 @JsxFunction
92 public void deleteData(final int offset, final int count) {
93 if (offset < 0) {
94 throw JavaScriptEngine.asJavaScriptException(
95 getWindow(),
96 "Provided offset: " + offset + " is less than zero.",
97 DOMException.INDEX_SIZE_ERR);
98 }
99
100 final DomCharacterData domCharacterData = getDomCharacterDataOrDie();
101 if (offset > domCharacterData.getLength()) {
102 throw JavaScriptEngine.asJavaScriptException(
103 getWindow(),
104 "Provided offset: " + offset + " is greater than length.",
105 DOMException.INDEX_SIZE_ERR);
106 }
107
108 domCharacterData.deleteData(offset, count);
109 }
110
111
112
113
114
115
116
117 @JsxFunction
118 public void insertData(final int offset, final String arg) {
119 getDomCharacterDataOrDie().insertData(offset, arg);
120 }
121
122
123
124
125
126
127
128
129
130 @JsxFunction
131 public void replaceData(final int offset, final int count, final String arg) {
132 getDomCharacterDataOrDie().replaceData(offset, count, arg);
133 }
134
135
136
137
138
139
140
141
142 @JsxFunction
143 public String substringData(final int offset, final int count) {
144 return getDomCharacterDataOrDie().substringData(offset, count);
145 }
146
147 private DomCharacterData getDomCharacterDataOrDie() {
148 return (DomCharacterData) super.getDomNodeOrDie();
149 }
150
151
152
153
154
155 @JsxGetter
156 public Element getNextElementSibling() {
157 final DomElement child = getDomNodeOrDie().getNextElementSibling();
158 if (child != null) {
159 return child.getScriptableObject();
160 }
161 return null;
162 }
163
164
165
166
167
168 @JsxGetter
169 public Element getPreviousElementSibling() {
170 final DomElement child = getDomNodeOrDie().getPreviousElementSibling();
171 if (child != null) {
172 return child.getScriptableObject();
173 }
174 return null;
175 }
176
177
178
179
180 @Override
181 @JsxFunction
182 public void remove() {
183 super.remove();
184 }
185
186
187
188
189
190
191
192
193
194
195 @JsxFunction
196 public static void before(final Context context, final Scriptable scope,
197 final Scriptable thisObj, final Object[] args, final Function function) {
198 Node.before(context, thisObj, args, function);
199 }
200
201
202
203
204
205
206
207
208
209
210 @JsxFunction
211 public static void after(final Context context, final Scriptable scope,
212 final Scriptable thisObj, final Object[] args, final Function function) {
213 Node.after(context, thisObj, args, function);
214 }
215
216
217
218
219
220
221
222
223
224 @JsxFunction
225 public static void replaceWith(final Context context, final Scriptable scope,
226 final Scriptable thisObj, final Object[] args, final Function function) {
227 Node.replaceWith(context, thisObj, args, function);
228 }
229 }