Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F884704
Selector.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
Selector.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojo.dnd.Selector"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojo.dnd.Selector"
]
=
true
;
dojo
.
provide
(
"dojo.dnd.Selector"
);
dojo
.
require
(
"dojo.dnd.common"
);
dojo
.
require
(
"dojo.dnd.Container"
);
/*
Container item states:
"" - an item is not selected
"Selected" - an item is selected
"Anchor" - an item is selected, and is an anchor for a "shift" selection
*/
dojo
.
declare
(
"dojo.dnd.Selector"
,
dojo
.
dnd
.
Container
,
{
// summary: a Selector object, which knows how to select its children
constructor
:
function
(
node
,
params
){
// summary: a constructor of the Selector
// node: Node: node or node's id to build the selector on
// params: Object: a dict of parameters, recognized parameters are:
// singular: Boolean: allows selection of only one element, if true
// the rest of parameters are passed to the container
if
(
!
params
){
params
=
{};
}
this
.
singular
=
params
.
singular
;
// class-specific variables
this
.
selection
=
{};
this
.
anchor
=
null
;
this
.
simpleSelection
=
false
;
// set up events
this
.
events
.
push
(
dojo
.
connect
(
this
.
node
,
"onmousedown"
,
this
,
"onMouseDown"
),
dojo
.
connect
(
this
.
node
,
"onmouseup"
,
this
,
"onMouseUp"
));
},
// object attributes (for markup)
singular
:
false
,
// is singular property
// methods
getSelectedNodes
:
function
(){
// summary: returns a list (an array) of selected nodes
var
t
=
new
dojo
.
NodeList
();
var
e
=
dojo
.
dnd
.
_empty
;
for
(
var
i
in
this
.
selection
){
if
(
i
in
e
){
continue
;
}
t
.
push
(
dojo
.
byId
(
i
));
}
return
t
;
// Array
},
selectNone
:
function
(){
// summary: unselects all items
return
this
.
_removeSelection
().
_removeAnchor
();
// self
},
selectAll
:
function
(){
// summary: selects all items
this
.
forInItems
(
function
(
data
,
id
){
this
.
_addItemClass
(
dojo
.
byId
(
id
),
"Selected"
);
this
.
selection
[
id
]
=
1
;
},
this
);
return
this
.
_removeAnchor
();
// self
},
deleteSelectedNodes
:
function
(){
// summary: deletes all selected items
var
e
=
dojo
.
dnd
.
_empty
;
for
(
var
i
in
this
.
selection
){
if
(
i
in
e
){
continue
;
}
var
n
=
dojo
.
byId
(
i
);
this
.
delItem
(
i
);
dojo
.
_destroyElement
(
n
);
}
this
.
anchor
=
null
;
this
.
selection
=
{};
return
this
;
// self
},
insertNodes
:
function
(
addSelected
,
data
,
before
,
anchor
){
// summary: inserts new data items (see Container's insertNodes method for details)
// addSelected: Boolean: all new nodes will be added to selected items, if true, no selection change otherwise
// data: Array: a list of data items, which should be processed by the creator function
// before: Boolean: insert before the anchor, if true, and after the anchor otherwise
// anchor: Node: the anchor node to be used as a point of insertion
var
oldCreator
=
this
.
_normalizedCreator
;
this
.
_normalizedCreator
=
function
(
item
,
hint
){
var
t
=
oldCreator
.
call
(
this
,
item
,
hint
);
if
(
addSelected
){
if
(
!
this
.
anchor
){
this
.
anchor
=
t
.
node
;
this
.
_removeItemClass
(
t
.
node
,
"Selected"
);
this
.
_addItemClass
(
this
.
anchor
,
"Anchor"
);
}
else
if
(
this
.
anchor
!=
t
.
node
){
this
.
_removeItemClass
(
t
.
node
,
"Anchor"
);
this
.
_addItemClass
(
t
.
node
,
"Selected"
);
}
this
.
selection
[
t
.
node
.
id
]
=
1
;
}
else
{
this
.
_removeItemClass
(
t
.
node
,
"Selected"
);
this
.
_removeItemClass
(
t
.
node
,
"Anchor"
);
}
return
t
;
};
dojo
.
dnd
.
Selector
.
superclass
.
insertNodes
.
call
(
this
,
data
,
before
,
anchor
);
this
.
_normalizedCreator
=
oldCreator
;
return
this
;
// self
},
destroy
:
function
(){
// summary: prepares the object to be garbage-collected
dojo
.
dnd
.
Selector
.
superclass
.
destroy
.
call
(
this
);
this
.
selection
=
this
.
anchor
=
null
;
},
// markup methods
markupFactory
:
function
(
params
,
node
){
params
.
_skipStartup
=
true
;
return
new
dojo
.
dnd
.
Selector
(
node
,
params
);
},
// mouse events
onMouseDown
:
function
(
e
){
// summary: event processor for onmousedown
// e: Event: mouse event
if
(
!
this
.
current
){
return
;
}
if
(
!
this
.
singular
&&
!
dojo
.
dnd
.
getCopyKeyState
(
e
)
&&
!
e
.
shiftKey
&&
(
this
.
current
.
id
in
this
.
selection
)){
this
.
simpleSelection
=
true
;
dojo
.
stopEvent
(
e
);
return
;
}
if
(
!
this
.
singular
&&
e
.
shiftKey
){
if
(
!
dojo
.
dnd
.
getCopyKeyState
(
e
)){
this
.
_removeSelection
();
}
var
c
=
dojo
.
query
(
"> .dojoDndItem"
,
this
.
parent
);
if
(
c
.
length
){
if
(
!
this
.
anchor
){
this
.
anchor
=
c
[
0
];
this
.
_addItemClass
(
this
.
anchor
,
"Anchor"
);
}
this
.
selection
[
this
.
anchor
.
id
]
=
1
;
if
(
this
.
anchor
!=
this
.
current
){
var
i
=
0
;
for
(;
i
<
c
.
length
;
++
i
){
var
node
=
c
[
i
];
if
(
node
==
this
.
anchor
||
node
==
this
.
current
){
break
;
}
}
for
(
++
i
;
i
<
c
.
length
;
++
i
){
var
node
=
c
[
i
];
if
(
node
==
this
.
anchor
||
node
==
this
.
current
){
break
;
}
this
.
_addItemClass
(
node
,
"Selected"
);
this
.
selection
[
node
.
id
]
=
1
;
}
this
.
_addItemClass
(
this
.
current
,
"Selected"
);
this
.
selection
[
this
.
current
.
id
]
=
1
;
}
}
}
else
{
if
(
this
.
singular
){
if
(
this
.
anchor
==
this
.
current
){
if
(
dojo
.
dnd
.
getCopyKeyState
(
e
)){
this
.
selectNone
();
}
}
else
{
this
.
selectNone
();
this
.
anchor
=
this
.
current
;
this
.
_addItemClass
(
this
.
anchor
,
"Anchor"
);
this
.
selection
[
this
.
current
.
id
]
=
1
;
}
}
else
{
if
(
dojo
.
dnd
.
getCopyKeyState
(
e
)){
if
(
this
.
anchor
==
this
.
current
){
delete
this
.
selection
[
this
.
anchor
.
id
];
this
.
_removeAnchor
();
}
else
{
if
(
this
.
current
.
id
in
this
.
selection
){
this
.
_removeItemClass
(
this
.
current
,
"Selected"
);
delete
this
.
selection
[
this
.
current
.
id
];
}
else
{
if
(
this
.
anchor
){
this
.
_removeItemClass
(
this
.
anchor
,
"Anchor"
);
this
.
_addItemClass
(
this
.
anchor
,
"Selected"
);
}
this
.
anchor
=
this
.
current
;
this
.
_addItemClass
(
this
.
current
,
"Anchor"
);
this
.
selection
[
this
.
current
.
id
]
=
1
;
}
}
}
else
{
if
(
!
(
this
.
current
.
id
in
this
.
selection
)){
this
.
selectNone
();
this
.
anchor
=
this
.
current
;
this
.
_addItemClass
(
this
.
current
,
"Anchor"
);
this
.
selection
[
this
.
current
.
id
]
=
1
;
}
}
}
}
dojo
.
stopEvent
(
e
);
},
onMouseUp
:
function
(
e
){
// summary: event processor for onmouseup
// e: Event: mouse event
if
(
!
this
.
simpleSelection
){
return
;
}
this
.
simpleSelection
=
false
;
this
.
selectNone
();
if
(
this
.
current
){
this
.
anchor
=
this
.
current
;
this
.
_addItemClass
(
this
.
anchor
,
"Anchor"
);
this
.
selection
[
this
.
current
.
id
]
=
1
;
}
},
onMouseMove
:
function
(
e
){
// summary: event processor for onmousemove
// e: Event: mouse event
this
.
simpleSelection
=
false
;
},
// utilities
onOverEvent
:
function
(){
// summary: this function is called once, when mouse is over our container
this
.
onmousemoveEvent
=
dojo
.
connect
(
this
.
node
,
"onmousemove"
,
this
,
"onMouseMove"
);
},
onOutEvent
:
function
(){
// summary: this function is called once, when mouse is out of our container
dojo
.
disconnect
(
this
.
onmousemoveEvent
);
delete
this
.
onmousemoveEvent
;
},
_removeSelection
:
function
(){
// summary: unselects all items
var
e
=
dojo
.
dnd
.
_empty
;
for
(
var
i
in
this
.
selection
){
if
(
i
in
e
){
continue
;
}
var
node
=
dojo
.
byId
(
i
);
if
(
node
){
this
.
_removeItemClass
(
node
,
"Selected"
);
}
}
this
.
selection
=
{};
return
this
;
// self
},
_removeAnchor
:
function
(){
if
(
this
.
anchor
){
this
.
_removeItemClass
(
this
.
anchor
,
"Anchor"
);
this
.
anchor
=
null
;
}
return
this
;
// self
}
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 6, 10:53 (2 w, 13 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25509
Default Alt Text
Selector.js (7 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment