|
|
1 |
|
(function(
){var JSON
Request=ti
nymce.util
.JSONReque
st,each=ti
nymce.each
,DOM=tinym
ce.DOM;tin
ymce.creat
e('tinymce
.plugins.S
pellchecke
rPlugin',{
getInfo:fu
nction(){r
eturn{long
name:'Spel
lchecker',
author:'Mo
xiecode Sy
stems AB',
authorurl:
'http://ti
nymce.moxi
ecode.com'
,infourl:'
http://wik
i.moxiecod
e.com/inde
x.php/Tiny
MCE:Plugin
s/spellche
cker',vers
ion:tinymc
e.majorVer
sion+"."+t
inymce.min
orVersion}
;},init:fu
nction(ed,
url){var t
=this,cm;t
.url=url;t
.editor=ed
;ed.addCom
mand('mceS
pellCheck'
,function(
){if(!t.ac
tive){ed.s
etProgress
State(1);t
._sendRPC(
'checkWord
s',[t.sele
ctedLang,t
._getWords
()],functi
on(r){if(r
.length>0)
{t.active=
1;t._markW
ords(r);ed
.setProgre
ssState(0)
;ed.nodeCh
anged();}e
lse{ed.set
ProgressSt
ate(0);ed.
windowMana
ger.alert(
'spellchec
ker.no_mpe
ll');}});}
else t._do
ne();});ed
.onInit.ad
d(function
(){ed.dom.
loadCSS(ur
l+'/css/co
ntent.css'
);});ed.on
Click.add(
t._showMen
u,t);ed.on
ContextMen
u.add(t._s
howMenu,t)
;ed.onBefo
reGetConte
nt.add(fun
ction(){if
(t.active)
t._removeW
ords();});
ed.onNodeC
hange.add(
function(e
d,cm){cm.s
etActive('
spellcheck
er',t.acti
ve);});ed.
onSetConte
nt.add(fun
ction(){t.
_done();})
;ed.onBefo
reGetConte
nt.add(fun
ction(){t.
_done();})
;ed.onBefo
reExecComm
and.add(fu
nction(ed,
cmd){if(cm
d=='mceFul
lScreen')t
._done();}
);t.langua
ges={};eac
h(ed.getPa
ram('spell
checker_la
nguages','
+English=e
n,Danish=d
a,Dutch=nl
,Finnish=f
i,French=f
r,German=d
e,Italian=
it,Polish=
pl,Portugu
ese=pt,Spa
nish=es,Sw
edish=sv',
'hash'),fu
nction(v,k
){if(k.ind
exOf('+')=
==0){k=k.s
ubstring(1
);t.select
edLang=v;}
t.language
s[k]=v;});
},createCo
ntrol:func
tion(n,cm)
{var t=thi
s,c,ed=t.e
ditor;if(n
=='spellch
ecker'){c=
cm.createS
plitButton
(n,{title:
'spellchec
ker.desc',
cmd:'mceSp
ellCheck',
scope:t});
c.onRender
Menu.add(f
unction(c,
m){m.add({
title:'spe
llchecker.
langs','cl
ass':'mceM
enuItemTit
le'}).setD
isabled(1)
;each(t.la
nguages,fu
nction(v,k
){var o={i
con:1},mi;
o.onclick=
function()
{mi.setSel
ected(1);t
.selectedI
tem.setSel
ected(0);t
.selectedI
tem=mi;t.s
electedLan
g=v;};o.ti
tle=k;mi=m
.add(o);mi
.setSelect
ed(v==t.se
lectedLang
);if(v==t.
selectedLa
ng)t.selec
tedItem=mi
;})});retu
rn c;}},_w
alk:functi
on(n,f){va
r d=this.e
ditor.getD
oc(),w;if(
d.createTr
eeWalker){
w=d.create
TreeWalker
(n,NodeFil
ter.SHOW_T
EXT,null,f
alse);whil
e((n=w.nex
tNode())!=
null)f.cal
l(this,n);
}else tiny
mce.walk(n
,f,'childN
odes');},_
getSeparat
ors:functi
on(){var r
e='',i,str
=this.edit
or.getPara
m('spellch
ecker_word
_separator
_chars','\
\s!"#$%&()
*+,-./:;<=
>?@[\]^_{|
}пїЅпїЅпїЅ
пїЅпїЅпїЅп
їЅпїЅпїЅпї
ЅпїЅпїЅпїЅ
пїЅпїЅпїЅ\
u201d\u201
c');for(i=
0;i<str.le
ngth;i++)r
e+='\\'+st
r.charAt(i
);return r
e;},_getWo
rds:functi
on(){var e
d=this.edi
tor,wl=[],
tx='',lo={
};this._wa
lk(ed.getB
ody(),func
tion(n){if
(n.nodeTyp
e==3)tx+=n
.nodeValue
+' ';});tx
=tx.replac
e(new RegE
xp('([0-9]
|['+this._
getSeparat
ors()+'])'
,'g'),' ')
;tx=tinymc
e.trim(tx.
replace(/(
\s+)/g,' '
));each(tx
.split(' '
),function
(v){if(!lo
[v]){wl.pu
sh(v);lo[v
]=1;}});re
turn wl;},
_removeWor
ds:functio
n(w){var e
d=this.edi
tor,dom=ed
.dom,se=ed
.selection
,b=se.getB
ookmark();
each(dom.s
elect('spa
n').revers
e(),functi
on(n){if(n
&&(dom.has
Class(n,'m
ceItemHidd
enSpellWor
d')||dom.h
asClass(n,
'mceItemHi
dden'))){i
f(!w||dom.
decode(n.i
nnerHTML)=
=w)dom.rem
ove(n,1);}
});se.move
ToBookmark
(b);},_mar
kWords:fun
ction(wl){
var r1,r2,
r3,r4,r5,w
='',ed=thi
s.editor,r
e=this._ge
tSeparator
s(),dom=ed
.dom,nl=[]
;var se=ed
.selection
,b=se.getB
ookmark();
each(wl,fu
nction(v){
w+=(w?'|':
'')+v;});r
1=new RegE
xp('(['+re
+'])('+w+'
)(['+re+']
)','g');r2
=new RegEx
p('^('+w+'
)','g');r3
=new RegEx
p('('+w+')
(['+re+']?
)$','g');r
4=new RegE
xp('^('+w+
')(['+re+'
]?)$','g')
;r5=new Re
gExp('('+w
+')(['+re+
'])','g');
this._walk
(this.edit
or.getBody
(),functio
n(n){if(n.
nodeType==
3){nl.push
(n);}});ea
ch(nl,func
tion(n){va
r v;if(n.n
odeType==3
){v=n.node
Value;if(r
1.test(v)|
|r2.test(v
)||r3.test
(v)||r4.te
st(v)){v=d
om.encode(
v);v=v.rep
lace(r5,'<
span class
="mceItemH
iddenSpell
Word">$1</
span>$2');
v=v.replac
e(r3,'<spa
n class="m
ceItemHidd
enSpellWor
d">$1</spa
n>$2');dom
.replace(d
om.create(
'span',{'c
lass':'mce
ItemHidden
'},v),n);}
}});se.mov
eToBookmar
k(b);},_sh
owMenu:fun
ction(ed,e
){var t=th
is,ed=t.ed
itor,m=t._
menu,p1,do
m=ed.dom,v
p=dom.getV
iewPort(ed
.getWin())
;if(!m){p1
=DOM.getPo
s(ed.getCo
ntentAreaC
ontainer()
);m=ed.con
trolManage
r.createDr
opMenu('sp
ellchecker
menu',{off
set_x:p1.x
,offset_y:
p1.y,'clas
s':'noIcon
s'});t._me
nu=m;}if(d
om.hasClas
s(e.target
,'mceItemH
iddenSpell
Word')){m.
removeAll(
);m.add({t
itle:'spel
lchecker.w
ait','clas
s':'mceMen
uItemTitle
'}).setDis
abled(1);t
._sendRPC(
'getSugges
tions',[t.
selectedLa
ng,dom.dec
ode(e.targ
et.innerHT
ML)],funct
ion(r){m.r
emoveAll()
;if(r.leng
th>0){m.ad
d({title:'
spellcheck
er.sug','c
lass':'mce
MenuItemTi
tle'}).set
Disabled(1
);each(r,f
unction(v)
{m.add({ti
tle:v,oncl
ick:functi
on(){dom.r
eplace(ed.
getDoc().c
reateTextN
ode(v),e.t
arget);t._
checkDone(
);}});});m
.addSepara
tor();}els
e m.add({t
itle:'spel
lchecker.n
o_sug','cl
ass':'mceM
enuItemTit
le'}).setD
isabled(1)
;m.add({ti
tle:'spell
checker.ig
nore_word'
,onclick:f
unction(){
dom.remove
(e.target,
1);t._chec
kDone();}}
);m.add({t
itle:'spel
lchecker.i
gnore_word
s',onclick
:function(
){t._remov
eWords(dom
.decode(e.
target.inn
erHTML));t
._checkDon
e();}});m.
update();}
);ed.selec
tion.selec
t(e.target
);p1=dom.g
etPos(e.ta
rget);m.sh
owMenu(p1.
x,p1.y+e.t
arget.offs
etHeight-v
p.y);retur
n tinymce.
dom.Event.
cancel(e);
}else m.hi
deMenu();}
,_checkDon
e:function
(){var t=t
his,ed=t.e
ditor,dom=
ed.dom,o;e
ach(dom.se
lect('span
'),functio
n(n){if(n&
&dom.hasCl
ass(n,'mce
ItemHidden
SpellWord'
)){o=true;
return fal
se;}});if(
!o)t._done
();},_done
:function(
){var t=th
is,la=t.ac
tive;if(t.
active){t.
active=0;t
._removeWo
rds();if(t
._menu)t._
menu.hideM
enu();if(l
a)t.editor
.nodeChang
ed();}},_s
endRPC:fun
ction(m,p,
cb){var t=
this,url=t
.editor.ge
tParam("sp
ellchecker
_rpc_url",
"{backend}
");if(url=
='{backend
}'){t.edit
or.setProg
ressState(
0);alert('
Please spe
cify: spel
lchecker_r
pc_url');r
eturn;}JSO
NRequest.s
endRPC({ur
l:url,meth
od:m,param
s:p,succes
s:cb,error
:function(
e,x){t.edi
tor.setPro
gressState
(0);t.edit
or.windowM
anager.ale
rt(e.errst
r||('Error
response:
'+x.respo
nseText));
}});}});ti
nymce.Plug
inManager.
add('spell
checker',t
inymce.plu
gins.Spell
checkerPlu
gin);})();
|