Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F391553
Editor.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
Editor.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"
]){
dojo
.
_hasResource
[
"dijit.Editor"
]
=
true
;
dojo
.
provide
(
"dijit.Editor"
);
dojo
.
require
(
"dijit._editor.RichText"
);
dojo
.
require
(
"dijit.Toolbar"
);
dojo
.
require
(
"dijit.ToolbarSeparator"
);
dojo
.
require
(
"dijit._editor._Plugin"
);
dojo
.
require
(
"dijit._editor.plugins.EnterKeyHandling"
);
dojo
.
require
(
"dijit._editor.range"
);
dojo
.
require
(
"dijit._Container"
);
dojo
.
require
(
"dojo.i18n"
);
dojo
.
requireLocalization
(
"dijit._editor"
,
"commands"
,
null
,
"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw"
);
dojo
.
declare
(
"dijit.Editor"
,
dijit
.
_editor
.
RichText
,{
plugins
:
null
,
extraPlugins
:
null
,
constructor
:
function
(){
if
(
!
dojo
.
isArray
(
this
.
plugins
)){
this
.
plugins
=
[
"undo"
,
"redo"
,
"|"
,
"cut"
,
"copy"
,
"paste"
,
"|"
,
"bold"
,
"italic"
,
"underline"
,
"strikethrough"
,
"|"
,
"insertOrderedList"
,
"insertUnorderedList"
,
"indent"
,
"outdent"
,
"|"
,
"justifyLeft"
,
"justifyRight"
,
"justifyCenter"
,
"justifyFull"
,
"dijit._editor.plugins.EnterKeyHandling"
];
}
this
.
_plugins
=
[];
this
.
_editInterval
=
this
.
editActionInterval
*
1000
;
if
(
dojo
.
isIE
){
this
.
events
.
push
(
"onBeforeDeactivate"
);
this
.
events
.
push
(
"onBeforeActivate"
);
}
},
postCreate
:
function
(){
if
(
this
.
customUndo
){
dojo
[
"require"
](
"dijit._editor.range"
);
this
.
_steps
=
this
.
_steps
.
slice
(
0
);
this
.
_undoedSteps
=
this
.
_undoedSteps
.
slice
(
0
);
}
if
(
dojo
.
isArray
(
this
.
extraPlugins
)){
this
.
plugins
=
this
.
plugins
.
concat
(
this
.
extraPlugins
);
}
this
.
inherited
(
arguments
);
this
.
commands
=
dojo
.
i18n
.
getLocalization
(
"dijit._editor"
,
"commands"
,
this
.
lang
);
if
(
!
this
.
toolbar
){
this
.
toolbar
=
new
dijit
.
Toolbar
({});
dojo
.
place
(
this
.
toolbar
.
domNode
,
this
.
editingArea
,
"before"
);
}
dojo
.
forEach
(
this
.
plugins
,
this
.
addPlugin
,
this
);
this
.
onNormalizedDisplayChanged
();
this
.
toolbar
.
startup
();
},
destroy
:
function
(){
dojo
.
forEach
(
this
.
_plugins
,
function
(
p
){
if
(
p
&&
p
.
destroy
){
p
.
destroy
();
}
});
this
.
_plugins
=
[];
this
.
toolbar
.
destroyRecursive
();
delete
this
.
toolbar
;
this
.
inherited
(
arguments
);
},
addPlugin
:
function
(
_1
,
_2
){
var
_3
=
dojo
.
isString
(
_1
)
?
{
name
:
_1
}
:
_1
;
if
(
!
_3
.
setEditor
){
var
o
=
{
"args"
:
_3
,
"plugin"
:
null
,
"editor"
:
this
};
dojo
.
publish
(
dijit
.
_scopeName
+
".Editor.getPlugin"
,[
o
]);
if
(
!
o
.
plugin
){
var
pc
=
dojo
.
getObject
(
_3
.
name
);
if
(
pc
){
o
.
plugin
=
new
pc
(
_3
);
}
}
if
(
!
o
.
plugin
){
console
.
warn
(
"Cannot find plugin"
,
_1
);
return
;
}
_1
=
o
.
plugin
;
}
if
(
arguments
.
length
>
1
){
this
.
_plugins
[
_2
]
=
_1
;
}
else
{
this
.
_plugins
.
push
(
_1
);
}
_1
.
setEditor
(
this
);
if
(
dojo
.
isFunction
(
_1
.
setToolbar
)){
_1
.
setToolbar
(
this
.
toolbar
);
}
},
startup
:
function
(){
},
resize
:
function
(
_4
){
if
(
_4
){
dijit
.
layout
.
_LayoutWidget
.
prototype
.
resize
.
apply
(
this
,
arguments
);
}
},
layout
:
function
(){
this
.
editingArea
.
style
.
height
=
(
this
.
_contentBox
.
h
-
dojo
.
marginBox
(
this
.
toolbar
.
domNode
).
h
)
+
"px"
;
if
(
this
.
iframe
){
this
.
iframe
.
style
.
height
=
"100%"
;
}
this
.
_layoutMode
=
true
;
},
_onIEMouseDown
:
function
(
e
){
var
_5
=
this
.
document
.
body
.
componentFromPoint
(
e
.
x
,
e
.
y
);
if
(
!
_5
){
delete
this
.
_savedSelection
;
if
(
e
.
target
.
tagName
==
"BODY"
){
setTimeout
(
dojo
.
hitch
(
this
,
"placeCursorAtEnd"
),
0
);
}
this
.
inherited
(
arguments
);
}
},
onBeforeActivate
:
function
(
e
){
this
.
_restoreSelection
();
},
onBeforeDeactivate
:
function
(
e
){
if
(
this
.
customUndo
){
this
.
endEditing
(
true
);
}
if
(
e
.
target
.
tagName
!=
"BODY"
){
this
.
_saveSelection
();
}
},
customUndo
:
dojo
.
isIE
,
editActionInterval
:
3
,
beginEditing
:
function
(
_6
){
if
(
!
this
.
_inEditing
){
this
.
_inEditing
=
true
;
this
.
_beginEditing
(
_6
);
}
if
(
this
.
editActionInterval
>
0
){
if
(
this
.
_editTimer
){
clearTimeout
(
this
.
_editTimer
);
}
this
.
_editTimer
=
setTimeout
(
dojo
.
hitch
(
this
,
this
.
endEditing
),
this
.
_editInterval
);
}
},
_steps
:
[],
_undoedSteps
:
[],
execCommand
:
function
(
_7
){
if
(
this
.
customUndo
&&
(
_7
==
"undo"
||
_7
==
"redo"
)){
return
this
[
_7
]();
}
else
{
if
(
this
.
customUndo
){
this
.
endEditing
();
this
.
_beginEditing
();
}
var
r
;
try
{
r
=
this
.
inherited
(
"execCommand"
,
arguments
);
if
(
dojo
.
isWebKit
&&
_7
==
"paste"
&&!
r
){
throw
{
code
:
1011
};
}
}
catch
(
e
){
if
(
e
.
code
==
1011
&&
/copy|cut|paste/
.
test
(
_7
)){
var
_8
=
dojo
.
string
.
substitute
,
_9
=
{
cut
:
"X"
,
copy
:
"C"
,
paste
:
"V"
};
alert
(
_8
(
this
.
commands
.
systemShortcut
,[
this
.
commands
[
_7
],
_8
(
this
.
commands
[
dojo
.
isMac
?
"appleKey"
:
"ctrlKey"
],[
_9
[
_7
]])]));
}
r
=
false
;
}
if
(
this
.
customUndo
){
this
.
_endEditing
();
}
return
r
;
}
},
queryCommandEnabled
:
function
(
_a
){
if
(
this
.
customUndo
&&
(
_a
==
"undo"
||
_a
==
"redo"
)){
return
_a
==
"undo"
?
(
this
.
_steps
.
length
>
1
)
:
(
this
.
_undoedSteps
.
length
>
0
);
}
else
{
return
this
.
inherited
(
"queryCommandEnabled"
,
arguments
);
}
},
_moveToBookmark
:
function
(
b
){
var
_b
=
b
.
mark
;
var
_c
=
b
.
mark
;
var
_d
=
b
.
isCollapsed
;
if
(
dojo
.
isIE
){
if
(
dojo
.
isArray
(
_c
)){
_b
=
[];
dojo
.
forEach
(
_c
,
function
(
n
){
_b
.
push
(
dijit
.
range
.
getNode
(
n
,
this
.
editNode
));
},
this
);
}
}
else
{
var
r
=
dijit
.
range
.
create
(
this
.
window
);
r
.
setStart
(
dijit
.
range
.
getNode
(
b
.
startContainer
,
this
.
editNode
),
b
.
startOffset
);
r
.
setEnd
(
dijit
.
range
.
getNode
(
b
.
endContainer
,
this
.
editNode
),
b
.
endOffset
);
_b
=
r
;
}
dojo
.
withGlobal
(
this
.
window
,
"moveToBookmark"
,
dijit
,[{
mark
:
_b
,
isCollapsed
:
_d
}]);
},
_changeToStep
:
function
(
_e
,
to
){
this
.
setValue
(
to
.
text
);
var
b
=
to
.
bookmark
;
if
(
!
b
){
return
;
}
this
.
_moveToBookmark
(
b
);
},
undo
:
function
(){
this
.
endEditing
(
true
);
var
s
=
this
.
_steps
.
pop
();
if
(
this
.
_steps
.
length
>
0
){
this
.
focus
();
this
.
_changeToStep
(
s
,
this
.
_steps
[
this
.
_steps
.
length
-
1
]);
this
.
_undoedSteps
.
push
(
s
);
this
.
onDisplayChanged
();
return
true
;
}
return
false
;
},
redo
:
function
(){
this
.
endEditing
(
true
);
var
s
=
this
.
_undoedSteps
.
pop
();
if
(
s
&&
this
.
_steps
.
length
>
0
){
this
.
focus
();
this
.
_changeToStep
(
this
.
_steps
[
this
.
_steps
.
length
-
1
],
s
);
this
.
_steps
.
push
(
s
);
this
.
onDisplayChanged
();
return
true
;
}
return
false
;
},
endEditing
:
function
(
_f
){
if
(
this
.
_editTimer
){
clearTimeout
(
this
.
_editTimer
);
}
if
(
this
.
_inEditing
){
this
.
_endEditing
(
_f
);
this
.
_inEditing
=
false
;
}
},
_getBookmark
:
function
(){
var
b
=
dojo
.
withGlobal
(
this
.
window
,
dijit
.
getBookmark
);
var
tmp
=
[];
if
(
b
.
mark
){
var
_10
=
b
.
mark
;
if
(
dojo
.
isIE
){
if
(
dojo
.
isArray
(
_10
)){
dojo
.
forEach
(
_10
,
function
(
n
){
tmp
.
push
(
dijit
.
range
.
getIndex
(
n
,
this
.
editNode
).
o
);
},
this
);
b
.
mark
=
tmp
;
}
}
else
{
tmp
=
dijit
.
range
.
getIndex
(
_10
.
startContainer
,
this
.
editNode
).
o
;
b
.
mark
=
{
startContainer
:
tmp
,
startOffset
:
_10
.
startOffset
,
endContainer
:
_10
.
endContainer
===
_10
.
startContainer
?
tmp
:
dijit
.
range
.
getIndex
(
_10
.
endContainer
,
this
.
editNode
).
o
,
endOffset
:
_10
.
endOffset
};
}
}
return
b
;
},
_beginEditing
:
function
(
cmd
){
if
(
this
.
_steps
.
length
===
0
){
this
.
_steps
.
push
({
"text"
:
this
.
savedContent
,
"bookmark"
:
this
.
_getBookmark
()});
}
},
_endEditing
:
function
(
_11
){
var
v
=
this
.
getValue
(
true
);
this
.
_undoedSteps
=
[];
this
.
_steps
.
push
({
text
:
v
,
bookmark
:
this
.
_getBookmark
()});
},
onKeyDown
:
function
(
e
){
if
(
!
dojo
.
isIE
&&!
this
.
iframe
&&
e
.
keyCode
==
dojo
.
keys
.
TAB
&&!
this
.
tabIndent
){
this
.
_saveSelection
();
}
if
(
!
this
.
customUndo
){
this
.
inherited
(
arguments
);
return
;
}
var
k
=
e
.
keyCode
,
ks
=
dojo
.
keys
;
if
(
e
.
ctrlKey
&&!
e
.
altKey
){
if
(
k
==
90
||
k
==
122
){
dojo
.
stopEvent
(
e
);
this
.
undo
();
return
;
}
else
{
if
(
k
==
89
||
k
==
121
){
dojo
.
stopEvent
(
e
);
this
.
redo
();
return
;
}
}
}
this
.
inherited
(
arguments
);
switch
(
k
){
case
ks
.
ENTER
:
case
ks
.
BACKSPACE
:
case
ks
.
DELETE
:
this
.
beginEditing
();
break
;
case
88
:
case
86
:
if
(
e
.
ctrlKey
&&!
e
.
altKey
&&!
e
.
metaKey
){
this
.
endEditing
();
if
(
e
.
keyCode
==
88
){
this
.
beginEditing
(
"cut"
);
setTimeout
(
dojo
.
hitch
(
this
,
this
.
endEditing
),
1
);
}
else
{
this
.
beginEditing
(
"paste"
);
setTimeout
(
dojo
.
hitch
(
this
,
this
.
endEditing
),
1
);
}
break
;
}
default
:
if
(
!
e
.
ctrlKey
&&!
e
.
altKey
&&!
e
.
metaKey
&&
(
e
.
keyCode
<
dojo
.
keys
.
F1
||
e
.
keyCode
>
dojo
.
keys
.
F15
)){
this
.
beginEditing
();
break
;
}
case
ks
.
ALT
:
this
.
endEditing
();
break
;
case
ks
.
UP_ARROW
:
case
ks
.
DOWN_ARROW
:
case
ks
.
LEFT_ARROW
:
case
ks
.
RIGHT_ARROW
:
case
ks
.
HOME
:
case
ks
.
END
:
case
ks
.
PAGE_UP
:
case
ks
.
PAGE_DOWN
:
this
.
endEditing
(
true
);
break
;
case
ks
.
CTRL
:
case
ks
.
SHIFT
:
case
ks
.
TAB
:
break
;
}
},
_onBlur
:
function
(){
this
.
inherited
(
"_onBlur"
,
arguments
);
this
.
endEditing
(
true
);
},
_saveSelection
:
function
(){
this
.
_savedSelection
=
this
.
_getBookmark
();
},
_restoreSelection
:
function
(){
if
(
this
.
_savedSelection
){
if
(
dojo
.
withGlobal
(
this
.
window
,
"isCollapsed"
,
dijit
)){
this
.
_moveToBookmark
(
this
.
_savedSelection
);
}
delete
this
.
_savedSelection
;
}
},
onClick
:
function
(){
this
.
endEditing
(
true
);
this
.
inherited
(
arguments
);
}});
dojo
.
subscribe
(
dijit
.
_scopeName
+
".Editor.getPlugin"
,
null
,
function
(
o
){
if
(
o
.
plugin
){
return
;
}
var
_12
=
o
.
args
,
p
;
var
_13
=
dijit
.
_editor
.
_Plugin
;
var
_14
=
_12
.
name
;
switch
(
_14
){
case
"undo"
:
case
"redo"
:
case
"cut"
:
case
"copy"
:
case
"paste"
:
case
"insertOrderedList"
:
case
"insertUnorderedList"
:
case
"indent"
:
case
"outdent"
:
case
"justifyCenter"
:
case
"justifyFull"
:
case
"justifyLeft"
:
case
"justifyRight"
:
case
"delete"
:
case
"selectAll"
:
case
"removeFormat"
:
case
"unlink"
:
case
"insertHorizontalRule"
:
p
=
new
_13
({
command
:
_14
});
break
;
case
"bold"
:
case
"italic"
:
case
"underline"
:
case
"strikethrough"
:
case
"subscript"
:
case
"superscript"
:
p
=
new
_13
({
buttonClass
:
dijit
.
form
.
ToggleButton
,
command
:
_14
});
break
;
case
"|"
:
p
=
new
_13
({
button
:
new
dijit
.
ToolbarSeparator
()});
}
o
.
plugin
=
p
;
});
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 22, 20:24 (1 d, 5 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23305
Default Alt Text
Editor.js (8 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment