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.html.impl.SimpleRange;
18 import org.htmlunit.javascript.HtmlUnitScriptable;
19 import org.htmlunit.javascript.JavaScriptEngine;
20 import org.htmlunit.javascript.configuration.JsxClass;
21 import org.htmlunit.javascript.configuration.JsxConstructor;
22 import org.htmlunit.javascript.configuration.JsxGetter;
23
24
25
26
27
28
29
30 @JsxClass
31 public class AbstractRange extends HtmlUnitScriptable {
32
33 private Node startContainer_;
34 private Node endContainer_;
35 private int startOffset_;
36 private int endOffset_;
37
38
39
40
41 public AbstractRange() {
42 super();
43 }
44
45
46
47
48 @JsxConstructor
49 public void jsConstructor() {
50 throw JavaScriptEngine.typeErrorIllegalConstructor();
51 }
52
53
54
55
56
57
58
59
60
61 protected AbstractRange(final Node startContainer, final Node endContainer,
62 final int startOffset, final int endOffset) {
63 super();
64 startContainer_ = startContainer;
65 endContainer_ = endContainer;
66
67 startOffset_ = startOffset;
68 endOffset_ = endOffset;
69 }
70
71
72
73
74 protected Node internGetStartContainer() {
75 return startContainer_;
76 }
77
78
79
80
81
82
83 protected void internSetStartContainer(final Node startContainer) {
84 startContainer_ = startContainer;
85 }
86
87
88
89
90 protected Node internGetEndContainer() {
91 return endContainer_;
92 }
93
94
95
96
97
98
99 protected void internSetEndContainer(final Node endContainer) {
100 endContainer_ = endContainer;
101 }
102
103
104
105
106 protected int internGetStartOffset() {
107 return startOffset_;
108 }
109
110
111
112
113
114
115 protected void internSetStartOffset(final int startOffset) {
116 startOffset_ = startOffset;
117 }
118
119
120
121
122 protected int internGetEndOffset() {
123 return endOffset_;
124 }
125
126
127
128
129
130
131 protected void internSetEndOffset(final int endOffset) {
132 endOffset_ = endOffset;
133 }
134
135
136
137
138 @Override
139 public Object getDefaultValue(final Class<?> hint) {
140 if (getPrototype() == null
141 || startContainer_ == null
142 || endContainer_ == null) {
143 return super.getDefaultValue(hint);
144 }
145 return getSimpleRange().toString();
146 }
147
148
149
150
151
152 @JsxGetter
153 public Object getStartContainer() {
154 if (startContainer_ == null) {
155 return JavaScriptEngine.UNDEFINED;
156 }
157 return startContainer_;
158 }
159
160
161
162
163
164 @JsxGetter
165 public Object getEndContainer() {
166 if (endContainer_ == null) {
167 return JavaScriptEngine.UNDEFINED;
168 }
169 return endContainer_;
170 }
171
172
173
174
175
176 @JsxGetter
177 public int getStartOffset() {
178 return startOffset_;
179 }
180
181
182
183
184
185 @JsxGetter
186 public int getEndOffset() {
187 return endOffset_;
188 }
189
190
191
192
193
194 @JsxGetter
195 public boolean isCollapsed() {
196 return startContainer_ == endContainer_ && startOffset_ == endOffset_;
197 }
198
199
200
201
202 public SimpleRange getSimpleRange() {
203 return new SimpleRange(startContainer_.getDomNodeOrNull(), startOffset_,
204 endContainer_.getDomNodeOrDie(), endOffset_);
205 }
206
207 @Override
208 protected Object equivalentValues(final Object value) {
209 if (!(value instanceof AbstractRange)) {
210 return false;
211 }
212 final AbstractRange other = (AbstractRange) value;
213 return startContainer_ == other.startContainer_
214 && endContainer_ == other.endContainer_
215 && startOffset_ == other.startOffset_
216 && endOffset_ == other.endOffset_;
217 }
218 }