<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs-old.ckeditor.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cjw</id>
		<title>CKSource Docs - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://docs-old.ckeditor.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cjw"/>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/Special:Contributions/Cjw"/>
		<updated>2026-04-05T12:13:27Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2517</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2517"/>
				<updated>2009-04-16T09:01:37Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: used a javascript beautifier for the code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor = CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;];&lt;br /&gt;
var str = &amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str += &amp;quot;&amp;lt;strong&amp;gt;&amp;quot; + item + &amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot; + objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output (I aligned the code a bit for readibility):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace = function(l) {&lt;br /&gt;
  var m = 'cke_' + l,&lt;br /&gt;
  n = this._[m] || (this._[m] = a.document.getById(m + '_' + this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus = function() {&lt;br /&gt;
  var n = l(this);&lt;br /&gt;
  if (n) n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode = function(n) {&lt;br /&gt;
  var o, p = this.getThemeSpace('contents'),&lt;br /&gt;
  q = this.checkDirty();&lt;br /&gt;
  if (this.mode) {&lt;br /&gt;
    if (n == this.mode) return;&lt;br /&gt;
    var r = l(this);&lt;br /&gt;
    o = r.getData();&lt;br /&gt;
    r.unload(p);&lt;br /&gt;
    this.mode = '';&lt;br /&gt;
  }&lt;br /&gt;
  p.setHtml('');&lt;br /&gt;
  var s = l(this, n);&lt;br /&gt;
  if (!s) throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;' + n + '&amp;quot;.';&lt;br /&gt;
  if (!q) this.on('mode',&lt;br /&gt;
  function() {&lt;br /&gt;
    this.resetDirty();&lt;br /&gt;
    this.removeListener('mode', arguments.callee);&lt;br /&gt;
  });&lt;br /&gt;
  s.load(p, typeof o != 'string' ? this.getData() : o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode = function(n, o) {&lt;br /&gt;
  o.name = n;&lt;br /&gt;
  (this._.modes || (this._.modes = {}))[n] = o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode = openDialog = function(l) {&lt;br /&gt;
  var m = a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if (typeof m == 'function') {&lt;br /&gt;
    var n = this._.storedDialogs || (this._.storedDialogs = {}),&lt;br /&gt;
    o = n[l] || (n[l] = new a.dialog(this, l));&lt;br /&gt;
    o.show();&lt;br /&gt;
    return o;&lt;br /&gt;
  }&lt;br /&gt;
  var p = a.document.getBody(),&lt;br /&gt;
  q = p.$.style.cursor,&lt;br /&gt;
  r = this;&lt;br /&gt;
  p.setStyle('cursor', 'wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),&lt;br /&gt;
  function() {&lt;br /&gt;
    r.openDialog(l);&lt;br /&gt;
    p.setStyle('cursor', q);&lt;br /&gt;
  });&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement = function(l) {&lt;br /&gt;
  var m = decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m, this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement = function(l, m, n, o) {&lt;br /&gt;
  var p = new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q = p.getHtml(),&lt;br /&gt;
  r = {&lt;br /&gt;
    'class': m,&lt;br /&gt;
    src: a.getUrl('images/spacer.gif'),&lt;br /&gt;
    _cke_realelement: encodeURIComponent(q)&lt;br /&gt;
  };&lt;br /&gt;
  if (n) r._cke_real_element_type = n;&lt;br /&gt;
  if (o) r._cke_resizable = o;&lt;br /&gt;
  return new a.htmlParser.element('img', r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement = function(l, m, n, o) {&lt;br /&gt;
  var p = {&lt;br /&gt;
    'class': m,&lt;br /&gt;
    src: a.getUrl('images/spacer.gif'),&lt;br /&gt;
    _cke_realelement: encodeURIComponent(l.getOuterHtml())&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  if (n) p._cke_real_element_type = n;&lt;br /&gt;
  if (o) p._cke_resizable = o;&lt;br /&gt;
  return this.document.createElement('img', {&lt;br /&gt;
    attributes: p&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck = function() {&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection = function() {&lt;br /&gt;
  var u = this;&lt;br /&gt;
  var s = u.document ? u.document.getSelection() : null;&lt;br /&gt;
  if (s &amp;amp;&amp;amp; c) {&lt;br /&gt;
    var t = s.getNative().createRange();&lt;br /&gt;
    if (!t) return null;&lt;br /&gt;
    else if (t.item) return t.item(0).ownerDocument == u.document.$ ? s: null;&lt;br /&gt;
    else return t.parentElement().ownerDocument == u.document.$ ? s: null;&lt;br /&gt;
  }&lt;br /&gt;
  return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem = function(l) {&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems = function(l) {&lt;br /&gt;
  for (var m in l) this.addMenuItem(m, l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem = function(l, m) {&lt;br /&gt;
  if (this._.menuGroups[m.group]) this._.menuItems[l] = new a.menuItem(this, l, m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange = function(l, m) {&lt;br /&gt;
  var n = this._.styleStateChangeCallbacks;&lt;br /&gt;
  if (!n) {&lt;br /&gt;
    n = this._.styleStateChangeCallbacks = [];&lt;br /&gt;
    this.on('selectionChange',&lt;br /&gt;
    function(o) {&lt;br /&gt;
      for (var p = 0; p p++) {&lt;br /&gt;
        var q = n[p],&lt;br /&gt;
        r = q.style.checkActive(o.data.path) ? 1 : 2;&lt;br /&gt;
        if (q.state !== r) {&lt;br /&gt;
          q.fn.call(this, r);&lt;br /&gt;
          q.state !== r;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  n.push({&lt;br /&gt;
    style: l,&lt;br /&gt;
    fn: m&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText = function(l) {&lt;br /&gt;
  l = e.htmlEncode(l);&lt;br /&gt;
  l = l.replace(/(?:\r\n)|\n|\r/g, '&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement = function() {&lt;br /&gt;
  var m = this;&lt;br /&gt;
  var l = m.element;&lt;br /&gt;
  if (l &amp;amp;&amp;amp; m.elementMode == 1) if (l.is('textarea')) l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty = function() {&lt;br /&gt;
  if (this.mayBeDirty) this._.previousValue = this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty = function() {&lt;br /&gt;
  return this.mayBeDirty &amp;amp;&amp;amp; this._.previousValue !== this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement = function(l) {&lt;br /&gt;
  this.fire('insertElement', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml = function(l) {&lt;br /&gt;
  this.fire('insertHtml', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData = function(l) {&lt;br /&gt;
  var m = {&lt;br /&gt;
    dataValue: l&lt;br /&gt;
  };&lt;br /&gt;
  this.fire('setData', m);&lt;br /&gt;
  this._.data = m.dataValue;&lt;br /&gt;
  this.fire('afterSetData', m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot = function(l) {&lt;br /&gt;
  this.fire('loadSnapshot', l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot = function() {&lt;br /&gt;
  var l = this.fire('getSnapshot');&lt;br /&gt;
  if (typeof l != 'string') {&lt;br /&gt;
    var m = this.element;&lt;br /&gt;
    if (m &amp;amp;&amp;amp; this.elementMode == 1) l = m.is('textarea') ? m.getValue() : m.getHtml();&lt;br /&gt;
  }&lt;br /&gt;
  return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData = function() {&lt;br /&gt;
  var n = this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l = n._.data;&lt;br /&gt;
  if (typeof l != 'string') {&lt;br /&gt;
    var m = n.element;&lt;br /&gt;
    if (m &amp;amp;&amp;amp; n.elementMode == 1) l = m.is('textarea') ? m.getValue() : m.getHtml();&lt;br /&gt;
    else l = '';&lt;br /&gt;
  }&lt;br /&gt;
  l = {&lt;br /&gt;
    dataValue: l&lt;br /&gt;
  };&lt;br /&gt;
  n.fire('getData', l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand = function(l) {&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand = function(l, m) {&lt;br /&gt;
  var n = this.getCommand(l),&lt;br /&gt;
  o = {&lt;br /&gt;
    name: l,&lt;br /&gt;
    commandData: m,&lt;br /&gt;
    command: n&lt;br /&gt;
  };&lt;br /&gt;
  if (n &amp;amp;&amp;amp; n.state != 0) if (this.fire('beforeCommandExec', o) !== true) {&lt;br /&gt;
    o.returnValue = n.exec(o.commandData);&lt;br /&gt;
    if (this.fire('afterCommandExec', o) !== true) return o.returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy = function(l) {&lt;br /&gt;
  var m = this;&lt;br /&gt;
  if (!l) m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss = function(l) {&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand = function(l, m) {&lt;br /&gt;
  return this._.commands[l] = new a.command(this, m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners = function() {&lt;br /&gt;
  var f = this;&lt;br /&gt;
  if (! (f._ &amp;amp;&amp;amp; f._.events)) a.event.call(f);&lt;br /&gt;
  (f[e] = a.event.prototype[e]).apply(f, arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener = function() {&lt;br /&gt;
  var f = this;&lt;br /&gt;
  if (! (f._ &amp;amp;&amp;amp; f._.events)) a.event.call(f);&lt;br /&gt;
  (f[e] = a.event.prototype[e]).apply(f, arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce = function(b, c) {&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this, b, c, this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire = function(b, c) {&lt;br /&gt;
  return a.event.prototype.fire.call(this, b, c, this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_ = [object Object]&lt;br /&gt;
elementMode = 1&lt;br /&gt;
_init = function() {&lt;br /&gt;
  var z = this;&lt;br /&gt;
  var x = g.get(z._.element),&lt;br /&gt;
  y = z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands = {};&lt;br /&gt;
  z._.styles = [];&lt;br /&gt;
  z.element = x;&lt;br /&gt;
  z.name = x &amp;amp;&amp;amp; z.elementMode == 1 &amp;amp;&amp;amp; (x.getId() || x.getNameAtt()) || m();&lt;br /&gt;
  z.config = e.prototypedCopy(i);&lt;br /&gt;
  z.ui = new k(z);&lt;br /&gt;
  z.focusManager = new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated', null, z);&lt;br /&gt;
  z.on('mode', w);&lt;br /&gt;
  p(z, y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element = [object Object]&lt;br /&gt;
name = input_memo&lt;br /&gt;
config = [object Object]&lt;br /&gt;
ui = [object Object]&lt;br /&gt;
focusManager = [object Object]&lt;br /&gt;
on = function(c, d, e, f, g) {&lt;br /&gt;
  var h = this._.events[c] || (this._.events[c] = new b(c));&lt;br /&gt;
  if (h.getListenerIndex(d) &amp;lt; 0) {&lt;br /&gt;
    var i = h.listeners;&lt;br /&gt;
    if (!e) e = this;&lt;br /&gt;
    if (isNaN(g)) g = 10;&lt;br /&gt;
    var j = this,&lt;br /&gt;
    k = function(m, n, o, p) {&lt;br /&gt;
      var q = {&lt;br /&gt;
        name: c,&lt;br /&gt;
        sender: this,&lt;br /&gt;
        editor: m,&lt;br /&gt;
        data: n,&lt;br /&gt;
        listenerData: f,&lt;br /&gt;
        stop: o,&lt;br /&gt;
        cancel: p,&lt;br /&gt;
        removeListener: function() {&lt;br /&gt;
          j.removeListener(c, d);&lt;br /&gt;
        }&lt;br /&gt;
      };&lt;br /&gt;
      d.call(e, q);&lt;br /&gt;
      return q.data;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    k.fn = d;&lt;br /&gt;
    k.priority = g;&lt;br /&gt;
    for (var l = i.length - 1; l &amp;gt;= 0; l--)&lt;br /&gt;
    if (i[l].priority &amp;lt;= g) {&lt;br /&gt;
      i.splice(l + 1, 0, k);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    i.unshift(k);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If you find yourself able to use any of these functions, please create your account here on the wiki and document it. The developers of CKeditor are working crazily on coding CKEditor v3.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2516</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2516"/>
				<updated>2009-04-16T08:39:38Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: /* Javascript API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output (I aligned the code a bit for readibility):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',&lt;br /&gt;
    function(){&lt;br /&gt;
      this.resetDirty();&lt;br /&gt;
      this.removeListener('mode',arguments.callee);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={}))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
    var n=this._.storedDialogs||(this._.storedDialogs={}), o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
    o.show();&lt;br /&gt;
    return o;&lt;br /&gt;
  }&lt;br /&gt;
  var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),&lt;br /&gt;
    function(){&lt;br /&gt;
      r.openDialog(l);&lt;br /&gt;
      p.setStyle('cursor',q);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)};&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())};&lt;br /&gt;
   &lt;br /&gt;
  if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{attributes:p});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
    var t=s.getNative().createRange();&lt;br /&gt;
    if(!t)return null;&lt;br /&gt;
    else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
    else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
  }&lt;br /&gt;
  return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
    n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
    this.on('selectionChange',&lt;br /&gt;
      function(o){&lt;br /&gt;
        for(var p=0;p  p++){&lt;br /&gt;
          var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
          if(q.state!==r){&lt;br /&gt;
            q.fn.call(this,r);&lt;br /&gt;
            q.state!==r;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
  n.push({style:l,fn:m});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={dataValue:l};&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
    var m=this.element;&lt;br /&gt;
    if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  }&lt;br /&gt;
  return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
    var m=n.element;&lt;br /&gt;
    if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
    else l='';&lt;br /&gt;
  }&lt;br /&gt;
  l={dataValue:l};&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={name:l,commandData:m,command:n};&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
    o.returnValue=n.exec(o.commandData);&lt;br /&gt;
    if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={};&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
    var i=h.listeners;&lt;br /&gt;
    if(!e)e=this;&lt;br /&gt;
    if(isNaN(g))g=10;&lt;br /&gt;
    var j=this,k=function(m,n,o,p){&lt;br /&gt;
    var q={name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,&lt;br /&gt;
      removeListener:function(){&lt;br /&gt;
        j.removeListener(c,d);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
k.fn=d;&lt;br /&gt;
k.priority=g;&lt;br /&gt;
for(var l=i.length-1;l&amp;gt;=0;l--)&lt;br /&gt;
  if(i[l].priority&amp;lt;=g){&lt;br /&gt;
    i.splice(l+1,0,k);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
If you find yourself able to use any of these functions, please create your account here on the wiki and document it. The developers of CKeditor are working crazily on coding CKEditor v3.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2515</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2515"/>
				<updated>2009-04-16T08:36:53Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: /* Javascript API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output (I aligned the code a bit for readibility):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',&lt;br /&gt;
    function(){&lt;br /&gt;
      this.resetDirty();&lt;br /&gt;
      this.removeListener('mode',arguments.callee);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={}))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
    var n=this._.storedDialogs||(this._.storedDialogs={}), o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
    o.show();&lt;br /&gt;
    return o;&lt;br /&gt;
  }&lt;br /&gt;
  var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),&lt;br /&gt;
    function(){&lt;br /&gt;
      r.openDialog(l);&lt;br /&gt;
      p.setStyle('cursor',q);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)};&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())};&lt;br /&gt;
   &lt;br /&gt;
  if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{attributes:p});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
    var t=s.getNative().createRange();&lt;br /&gt;
    if(!t)return null;&lt;br /&gt;
    else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
    else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
  }&lt;br /&gt;
  return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
    n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
    this.on('selectionChange',&lt;br /&gt;
      function(o){&lt;br /&gt;
        for(var p=0;p  p++){&lt;br /&gt;
          var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
          if(q.state!==r){&lt;br /&gt;
            q.fn.call(this,r);&lt;br /&gt;
            q.state!==r;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    );&lt;br /&gt;
  }&lt;br /&gt;
  n.push({style:l,fn:m});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={dataValue:l};&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
    var m=this.element;&lt;br /&gt;
    if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  }&lt;br /&gt;
  return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
    var m=n.element;&lt;br /&gt;
    if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
    else l='';&lt;br /&gt;
  }&lt;br /&gt;
  l={dataValue:l};&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={name:l,commandData:m,command:n};&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
    o.returnValue=n.exec(o.commandData);&lt;br /&gt;
    if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={};&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
    var i=h.listeners;&lt;br /&gt;
    if(!e)e=this;&lt;br /&gt;
    if(isNaN(g))g=10;&lt;br /&gt;
    var j=this,k=function(m,n,o,p){&lt;br /&gt;
    var q={name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,&lt;br /&gt;
      removeListener:function(){&lt;br /&gt;
        j.removeListener(c,d);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
k.fn=d;&lt;br /&gt;
k.priority=g;&lt;br /&gt;
for(var l=i.length-1;l&amp;gt;=0;l--)&lt;br /&gt;
  if(i[l].priority&amp;lt;=g){&lt;br /&gt;
    i.splice(l+1,0,k);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2514</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2514"/>
				<updated>2009-04-16T08:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: typo's&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',function(){&lt;br /&gt;
  this.resetDirty();&lt;br /&gt;
  this.removeListener('mode',arguments.callee);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={&lt;br /&gt;
  }&lt;br /&gt;
))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=&lt;br /&gt;
openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
  var n=this._.storedDialogs||(this._.storedDialogs={&lt;br /&gt;
  }&lt;br /&gt;
),o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
  o.show();&lt;br /&gt;
  return o;&lt;br /&gt;
}&lt;br /&gt;
var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),function(){&lt;br /&gt;
  r.openDialog(l);&lt;br /&gt;
  p.setStyle('cursor',q);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}&lt;br /&gt;
;&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}&lt;br /&gt;
;&lt;br /&gt;
   &lt;br /&gt;
if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{&lt;br /&gt;
  attributes:p}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
  var t=s.getNative().createRange();&lt;br /&gt;
  if(!t)return null;&lt;br /&gt;
  else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
  else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
}&lt;br /&gt;
return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
  n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
  this.on('selectionChange',function(o){&lt;br /&gt;
  for(var p=0;&lt;br /&gt;
  p  p++){&lt;br /&gt;
  var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
  if(q.state!==r){&lt;br /&gt;
  q.fn.call(this,r);&lt;br /&gt;
  q.state!==r;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
n.push({&lt;br /&gt;
  style:l,fn:m}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=this.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
}&lt;br /&gt;
return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=n.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  else l='';&lt;br /&gt;
}&lt;br /&gt;
l={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={&lt;br /&gt;
  name:l,commandData:m,command:n}&lt;br /&gt;
;&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
  o.returnValue=n.exec(o.commandData);&lt;br /&gt;
  if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
}&lt;br /&gt;
return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={&lt;br /&gt;
  }&lt;br /&gt;
;&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
  var i=h.listeners;&lt;br /&gt;
  if(!e)e=this;&lt;br /&gt;
  if(isNaN(g))g=10;&lt;br /&gt;
  var j=this,k=function(m,n,o,p){&lt;br /&gt;
  var q={&lt;br /&gt;
  name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,removeListener:function(){&lt;br /&gt;
  j.removeListener(c,d);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  k.fn=d;&lt;br /&gt;
  k.priority=g;&lt;br /&gt;
  for(var l=i.length-1;&lt;br /&gt;
  l&amp;gt;=0;&lt;br /&gt;
  l--)if(i[l].priority&amp;lt;=g){&lt;br /&gt;
  i.splice(l+1,0,k);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2512</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2512"/>
				<updated>2009-04-15T13:07:58Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: /* Javascript API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned&amp;gt; I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
objEditor.setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',function(){&lt;br /&gt;
  this.resetDirty();&lt;br /&gt;
  this.removeListener('mode',arguments.callee);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={&lt;br /&gt;
  }&lt;br /&gt;
))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=&lt;br /&gt;
openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
  var n=this._.storedDialogs||(this._.storedDialogs={&lt;br /&gt;
  }&lt;br /&gt;
),o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
  o.show();&lt;br /&gt;
  return o;&lt;br /&gt;
}&lt;br /&gt;
var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),function(){&lt;br /&gt;
  r.openDialog(l);&lt;br /&gt;
  p.setStyle('cursor',q);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}&lt;br /&gt;
;&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}&lt;br /&gt;
;&lt;br /&gt;
   &lt;br /&gt;
if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{&lt;br /&gt;
  attributes:p}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
  var t=s.getNative().createRange();&lt;br /&gt;
  if(!t)return null;&lt;br /&gt;
  else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
  else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
}&lt;br /&gt;
return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
  n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
  this.on('selectionChange',function(o){&lt;br /&gt;
  for(var p=0;&lt;br /&gt;
  p  p++){&lt;br /&gt;
  var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
  if(q.state!==r){&lt;br /&gt;
  q.fn.call(this,r);&lt;br /&gt;
  q.state!==r;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
n.push({&lt;br /&gt;
  style:l,fn:m}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=this.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
}&lt;br /&gt;
return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=n.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  else l='';&lt;br /&gt;
}&lt;br /&gt;
l={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={&lt;br /&gt;
  name:l,commandData:m,command:n}&lt;br /&gt;
;&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
  o.returnValue=n.exec(o.commandData);&lt;br /&gt;
  if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
}&lt;br /&gt;
return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={&lt;br /&gt;
  }&lt;br /&gt;
;&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
  var i=h.listeners;&lt;br /&gt;
  if(!e)e=this;&lt;br /&gt;
  if(isNaN(g))g=10;&lt;br /&gt;
  var j=this,k=function(m,n,o,p){&lt;br /&gt;
  var q={&lt;br /&gt;
  name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,removeListener:function(){&lt;br /&gt;
  j.removeListener(c,d);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  k.fn=d;&lt;br /&gt;
  k.priority=g;&lt;br /&gt;
  for(var l=i.length-1;&lt;br /&gt;
  l&amp;gt;=0;&lt;br /&gt;
  l--)if(i[l].priority&amp;lt;=g){&lt;br /&gt;
  i.splice(l+1,0,k);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2511</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2511"/>
				<updated>2009-04-15T13:00:10Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: /* Javascript API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned&amp;gt; I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].].setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',function(){&lt;br /&gt;
  this.resetDirty();&lt;br /&gt;
  this.removeListener('mode',arguments.callee);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={&lt;br /&gt;
  }&lt;br /&gt;
))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=&lt;br /&gt;
openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
  var n=this._.storedDialogs||(this._.storedDialogs={&lt;br /&gt;
  }&lt;br /&gt;
),o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
  o.show();&lt;br /&gt;
  return o;&lt;br /&gt;
}&lt;br /&gt;
var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),function(){&lt;br /&gt;
  r.openDialog(l);&lt;br /&gt;
  p.setStyle('cursor',q);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}&lt;br /&gt;
;&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}&lt;br /&gt;
;&lt;br /&gt;
   &lt;br /&gt;
if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{&lt;br /&gt;
  attributes:p}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
  var t=s.getNative().createRange();&lt;br /&gt;
  if(!t)return null;&lt;br /&gt;
  else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
  else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
}&lt;br /&gt;
return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
  n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
  this.on('selectionChange',function(o){&lt;br /&gt;
  for(var p=0;&lt;br /&gt;
  p  p++){&lt;br /&gt;
  var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
  if(q.state!==r){&lt;br /&gt;
  q.fn.call(this,r);&lt;br /&gt;
  q.state!==r;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
n.push({&lt;br /&gt;
  style:l,fn:m}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=this.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
}&lt;br /&gt;
return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=n.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  else l='';&lt;br /&gt;
}&lt;br /&gt;
l={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={&lt;br /&gt;
  name:l,commandData:m,command:n}&lt;br /&gt;
;&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
  o.returnValue=n.exec(o.commandData);&lt;br /&gt;
  if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
}&lt;br /&gt;
return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={&lt;br /&gt;
  }&lt;br /&gt;
;&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
  var i=h.listeners;&lt;br /&gt;
  if(!e)e=this;&lt;br /&gt;
  if(isNaN(g))g=10;&lt;br /&gt;
  var j=this,k=function(m,n,o,p){&lt;br /&gt;
  var q={&lt;br /&gt;
  name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,removeListener:function(){&lt;br /&gt;
  j.removeListener(c,d);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  k.fn=d;&lt;br /&gt;
  k.priority=g;&lt;br /&gt;
  for(var l=i.length-1;&lt;br /&gt;
  l&amp;gt;=0;&lt;br /&gt;
  l--)if(i[l].priority&amp;lt;=g){&lt;br /&gt;
  i.splice(l+1,0,k);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2510</id>
		<title>Talk:CKEditor 3.x/Developers Guide/Integration</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=Talk:CKEditor_3.x/Developers_Guide/Integration&amp;diff=2510"/>
				<updated>2009-04-15T12:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Cjw: New page: =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 ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Javascript API=&lt;br /&gt;
&lt;br /&gt;
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();&lt;br /&gt;
&lt;br /&gt;
First thing I learned&amp;gt; I can also access an instance of an editor through:&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].setData(string); //This is more usefull in generic code.&lt;br /&gt;
&lt;br /&gt;
I wanted to see which functions are available for me and show that in... the editor itself. I did the following.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var objEditor=CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].];&lt;br /&gt;
var str=&amp;quot;&amp;quot;;&lt;br /&gt;
for (var item in objEditor) {&lt;br /&gt;
  str+=&amp;quot;&amp;lt;strong&amp;gt;&amp;quot;+item+&amp;quot;&amp;lt;/strong&amp;gt;=&amp;quot;+objEditor[item].toString().str_replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;{&amp;quot;, &amp;quot;{&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;).str_replace(&amp;quot;}&amp;quot;, &amp;quot;}&amp;lt;br&amp;gt;&amp;quot;).str_replace(&amp;quot;;&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;quot;, &amp;quot;;&amp;lt;br&amp;gt;}&amp;quot;)+&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
CKEDITOR.instances[&amp;quot;id_of_textarea&amp;quot;].].setData(str);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
getThemeSpace=function(l){&lt;br /&gt;
  var m='cke_'+l,n=this._[m]||(this._[m]=a.document.getById(m+'_'+this.name));&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
focus=function(){&lt;br /&gt;
  var n=l(this);&lt;br /&gt;
  if(n)n.focus();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setMode=function(n){&lt;br /&gt;
  var o,p=this.getThemeSpace('contents'),q=this.checkDirty();&lt;br /&gt;
  if(this.mode){&lt;br /&gt;
  if(n==this.mode)return;&lt;br /&gt;
  var r=l(this);&lt;br /&gt;
  o=r.getData();&lt;br /&gt;
  r.unload(p);&lt;br /&gt;
  this.mode='';&lt;br /&gt;
}&lt;br /&gt;
p.setHtml('');&lt;br /&gt;
  var s=l(this,n);&lt;br /&gt;
  if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode &amp;quot;'+n+'&amp;quot;.';&lt;br /&gt;
  if(!q)this.on('mode',function(){&lt;br /&gt;
  this.resetDirty();&lt;br /&gt;
  this.removeListener('mode',arguments.callee);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  s.load(p,typeof o!='string'?this.getData():o);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMode=function(n,o){&lt;br /&gt;
  o.name=n;&lt;br /&gt;
  (this._.modes||(this._.modes={&lt;br /&gt;
  }&lt;br /&gt;
))[n]=o;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mode=&lt;br /&gt;
openDialog=function(l){&lt;br /&gt;
  var m=a.dialog._.dialogDefinitions[l];&lt;br /&gt;
  if(typeof m=='function'){&lt;br /&gt;
  var n=this._.storedDialogs||(this._.storedDialogs={&lt;br /&gt;
  }&lt;br /&gt;
),o=n[l]||(n[l]=new a.dialog(this,l));&lt;br /&gt;
  o.show();&lt;br /&gt;
  return o;&lt;br /&gt;
}&lt;br /&gt;
var p=a.document.getBody(),q=p.$.style.cursor,r=this;&lt;br /&gt;
  p.setStyle('cursor','wait');&lt;br /&gt;
  a.scriptLoader.load(a.getUrl(m),function(){&lt;br /&gt;
  r.openDialog(l);&lt;br /&gt;
  p.setStyle('cursor',q);&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
  return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
restoreRealElement=function(l){&lt;br /&gt;
  var m=decodeURIComponent(l.getAttribute('_cke_realelement'));&lt;br /&gt;
  return g.createFromHtml(m,this.document);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeParserElement=function(l,m,n,o){&lt;br /&gt;
  var p=new a.htmlParser.basicWriter();&lt;br /&gt;
  l.writeHtml(p);&lt;br /&gt;
  var q=p.getHtml(),r={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q)}&lt;br /&gt;
;&lt;br /&gt;
  if(n)r._cke_real_element_type=n;&lt;br /&gt;
  if(o)r._cke_resizable=o;&lt;br /&gt;
  return new a.htmlParser.element('img',r);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
createFakeElement=function(l,m,n,o){&lt;br /&gt;
  var p={&lt;br /&gt;
  'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml())}&lt;br /&gt;
;&lt;br /&gt;
   &lt;br /&gt;
if(n)p._cke_real_element_type=n;&lt;br /&gt;
  if(o)p._cke_resizable=o;&lt;br /&gt;
  return this.document.createElement('img',{&lt;br /&gt;
  attributes:p}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
forceNextSelectionCheck=function(){&lt;br /&gt;
  delete this._.selectionPreviousPath;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSelection=function(){&lt;br /&gt;
  var u=this;&lt;br /&gt;
  var s=u.document?u.document.getSelection():null;&lt;br /&gt;
  if(s&amp;amp;&amp;amp;c){&lt;br /&gt;
  var t=s.getNative().createRange();&lt;br /&gt;
  if(!t)return null;&lt;br /&gt;
  else if(t.item)return t.item(0).ownerDocument==u.document.$?s:null;&lt;br /&gt;
  else return t.parentElement().ownerDocument==u.document.$?s:null;&lt;br /&gt;
}&lt;br /&gt;
return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getMenuItem=function(l){&lt;br /&gt;
  return this._.menuItems[l];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItems=function(l){&lt;br /&gt;
  for(var m in l)this.addMenuItem(m,l[m]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addMenuItem=function(l,m){&lt;br /&gt;
  if(this._.menuGroups[m.group])this._.menuItems[l]=new a.menuItem(this,l,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
attachStyleStateChange=function(l,m){&lt;br /&gt;
  var n=this._.styleStateChangeCallbacks;&lt;br /&gt;
  if(!n){&lt;br /&gt;
  n=this._.styleStateChangeCallbacks=[];&lt;br /&gt;
  this.on('selectionChange',function(o){&lt;br /&gt;
  for(var p=0;&lt;br /&gt;
  p  p++){&lt;br /&gt;
  var q=n[p],r=q.style.checkActive(o.data.path)?1:2;&lt;br /&gt;
  if(q.state!==r){&lt;br /&gt;
  q.fn.call(this,r);&lt;br /&gt;
  q.state!==r;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
n.push({&lt;br /&gt;
  style:l,fn:m}&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertText=function(l){&lt;br /&gt;
  l=e.htmlEncode(l);&lt;br /&gt;
  l=l.replace(/(?:\r\n)|\n|\r/g,'&lt;br /&gt;
');&lt;br /&gt;
  this.insertHtml(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
updateElement=function(){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  var l=m.element;&lt;br /&gt;
  if(l&amp;amp;&amp;amp;m.elementMode==1)if(l.is('textarea'))l.setValue(m.getData());&lt;br /&gt;
  else l.setHtml(m.getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
resetDirty=function(){&lt;br /&gt;
  if(this.mayBeDirty)this._.previousValue=this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
checkDirty=function(){&lt;br /&gt;
  return this.mayBeDirty&amp;amp;&amp;amp;this._.previousValue!==this.getSnapshot();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertElement=function(l){&lt;br /&gt;
  this.fire('insertElement',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
insertHtml=function(l){&lt;br /&gt;
  this.fire('insertHtml',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setData=function(l){&lt;br /&gt;
  var m={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  this.fire('setData',m);&lt;br /&gt;
  this._.data=m.dataValue;&lt;br /&gt;
  this.fire('afterSetData',m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadSnapshot=function(l){&lt;br /&gt;
  this.fire('loadSnapshot',l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getSnapshot=function(){&lt;br /&gt;
  var l=this.fire('getSnapshot');&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=this.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;this.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
}&lt;br /&gt;
return l;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getData=function(){&lt;br /&gt;
  var n=this;&lt;br /&gt;
  n.fire('beforeGetData');&lt;br /&gt;
  var l=n._.data;&lt;br /&gt;
  if(typeof l!='string'){&lt;br /&gt;
  var m=n.element;&lt;br /&gt;
  if(m&amp;amp;&amp;amp;n.elementMode==1)l=m.is('textarea')?m.getValue():m.getHtml();&lt;br /&gt;
  else l='';&lt;br /&gt;
}&lt;br /&gt;
l={&lt;br /&gt;
  dataValue:l}&lt;br /&gt;
;&lt;br /&gt;
  n.fire('getData',l);&lt;br /&gt;
  return l.dataValue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
getCommand=function(l){&lt;br /&gt;
  return this._.commands[l];&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
execCommand=function(l,m){&lt;br /&gt;
  var n=this.getCommand(l),o={&lt;br /&gt;
  name:l,commandData:m,command:n}&lt;br /&gt;
;&lt;br /&gt;
  if(n&amp;amp;&amp;amp;n.state!=0)if(this.fire('beforeCommandExec',o)!==true){&lt;br /&gt;
  o.returnValue=n.exec(o.commandData);&lt;br /&gt;
  if(this.fire('afterCommandExec',o)!==true)return o.returnValue;&lt;br /&gt;
}&lt;br /&gt;
return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
destroy=function(l){&lt;br /&gt;
  var m=this;&lt;br /&gt;
  if(!l)m.updateElement();&lt;br /&gt;
  m.theme.destroy(m);&lt;br /&gt;
  a.remove(m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCss=function(l){&lt;br /&gt;
  this._.styles.push(l);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCommand=function(l,m){&lt;br /&gt;
  return this._.commands[l]=new a.command(this,m);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hasListeners=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeListener=function(){&lt;br /&gt;
  var f=this;&lt;br /&gt;
  if(!(f._&amp;amp;&amp;amp;f._.events))a.event.call(f);&lt;br /&gt;
  (f[e]=a.event.prototype[e]).apply(f,arguments);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fireOnce=function(b,c){&lt;br /&gt;
  return a.event.prototype.fireOnce.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
fire=function(b,c){&lt;br /&gt;
  return a.event.prototype.fire.call(this,b,c,this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_=[object Object]&lt;br /&gt;
elementMode=1&lt;br /&gt;
_init=function(){&lt;br /&gt;
  var z=this;&lt;br /&gt;
  var x=g.get(z._.element),y=z._.instanceConfig;&lt;br /&gt;
  delete z._.element;&lt;br /&gt;
  delete z._.instanceConfig;&lt;br /&gt;
  z._.commands={&lt;br /&gt;
  }&lt;br /&gt;
;&lt;br /&gt;
  z._.styles=[];&lt;br /&gt;
  z.element=x;&lt;br /&gt;
  z.name=x&amp;amp;&amp;amp;z.elementMode==1&amp;amp;&amp;amp;(x.getId()||x.getNameAtt())||m();&lt;br /&gt;
  z.config=e.prototypedCopy(i);&lt;br /&gt;
  z.ui=new k(z);&lt;br /&gt;
  z.focusManager=new a.focusManager(z);&lt;br /&gt;
  a.fire('instanceCreated',null,z);&lt;br /&gt;
  z.on('mode',w);&lt;br /&gt;
  p(z,y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element=[object Object]&lt;br /&gt;
name=input_memo&lt;br /&gt;
config=[object Object]&lt;br /&gt;
ui=[object Object]&lt;br /&gt;
focusManager=[object Object]&lt;br /&gt;
on=function(c,d,e,f,g){&lt;br /&gt;
  var h=this._.events[c]||(this._.events[c]=new b(c));&lt;br /&gt;
  if(h.getListenerIndex(d)&amp;lt;0){&lt;br /&gt;
  var i=h.listeners;&lt;br /&gt;
  if(!e)e=this;&lt;br /&gt;
  if(isNaN(g))g=10;&lt;br /&gt;
  var j=this,k=function(m,n,o,p){&lt;br /&gt;
  var q={&lt;br /&gt;
  name:c,sender:this,editor:m,data:n,listenerData:f,stop:o,cancel:p,removeListener:function(){&lt;br /&gt;
  j.removeListener(c,d);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  d.call(e,q);&lt;br /&gt;
  return q.data;&lt;br /&gt;
}&lt;br /&gt;
;&lt;br /&gt;
  k.fn=d;&lt;br /&gt;
  k.priority=g;&lt;br /&gt;
  for(var l=i.length-1;&lt;br /&gt;
  l&amp;gt;=0;&lt;br /&gt;
  l--)if(i[l].priority&amp;lt;=g){&lt;br /&gt;
  i.splice(l+1,0,k);&lt;br /&gt;
  return;&lt;br /&gt;
}&lt;br /&gt;
i.unshift(k);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cjw</name></author>	</entry>

	</feed>