Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F885816
range.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
range.js
View Options
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if
(
!
dojo
.
_hasResource
[
"dijit._editor.range"
]){
dojo
.
_hasResource
[
"dijit._editor.range"
]
=
true
;
dojo
.
provide
(
"dijit._editor.range"
);
dijit
.
range
=
{};
dijit
.
range
.
getIndex
=
function
(
_1
,
_2
){
var
_3
=
[],
_4
=
[];
var
_5
=
_2
;
var
_6
=
_1
;
var
_7
,
n
;
while
(
_1
!=
_5
){
var
i
=
0
;
_7
=
_1
.
parentNode
;
while
((
n
=
_7
.
childNodes
[
i
++
])){
if
(
n
===
_1
){
--
i
;
break
;
}
}
if
(
i
>=
_7
.
childNodes
.
length
){
dojo
.
debug
(
"Error finding index of a node in dijit.range.getIndex"
);
}
_3
.
unshift
(
i
);
_4
.
unshift
(
i
-
_7
.
childNodes
.
length
);
_1
=
_7
;
}
if
(
_3
.
length
>
0
&&
_6
.
nodeType
==
3
){
n
=
_6
.
previousSibling
;
while
(
n
&&
n
.
nodeType
==
3
){
_3
[
_3
.
length
-
1
]
--
;
n
=
n
.
previousSibling
;
}
n
=
_6
.
nextSibling
;
while
(
n
&&
n
.
nodeType
==
3
){
_4
[
_4
.
length
-
1
]
++
;
n
=
n
.
nextSibling
;
}
}
return
{
o
:
_3
,
r
:
_4
};
};
dijit
.
range
.
getNode
=
function
(
_8
,
_9
){
if
(
!
dojo
.
isArray
(
_8
)
||
_8
.
length
==
0
){
return
_9
;
}
var
_a
=
_9
;
dojo
.
every
(
_8
,
function
(
i
){
if
(
i
>=
0
&&
i
<
_a
.
childNodes
.
length
){
_a
=
_a
.
childNodes
[
i
];
}
else
{
_a
=
null
;
return
false
;
}
return
true
;
});
return
_a
;
};
dijit
.
range
.
getCommonAncestor
=
function
(
n1
,
n2
){
var
_b
=
function
(
n
){
var
as
=
[];
while
(
n
){
as
.
unshift
(
n
);
if
(
n
.
nodeName
!=
"BODY"
){
n
=
n
.
parentNode
;
}
else
{
break
;
}
}
return
as
;
};
var
_c
=
_b
(
n1
);
var
_d
=
_b
(
n2
);
var
m
=
Math
.
min
(
_c
.
length
,
_d
.
length
);
var
_e
=
_c
[
0
];
for
(
var
i
=
1
;
i
<
m
;
i
++
){
if
(
_c
[
i
]
===
_d
[
i
]){
_e
=
_c
[
i
];
}
else
{
break
;
}
}
return
_e
;
};
dijit
.
range
.
getAncestor
=
function
(
_f
,
_10
,
_11
){
_11
=
_11
||
_f
.
ownerDocument
.
body
;
while
(
_f
&&
_f
!==
_11
){
var
_12
=
_f
.
nodeName
.
toUpperCase
();
if
(
_10
.
test
(
_12
)){
return
_f
;
}
_f
=
_f
.
parentNode
;
}
return
null
;
};
dijit
.
range
.
BlockTagNames
=
/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/
;
dijit
.
range
.
getBlockAncestor
=
function
(
_13
,
_14
,
_15
){
_15
=
_15
||
_13
.
ownerDocument
.
body
;
_14
=
_14
||
dijit
.
range
.
BlockTagNames
;
var
_16
=
null
,
_17
;
while
(
_13
&&
_13
!==
_15
){
var
_18
=
_13
.
nodeName
.
toUpperCase
();
if
(
!
_16
&&
_14
.
test
(
_18
)){
_16
=
_13
;
}
if
(
!
_17
&&
(
/^(?:BODY|TD|TH|CAPTION)$/
).
test
(
_18
)){
_17
=
_13
;
}
_13
=
_13
.
parentNode
;
}
return
{
blockNode
:
_16
,
blockContainer
:
_17
||
_13
.
ownerDocument
.
body
};
};
dijit
.
range
.
atBeginningOfContainer
=
function
(
_19
,
_1a
,
_1b
){
var
_1c
=
false
;
var
_1d
=
(
_1b
==
0
);
if
(
!
_1d
&&
_1a
.
nodeType
==
3
){
if
(
/^[\s\xA0]+$/
.
test
(
_1a
.
nodeValue
.
substr
(
0
,
_1b
))){
_1d
=
true
;
}
}
if
(
_1d
){
var
_1e
=
_1a
;
_1c
=
true
;
while
(
_1e
&&
_1e
!==
_19
){
if
(
_1e
.
previousSibling
){
_1c
=
false
;
break
;
}
_1e
=
_1e
.
parentNode
;
}
}
return
_1c
;
};
dijit
.
range
.
atEndOfContainer
=
function
(
_1f
,
_20
,
_21
){
var
_22
=
false
;
var
_23
=
(
_21
==
(
_20
.
length
||
_20
.
childNodes
.
length
));
if
(
!
_23
&&
_20
.
nodeType
==
3
){
if
(
/^[\s\xA0]+$/
.
test
(
_20
.
nodeValue
.
substr
(
_21
))){
_23
=
true
;
}
}
if
(
_23
){
var
_24
=
_20
;
_22
=
true
;
while
(
_24
&&
_24
!==
_1f
){
if
(
_24
.
nextSibling
){
_22
=
false
;
break
;
}
_24
=
_24
.
parentNode
;
}
}
return
_22
;
};
dijit
.
range
.
adjacentNoneTextNode
=
function
(
_25
,
_26
){
var
_27
=
_25
;
var
len
=
(
0
-
_25
.
length
)
||
0
;
var
_28
=
_26
?
"nextSibling"
:
"previousSibling"
;
while
(
_27
){
if
(
_27
.
nodeType
!=
3
){
break
;
}
len
+=
_27
.
length
;
_27
=
_27
[
_28
];
}
return
[
_27
,
len
];
};
dijit
.
range
.
_w3c
=
Boolean
(
window
[
"getSelection"
]);
dijit
.
range
.
create
=
function
(
win
){
if
(
dijit
.
range
.
_w3c
){
return
(
win
||
dojo
.
global
).
document
.
createRange
();
}
else
{
return
new
dijit
.
range
.
W3CRange
;
}
};
dijit
.
range
.
getSelection
=
function
(
win
,
_29
){
if
(
dijit
.
range
.
_w3c
){
return
win
.
getSelection
();
}
else
{
var
s
=
new
dijit
.
range
.
ie
.
selection
(
win
);
if
(
!
_29
){
s
.
_getCurrentSelection
();
}
return
s
;
}
};
if
(
!
dijit
.
range
.
_w3c
){
dijit
.
range
.
ie
=
{
cachedSelection
:
{},
selection
:
function
(
win
){
this
.
_ranges
=
[];
this
.
addRange
=
function
(
r
,
_2a
){
this
.
_ranges
.
push
(
r
);
if
(
!
_2a
){
r
.
_select
();
}
this
.
rangeCount
=
this
.
_ranges
.
length
;
};
this
.
removeAllRanges
=
function
(){
this
.
_ranges
=
[];
this
.
rangeCount
=
0
;
};
var
_2b
=
function
(){
var
r
=
win
.
document
.
selection
.
createRange
();
var
_2c
=
win
.
document
.
selection
.
type
.
toUpperCase
();
if
(
_2c
==
"CONTROL"
){
return
new
dijit
.
range
.
W3CRange
(
dijit
.
range
.
ie
.
decomposeControlRange
(
r
));
}
else
{
return
new
dijit
.
range
.
W3CRange
(
dijit
.
range
.
ie
.
decomposeTextRange
(
r
));
}
};
this
.
getRangeAt
=
function
(
i
){
return
this
.
_ranges
[
i
];
};
this
.
_getCurrentSelection
=
function
(){
this
.
removeAllRanges
();
var
r
=
_2b
();
if
(
r
){
this
.
addRange
(
r
,
true
);
}
};
},
decomposeControlRange
:
function
(
_2d
){
var
_2e
=
_2d
.
item
(
0
),
_2f
=
_2d
.
item
(
_2d
.
length
-
1
);
var
_30
=
_2e
.
parentNode
,
_31
=
_2f
.
parentNode
;
var
_32
=
dijit
.
range
.
getIndex
(
_2e
,
_30
).
o
;
var
_33
=
dijit
.
range
.
getIndex
(
_2f
,
_31
).
o
+
1
;
return
[
_30
,
_32
,
_31
,
_33
];
},
getEndPoint
:
function
(
_34
,
end
){
var
_35
=
_34
.
duplicate
();
_35
.
collapse
(
!
end
);
var
_36
=
"EndTo"
+
(
end
?
"End"
:
"Start"
);
var
_37
=
_35
.
parentElement
();
var
_38
,
_39
,
_3a
;
if
(
_37
.
childNodes
.
length
>
0
){
dojo
.
every
(
_37
.
childNodes
,
function
(
_3b
,
i
){
var
_3c
;
if
(
_3b
.
nodeType
!=
3
){
_35
.
moveToElementText
(
_3b
);
if
(
_35
.
compareEndPoints
(
_36
,
_34
)
>
0
){
if
(
_3a
&&
_3a
.
nodeType
==
3
){
_38
=
_3a
;
_3c
=
true
;
}
else
{
_38
=
_37
;
_39
=
i
;
return
false
;
}
}
else
{
if
(
i
==
_37
.
childNodes
.
length
-
1
){
_38
=
_37
;
_39
=
_37
.
childNodes
.
length
;
return
false
;
}
}
}
else
{
if
(
i
==
_37
.
childNodes
.
length
-
1
){
_38
=
_3b
;
_3c
=
true
;
}
}
if
(
_3c
&&
_38
){
var
_3d
=
dijit
.
range
.
adjacentNoneTextNode
(
_38
)[
0
];
if
(
_3d
){
_38
=
_3d
.
nextSibling
;
}
else
{
_38
=
_37
.
firstChild
;
}
var
_3e
=
dijit
.
range
.
adjacentNoneTextNode
(
_38
);
_3d
=
_3e
[
0
];
var
_3f
=
_3e
[
1
];
if
(
_3d
){
_35
.
moveToElementText
(
_3d
);
_35
.
collapse
(
false
);
}
else
{
_35
.
moveToElementText
(
_37
);
}
_35
.
setEndPoint
(
_36
,
_34
);
_39
=
_35
.
text
.
length
-
_3f
;
return
false
;
}
_3a
=
_3b
;
return
true
;
});
}
else
{
_38
=
_37
;
_39
=
0
;
}
if
(
!
end
&&
_38
.
nodeType
==
1
&&
_39
==
_38
.
childNodes
.
length
){
var
_40
=
_38
.
nextSibling
;
if
(
_40
&&
_40
.
nodeType
==
3
){
_38
=
_40
;
_39
=
0
;
}
}
return
[
_38
,
_39
];
},
setEndPoint
:
function
(
_41
,
_42
,
_43
){
var
_44
=
_41
.
duplicate
(),
_45
,
len
;
if
(
_42
.
nodeType
!=
3
){
if
(
_43
>
0
){
_45
=
_42
.
childNodes
[
_43
-
1
];
if
(
_45
.
nodeType
==
3
){
_42
=
_45
;
_43
=
_45
.
length
;
}
else
{
if
(
_45
.
nextSibling
&&
_45
.
nextSibling
.
nodeType
==
3
){
_42
=
_45
.
nextSibling
;
_43
=
0
;
}
else
{
_44
.
moveToElementText
(
_45
.
nextSibling
?
_45
:
_42
);
var
_46
=
_45
.
parentNode
;
var
_47
=
_46
.
insertBefore
(
_45
.
ownerDocument
.
createTextNode
(
" "
),
_45
.
nextSibling
);
_44
.
collapse
(
false
);
_46
.
removeChild
(
_47
);
}
}
}
else
{
_44
.
moveToElementText
(
_42
);
_44
.
collapse
(
true
);
}
}
if
(
_42
.
nodeType
==
3
){
var
_48
=
dijit
.
range
.
adjacentNoneTextNode
(
_42
);
var
_49
=
_48
[
0
];
len
=
_48
[
1
];
if
(
_49
){
_44
.
moveToElementText
(
_49
);
_44
.
collapse
(
false
);
if
(
_49
.
contentEditable
!=
"inherit"
){
len
++
;
}
}
else
{
_44
.
moveToElementText
(
_42
.
parentNode
);
_44
.
collapse
(
true
);
}
_43
+=
len
;
if
(
_43
>
0
){
if
(
_44
.
move
(
"character"
,
_43
)
!=
_43
){
console
.
error
(
"Error when moving!"
);
}
}
}
return
_44
;
},
decomposeTextRange
:
function
(
_4a
){
var
_4b
=
dijit
.
range
.
ie
.
getEndPoint
(
_4a
);
var
_4c
=
_4b
[
0
],
_4d
=
_4b
[
1
];
var
_4e
=
_4b
[
0
],
_4f
=
_4b
[
1
];
if
(
_4a
.
htmlText
.
length
){
if
(
_4a
.
htmlText
==
_4a
.
text
){
_4f
=
_4d
+
_4a
.
text
.
length
;
}
else
{
_4b
=
dijit
.
range
.
ie
.
getEndPoint
(
_4a
,
true
);
_4e
=
_4b
[
0
],
_4f
=
_4b
[
1
];
}
}
return
[
_4c
,
_4d
,
_4e
,
_4f
];
},
setRange
:
function
(
_50
,
_51
,
_52
,
_53
,
_54
,
_55
){
var
_56
=
dijit
.
range
.
ie
.
setEndPoint
(
_50
,
_51
,
_52
);
_50
.
setEndPoint
(
"StartToStart"
,
_56
);
if
(
!
_55
){
var
end
=
dijit
.
range
.
ie
.
setEndPoint
(
_50
,
_53
,
_54
);
}
_50
.
setEndPoint
(
"EndToEnd"
,
end
||
_56
);
return
_50
;
}};
dojo
.
declare
(
"dijit.range.W3CRange"
,
null
,{
constructor
:
function
(){
if
(
arguments
.
length
>
0
){
this
.
setStart
(
arguments
[
0
][
0
],
arguments
[
0
][
1
]);
this
.
setEnd
(
arguments
[
0
][
2
],
arguments
[
0
][
3
]);
}
else
{
this
.
commonAncestorContainer
=
null
;
this
.
startContainer
=
null
;
this
.
startOffset
=
0
;
this
.
endContainer
=
null
;
this
.
endOffset
=
0
;
this
.
collapsed
=
true
;
}
},
_updateInternal
:
function
(){
if
(
this
.
startContainer
!==
this
.
endContainer
){
this
.
commonAncestorContainer
=
dijit
.
range
.
getCommonAncestor
(
this
.
startContainer
,
this
.
endContainer
);
}
else
{
this
.
commonAncestorContainer
=
this
.
startContainer
;
}
this
.
collapsed
=
(
this
.
startContainer
===
this
.
endContainer
)
&&
(
this
.
startOffset
==
this
.
endOffset
);
},
setStart
:
function
(
_57
,
_58
){
_58
=
parseInt
(
_58
);
if
(
this
.
startContainer
===
_57
&&
this
.
startOffset
==
_58
){
return
;
}
delete
this
.
_cachedBookmark
;
this
.
startContainer
=
_57
;
this
.
startOffset
=
_58
;
if
(
!
this
.
endContainer
){
this
.
setEnd
(
_57
,
_58
);
}
else
{
this
.
_updateInternal
();
}
},
setEnd
:
function
(
_59
,
_5a
){
_5a
=
parseInt
(
_5a
);
if
(
this
.
endContainer
===
_59
&&
this
.
endOffset
==
_5a
){
return
;
}
delete
this
.
_cachedBookmark
;
this
.
endContainer
=
_59
;
this
.
endOffset
=
_5a
;
if
(
!
this
.
startContainer
){
this
.
setStart
(
_59
,
_5a
);
}
else
{
this
.
_updateInternal
();
}
},
setStartAfter
:
function
(
_5b
,
_5c
){
this
.
_setPoint
(
"setStart"
,
_5b
,
_5c
,
1
);
},
setStartBefore
:
function
(
_5d
,
_5e
){
this
.
_setPoint
(
"setStart"
,
_5d
,
_5e
,
0
);
},
setEndAfter
:
function
(
_5f
,
_60
){
this
.
_setPoint
(
"setEnd"
,
_5f
,
_60
,
1
);
},
setEndBefore
:
function
(
_61
,
_62
){
this
.
_setPoint
(
"setEnd"
,
_61
,
_62
,
0
);
},
_setPoint
:
function
(
_63
,
_64
,
_65
,
ext
){
var
_66
=
dijit
.
range
.
getIndex
(
_64
,
_64
.
parentNode
).
o
;
this
[
_63
](
_64
.
parentNode
,
_66
.
pop
()
+
ext
);
},
_getIERange
:
function
(){
var
r
=
(
this
.
_body
||
this
.
endContainer
.
ownerDocument
.
body
).
createTextRange
();
dijit
.
range
.
ie
.
setRange
(
r
,
this
.
startContainer
,
this
.
startOffset
,
this
.
endContainer
,
this
.
endOffset
,
this
.
collapsed
);
return
r
;
},
getBookmark
:
function
(
_67
){
this
.
_getIERange
();
return
this
.
_cachedBookmark
;
},
_select
:
function
(){
var
r
=
this
.
_getIERange
();
r
.
select
();
},
deleteContents
:
function
(){
var
r
=
this
.
_getIERange
();
r
.
pasteHTML
(
""
);
this
.
endContainer
=
this
.
startContainer
;
this
.
endOffset
=
this
.
startOffset
;
this
.
collapsed
=
true
;
},
cloneRange
:
function
(){
var
r
=
new
dijit
.
range
.
W3CRange
([
this
.
startContainer
,
this
.
startOffset
,
this
.
endContainer
,
this
.
endOffset
]);
r
.
_body
=
this
.
_body
;
return
r
;
},
detach
:
function
(){
this
.
_body
=
null
;
this
.
commonAncestorContainer
=
null
;
this
.
startContainer
=
null
;
this
.
startOffset
=
0
;
this
.
endContainer
=
null
;
this
.
endOffset
=
0
;
this
.
collapsed
=
true
;
}});
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 19:50 (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25282
Default Alt Text
range.js (9 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment