(typo's) |
(→Javascript API) |
||
Line 16: | Line 16: | ||
</pre> | </pre> | ||
− | With this output: | + | With this output (I aligned the code a bit for readibility): |
<pre> | <pre> | ||
Line 41: | Line 41: | ||
var s=l(this,n); | var s=l(this,n); | ||
if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".'; | if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".'; | ||
− | if(!q)this.on('mode',function(){ | + | if(!q)this.on('mode', |
− | + | function(){ | |
− | + | this.resetDirty(); | |
− | } | + | this.removeListener('mode',arguments.callee); |
− | ); | + | } |
+ | ); | ||
s.load(p,typeof o!='string'?this.getData():o); | s.load(p,typeof o!='string'?this.getData():o); | ||
} | } | ||
Line 51: | Line 52: | ||
addMode=function(n,o){ | addMode=function(n,o){ | ||
o.name=n; | o.name=n; | ||
− | (this._.modes||(this._.modes={ | + | (this._.modes||(this._.modes={}))[n]=o; |
− | |||
− | ))[n]=o; | ||
} | } | ||
− | mode= | + | mode=openDialog=function(l){ |
− | openDialog=function(l){ | ||
var m=a.dialog._.dialogDefinitions[l]; | var m=a.dialog._.dialogDefinitions[l]; | ||
if(typeof m=='function'){ | if(typeof m=='function'){ | ||
− | + | var n=this._.storedDialogs||(this._.storedDialogs={}), o=n[l]||(n[l]=new a.dialog(this,l)); | |
+ | o.show(); | ||
+ | return o; | ||
} | } | ||
− | + | var p=a.document.getBody(),q=p.$.style.cursor,r=this; | |
− | |||
− | |||
− | |||
− | var p=a.document.getBody(),q=p.$.style.cursor,r=this; | ||
p.setStyle('cursor','wait'); | p.setStyle('cursor','wait'); | ||
− | a.scriptLoader.load(a.getUrl(m),function(){ | + | a.scriptLoader.load(a.getUrl(m), |
− | + | function(){ | |
− | + | r.openDialog(l); | |
− | } | + | p.setStyle('cursor',q); |
− | ); | + | } |
+ | ); | ||
return null; | return null; | ||
} | } | ||
Line 84: | Line 81: | ||
var p=new a.htmlParser.basicWriter(); | var p=new a.htmlParser.basicWriter(); | ||
l.writeHtml(p); | l.writeHtml(p); | ||
− | var q=p.getHtml(),r={ | + | var q=p.getHtml(),r={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}; |
− | |||
− | ; | ||
if(n)r._cke_real_element_type=n; | if(n)r._cke_real_element_type=n; | ||
if(o)r._cke_resizable=o; | if(o)r._cke_resizable=o; | ||
Line 93: | Line 88: | ||
createFakeElement=function(l,m,n,o){ | createFakeElement=function(l,m,n,o){ | ||
− | var p={ | + | var p={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}; |
− | |||
− | ; | ||
− | if(n)p._cke_real_element_type=n; | + | if(n)p._cke_real_element_type=n; |
if(o)p._cke_resizable=o; | if(o)p._cke_resizable=o; | ||
− | return this.document.createElement('img',{ | + | return this.document.createElement('img',{attributes:p}); |
− | |||
− | ); | ||
} | } | ||
Line 112: | Line 103: | ||
var s=u.document?u.document.getSelection():null; | var s=u.document?u.document.getSelection():null; | ||
if(s&&c){ | if(s&&c){ | ||
− | + | var t=s.getNative().createRange(); | |
− | + | if(!t)return null; | |
− | + | else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null; | |
− | + | else return t.parentElement().ownerDocument==u.document.$?s:null; | |
− | } | + | } |
− | return s; | + | return s; |
} | } | ||
Line 135: | Line 126: | ||
var n=this._.styleStateChangeCallbacks; | var n=this._.styleStateChangeCallbacks; | ||
if(!n){ | if(!n){ | ||
− | + | n=this._.styleStateChangeCallbacks=[]; | |
− | + | this.on('selectionChange', | |
− | + | function(o){ | |
− | + | for(var p=0;p p++){ | |
− | + | var q=n[p],r=q.style.checkActive(o.data.path)?1:2; | |
− | + | if(q.state!==r){ | |
− | + | q.fn.call(this,r); | |
− | + | q.state!==r; | |
− | } | + | } |
− | } | + | } |
− | } | + | } |
− | ); | + | ); |
− | } | + | } |
− | n.push({ | + | n.push({style:l,fn:m}); |
− | |||
− | ); | ||
} | } | ||
Line 184: | Line 173: | ||
setData=function(l){ | setData=function(l){ | ||
− | var m={ | + | var m={dataValue:l}; |
− | |||
− | ; | ||
this.fire('setData',m); | this.fire('setData',m); | ||
this._.data=m.dataValue; | this._.data=m.dataValue; | ||
Line 199: | Line 186: | ||
var l=this.fire('getSnapshot'); | var l=this.fire('getSnapshot'); | ||
if(typeof l!='string'){ | if(typeof l!='string'){ | ||
− | + | var m=this.element; | |
− | + | if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml(); | |
− | } | + | } |
− | return l; | + | return l; |
} | } | ||
Line 210: | Line 197: | ||
var l=n._.data; | var l=n._.data; | ||
if(typeof l!='string'){ | if(typeof l!='string'){ | ||
− | + | var m=n.element; | |
− | + | if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml(); | |
− | + | else l=''; | |
− | } | + | } |
− | l={ | + | l={dataValue:l}; |
− | |||
− | ; | ||
n.fire('getData',l); | n.fire('getData',l); | ||
return l.dataValue; | return l.dataValue; | ||
Line 223: | Line 208: | ||
getCommand=function(l){ | getCommand=function(l){ | ||
return this._.commands[l]; | return this._.commands[l]; | ||
− | |||
} | } | ||
execCommand=function(l,m){ | execCommand=function(l,m){ | ||
− | var n=this.getCommand(l),o={ | + | var n=this.getCommand(l),o={name:l,commandData:m,command:n}; |
− | |||
− | ; | ||
if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){ | if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){ | ||
− | + | o.returnValue=n.exec(o.commandData); | |
− | + | if(this.fire('afterCommandExec',o)!==true)return o.returnValue; | |
− | } | + | } |
− | return false; | + | return false; |
} | } | ||
Line 279: | Line 261: | ||
delete z._.element; | delete z._.element; | ||
delete z._.instanceConfig; | delete z._.instanceConfig; | ||
− | z._.commands={ | + | z._.commands={}; |
− | |||
− | ; | ||
z._.styles=[]; | z._.styles=[]; | ||
z.element=x; | z.element=x; | ||
Line 301: | Line 281: | ||
var h=this._.events[c]||(this._.events[c]=new b(c)); | var h=this._.events[c]||(this._.events[c]=new b(c)); | ||
if(h.getListenerIndex(d)<0){ | if(h.getListenerIndex(d)<0){ | ||
− | + | var i=h.listeners; | |
− | + | if(!e)e=this; | |
− | + | if(isNaN(g))g=10; | |
− | + | var j=this,k=function(m,n,o,p){ | |
− | + | var q={name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p, | |
− | + | removeListener:function(){ | |
− | + | j.removeListener(c,d); | |
− | } | + | } |
− | } | + | }; |
− | ; | ||
d.call(e,q); | d.call(e,q); | ||
return q.data; | return q.data; | ||
− | } | + | }; |
− | + | ||
− | + | k.fn=d; | |
− | + | k.priority=g; | |
− | + | for(var l=i.length-1;l>=0;l--) | |
− | + | if(i[l].priority<=g){ | |
− | + | i.splice(l+1,0,k); | |
− | + | return; | |
− | + | } | |
− | } | ||
i.unshift(k); | i.unshift(k); | ||
+ | |||
} | } | ||
} | } |
Revision as of 09:36, 16 April 2009
Javascript API
I couldn't find documentation on how to talk to the javascript API. I figured that through CKEDITOR.instances.id_of_textarea.setData(string); I could update the contents or get it with getData();
First thing I learned I can also access an instance of an editor through: CKEDITOR.instances["id_of_textarea"].setData(string); //This is more usefull in generic code.
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.
var objEditor=CKEDITOR.instances["id_of_textarea"]; var str=""; for (var item in objEditor) { str+="<strong>"+item+"</strong>="+objEditor[item].toString().str_replace("\n", "<br>").str_replace(";", ";<br> ").str_replace("{", "{<br> ").str_replace("}", "}<br>").str_replace(";<br> }", ";<br>}")+"<br>"; } objEditor.setData(str);
With this output (I aligned the code a bit for readibility):
getThemeSpace=function(l){ var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name)); return n; } focus=function(){ var n=l(this); if(n)n.focus(); } setMode=function(n){ var o,p=this.getThemeSpace('contents'),q=this.checkDirty(); if(this.mode){ if(n==this.mode)return; var r=l(this); o=r.getData(); r.unload(p); this.mode=''; } p.setHtml(''); var s=l(this,n); if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".'; if(!q)this.on('mode', function(){ this.resetDirty(); this.removeListener('mode',arguments.callee); } ); s.load(p,typeof o!='string'?this.getData():o); } addMode=function(n,o){ o.name=n; (this._.modes||(this._.modes={}))[n]=o; } mode=openDialog=function(l){ var m=a.dialog._.dialogDefinitions[l]; if(typeof m=='function'){ var n=this._.storedDialogs||(this._.storedDialogs={}), o=n[l]||(n[l]=new a.dialog(this,l)); o.show(); return o; } var p=a.document.getBody(),q=p.$.style.cursor,r=this; p.setStyle('cursor','wait'); a.scriptLoader.load(a.getUrl(m), function(){ r.openDialog(l); p.setStyle('cursor',q); } ); return null; } restoreRealElement=function(l){ var m=decodeURIComponent(l.getAttribute('_cke_realelement')); return g.createFromHtml(m,this.document); } createFakeParserElement=function(l,m,n,o){ var p=new a.htmlParser.basicWriter(); l.writeHtml(p); var q=p.getHtml(),r={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}; if(n)r._cke_real_element_type=n; if(o)r._cke_resizable=o; return new a.htmlParser.element('img',r); } createFakeElement=function(l,m,n,o){ var p={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}; if(n)p._cke_real_element_type=n; if(o)p._cke_resizable=o; return this.document.createElement('img',{attributes:p}); } forceNextSelectionCheck=function(){ delete this._.selectionPreviousPath; } getSelection=function(){ var u=this; var s=u.document?u.document.getSelection():null; if(s&&c){ var t=s.getNative().createRange(); if(!t)return null; else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null; else return t.parentElement().ownerDocument==u.document.$?s:null; } return s; } getMenuItem=function(l){ return this._.menuItems[l]; } addMenuItems=function(l){ for(var m in l)this.addMenuItem(m,l[m]); } addMenuItem=function(l,m){ if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m); } attachStyleStateChange=function(l,m){ var n=this._.styleStateChangeCallbacks; if(!n){ n=this._.styleStateChangeCallbacks=[]; this.on('selectionChange', function(o){ for(var p=0;p p++){ var q=n[p],r=q.style.checkActive(o.data.path)?1:2; if(q.state!==r){ q.fn.call(this,r); q.state!==r; } } } ); } n.push({style:l,fn:m}); } insertText=function(l){ l=e.htmlEncode(l); l=l.replace(/(?:\r\n)|\n|\r/g,' '); this.insertHtml(l); } updateElement=function(){ var m=this; var l=m.element; if(l&&m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData()); else l.setHtml(m.getData()); } resetDirty=function(){ if(this.mayBeDirty)this._.previousValue=this.getSnapshot(); } checkDirty=function(){ return this.mayBeDirty&&this._.previousValue!==this.getSnapshot(); } insertElement=function(l){ this.fire('insertElement',l); } insertHtml=function(l){ this.fire('insertHtml',l); } setData=function(l){ var m={dataValue:l}; this.fire('setData',m); this._.data=m.dataValue; this.fire('afterSetData',m); } loadSnapshot=function(l){ this.fire('loadSnapshot',l); } getSnapshot=function(){ var l=this.fire('getSnapshot'); if(typeof l!='string'){ var m=this.element; if(m&&this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml(); } return l; } getData=function(){ var n=this; n.fire('beforeGetData'); var l=n._.data; if(typeof l!='string'){ var m=n.element; if(m&&n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml(); else l=''; } l={dataValue:l}; n.fire('getData',l); return l.dataValue; } getCommand=function(l){ return this._.commands[l]; } execCommand=function(l,m){ var n=this.getCommand(l),o={name:l,commandData:m,command:n}; if(n&&n.state!=0)if(this.fire('beforeCommandExec',o)!==true){ o.returnValue=n.exec(o.commandData); if(this.fire('afterCommandExec',o)!==true)return o.returnValue; } return false; } destroy=function(l){ var m=this; if(!l)m.updateElement(); m.theme.destroy(m); a.remove(m); } addCss=function(l){ this._.styles.push(l); } addCommand=function(l,m){ return this._.commands[l]=new a.command(this,m); } hasListeners=function(){ var f=this; if(!(f._&&f._.events))a.event.call(f); (f[e]=a.event.prototype[e]).apply(f,arguments); } removeListener=function(){ var f=this; if(!(f._&&f._.events))a.event.call(f); (f[e]=a.event.prototype[e]).apply(f,arguments); } fireOnce=function(b,c){ return a.event.prototype.fireOnce.call(this,b,c,this); } fire=function(b,c){ return a.event.prototype.fire.call(this,b,c,this); } _=[object Object] elementMode=1 _init=function(){ var z=this; var x=g.get(z._.element),y=z._.instanceConfig; delete z._.element; delete z._.instanceConfig; z._.commands={}; z._.styles=[]; z.element=x; z.name=x&&z.elementMode==1&&(x.getId()||x.getNameAtt())||m(); z.config=e.prototypedCopy(i); z.ui=new k(z); z.focusManager=new a.focusManager(z); a.fire('instanceCreated',null,z); z.on('mode',w); p(z,y); } element=[object Object] name=input_memo config=[object Object] ui=[object Object] focusManager=[object Object] on=function(c,d,e,f,g){ var h=this._.events[c]||(this._.events[c]=new b(c)); if(h.getListenerIndex(d)<0){ var i=h.listeners; if(!e)e=this; if(isNaN(g))g=10; var j=this,k=function(m,n,o,p){ var q={name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p, removeListener:function(){ j.removeListener(c,d); } }; d.call(e,q); return q.data; }; k.fn=d; k.priority=g; for(var l=i.length-1;l>=0;l--) if(i[l].priority<=g){ i.splice(l+1,0,k); return; } i.unshift(k); } }
Anybody who wishes to talk to an instance of the CKeditor through the javascript API, now has a starting point and is able to see which functions are available for an instance of an CKeditor.