Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F886010
selection.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
selection.js
View Options
if
(
!
dojo
.
_hasResource
[
"dijit._editor.selection"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dijit._editor.selection"
]
=
true
;
dojo
.
provide
(
"dijit._editor.selection"
);
// FIXME:
// all of these methods branch internally for IE. This is probably
// sub-optimal in terms of runtime performance. We should investigate the
// size difference for differentiating at definition time.
dojo
.
mixin
(
dijit
.
_editor
.
selection
,
{
getType
:
function
(){
// summary: Get the selection type (like document.select.type in IE).
if
(
dojo
.
doc
[
"selection"
]){
//IE
return
dojo
.
doc
.
selection
.
type
.
toLowerCase
();
}
else
{
var
stype
=
"text"
;
// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
var
oSel
;
try
{
oSel
=
dojo
.
global
.
getSelection
();
}
catch
(
e
){
/*squelch*/
}
if
(
oSel
&&
oSel
.
rangeCount
==
1
){
var
oRange
=
oSel
.
getRangeAt
(
0
);
if
(
(
oRange
.
startContainer
==
oRange
.
endContainer
)
&&
((
oRange
.
endOffset
-
oRange
.
startOffset
)
==
1
)
&&
(
oRange
.
startContainer
.
nodeType
!=
3
/* text node*/
)
){
stype
=
"control"
;
}
}
return
stype
;
}
},
getSelectedText
:
function
(){
// summary:
// Return the text (no html tags) included in the current selection or null if no text is selected
if
(
dojo
.
doc
[
"selection"
]){
//IE
if
(
dijit
.
_editor
.
selection
.
getType
()
==
'control'
){
return
null
;
}
return
dojo
.
doc
.
selection
.
createRange
().
text
;
}
else
{
var
selection
=
dojo
.
global
.
getSelection
();
if
(
selection
){
return
selection
.
toString
();
}
}
},
getSelectedHtml
:
function
(){
// summary:
// Return the html of the current selection or null if unavailable
if
(
dojo
.
doc
[
"selection"
]){
//IE
if
(
dijit
.
_editor
.
selection
.
getType
()
==
'control'
){
return
null
;
}
return
dojo
.
doc
.
selection
.
createRange
().
htmlText
;
}
else
{
var
selection
=
dojo
.
global
.
getSelection
();
if
(
selection
&&
selection
.
rangeCount
){
var
frag
=
selection
.
getRangeAt
(
0
).
cloneContents
();
var
div
=
document
.
createElement
(
"div"
);
div
.
appendChild
(
frag
);
return
div
.
innerHTML
;
}
return
null
;
}
},
getSelectedElement
:
function
(){
// summary:
// Retrieves the selected element (if any), just in the case that
// a single element (object like and image or a table) is
// selected.
if
(
this
.
getType
()
==
"control"
){
if
(
dojo
.
doc
[
"selection"
]){
//IE
var
range
=
dojo
.
doc
.
selection
.
createRange
();
if
(
range
&&
range
.
item
){
return
dojo
.
doc
.
selection
.
createRange
().
item
(
0
);
}
}
else
{
var
selection
=
dojo
.
global
.
getSelection
();
return
selection
.
anchorNode
.
childNodes
[
selection
.
anchorOffset
];
}
}
},
getParentElement
:
function
(){
// summary:
// Get the parent element of the current selection
if
(
this
.
getType
()
==
"control"
){
var
p
=
this
.
getSelectedElement
();
if
(
p
){
return
p
.
parentNode
;
}
}
else
{
if
(
dojo
.
doc
[
"selection"
]){
//IE
return
dojo
.
doc
.
selection
.
createRange
().
parentElement
();
}
else
{
var
selection
=
dojo
.
global
.
getSelection
();
if
(
selection
){
var
node
=
selection
.
anchorNode
;
while
(
node
&&
(
node
.
nodeType
!=
1
)){
// not an element
node
=
node
.
parentNode
;
}
return
node
;
}
}
}
},
hasAncestorElement
:
function
(
/*String*/
tagName
/* ... */
){
// summary:
// Check whether current selection has a parent element which is
// of type tagName (or one of the other specified tagName)
return
(
this
.
getAncestorElement
.
apply
(
this
,
arguments
)
!=
null
);
},
getAncestorElement
:
function
(
/*String*/
tagName
/* ... */
){
// summary:
// Return the parent element of the current selection which is of
// type tagName (or one of the other specified tagName)
var
node
=
this
.
getSelectedElement
()
||
this
.
getParentElement
();
return
this
.
getParentOfType
(
node
,
arguments
);
},
isTag
:
function
(
/*DomNode*/
node
,
/*Array*/
tags
){
if
(
node
&&
node
.
tagName
){
var
_nlc
=
node
.
tagName
.
toLowerCase
();
for
(
var
i
=
0
;
i
<
tags
.
length
;
i
++
){
var
_tlc
=
String
(
tags
[
i
]).
toLowerCase
();
if
(
_nlc
==
_tlc
){
return
_tlc
;
}
}
}
return
""
;
},
getParentOfType
:
function
(
/*DomNode*/
node
,
/*Array*/
tags
){
while
(
node
){
if
(
this
.
isTag
(
node
,
tags
).
length
){
return
node
;
}
node
=
node
.
parentNode
;
}
return
null
;
},
remove
:
function
(){
// summary: delete current selection
var
_s
=
dojo
.
doc
.
selection
;
if
(
_s
){
//IE
if
(
_s
.
type
.
toLowerCase
()
!=
"none"
){
_s
.
clear
();
}
return
_s
;
}
else
{
_s
=
dojo
.
global
.
getSelection
();
_s
.
deleteFromDocument
();
return
_s
;
}
},
selectElementChildren
:
function
(
/*DomNode*/
element
,
/*Boolean?*/
nochangefocus
){
// summary:
// clear previous selection and select the content of the node
// (excluding the node itself)
var
_window
=
dojo
.
global
;
var
_document
=
dojo
.
doc
;
element
=
dojo
.
byId
(
element
);
if
(
_document
.
selection
&&
dojo
.
body
().
createTextRange
){
// IE
var
range
=
element
.
ownerDocument
.
body
.
createTextRange
();
range
.
moveToElementText
(
element
);
if
(
!
nochangefocus
){
range
.
select
();
}
}
else
if
(
_window
[
"getSelection"
]){
var
selection
=
_window
.
getSelection
();
if
(
selection
[
"setBaseAndExtent"
]){
// Safari
selection
.
setBaseAndExtent
(
element
,
0
,
element
,
element
.
innerText
.
length
-
1
);
}
else
if
(
selection
[
"selectAllChildren"
]){
// Mozilla
selection
.
selectAllChildren
(
element
);
}
}
},
selectElement
:
function
(
/*DomNode*/
element
,
/*Boolean?*/
nochangefocus
){
// summary:
// clear previous selection and select element (including all its children)
var
_document
=
dojo
.
doc
;
element
=
dojo
.
byId
(
element
);
if
(
_document
.
selection
&&
dojo
.
body
().
createTextRange
){
// IE
try
{
var
range
=
dojo
.
body
().
createControlRange
();
range
.
addElement
(
element
);
if
(
!
nochangefocus
){
range
.
select
();
}
}
catch
(
e
){
this
.
selectElementChildren
(
element
,
nochangefocus
);
}
}
else
if
(
dojo
.
global
[
"getSelection"
]){
var
selection
=
dojo
.
global
.
getSelection
();
// FIXME: does this work on Safari?
if
(
selection
[
"removeAllRanges"
]){
// Mozilla
var
range
=
_document
.
createRange
()
;
range
.
selectNode
(
element
)
;
selection
.
removeAllRanges
()
;
selection
.
addRange
(
range
)
;
}
}
}
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 21:41 (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25204
Default Alt Text
selection.js (6 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment