Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F948165
Stencil.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
Stencil.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
[
"dojox.drawing.manager.Stencil"
]){
dojo
.
_hasResource
[
"dojox.drawing.manager.Stencil"
]
=
true
;
dojo
.
provide
(
"dojox.drawing.manager.Stencil"
);
(
function
(){
var
_1
,
_2
;
dojox
.
drawing
.
manager
.
Stencil
=
dojox
.
drawing
.
util
.
oo
.
declare
(
function
(
_3
){
_1
=
_3
.
surface
;
this
.
canvas
=
_3
.
canvas
;
this
.
defaults
=
dojox
.
drawing
.
defaults
.
copy
();
this
.
undo
=
_3
.
undo
;
this
.
mouse
=
_3
.
mouse
;
this
.
keys
=
_3
.
keys
;
this
.
anchors
=
_3
.
anchors
;
this
.
stencils
=
{};
this
.
selectedStencils
=
{};
this
.
_mouseHandle
=
this
.
mouse
.
register
(
this
);
dojo
.
connect
(
this
.
keys
,
"onArrow"
,
this
,
"onArrow"
);
dojo
.
connect
(
this
.
keys
,
"onEsc"
,
this
,
"deselect"
);
dojo
.
connect
(
this
.
keys
,
"onDelete"
,
this
,
"onDelete"
);
},{
_dragBegun
:
false
,
_wasDragged
:
false
,
_secondClick
:
false
,
_isBusy
:
false
,
register
:
function
(
_4
){
if
(
_4
.
isText
&&!
_4
.
editMode
&&
_4
.
deleteEmptyCreate
&&!
_4
.
getText
()){
console
.
warn
(
"EMPTY CREATE DELETE"
,
_4
);
_4
.
destroy
();
return
false
;
}
this
.
stencils
[
_4
.
id
]
=
_4
;
if
(
_4
.
execText
){
if
(
_4
.
_text
&&!
_4
.
editMode
){
this
.
selectItem
(
_4
);
}
_4
.
connect
(
"execText"
,
this
,
function
(){
if
(
_4
.
isText
&&
_4
.
deleteEmptyModify
&&!
_4
.
getText
()){
console
.
warn
(
"EMPTY MOD DELETE"
,
_4
);
this
.
deleteItem
(
_4
);
}
else
{
if
(
_4
.
selectOnExec
){
this
.
selectItem
(
_4
);
}
}
});
}
_4
.
connect
(
"deselect"
,
this
,
function
(){
if
(
!
this
.
_isBusy
&&
this
.
isSelected
(
_4
)){
this
.
deselectItem
(
_4
);
}
});
_4
.
connect
(
"select"
,
this
,
function
(){
if
(
!
this
.
_isBusy
&&!
this
.
isSelected
(
_4
)){
this
.
selectItem
(
_4
);
}
});
return
_4
;
},
unregister
:
function
(
_5
){
if
(
_5
){
_5
.
selected
&&
this
.
onDeselect
(
_5
);
delete
this
.
stencils
[
_5
.
id
];
}
},
onArrow
:
function
(
_6
){
if
(
this
.
hasSelected
()){
this
.
saveThrottledState
();
this
.
group
.
applyTransform
({
dx
:
_6
.
x
,
dy
:
_6
.
y
});
}
},
_throttleVrl
:
null
,
_throttle
:
false
,
throttleTime
:
400
,
_lastmxx
:-
1
,
_lastmxy
:-
1
,
saveMoveState
:
function
(){
var
mx
=
this
.
group
.
getTransform
();
if
(
mx
.
dx
==
this
.
_lastmxx
&&
mx
.
dy
==
this
.
_lastmxy
){
return
;
}
this
.
_lastmxx
=
mx
.
dx
;
this
.
_lastmxy
=
mx
.
dy
;
this
.
undo
.
add
({
before
:
dojo
.
hitch
(
this
.
group
,
"setTransform"
,
mx
)});
},
saveThrottledState
:
function
(){
clearTimeout
(
this
.
_throttleVrl
);
clearInterval
(
this
.
_throttleVrl
);
this
.
_throttleVrl
=
setTimeout
(
dojo
.
hitch
(
this
,
function
(){
this
.
_throttle
=
false
;
this
.
saveMoveState
();
}),
this
.
throttleTime
);
if
(
this
.
_throttle
){
return
;
}
this
.
_throttle
=
true
;
this
.
saveMoveState
();
},
unDelete
:
function
(
_7
){
for
(
var
s
in
_7
){
_7
[
s
].
render
();
this
.
onSelect
(
_7
[
s
]);
}
},
onDelete
:
function
(
_8
){
if
(
_8
!==
true
){
this
.
undo
.
add
({
before
:
dojo
.
hitch
(
this
,
"unDelete"
,
this
.
selectedStencils
),
after
:
dojo
.
hitch
(
this
,
"onDelete"
,
true
)});
}
this
.
withSelected
(
function
(
m
){
this
.
anchors
.
remove
(
m
);
var
id
=
m
.
id
;
m
.
destroy
();
delete
this
.
stencils
[
id
];
});
this
.
selectedStencils
=
{};
},
deleteItem
:
function
(
_9
){
if
(
this
.
hasSelected
()){
var
_a
=
[];
for
(
var
m
in
this
.
selectedStencils
){
if
(
this
.
selectedStencils
.
id
==
_9
.
id
){
if
(
this
.
hasSelected
()
==
1
){
this
.
onDelete
();
return
;
}
}
else
{
_a
.
push
(
this
.
selectedStencils
.
id
);
}
}
this
.
deselect
();
this
.
selectItem
(
_9
);
this
.
onDelete
();
dojo
.
forEach
(
_a
,
function
(
id
){
this
.
selectItem
(
id
);
},
this
);
}
else
{
this
.
selectItem
(
_9
);
this
.
onDelete
();
}
},
removeAll
:
function
(){
this
.
selectAll
();
this
.
_isBusy
=
true
;
this
.
onDelete
();
this
.
stencils
=
{};
this
.
_isBusy
=
false
;
},
setSelectionGroup
:
function
(){
this
.
withSelected
(
function
(
m
){
this
.
onDeselect
(
m
,
true
);
});
if
(
this
.
group
){
_1
.
remove
(
this
.
group
);
this
.
group
.
removeShape
();
}
this
.
group
=
_1
.
createGroup
();
this
.
group
.
setTransform
({
dx
:
0
,
dy
:
0
});
this
.
withSelected
(
function
(
m
){
this
.
group
.
add
(
m
.
container
);
m
.
select
();
});
},
setConstraint
:
function
(){
var
t
=
Infinity
;
l
=
Infinity
;
this
.
withSelected
(
function
(
m
){
var
o
=
m
.
getBounds
();
t
=
Math
.
min
(
o
.
y1
,
t
);
l
=
Math
.
min
(
o
.
x1
,
l
);
});
this
.
constrain
=
{
l
:-
l
,
t
:-
t
};
},
onDeselect
:
function
(
_b
,
_c
){
if
(
!
_c
){
delete
this
.
selectedStencils
[
_b
.
id
];
}
this
.
anchors
.
remove
(
_b
);
_1
.
add
(
_b
.
container
);
_b
.
selected
&&
_b
.
deselect
();
_b
.
applyTransform
(
this
.
group
.
getTransform
());
},
deselectItem
:
function
(
_d
){
this
.
onDeselect
(
_d
);
},
deselect
:
function
(){
this
.
withSelected
(
function
(
m
){
this
.
onDeselect
(
m
);
});
this
.
_dragBegun
=
false
;
this
.
_wasDragged
=
false
;
},
onSelect
:
function
(
_e
){
if
(
!
_e
){
console
.
error
(
"null stencil is not selected:"
,
this
.
stencils
);
}
if
(
this
.
selectedStencils
[
_e
.
id
]){
return
;
}
this
.
selectedStencils
[
_e
.
id
]
=
_e
;
this
.
group
.
add
(
_e
.
container
);
_e
.
select
();
if
(
this
.
hasSelected
()
==
1
){
this
.
anchors
.
add
(
_e
,
this
.
group
);
}
},
selectAll
:
function
(){
this
.
_isBusy
=
true
;
for
(
var
m
in
this
.
stencils
){
this
.
selectItem
(
m
);
}
this
.
_isBusy
=
false
;
},
selectItem
:
function
(
_f
){
var
id
=
typeof
(
_f
)
==
"string"
?
_f
:
_f
.
id
;
var
_10
=
this
.
stencils
[
id
];
this
.
setSelectionGroup
();
this
.
onSelect
(
_10
);
this
.
group
.
moveToFront
();
this
.
setConstraint
();
},
onStencilDoubleClick
:
function
(
obj
){
if
(
this
.
selectedStencils
[
obj
.
id
]){
if
(
this
.
selectedStencils
[
obj
.
id
].
edit
){
var
m
=
this
.
selectedStencils
[
obj
.
id
];
m
.
editMode
=
true
;
this
.
deselect
();
m
.
edit
();
}
}
},
onAnchorUp
:
function
(){
this
.
setConstraint
();
},
onStencilDown
:
function
(
obj
,
evt
){
if
(
!
this
.
stencils
[
obj
.
id
]){
return
;
}
this
.
_isBusy
=
true
;
if
(
this
.
selectedStencils
[
obj
.
id
]
&&
this
.
keys
.
meta
){
if
(
dojo
.
isMac
&&
this
.
keys
.
cmmd
){
}
this
.
onDeselect
(
this
.
selectedStencils
[
obj
.
id
]);
if
(
this
.
hasSelected
()
==
1
){
this
.
withSelected
(
function
(
m
){
this
.
anchors
.
add
(
m
,
this
.
group
);
});
}
this
.
group
.
moveToFront
();
this
.
setConstraint
();
return
;
}
else
{
if
(
this
.
selectedStencils
[
obj
.
id
]){
var
mx
=
this
.
group
.
getTransform
();
this
.
_offx
=
obj
.
x
-
mx
.
dx
;
this
.
_offy
=
obj
.
y
-
mx
.
dy
;
return
;
}
else
{
if
(
!
this
.
keys
.
meta
){
this
.
deselect
();
}
else
{
}
}
}
this
.
selectItem
(
obj
.
id
);
var
mx
=
this
.
group
.
getTransform
();
this
.
_offx
=
obj
.
x
-
mx
.
dx
;
this
.
_offy
=
obj
.
y
-
mx
.
dx
;
this
.
orgx
=
obj
.
x
;
this
.
orgy
=
obj
.
y
;
this
.
_isBusy
=
false
;
this
.
undo
.
add
({
before
:
function
(){
},
after
:
function
(){
}});
},
onStencilUp
:
function
(
obj
){
},
onStencilDrag
:
function
(
obj
){
if
(
!
this
.
_dragBegun
){
this
.
onBeginDrag
(
obj
);
this
.
_dragBegun
=
true
;
}
else
{
this
.
saveThrottledState
();
var
x
=
obj
.
x
-
obj
.
last
.
x
,
y
=
obj
.
y
-
obj
.
last
.
y
,
mx
=
this
.
group
.
getTransform
(),
c
=
this
.
constrain
,
mz
=
this
.
defaults
.
anchors
.
marginZero
;
x
=
obj
.
x
-
this
.
_offx
;
y
=
obj
.
y
-
this
.
_offy
;
if
(
x
<
c
.
l
+
mz
){
x
=
c
.
l
+
mz
;
}
if
(
y
<
c
.
t
+
mz
){
y
=
c
.
t
+
mz
;
}
this
.
group
.
setTransform
({
dx
:
x
,
dy
:
y
});
}
},
onDragEnd
:
function
(
obj
){
this
.
_dragBegun
=
false
;
},
onBeginDrag
:
function
(
obj
){
this
.
_wasDragged
=
true
;
},
onDown
:
function
(
obj
){
this
.
deselect
();
},
exporter
:
function
(){
var
_11
=
[];
for
(
var
m
in
this
.
stencils
){
this
.
stencils
[
m
].
enabled
&&
_11
.
push
(
this
.
stencils
[
m
].
exporter
());
}
return
_11
;
},
toSelected
:
function
(
_12
){
var
_13
=
Array
.
prototype
.
slice
.
call
(
arguments
).
splice
(
1
);
for
(
var
m
in
this
.
selectedStencils
){
var
_14
=
this
.
selectedStencils
[
m
];
_14
[
_12
].
apply
(
_14
,
_13
);
}
},
withSelected
:
function
(
_15
){
var
f
=
dojo
.
hitch
(
this
,
_15
);
for
(
var
m
in
this
.
selectedStencils
){
f
(
this
.
selectedStencils
[
m
]);
}
},
withUnselected
:
function
(
_16
){
var
f
=
dojo
.
hitch
(
this
,
_16
);
for
(
var
m
in
this
.
stencils
){
!
this
.
stencils
[
m
].
selected
&&
f
(
this
.
stencils
[
m
]);
}
},
withStencils
:
function
(
_17
){
var
f
=
dojo
.
hitch
(
this
,
_17
);
for
(
var
m
in
this
.
stencils
){
f
(
this
.
stencils
[
m
]);
}
},
hasSelected
:
function
(){
var
ln
=
0
;
for
(
var
m
in
this
.
selectedStencils
){
ln
++
;
}
return
ln
;
},
isSelected
:
function
(
_18
){
return
!!
this
.
selectedStencils
[
_18
.
id
];
}});
})();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 15:08 (1 h, 7 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27323
Default Alt Text
Stencil.js (7 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment