check that no html is availabel before assuming its an image
[roojs1] / docs / src / Roo_HtmlEditorCore.js.html
1 <html><head><title>Roo/HtmlEditorCore.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">//&lt;script type=&quot;text/javascript&quot;&gt;
2
3 /*
4  * Based  Ext JS Library 1.1.1
5  * Copyright(c) 2006-2007, Ext JS, LLC.
6  * LGPL
7  *
8  */
9
10 /**
11  * @class Roo.HtmlEditorCore
12  * @extends Roo.Component
13  * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
14  *
15  * any element that has display set to 'none' can cause problems in Safari and Firefox.&lt;br/&gt;&lt;br/&gt;
16  */
17
18 </span><span class="jsdoc-var">Roo.HtmlEditorCore </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
19
20
21     </span><span class="jsdoc-var">Roo.HtmlEditorCore.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
22
23
24     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
25         </span><span class="jsdoc-comment">/**
26          * @event initialize
27          * Fires when the editor is fully initialized (including the iframe)
28          * @param {Roo.HtmlEditorCore} this
29          */
30         </span><span class="jsdoc-var">initialize</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
31         </span><span class="jsdoc-comment">/**
32          * @event activate
33          * Fires when the editor is first receives the focus. Any insertion must wait
34          * until after this event.
35          * @param {Roo.HtmlEditorCore} this
36          */
37         </span><span class="jsdoc-var">activate</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
38          </span><span class="jsdoc-comment">/**
39          * @event beforesync
40          * Fires before the textarea is updated with content from the editor iframe. Return false
41          * to cancel the sync.
42          * @param {Roo.HtmlEditorCore} this
43          * @param {String} html
44          */
45         </span><span class="jsdoc-var">beforesync</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
46          </span><span class="jsdoc-comment">/**
47          * @event beforepush
48          * Fires before the iframe editor is updated with content from the textarea. Return false
49          * to cancel the push.
50          * @param {Roo.HtmlEditorCore} this
51          * @param {String} html
52          */
53         </span><span class="jsdoc-var">beforepush</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
54          </span><span class="jsdoc-comment">/**
55          * @event sync
56          * Fires when the textarea is updated with content from the editor iframe.
57          * @param {Roo.HtmlEditorCore} this
58          * @param {String} html
59          */
60         </span><span class="jsdoc-var">sync</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
61          </span><span class="jsdoc-comment">/**
62          * @event push
63          * Fires when the iframe editor is updated with content from the textarea.
64          * @param {Roo.HtmlEditorCore} this
65          * @param {String} html
66          */
67         </span><span class="jsdoc-var">push</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
68
69         </span><span class="jsdoc-comment">/**
70          * @event editorevent
71          * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
72          * @param {Roo.HtmlEditorCore} this
73          */
74         </span><span class="jsdoc-var">editorevent</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
75
76
77     </span><span class="jsdoc-syntax">});
78
79     </span><span class="jsdoc-comment">// at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
80
81     // defaults : white / black...
82     </span><span class="jsdoc-var">this.applyBlacklists</span><span class="jsdoc-syntax">();
83
84
85
86 };
87
88
89 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.Component</span><span class="jsdoc-syntax">,  {
90
91
92      </span><span class="jsdoc-comment">/**
93      * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
94      */
95
96     </span><span class="jsdoc-var">owner </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
97
98      </span><span class="jsdoc-comment">/**
99      * @cfg {String} css styling for resizing. (used on bootstrap only)
100      */
101     </span><span class="jsdoc-var">resize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
102      </span><span class="jsdoc-comment">/**
103      * @cfg {Number} height (in pixels)
104      */
105     </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">: 300,
106    </span><span class="jsdoc-comment">/**
107      * @cfg {Number} width (in pixels)
108      */
109     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 500,
110      </span><span class="jsdoc-comment">/**
111      * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
112      *         if you are doing an email editor, this probably needs disabling, it's designed
113      */
114     </span><span class="jsdoc-var">autoClean</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
115
116     </span><span class="jsdoc-comment">/**
117      * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
118      */
119     </span><span class="jsdoc-var">enableBlocks </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
120     </span><span class="jsdoc-comment">/**
121      * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
122      * 
123      */
124     </span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
125      </span><span class="jsdoc-comment">/**
126      * @cfg {String} language default en - language of text (usefull for rtl languages)
127      * 
128      */
129     </span><span class="jsdoc-var">language</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'en'</span><span class="jsdoc-syntax">,
130
131     </span><span class="jsdoc-comment">/**
132      * @cfg {boolean} allowComments - default false - allow comments in HTML source
133      *          - by default they are stripped - if you are editing email you may need this.
134      */
135     </span><span class="jsdoc-var">allowComments</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
136     </span><span class="jsdoc-comment">// id of frame..
137     </span><span class="jsdoc-var">frameId</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
138
139     </span><span class="jsdoc-comment">// private properties
140     </span><span class="jsdoc-var">validationEvent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
141     </span><span class="jsdoc-var">deferHeight</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
142     </span><span class="jsdoc-var">initialized </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
143     </span><span class="jsdoc-var">activated </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
144     </span><span class="jsdoc-var">sourceEditMode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
145     </span><span class="jsdoc-var">onFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
146     </span><span class="jsdoc-var">iframePad</span><span class="jsdoc-syntax">:3,
147     </span><span class="jsdoc-var">hideMode</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">'offsets'</span><span class="jsdoc-syntax">,
148
149     </span><span class="jsdoc-var">clearUp</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
150
151     </span><span class="jsdoc-comment">// blacklist + whitelisted elements..
152     </span><span class="jsdoc-var">black</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
153     </span><span class="jsdoc-var">white</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
154
155     </span><span class="jsdoc-var">bodyCls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
156
157
158     </span><span class="jsdoc-var">undoManager </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
159     </span><span class="jsdoc-comment">/**
160      * Protected method that will not generally be called directly. It
161      * is called when the editor initializes the iframe with HTML contents. Override this method if you
162      * want to change the initialization markup of the iframe (e.g. to add stylesheets).
163      */
164     </span><span class="jsdoc-var">getDocMarkup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
165         </span><span class="jsdoc-comment">// body styles..
166         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
167
168         </span><span class="jsdoc-comment">// inherit styels from page...?? 
169         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.stylesheets </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
170
171             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
172                 </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">node.dom.outerHTML </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">XMLSerializer</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.serializeToString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.dom</span><span class="jsdoc-syntax">);
173             });
174
175             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'link'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
176                 </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">node.dom.outerHTML </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">XMLSerializer</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.serializeToString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.dom</span><span class="jsdoc-syntax">);
177             });
178
179         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.stylesheets.length</span><span class="jsdoc-syntax">) {
180                 </span><span class="jsdoc-comment">// simple..
181                 </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'&lt;style type=&quot;text/css&quot;&gt;' </span><span class="jsdoc-syntax">+
182                     </span><span class="jsdoc-string">'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' </span><span class="jsdoc-syntax">+
183                    </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
184         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
185             </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">this.stylesheets</span><span class="jsdoc-syntax">) {
186                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.stylesheets</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'string'</span><span class="jsdoc-syntax">) {
187                     </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
188                 }
189                 </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'&lt;link rel=&quot;stylesheet&quot; href=&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.stylesheets</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] +</span><span class="jsdoc-string">'&quot; type=&quot;text/css&quot;&gt;'</span><span class="jsdoc-syntax">;
190             }
191
192         }
193
194         </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">+=  </span><span class="jsdoc-string">'&lt;style type=&quot;text/css&quot;&gt;' </span><span class="jsdoc-syntax">+
195             </span><span class="jsdoc-string">'IMG { cursor: pointer } ' </span><span class="jsdoc-syntax">+
196         </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
197
198         </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'&lt;meta name=&quot;google&quot; content=&quot;notranslate&quot;&gt;'</span><span class="jsdoc-syntax">;
199
200         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'notranslate roo-htmleditor-body'</span><span class="jsdoc-syntax">;
201
202         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.bodyCls.length</span><span class="jsdoc-syntax">){
203             </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">' ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.bodyCls</span><span class="jsdoc-syntax">;
204         }
205
206         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">'&lt;html  class=&quot;notranslate&quot; translate=&quot;no&quot;&gt;&lt;head&gt;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">st  </span><span class="jsdoc-syntax">+
207             </span><span class="jsdoc-comment">//&lt;style type=&quot;text/css&quot;&gt;' +
208             //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
209             //'&lt;/style&gt;' +
210             </span><span class="jsdoc-string">' &lt;/head&gt;&lt;body contenteditable=&quot;true&quot; data-enable-grammerly=&quot;true&quot; class=&quot;' </span><span class="jsdoc-syntax">+  </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;&gt;&lt;/body&gt;&lt;/html&gt;'</span><span class="jsdoc-syntax">;
211     },
212
213     </span><span class="jsdoc-comment">// private
214     </span><span class="jsdoc-var">onRender </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ct</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">position</span><span class="jsdoc-syntax">)
215     {
216         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
217         </span><span class="jsdoc-comment">//Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
218         </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.owner.inputEl </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.inputEl</span><span class="jsdoc-syntax">() : </span><span class="jsdoc-var">this.owner.el</span><span class="jsdoc-syntax">;
219
220
221         </span><span class="jsdoc-var">this.el.dom.style.border </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'0 none'</span><span class="jsdoc-syntax">;
222         </span><span class="jsdoc-var">this.el.dom.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'tabIndex'</span><span class="jsdoc-syntax">, -1);
223         </span><span class="jsdoc-var">this.el.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-hidden hide'</span><span class="jsdoc-syntax">);
224
225
226
227         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// fix IE 1px bogus margin
228             </span><span class="jsdoc-var">this.el.applyStyles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'margin-top:-1px;margin-bottom:-1px;'</span><span class="jsdoc-syntax">)
229         }
230
231
232         </span><span class="jsdoc-var">this.frameId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.id</span><span class="jsdoc-syntax">();
233
234         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ifcfg </span><span class="jsdoc-syntax">= {
235             </span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'iframe'</span><span class="jsdoc-syntax">,
236             </span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'form-control'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// bootstrap..
237             </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.frameId</span><span class="jsdoc-syntax">,
238             </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.frameId</span><span class="jsdoc-syntax">,
239             </span><span class="jsdoc-var">frameBorder </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'no'</span><span class="jsdoc-syntax">,
240             </span><span class="jsdoc-string">'src' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.SSL_SECURE_URL </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.SSL_SECURE_URL  </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-string">&quot;javascript:false&quot;
241         </span><span class="jsdoc-syntax">};
242         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.resize</span><span class="jsdoc-syntax">) {
243             </span><span class="jsdoc-var">ifcfg.style </span><span class="jsdoc-syntax">= { </span><span class="jsdoc-var">resize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.resize </span><span class="jsdoc-syntax">};
244         }
245
246         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">iframe </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.owner.wrap.createChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ifcfg</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">);
247
248
249         </span><span class="jsdoc-var">this.iframe </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">iframe.dom</span><span class="jsdoc-syntax">;
250
251         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
252
253         </span><span class="jsdoc-var">this.doc.designMode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'on'</span><span class="jsdoc-syntax">;
254
255         </span><span class="jsdoc-var">this.doc.open</span><span class="jsdoc-syntax">();
256         </span><span class="jsdoc-var">this.doc.write</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getDocMarkup</span><span class="jsdoc-syntax">());
257         </span><span class="jsdoc-var">this.doc.close</span><span class="jsdoc-syntax">();
258
259
260         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">task </span><span class="jsdoc-syntax">= { </span><span class="jsdoc-comment">// must defer to wait for browser to be ready
261             </span><span class="jsdoc-var">run </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
262                 </span><span class="jsdoc-comment">//console.log(&quot;run task?&quot; + this.doc.readyState);
263                 </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
264                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.readyState </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'complete'</span><span class="jsdoc-syntax">){
265                     </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
266                         </span><span class="jsdoc-var">this.doc.designMode</span><span class="jsdoc-syntax">=</span><span class="jsdoc-string">&quot;on&quot;</span><span class="jsdoc-syntax">;
267
268                     } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
269                         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
270                     }
271                     </span><span class="jsdoc-var">Roo.TaskMgr.stop</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">);
272                     </span><span class="jsdoc-var">this.initEditor.defer</span><span class="jsdoc-syntax">(10, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
273                 }
274             },
275             </span><span class="jsdoc-var">interval </span><span class="jsdoc-syntax">: 10,
276             </span><span class="jsdoc-var">duration</span><span class="jsdoc-syntax">: 10000,
277             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
278         </span><span class="jsdoc-syntax">};
279         </span><span class="jsdoc-var">Roo.TaskMgr.start</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">);
280
281     },
282
283     </span><span class="jsdoc-comment">// private
284     </span><span class="jsdoc-var">onResize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">h</span><span class="jsdoc-syntax">)
285     {
286          </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'resize: ' </span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">w </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">',' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">);
287         </span><span class="jsdoc-comment">//Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
288         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.iframe</span><span class="jsdoc-syntax">){
289             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
290         }
291         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">w </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'number'</span><span class="jsdoc-syntax">){
292
293             </span><span class="jsdoc-var">this.iframe.style.width </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">w </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'px'</span><span class="jsdoc-syntax">;
294         }
295         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'number'</span><span class="jsdoc-syntax">){
296
297             </span><span class="jsdoc-var">this.iframe.style.height </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'px'</span><span class="jsdoc-syntax">;
298             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">){
299                 (</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.style.height </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">- (</span><span class="jsdoc-var">this.iframePad</span><span class="jsdoc-syntax">*2)) + </span><span class="jsdoc-string">'px'</span><span class="jsdoc-syntax">;
300             }
301         }
302
303     },
304
305     </span><span class="jsdoc-comment">/**
306      * Toggles the editor between standard and source edit mode.
307      * @param {Boolean} sourceEdit (optional) True for source edit, false for standard
308      */
309     </span><span class="jsdoc-var">toggleSourceEdit </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sourceEditMode</span><span class="jsdoc-syntax">){
310
311         </span><span class="jsdoc-var">this.sourceEditMode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sourceEditMode </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
312
313         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sourceEditMode</span><span class="jsdoc-syntax">){
314
315             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.iframe</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.addClass</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'x-hidden'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'hide'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'d-none'</span><span class="jsdoc-syntax">]);     </span><span class="jsdoc-comment">//FIXME - what's the BS styles for these
316
317         </span><span class="jsdoc-syntax">}</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
318             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.iframe</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.removeClass</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'x-hidden'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'hide'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'d-none'</span><span class="jsdoc-syntax">]);
319             </span><span class="jsdoc-comment">//this.iframe.className = '';
320             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
321         }
322         </span><span class="jsdoc-comment">//this.setSize(this.owner.wrap.getSize());
323         //this.fireEvent('editmodechange', this, this.sourceEditMode);
324     </span><span class="jsdoc-syntax">},
325
326
327
328
329     </span><span class="jsdoc-comment">/**
330      * Protected method that will not generally be called directly. If you need/want
331      * custom HTML cleanup, this is the method you should override.
332      * @param {String} html The HTML to be cleaned
333      * return {String} The cleaned HTML
334      */
335     </span><span class="jsdoc-var">cleanHtml </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">)
336     {
337         </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
338         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html.length </span><span class="jsdoc-syntax">&gt; 5){
339             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// strip safari nonsense
340                 </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html.replace</span><span class="jsdoc-syntax">(/\sclass=&quot;(?:Apple-style-span|khtml-block-placeholder)&quot;/gi, </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
341             }
342         }
343         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'&amp;nbsp;'</span><span class="jsdoc-syntax">){
344             </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
345         }
346         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
347     },
348
349     </span><span class="jsdoc-comment">/**
350      * HTML Editor -&gt; Textarea
351      * Protected method that will not generally be called directly. Syncs the contents
352      * of the editor iframe with the textarea.
353      */
354     </span><span class="jsdoc-var">syncValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
355     {
356         </span><span class="jsdoc-comment">//Roo.log(&quot;HtmlEditorCore:syncValue (EDITOR-&gt;TEXT)&quot;);
357         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
358
359             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.undoManager</span><span class="jsdoc-syntax">) {
360                 </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
361             }
362
363
364             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bd </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">);
365
366
367             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
368
369             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'div'</span><span class="jsdoc-syntax">);
370             </span><span class="jsdoc-var">div.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">bd.innerHTML</span><span class="jsdoc-syntax">;
371             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">gtx </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">div.getElementsByClassName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'gtx-trans-icon'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// google translate - really annoying and difficult to get rid of.
372             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">gtx.length </span><span class="jsdoc-syntax">&gt; 0) {
373                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">gtx.item</span><span class="jsdoc-syntax">(0)</span><span class="jsdoc-var">.parentNode</span><span class="jsdoc-syntax">;
374                 </span><span class="jsdoc-var">rm.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rm</span><span class="jsdoc-syntax">);
375             }
376
377
378             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
379                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterBlock</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">});
380             }
381
382             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">div.innerHTML</span><span class="jsdoc-syntax">;
383
384             </span><span class="jsdoc-comment">//?? tidy?
385             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
386
387                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
388                     </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">,
389                     </span><span class="jsdoc-var">attrib_white </span><span class="jsdoc-syntax">: [
390                             </span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">,
391                             </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">,
392                             </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
393                             </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">,
394                             </span><span class="jsdoc-string">'colspan'</span><span class="jsdoc-syntax">,
395                             </span><span class="jsdoc-string">'rowspan'</span><span class="jsdoc-syntax">,
396                             </span><span class="jsdoc-string">'data-display'</span><span class="jsdoc-syntax">,
397                             </span><span class="jsdoc-string">'data-width'</span><span class="jsdoc-syntax">,
398                             </span><span class="jsdoc-string">'start' </span><span class="jsdoc-syntax">,
399                             </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">,
400                             </span><span class="jsdoc-comment">// youtube embed.
401                             </span><span class="jsdoc-string">'class'</span><span class="jsdoc-syntax">,
402                             </span><span class="jsdoc-string">'allowfullscreen'</span><span class="jsdoc-syntax">,
403                             </span><span class="jsdoc-string">'frameborder'</span><span class="jsdoc-syntax">,
404                             </span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">,
405                             </span><span class="jsdoc-string">'height'</span><span class="jsdoc-syntax">,
406                             </span><span class="jsdoc-string">'alt'
407                             </span><span class="jsdoc-syntax">],
408                     </span><span class="jsdoc-var">attrib_clean </span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'src' </span><span class="jsdoc-syntax">]
409                 });
410
411                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tidy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.TidySerializer</span><span class="jsdoc-syntax">({
412                     </span><span class="jsdoc-var">inner</span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">true
413                 </span><span class="jsdoc-syntax">});
414                 </span><span class="jsdoc-var">html  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tidy.serialize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">);
415
416             }
417
418
419             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
420                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">bd.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// Safari puts text-align styles on the body element!
421                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">bs </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">bs.match</span><span class="jsdoc-syntax">(/text-align:(.*?);/i) : </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
422                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[1]){
423                     </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'&lt;div style=&quot;'</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[0]+</span><span class="jsdoc-string">'&quot;&gt;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&lt;/div&gt;'</span><span class="jsdoc-syntax">;
424                 }
425             }
426             </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cleanHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
427             </span><span class="jsdoc-comment">// fix up the special chars.. normaly like back quotes in word...
428             // however we do not want to do this with chinese..
429             </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html.replace</span><span class="jsdoc-syntax">(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">match</span><span class="jsdoc-syntax">) {
430
431                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">match.charCodeAt</span><span class="jsdoc-syntax">();
432
433                 </span><span class="jsdoc-comment">// Get the character value, handling surrogate pairs
434                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">match.length </span><span class="jsdoc-syntax">== 2) {
435                     </span><span class="jsdoc-comment">// It's a surrogate pair, calculate the Unicode code point
436                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">high </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">match.charCodeAt</span><span class="jsdoc-syntax">(0) - 0xD800;
437                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">low  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">match.charCodeAt</span><span class="jsdoc-syntax">(1) - 0xDC00;
438                     </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">high </span><span class="jsdoc-syntax">* 0x400) + </span><span class="jsdoc-var">low </span><span class="jsdoc-syntax">+ 0x10000;
439                 }  </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(
440                     (</span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&gt;= 0x4E00 &amp;&amp; </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&lt; 0xA000 ) ||
441                     (</span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&gt;= 0x3400 &amp;&amp; </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&lt; 0x4E00 ) ||
442                     (</span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&gt;= 0xf900 &amp;&amp; </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">&lt; 0xfb00 )
443                 ) {
444                         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">match</span><span class="jsdoc-syntax">;
445                 }
446
447                 </span><span class="jsdoc-comment">// No, use a numeric entity. Here we brazenly (and possibly mistakenly)
448                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">&quot;&amp;#&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">cc </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;;&quot;</span><span class="jsdoc-syntax">;
449
450
451             });
452
453
454
455             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'beforesync'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
456                 </span><span class="jsdoc-var">this.el.dom.value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
457                 </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'sync'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
458             }
459         }
460     },
461
462     </span><span class="jsdoc-comment">/**
463      * TEXTAREA -&gt; EDITABLE
464      * Protected method that will not generally be called directly. Pushes the value of the textarea
465      * into the iframe editor.
466      */
467     </span><span class="jsdoc-var">pushValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
468     {
469         </span><span class="jsdoc-comment">//Roo.log(&quot;HtmlEditorCore:pushValue (TEXT-&gt;EDITOR)&quot;);
470         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
471             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.dom.value.trim</span><span class="jsdoc-syntax">();
472
473
474             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'beforepush'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
475                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">);
476                 </span><span class="jsdoc-var">d.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
477
478                 </span><span class="jsdoc-var">this.el.dom.value </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">d.innerHTML</span><span class="jsdoc-syntax">;
479                 </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'push'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">);
480             }
481             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
482                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterParagraph</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">}); </span><span class="jsdoc-comment">// paragraphs
483                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterSpan</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">}); </span><span class="jsdoc-comment">// empty spans
484             </span><span class="jsdoc-syntax">}
485             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
486                 </span><span class="jsdoc-var">Roo.htmleditor.Block.initAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
487             }
488
489             </span><span class="jsdoc-var">this.updateLanguage</span><span class="jsdoc-syntax">();
490
491             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.body.lastChild</span><span class="jsdoc-syntax">;
492             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">lc.nodeType </span><span class="jsdoc-syntax">== 1 &amp;&amp; </span><span class="jsdoc-var">lc.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;contenteditable&quot;</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">&quot;false&quot;</span><span class="jsdoc-syntax">) {
493                 </span><span class="jsdoc-comment">// add an extra line at the end.
494                 </span><span class="jsdoc-var">this.doc.body.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'br'</span><span class="jsdoc-syntax">));
495             }
496
497
498         }
499     },
500
501     </span><span class="jsdoc-comment">// private
502     </span><span class="jsdoc-var">deferFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
503         </span><span class="jsdoc-var">this.focus.defer</span><span class="jsdoc-syntax">(10, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
504     },
505
506     </span><span class="jsdoc-comment">// doc'ed in Field
507     </span><span class="jsdoc-var">focus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
508         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.win </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">this.sourceEditMode</span><span class="jsdoc-syntax">){
509             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
510         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
511             </span><span class="jsdoc-var">this.el.focus</span><span class="jsdoc-syntax">();
512         }
513     },
514
515     </span><span class="jsdoc-var">assignDocWin</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
516     {
517         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">iframe </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.iframe</span><span class="jsdoc-syntax">;
518
519          </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">){
520             </span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">iframe.contentWindow.document</span><span class="jsdoc-syntax">;
521             </span><span class="jsdoc-var">this.win </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">iframe.contentWindow</span><span class="jsdoc-syntax">;
522         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
523 </span><span class="jsdoc-comment">//            if (!Roo.get(this.frameId)) {
524 //                return;
525 //            }
526 //            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
527 //            this.win = Roo.get(this.frameId).dom.contentWindow;
528
529             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.frameId</span><span class="jsdoc-syntax">) &amp;&amp; !</span><span class="jsdoc-var">iframe.contentDocument</span><span class="jsdoc-syntax">) {
530                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
531             }
532
533             </span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">iframe.contentDocument </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.frameId</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.dom.document</span><span class="jsdoc-syntax">);
534             </span><span class="jsdoc-var">this.win </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">iframe.contentWindow </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.frameId</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.dom.contentWindow</span><span class="jsdoc-syntax">);
535         }
536     },
537
538     </span><span class="jsdoc-comment">// private
539     </span><span class="jsdoc-var">initEditor </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
540         </span><span class="jsdoc-comment">//console.log(&quot;INIT EDITOR&quot;);
541         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
542
543
544
545         </span><span class="jsdoc-var">this.doc.designMode</span><span class="jsdoc-syntax">=</span><span class="jsdoc-string">&quot;on&quot;</span><span class="jsdoc-syntax">;
546         </span><span class="jsdoc-var">this.doc.open</span><span class="jsdoc-syntax">();
547         </span><span class="jsdoc-var">this.doc.write</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getDocMarkup</span><span class="jsdoc-syntax">());
548         </span><span class="jsdoc-var">this.doc.close</span><span class="jsdoc-syntax">();
549
550         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">dbody </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">);
551         </span><span class="jsdoc-comment">//var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
552         // this copies styles from the containing element into thsi one..
553         // not sure why we need all of this..
554         //var ss = this.el.getStyles('font-size', 'background-image', 'background-repeat');
555
556         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
557         //ss['background-attachment'] = 'fixed'; // w3c
558         </span><span class="jsdoc-var">dbody.bgProperties </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'fixed'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// ie
559         </span><span class="jsdoc-var">dbody.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;translate&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;no&quot;</span><span class="jsdoc-syntax">);
560
561         </span><span class="jsdoc-comment">//Roo.DomHelper.applyStyles(dbody, ss);
562         </span><span class="jsdoc-var">Roo.EventManager.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">, {
563
564             </span><span class="jsdoc-string">'mouseup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
565             </span><span class="jsdoc-string">'dblclick'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
566             </span><span class="jsdoc-string">'click'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
567             </span><span class="jsdoc-string">'keyup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
568
569             </span><span class="jsdoc-var">buffer</span><span class="jsdoc-syntax">:100,
570             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
571         </span><span class="jsdoc-syntax">});
572         </span><span class="jsdoc-var">Roo.EventManager.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">, {
573             </span><span class="jsdoc-string">'paste'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onPasteEvent</span><span class="jsdoc-syntax">,
574             </span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
575         </span><span class="jsdoc-syntax">});
576         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isGecko</span><span class="jsdoc-syntax">){
577             </span><span class="jsdoc-var">Roo.EventManager.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'keypress'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.mozKeyPress</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
578         }
579         </span><span class="jsdoc-comment">//??? needed???
580         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.isSafari </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.isOpera</span><span class="jsdoc-syntax">){
581             </span><span class="jsdoc-var">Roo.EventManager.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'keydown'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.fixKeys</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
582         }
583         </span><span class="jsdoc-var">this.initialized </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
584
585
586         </span><span class="jsdoc-comment">// initialize special key events - enter
587         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.KeyEnter</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">core </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">});
588
589
590
591         </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'initialize'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
592         </span><span class="jsdoc-var">this.pushValue</span><span class="jsdoc-syntax">();
593     },
594     </span><span class="jsdoc-comment">// this is to prevent a href clicks resulting in a redirect?
595
596     </span><span class="jsdoc-var">onPasteEvent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">)
597     {
598         </span><span class="jsdoc-comment">// I think we better assume paste is going to be a dirty load of rubish from word..
599
600         // even pasting into a 'email version' of this widget will have to clean up that mess.
601         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cd </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">e.browserEvent.clipboardData </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window.clipboardData</span><span class="jsdoc-syntax">);
602
603         </span><span class="jsdoc-comment">// check what type of paste - if it's an image, then handle it differently.
604         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.files </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">cd.files.length </span><span class="jsdoc-syntax">&gt; 0 &amp;&amp; </span><span class="jsdoc-var">cd.types.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">) &lt; 0) {
605             </span><span class="jsdoc-comment">// pasting images? 
606             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">urlAPI </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">window.createObjectURL </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">) ||
607                 (</span><span class="jsdoc-var">window.URL </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">URL.revokeObjectURL </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">URL</span><span class="jsdoc-syntax">) ||
608                 (</span><span class="jsdoc-var">window.webkitURL </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">webkitURL</span><span class="jsdoc-syntax">);
609
610             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">FileReader</span><span class="jsdoc-syntax">();
611             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
612             </span><span class="jsdoc-var">r.addEventListener</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'load'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
613             {
614
615                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">DOMParser</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.parseFromString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'&lt;img src=&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">r.result</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;&gt;'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.body</span><span class="jsdoc-syntax">;
616                 </span><span class="jsdoc-comment">// is insert asycn?
617                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.enableBlocks</span><span class="jsdoc-syntax">) {
618
619                     </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.forEach</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img</span><span class="jsdoc-syntax">) {
620                         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">)) { </span><span class="jsdoc-comment">// assume!! that it's aready
621                             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
622                         }
623                         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fig  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.BlockFigure</span><span class="jsdoc-syntax">({
624                             </span><span class="jsdoc-var">image_src  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">img.src
625                         </span><span class="jsdoc-syntax">});
626                         </span><span class="jsdoc-var">fig.updateElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// replace it..
627
628                     </span><span class="jsdoc-syntax">});
629                 }
630                 </span><span class="jsdoc-var">t.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.innerHTML.replace</span><span class="jsdoc-syntax">(/&amp;nbsp;/g,</span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">));
631                 </span><span class="jsdoc-var">t.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'paste'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
632             });
633             </span><span class="jsdoc-var">r.readAsDataURL</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.files</span><span class="jsdoc-syntax">[0]);
634
635             </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
636
637             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
638         }
639         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.types.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">) &lt; 0 ) {
640             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
641         }
642         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= [];
643         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cd.getData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// clipboard event
644         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.types.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/rtf'</span><span class="jsdoc-syntax">) &gt; -1) {
645             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">parser </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Parser</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.getData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'text/rtf'</span><span class="jsdoc-syntax">));
646             </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parser.doc </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">parser.doc.getElementsByType</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'pict'</span><span class="jsdoc-syntax">) : [];
647         }
648         </span><span class="jsdoc-comment">//Roo.log(images);
649         //Roo.log(imgs);
650         // fixme..
651         </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">images.filter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">!</span><span class="jsdoc-var">g.path.match</span><span class="jsdoc-syntax">(/^rtf\/(head|pgdsctbl|listtable|footerf)/); }) </span><span class="jsdoc-comment">// ignore headers/footers etc.
652                        </span><span class="jsdoc-var">.map</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">g.toDataURL</span><span class="jsdoc-syntax">(); })
653                        </span><span class="jsdoc-var">.filter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">g </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'about:blank'</span><span class="jsdoc-syntax">; });
654
655         </span><span class="jsdoc-comment">//Roo.log(html);
656         </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cleanWordChars</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
657
658         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">DOMParser</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.parseFromString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'text/html'</span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.body</span><span class="jsdoc-syntax">;
659
660
661         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getParentElement</span><span class="jsdoc-syntax">();
662         </span><span class="jsdoc-comment">// check if d contains a table, and prevent nesting??
663         //Roo.log(d.getElementsByTagName('table'));
664         //Roo.log(sn);
665         //Roo.log(sn.closest('table'));
666         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'table'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.length </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">sn.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'table'</span><span class="jsdoc-syntax">)) {
667             </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
668             </span><span class="jsdoc-var">this.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;You can not nest tables&quot;</span><span class="jsdoc-syntax">);
669             </span><span class="jsdoc-comment">//Roo.log(&quot;prevent?&quot;); // fixme - 
670             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
671         }
672
673
674
675         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">images.length </span><span class="jsdoc-syntax">&gt; 0) {
676             </span><span class="jsdoc-comment">// replace all v:imagedata - with img.
677             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'v:imagedata'</span><span class="jsdoc-syntax">));
678             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
679                 </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.ownerDocument.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">);
680                 </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
681             });
682
683
684             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">), </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
685                 </span><span class="jsdoc-var">img.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">images</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
686             });
687         }
688         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
689             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterWord</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
690
691             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterStyleToTag</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
692             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
693                 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">,
694                 </span><span class="jsdoc-var">attrib_white </span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'colspan'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'rowspan'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'data-display'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'data-width'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'start'</span><span class="jsdoc-syntax">],
695                 </span><span class="jsdoc-var">attrib_clean </span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'src' </span><span class="jsdoc-syntax">]
696             });
697             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterBlack</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.black</span><span class="jsdoc-syntax">});
698             </span><span class="jsdoc-comment">// should be fonts..
699             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterKeepChildren</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'FONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">':' </span><span class="jsdoc-syntax">]} );
700             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterParagraph</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
701             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterSpan</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
702             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterLongBr</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
703             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterComment</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">});
704
705
706         }
707         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
708
709             </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.getElementsByTagName</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'img'</span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.forEach</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img</span><span class="jsdoc-syntax">) {
710                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'figure'</span><span class="jsdoc-syntax">)) { </span><span class="jsdoc-comment">// assume!! that it's aready
711                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
712                 }
713                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fig  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.BlockFigure</span><span class="jsdoc-syntax">({
714                     </span><span class="jsdoc-var">image_src  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">img.src
715                 </span><span class="jsdoc-syntax">});
716                 </span><span class="jsdoc-var">fig.updateElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">img</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// replace it..
717
718             </span><span class="jsdoc-syntax">});
719         }
720
721
722         </span><span class="jsdoc-var">this.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">d.innerHTML.replace</span><span class="jsdoc-syntax">(/&amp;nbsp;/g,</span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">));
723         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
724             </span><span class="jsdoc-var">Roo.htmleditor.Block.initAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
725         }
726
727
728         </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
729         </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'paste'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
730         </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
731         </span><span class="jsdoc-comment">// default behaveiour should be our local cleanup paste? (optional?)
732         // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
733         //this.owner.fireEvent('paste', e, v);
734     </span><span class="jsdoc-syntax">},
735     </span><span class="jsdoc-comment">// private
736     </span><span class="jsdoc-var">onDestroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
737
738
739
740         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.rendered</span><span class="jsdoc-syntax">){
741
742             </span><span class="jsdoc-comment">//for (var i =0; i &lt; this.toolbars.length;i++) {
743             //    // fixme - ask toolbars for heights?
744             //    this.toolbars[i].onDestroy();
745            // }
746
747             //this.wrap.dom.innerHTML = '';
748             //this.wrap.remove();
749         </span><span class="jsdoc-syntax">}
750     },
751
752     </span><span class="jsdoc-comment">// private
753     </span><span class="jsdoc-var">onFirstFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
754
755         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
756         </span><span class="jsdoc-var">this.undoManager </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.lib.UndoManager</span><span class="jsdoc-syntax">(100,(</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">));
757
758         </span><span class="jsdoc-var">this.activated </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
759
760
761         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isGecko</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// prevent silly gecko errors
762             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
763             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
764             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.focusNode </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">s.focusNode.nodeType </span><span class="jsdoc-syntax">!= 3){
765                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.getRangeAt</span><span class="jsdoc-syntax">(0);
766                 </span><span class="jsdoc-var">r.selectNodeContents</span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc.documentElement</span><span class="jsdoc-syntax">));
767                 </span><span class="jsdoc-var">r.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
768                 </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
769             }
770             </span><span class="jsdoc-keyword">try</span><span class="jsdoc-syntax">{
771                 </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'useCSS'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
772                 </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'styleWithCSS'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
773             }</span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){}
774         }
775         </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'activate'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
776     },
777
778     </span><span class="jsdoc-comment">// private
779     </span><span class="jsdoc-var">adjustFont</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">btn</span><span class="jsdoc-syntax">){
780         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">adjust </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">btn.cmd </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'increasefontsize' </span><span class="jsdoc-syntax">? 1 : -1;
781         </span><span class="jsdoc-comment">//if(Roo.isSafari){ // safari
782         //    adjust *= 2;
783        // }
784         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parseInt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.queryCommandValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'FontSize'</span><span class="jsdoc-syntax">)|| 3, 10);
785         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){ </span><span class="jsdoc-comment">// safari
786             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sm </span><span class="jsdoc-syntax">= { 10 : 1, 13: 2, 16:3, 18:4, 24: 5, 32:6, 48: 7 };
787             </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">=  (</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">&lt; 10) ? 10 : </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
788             </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">=  (</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">&gt; 48) ? 48 : </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
789             </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sm</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">]) == </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? 1 : </span><span class="jsdoc-var">sm</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">];
790
791         }
792
793
794         </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Math.max</span><span class="jsdoc-syntax">(1, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">adjust</span><span class="jsdoc-syntax">);
795
796         </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'FontSize'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v  </span><span class="jsdoc-syntax">);
797     },
798
799     </span><span class="jsdoc-var">onEditorEvent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">)
800     {
801
802
803         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e </span><span class="jsdoc-syntax">&amp;&amp; (</span><span class="jsdoc-var">e.ctrlKey </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">e.metaKey</span><span class="jsdoc-syntax">) &amp;&amp; </span><span class="jsdoc-var">e.keyCode </span><span class="jsdoc-syntax">=== 90) {
804             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// we do not handle this.. (undo manager does..)
805         </span><span class="jsdoc-syntax">}
806         </span><span class="jsdoc-comment">// clicking a 'block'?
807
808         // in theory this detects if the last element is not a br, then we try and do that.
809         // its so clicking in space at bottom triggers adding a br and moving the cursor.
810         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e </span><span class="jsdoc-syntax">&amp;&amp;
811             </span><span class="jsdoc-var">e.target.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">&amp;&amp;
812             </span><span class="jsdoc-var">e.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;mouseup&quot; </span><span class="jsdoc-syntax">&amp;&amp;
813             </span><span class="jsdoc-var">this.doc.body.lastChild
814            </span><span class="jsdoc-syntax">) {
815             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.body.lastChild</span><span class="jsdoc-syntax">;
816             </span><span class="jsdoc-comment">// gtx-trans is google translate plugin adding crap.
817             </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">lc.nodeType </span><span class="jsdoc-syntax">== 3 &amp;&amp; </span><span class="jsdoc-var">lc.nodeValue </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) || </span><span class="jsdoc-var">lc.id </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'gtx-trans'</span><span class="jsdoc-syntax">) {
818                 </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lc.previousSibling</span><span class="jsdoc-syntax">;
819             }
820             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lc.nodeType </span><span class="jsdoc-syntax">== 1 &amp;&amp; </span><span class="jsdoc-var">lc.nodeName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">) {
821             </span><span class="jsdoc-comment">// if last element is &lt;BR&gt; - then dont do anything.
822
823                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ns </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'br'</span><span class="jsdoc-syntax">);
824                 </span><span class="jsdoc-var">this.doc.body.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">);
825                 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
826                 </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">);
827                 </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
828                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
829                 </span><span class="jsdoc-var">sel.removeAllRanges</span><span class="jsdoc-syntax">();
830                 </span><span class="jsdoc-var">sel.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
831             }
832         }
833
834
835
836         </span><span class="jsdoc-var">this.fireEditorEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
837       </span><span class="jsdoc-comment">//  this.updateToolbar();
838         </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">//we can not sync so often.. sync cleans, so this breaks stuff
839     </span><span class="jsdoc-syntax">},
840
841     </span><span class="jsdoc-var">fireEditorEvent</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">)
842     {
843         </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
844     },
845
846     </span><span class="jsdoc-var">insertTag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tg</span><span class="jsdoc-syntax">)
847     {
848         </span><span class="jsdoc-comment">// could be a bit smarter... -&gt; wrap the current selected tRoo..
849         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'span' </span><span class="jsdoc-syntax">||
850             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'code' </span><span class="jsdoc-syntax">||
851             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'sup' </span><span class="jsdoc-syntax">||
852             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'sub'
853             </span><span class="jsdoc-syntax">) {
854
855             </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getSelection</span><span class="jsdoc-syntax">());
856             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">wrappingNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">());
857             </span><span class="jsdoc-var">wrappingNode.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range.extractContents</span><span class="jsdoc-syntax">());
858             </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">wrappingNode</span><span class="jsdoc-syntax">);
859
860             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
861
862
863
864         }
865         </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;formatblock&quot;</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-var">tg</span><span class="jsdoc-syntax">);
866         </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
867     },
868
869     </span><span class="jsdoc-var">insertText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">)
870     {
871
872
873         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createRange</span><span class="jsdoc-syntax">();
874         </span><span class="jsdoc-var">range.deleteContents</span><span class="jsdoc-syntax">();
875                </span><span class="jsdoc-comment">//alert(Sender.getAttribute('label'));
876
877         </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">));
878         </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
879     } ,
880
881
882
883     </span><span class="jsdoc-comment">/**
884      * Executes a Midas editor command on the editor document and performs necessary focus and
885      * toolbar updates. &lt;b&gt;This should only be called after the editor is initialized.&lt;/b&gt;
886      * @param {String} cmd The Midas command
887      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
888      */
889     </span><span class="jsdoc-var">relayCmd </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">)
890     {
891
892         </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
893             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyleft'</span><span class="jsdoc-syntax">:
894             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyright'</span><span class="jsdoc-syntax">:
895             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifycenter'</span><span class="jsdoc-syntax">:
896                 </span><span class="jsdoc-comment">// if we are in a cell, then we will adjust the
897                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getParentElement</span><span class="jsdoc-syntax">();
898                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">td </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">n.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'td'</span><span class="jsdoc-syntax">);
899                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">td</span><span class="jsdoc-syntax">) {
900                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">td</span><span class="jsdoc-syntax">);
901                     </span><span class="jsdoc-var">bl.textAlign </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cmd.replace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'justify'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
902                     </span><span class="jsdoc-var">bl.updateElement</span><span class="jsdoc-syntax">();
903                     </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
904                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
905                 }
906                 </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'styleWithCSS'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// 
907                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
908             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">:
909             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">:
910             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">:
911                 </span><span class="jsdoc-comment">// if there is no selection, then we insert, and set the curson inside it..
912                 </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'styleWithCSS'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
913                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
914
915
916             </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
917                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
918         }
919
920
921         </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
922         </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">);
923         </span><span class="jsdoc-var">this.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
924         </span><span class="jsdoc-comment">//this.updateToolbar();
925         </span><span class="jsdoc-var">this.owner.deferFocus</span><span class="jsdoc-syntax">();
926     },
927
928     </span><span class="jsdoc-comment">/**
929      * Executes a Midas editor command directly on the editor document.
930      * For visual commands, you should use {@link #relayCmd} instead.
931      * &lt;b&gt;This should only be called after the editor is initialized.&lt;/b&gt;
932      * @param {String} cmd The Midas command
933      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
934      */
935     </span><span class="jsdoc-var">execCmd </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">){
936         </span><span class="jsdoc-var">this.doc.execCommand</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-var">undefined </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">null </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">);
937         </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
938     },
939
940
941
942     </span><span class="jsdoc-comment">/**
943      * Inserts the passed text at the current cursor position. Note: the editor must be initialized and activated
944      * to insert tRoo.
945      * @param {String} text | dom node.. 
946      */
947     </span><span class="jsdoc-var">insertAtCursor </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">)
948     {
949
950         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.activated</span><span class="jsdoc-syntax">){
951             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
952         }
953
954         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isGecko </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.isOpera </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
955             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
956
957
958             </span><span class="jsdoc-comment">// from jquery ui (MIT licenced)
959             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
960             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">win </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win</span><span class="jsdoc-syntax">;
961
962             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">win.getSelection </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getRangeAt</span><span class="jsdoc-syntax">) {
963
964                 </span><span class="jsdoc-comment">// delete the existing?
965
966                 </span><span class="jsdoc-var">this.createRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getSelection</span><span class="jsdoc-syntax">())</span><span class="jsdoc-var">.deleteContents</span><span class="jsdoc-syntax">();
967                 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getRangeAt</span><span class="jsdoc-syntax">(0);
968                 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">;
969                 </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
970                 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
971                 </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
972
973                 </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.removeAllRanges</span><span class="jsdoc-syntax">();
974                 </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
975
976
977
978             } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">win.document.selection </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">win.document.selection.createRange</span><span class="jsdoc-syntax">) {
979                 </span><span class="jsdoc-comment">// no firefox support
980                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">txt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">text </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">text.outerHTML</span><span class="jsdoc-syntax">;
981                 </span><span class="jsdoc-var">win.document.selection.createRange</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.pasteHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">);
982
983             } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
984                 </span><span class="jsdoc-comment">// no firefox support
985                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">txt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">text </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">text.outerHTML</span><span class="jsdoc-syntax">;
986                 </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'InsertHTML'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">txt</span><span class="jsdoc-syntax">);
987             }
988             </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
989
990             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
991         }
992     },
993  </span><span class="jsdoc-comment">// private
994     </span><span class="jsdoc-var">mozKeyPress </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
995         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">){
996             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getCharCode</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">;
997
998             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">&gt; 0){
999                 </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">String.fromCharCode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toLowerCase</span><span class="jsdoc-syntax">();
1000                 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">){
1001                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'b'</span><span class="jsdoc-syntax">:
1002                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">;
1003                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1004                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'i'</span><span class="jsdoc-syntax">:
1005                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">;
1006                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1007
1008                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'u'</span><span class="jsdoc-syntax">:
1009                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">;
1010                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1011
1012                     </span><span class="jsdoc-comment">//case 'v':
1013                       //  this.cleanUpPaste.defer(100, this);
1014                       //  return;
1015
1016                 </span><span class="jsdoc-syntax">}
1017                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">){
1018
1019                     </span><span class="jsdoc-var">this.relayCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">);
1020                     </span><span class="jsdoc-comment">//this.win.focus();
1021                     //this.execCmd(cmd);
1022                     //this.deferFocus();
1023                     </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
1024                 }
1025
1026             }
1027         }
1028     },
1029
1030     </span><span class="jsdoc-comment">// private
1031     </span><span class="jsdoc-var">fixKeys </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){ </span><span class="jsdoc-comment">// load time branching for fastest keydown performance
1032
1033
1034         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">){
1035             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1036                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getKey</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">;
1037                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.TAB</span><span class="jsdoc-syntax">){
1038                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1039                     </span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.selection.createRange</span><span class="jsdoc-syntax">();
1040                     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
1041                         </span><span class="jsdoc-var">r.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1042                         </span><span class="jsdoc-var">r.pasteHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'&amp;#160;&amp;#160;&amp;#160;&amp;#160;'</span><span class="jsdoc-syntax">);
1043                         </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1044                     }
1045                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1046                 }
1047                 </span><span class="jsdoc-comment">/// this is handled by Roo.htmleditor.KeyEnter
1048                  /*
1049                 if(k == e.ENTER){
1050                     r = this.doc.selection.createRange();
1051                     if(r){
1052                         var target = r.parentElement();
1053                         if(!target || target.tagName.toLowerCase() != 'li'){
1054                             e.stopEvent();
1055                             r.pasteHTML('&lt;br/&gt;');
1056                             r.collapse(false);
1057                             r.select();
1058                         }
1059                     }
1060                 }
1061                 */
1062                 //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1063                 //    this.cleanUpPaste.defer(100, this);
1064                 //    return;
1065                 //}
1066
1067
1068             </span><span class="jsdoc-syntax">};
1069         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isOpera</span><span class="jsdoc-syntax">){
1070             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1071                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getKey</span><span class="jsdoc-syntax">();
1072                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.TAB</span><span class="jsdoc-syntax">){
1073                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1074                     </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
1075                     </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'InsertHTML'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'&amp;#160;&amp;#160;&amp;#160;&amp;#160;'</span><span class="jsdoc-syntax">);
1076                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1077                 }
1078
1079                 </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1080                 //    this.cleanUpPaste.defer(100, this);
1081                  //   return;
1082                 //}
1083
1084             </span><span class="jsdoc-syntax">};
1085         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
1086             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1087                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getKey</span><span class="jsdoc-syntax">();
1088
1089                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">e.TAB</span><span class="jsdoc-syntax">){
1090                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1091                     </span><span class="jsdoc-var">this.execCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'InsertText'</span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'\t'</span><span class="jsdoc-syntax">);
1092                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1093                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1094                 }
1095                  </span><span class="jsdoc-var">this.mozKeyPress</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
1096
1097                </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1098                  //   this.cleanUpPaste.defer(100, this);
1099                  //   return;
1100                // }
1101
1102              </span><span class="jsdoc-syntax">};
1103         }
1104     }(),
1105
1106     </span><span class="jsdoc-var">getAllAncestors</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1107     {
1108         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getSelectedNode</span><span class="jsdoc-syntax">();
1109         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= [];
1110         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">) {
1111             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// push blank onto stack..
1112             </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getParentElement</span><span class="jsdoc-syntax">();
1113         }
1114
1115
1116         </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">&amp;&amp; (</span><span class="jsdoc-var">p.nodeType </span><span class="jsdoc-syntax">== 1) &amp;&amp; (</span><span class="jsdoc-var">p.tagName.toLowerCase</span><span class="jsdoc-syntax">() != </span><span class="jsdoc-string">'body'</span><span class="jsdoc-syntax">)) {
1117             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">);
1118             </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.parentNode</span><span class="jsdoc-syntax">;
1119         }
1120         </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
1121         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">;
1122     },
1123     </span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
1124     </span><span class="jsdoc-var">lastSelNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
1125
1126
1127     </span><span class="jsdoc-var">getSelection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1128     {
1129         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
1130         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">Roo.lib.Selection.wrap</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.doc.selection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">);
1131     },
1132     </span><span class="jsdoc-comment">/**
1133      * Select a dom node
1134      * @param {DomElement} node the node to select
1135      */
1136     </span><span class="jsdoc-var">selectNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">collapse</span><span class="jsdoc-syntax">)
1137     {
1138         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createRange</span><span class="jsdoc-syntax">();
1139         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1140             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1141         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1142             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1143         }
1144         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">collapse </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
1145             </span><span class="jsdoc-var">nodeRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1146         }
1147         </span><span class="jsdoc-comment">//
1148         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
1149         </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
1150         </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
1151     },
1152
1153     </span><span class="jsdoc-var">getSelectedNode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1154     {
1155         </span><span class="jsdoc-comment">// this may only work on Gecko!!!
1156
1157         // should we cache this!!!!
1158
1159
1160
1161         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getSelection</span><span class="jsdoc-syntax">())</span><span class="jsdoc-var">.cloneRange</span><span class="jsdoc-syntax">();
1162
1163         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">) {
1164             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.parentElement</span><span class="jsdoc-syntax">();
1165             </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
1166                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">testRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.duplicate</span><span class="jsdoc-syntax">();
1167                 </span><span class="jsdoc-var">testRange.moveToElementText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">);
1168                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">testRange.inRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">)) {
1169                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1170                 }
1171                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">parent.nodeType </span><span class="jsdoc-syntax">!= 1) || (</span><span class="jsdoc-var">parent.tagName.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'body'</span><span class="jsdoc-syntax">)) {
1172                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1173                 }
1174                 </span><span class="jsdoc-var">parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parent.parentElement</span><span class="jsdoc-syntax">;
1175             }
1176             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">;
1177         }
1178
1179         </span><span class="jsdoc-comment">// is ancestor a text element.
1180         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ac </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">range.commonAncestorContainer</span><span class="jsdoc-syntax">;
1181         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ac.nodeType </span><span class="jsdoc-syntax">== 3) {
1182             </span><span class="jsdoc-var">ac </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ac.parentNode</span><span class="jsdoc-syntax">;
1183         }
1184
1185         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ac.childNodes</span><span class="jsdoc-syntax">;
1186
1187         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodes </span><span class="jsdoc-syntax">= [];
1188         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">other_nodes </span><span class="jsdoc-syntax">= [];
1189         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">has_other_nodes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
1190         </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">=0;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">&lt;</span><span class="jsdoc-var">ar.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
1191             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.nodeType </span><span class="jsdoc-syntax">== 3) &amp;&amp; (!</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.data.length</span><span class="jsdoc-syntax">)) { </span><span class="jsdoc-comment">// empty text ? 
1192                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1193             }
1194             </span><span class="jsdoc-comment">// fullly contained node.
1195
1196             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.rangeIntersectsNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) &amp;&amp; </span><span class="jsdoc-var">this.rangeCompareNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) == 3) {
1197                 </span><span class="jsdoc-var">nodes.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
1198                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1199             }
1200
1201             </span><span class="jsdoc-comment">// probably selected..
1202             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.nodeType </span><span class="jsdoc-syntax">== 1) &amp;&amp; </span><span class="jsdoc-var">this.rangeIntersectsNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) &amp;&amp; (</span><span class="jsdoc-var">this.rangeCompareNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) &gt; 0)) {
1203                 </span><span class="jsdoc-var">other_nodes.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
1204                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1205             }
1206             </span><span class="jsdoc-comment">// outer..
1207             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.rangeIntersectsNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">])|| (</span><span class="jsdoc-var">this.rangeCompareNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) == 0))  {
1208                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1209             }
1210
1211
1212             </span><span class="jsdoc-var">has_other_nodes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
1213         }
1214         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">nodes.length </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">other_nodes.length</span><span class="jsdoc-syntax">) {
1215             </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">other_nodes</span><span class="jsdoc-syntax">;
1216         }
1217         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">has_other_nodes </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">nodes.length </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-var">nodes.length </span><span class="jsdoc-syntax">&gt; 1)) {
1218             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
1219         }
1220
1221         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">[0];
1222     },
1223
1224
1225     </span><span class="jsdoc-var">createRange</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">)
1226     {
1227         </span><span class="jsdoc-comment">// this has strange effects when using with 
1228         // top toolbar - not sure if it's a great idea.
1229         //this.editor.contentWindow.focus();
1230         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">&quot;undefined&quot;</span><span class="jsdoc-syntax">) {
1231             </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1232                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">sel.getRangeAt </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sel.getRangeAt</span><span class="jsdoc-syntax">(0) : </span><span class="jsdoc-var">sel.createRange</span><span class="jsdoc-syntax">();
1233             } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1234                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
1235             }
1236         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
1237             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
1238         }
1239     },
1240     </span><span class="jsdoc-var">getParentElement</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1241     {
1242
1243         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
1244         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.isIE </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.doc.selection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.win.getSelection</span><span class="jsdoc-syntax">();
1245
1246         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
1247
1248         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1249             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.commonAncestorContainer</span><span class="jsdoc-syntax">;
1250             </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p.nodeType </span><span class="jsdoc-syntax">== 3) { </span><span class="jsdoc-comment">// text node
1251                 </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.parentNode</span><span class="jsdoc-syntax">;
1252             }
1253             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">;
1254         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1255             </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
1256         }
1257
1258     },
1259     </span><span class="jsdoc-comment">/***
1260      *
1261      * Range intersection.. the hard stuff...
1262      *  '-1' = before
1263      *  '0' = hits..
1264      *  '1' = after.
1265      *         [ -- selected range --- ]
1266      *   [fail]                        [fail]
1267      *
1268      *    basically..
1269      *      if end is before start or  hits it. fail.
1270      *      if start is after end or hits it fail.
1271      *
1272      *   if either hits (but other is outside. - then it's not 
1273      *   
1274      *    
1275      **/
1276
1277
1278     // @see http://www.thismuchiknow.co.uk/?p=64.
1279     </span><span class="jsdoc-var">rangeIntersectsNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
1280     {
1281         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createRange</span><span class="jsdoc-syntax">();
1282         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1283             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1284         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1285             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1286         }
1287
1288         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rangeStartRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
1289         </span><span class="jsdoc-var">rangeStartRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1290
1291         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rangeEndRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
1292         </span><span class="jsdoc-var">rangeEndRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
1293
1294         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeStartRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nodeRange.cloneRange</span><span class="jsdoc-syntax">();
1295         </span><span class="jsdoc-var">nodeStartRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1296
1297         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeEndRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nodeRange.cloneRange</span><span class="jsdoc-syntax">();
1298         </span><span class="jsdoc-var">nodeEndRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
1299
1300         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">rangeStartRange.compareBoundaryPoints</span><span class="jsdoc-syntax">(
1301                  </span><span class="jsdoc-var">Range.START_TO_START</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nodeEndRange</span><span class="jsdoc-syntax">) == -1 &amp;&amp;
1302                </span><span class="jsdoc-var">rangeEndRange.compareBoundaryPoints</span><span class="jsdoc-syntax">(
1303                  </span><span class="jsdoc-var">Range.START_TO_START</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nodeStartRange</span><span class="jsdoc-syntax">) == 1;
1304
1305
1306     },
1307     </span><span class="jsdoc-var">rangeCompareNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
1308     {
1309         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.ownerDocument.createRange</span><span class="jsdoc-syntax">();
1310         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1311             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1312         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1313             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1314         }
1315
1316
1317         </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1318
1319         </span><span class="jsdoc-var">nodeRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1320
1321         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ss </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.compareBoundaryPoints</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">Range.START_TO_START</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
1322         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ee </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.compareBoundaryPoints</span><span class="jsdoc-syntax">(  </span><span class="jsdoc-var">Range.END_TO_END</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
1323
1324         </span><span class="jsdoc-comment">//Roo.log(node.tagName + ': ss='+ss +', ee='+ee)
1325
1326         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeIsBefore   </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">ss </span><span class="jsdoc-syntax">== 1;
1327         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeIsAfter    </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ee </span><span class="jsdoc-syntax">== -1;
1328
1329         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeIsBefore </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">nodeIsAfter</span><span class="jsdoc-syntax">) {
1330             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0; </span><span class="jsdoc-comment">// outer
1331         </span><span class="jsdoc-syntax">}
1332         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">nodeIsBefore </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">nodeIsAfter</span><span class="jsdoc-syntax">) {
1333             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">1; </span><span class="jsdoc-comment">//right trailed.
1334         </span><span class="jsdoc-syntax">}
1335
1336         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeIsBefore </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">nodeIsAfter</span><span class="jsdoc-syntax">) {
1337             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">2;  </span><span class="jsdoc-comment">// left trailed.
1338         </span><span class="jsdoc-syntax">}
1339         </span><span class="jsdoc-comment">// fully contined.
1340         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">3;
1341     },
1342
1343     </span><span class="jsdoc-var">cleanWordChars </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">input</span><span class="jsdoc-syntax">) {</span><span class="jsdoc-comment">// change the chars to hex code
1344
1345        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">swapCodes  </span><span class="jsdoc-syntax">= [
1346             [    8211, </span><span class="jsdoc-string">&quot;&amp;#8211;&quot; </span><span class="jsdoc-syntax">],
1347             [    8212, </span><span class="jsdoc-string">&quot;&amp;#8212;&quot; </span><span class="jsdoc-syntax">],
1348             [    8216,  </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
1349             [    8217, </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
1350             [    8220, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
1351             [    8221, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
1352             [    8226, </span><span class="jsdoc-string">&quot;*&quot; </span><span class="jsdoc-syntax">],
1353             [    8230, </span><span class="jsdoc-string">&quot;...&quot; </span><span class="jsdoc-syntax">]
1354         ];
1355         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">output </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">input</span><span class="jsdoc-syntax">;
1356         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">swapCodes</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sw</span><span class="jsdoc-syntax">) {
1357             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">swapper </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">RegExp</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;\\u&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">sw</span><span class="jsdoc-syntax">[0]</span><span class="jsdoc-var">.toString</span><span class="jsdoc-syntax">(16), </span><span class="jsdoc-string">&quot;g&quot;</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// hex codes
1358
1359             </span><span class="jsdoc-var">output </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">output.replace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">swapper</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sw</span><span class="jsdoc-syntax">[1]);
1360         });
1361
1362         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">output</span><span class="jsdoc-syntax">;
1363     },
1364
1365
1366
1367
1368
1369     </span><span class="jsdoc-var">cleanUpChild </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
1370     {
1371
1372         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterComment</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">});
1373         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
1374                 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">,
1375                 </span><span class="jsdoc-var">attrib_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ablack</span><span class="jsdoc-syntax">,
1376                 </span><span class="jsdoc-var">attrib_clean </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.aclean</span><span class="jsdoc-syntax">,
1377                 </span><span class="jsdoc-var">style_white </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cwhite</span><span class="jsdoc-syntax">,
1378                 </span><span class="jsdoc-var">style_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cblack
1379         </span><span class="jsdoc-syntax">});
1380         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterBlack</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.black</span><span class="jsdoc-syntax">});
1381         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterKeepChildren</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.tag_remove</span><span class="jsdoc-syntax">} );
1382
1383
1384     },
1385
1386     </span><span class="jsdoc-comment">/**
1387      * Clean up MS wordisms...
1388      * @deprecated - use filter directly
1389      */
1390     </span><span class="jsdoc-var">cleanWord </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
1391     {
1392         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterWord</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.doc.body </span><span class="jsdoc-syntax">});
1393         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterKeepChildren</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: [ </span><span class="jsdoc-string">'FONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">':' </span><span class="jsdoc-syntax">]} );
1394
1395     },
1396
1397
1398     </span><span class="jsdoc-comment">/**
1399
1400      * @deprecated - use filters
1401      */
1402     </span><span class="jsdoc-var">cleanTableWidths </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">)
1403     {
1404         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterTableWidth</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">});
1405
1406
1407     },
1408
1409
1410
1411     </span><span class="jsdoc-var">applyBlacklists </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1412     {
1413         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">w </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.white</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.white </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.white  </span><span class="jsdoc-syntax">: [];
1414         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.black</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.black </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.black </span><span class="jsdoc-syntax">:  [];
1415
1416         </span><span class="jsdoc-var">this.aclean </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.aclean</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.aclean </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.aclean </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-var">Roo.HtmlEditorCore.aclean</span><span class="jsdoc-syntax">;
1417         </span><span class="jsdoc-var">this.ablack </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.ablack</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.ablack </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.ablack </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-var">Roo.HtmlEditorCore.ablack</span><span class="jsdoc-syntax">;
1418         </span><span class="jsdoc-var">this.tag_remove </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.tag_remove</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.tag_remove </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.tag_remove </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-var">Roo.HtmlEditorCore.tag_remove</span><span class="jsdoc-syntax">;
1419
1420         </span><span class="jsdoc-var">this.white </span><span class="jsdoc-syntax">= [];
1421         </span><span class="jsdoc-var">this.black </span><span class="jsdoc-syntax">= [];
1422         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.white</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1423             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1424                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1425             }
1426             </span><span class="jsdoc-var">this.white.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1427
1428         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1429
1430         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1431             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1432                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1433             }
1434             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.white.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1435                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1436             }
1437             </span><span class="jsdoc-var">this.white.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1438
1439         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1440
1441
1442         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.black</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1443             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1444                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1445             }
1446             </span><span class="jsdoc-var">this.black.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1447
1448         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1449
1450         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1451             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1452                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1453             }
1454             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.black.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1455                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1456             }
1457             </span><span class="jsdoc-var">this.black.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1458
1459         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1460
1461
1462         </span><span class="jsdoc-var">w </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.cwhite</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.cwhite </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.cwhite  </span><span class="jsdoc-syntax">: [];
1463         </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.owner.cblack</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.owner.cblack </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.owner.cblack </span><span class="jsdoc-syntax">:  [];
1464
1465         </span><span class="jsdoc-var">this.cwhite </span><span class="jsdoc-syntax">= [];
1466         </span><span class="jsdoc-var">this.cblack </span><span class="jsdoc-syntax">= [];
1467         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.cwhite</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1468             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1469                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1470             }
1471             </span><span class="jsdoc-var">this.cwhite.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1472
1473         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1474
1475         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1476             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1477                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1478             }
1479             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.cwhite.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1480                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1481             }
1482             </span><span class="jsdoc-var">this.cwhite.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1483
1484         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1485
1486
1487         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.cblack</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1488             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1489                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1490             }
1491             </span><span class="jsdoc-var">this.cblack.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1492
1493         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1494
1495         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) {
1496             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">w.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1497                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1498             }
1499             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.cblack.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">) &gt; -1) {
1500                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1501             }
1502             </span><span class="jsdoc-var">this.cblack.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1503
1504         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1505     },
1506
1507     </span><span class="jsdoc-var">setStylesheets </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">)
1508     {
1509         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'string'</span><span class="jsdoc-syntax">){
1510             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.iframe.contentDocument.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.createChild</span><span class="jsdoc-syntax">({
1511                 </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'link'</span><span class="jsdoc-syntax">,
1512                 </span><span class="jsdoc-var">rel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'stylesheet'</span><span class="jsdoc-syntax">,
1513                 </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1514                 </span><span class="jsdoc-var">href </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">stylesheets
1515             </span><span class="jsdoc-syntax">});
1516
1517             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1518         }
1519         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_this </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
1520
1521         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">) {
1522             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.length</span><span class="jsdoc-syntax">){
1523                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1524             }
1525
1526             </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">_this.iframe.contentDocument.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.createChild</span><span class="jsdoc-syntax">({
1527                 </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'link'</span><span class="jsdoc-syntax">,
1528                 </span><span class="jsdoc-var">rel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'stylesheet'</span><span class="jsdoc-syntax">,
1529                 </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1530                 </span><span class="jsdoc-var">href </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">s
1531             </span><span class="jsdoc-syntax">});
1532         });
1533
1534
1535     },
1536
1537
1538     </span><span class="jsdoc-var">updateLanguage </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1539     {
1540         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.iframe </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">this.iframe.contentDocument</span><span class="jsdoc-syntax">) {
1541             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1542         }
1543         </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.iframe.contentDocument.body</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.attr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;lang&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.language</span><span class="jsdoc-syntax">);
1544     },
1545
1546
1547     </span><span class="jsdoc-var">removeStylesheets </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1548     {
1549         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">_this </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
1550
1551         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">_this.iframe.contentDocument.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.select</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'link[rel=stylesheet]'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.elements</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
1552             </span><span class="jsdoc-var">s.remove</span><span class="jsdoc-syntax">();
1553         });
1554     },
1555
1556     </span><span class="jsdoc-var">setStyle </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">)
1557     {
1558         </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.iframe.contentDocument.head</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.createChild</span><span class="jsdoc-syntax">({
1559             </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">,
1560             </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1561             </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">style
1562         </span><span class="jsdoc-syntax">});
1563
1564         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1565     }
1566
1567     </span><span class="jsdoc-comment">// hide stuff that is not compatible
1568     /**
1569      * @event blur
1570      * @hide
1571      */
1572     /**
1573      * @event change
1574      * @hide
1575      */
1576     /**
1577      * @event focus
1578      * @hide
1579      */
1580     /**
1581      * @event specialkey
1582      * @hide
1583      */
1584     /**
1585      * @cfg {String} fieldClass @hide
1586      */
1587     /**
1588      * @cfg {String} focusClass @hide
1589      */
1590     /**
1591      * @cfg {String} autoCreate @hide
1592      */
1593     /**
1594      * @cfg {String} inputType @hide
1595      */
1596     /**
1597      * @cfg {String} invalidClass @hide
1598      */
1599     /**
1600      * @cfg {String} invalidText @hide
1601      */
1602     /**
1603      * @cfg {String} msgFx @hide
1604      */
1605     /**
1606      * @cfg {String} validateOnBlur @hide
1607      */
1608 </span><span class="jsdoc-syntax">});
1609
1610 </span><span class="jsdoc-var">Roo.HtmlEditorCore.white </span><span class="jsdoc-syntax">= [
1611         </span><span class="jsdoc-string">'AREA'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'IMG'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'INPUT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'HR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'WBR'</span><span class="jsdoc-syntax">,
1612
1613        </span><span class="jsdoc-string">'ADDRESS'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BLOCKQUOTE'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'CENTER'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'DD'</span><span class="jsdoc-syntax">,      </span><span class="jsdoc-string">'DIR'</span><span class="jsdoc-syntax">,       </span><span class="jsdoc-string">'DIV'</span><span class="jsdoc-syntax">,
1614        </span><span class="jsdoc-string">'DL'</span><span class="jsdoc-syntax">,      </span><span class="jsdoc-string">'DT'</span><span class="jsdoc-syntax">,         </span><span class="jsdoc-string">'H1'</span><span class="jsdoc-syntax">,     </span><span class="jsdoc-string">'H2'</span><span class="jsdoc-syntax">,      </span><span class="jsdoc-string">'H3'</span><span class="jsdoc-syntax">,        </span><span class="jsdoc-string">'H4'</span><span class="jsdoc-syntax">,
1615        </span><span class="jsdoc-string">'H5'</span><span class="jsdoc-syntax">,      </span><span class="jsdoc-string">'H6'</span><span class="jsdoc-syntax">,         </span><span class="jsdoc-string">'HR'</span><span class="jsdoc-syntax">,     </span><span class="jsdoc-string">'ISINDEX'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'LISTING'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'MARQUEE'</span><span class="jsdoc-syntax">,
1616        </span><span class="jsdoc-string">'MENU'</span><span class="jsdoc-syntax">,    </span><span class="jsdoc-string">'MULTICOL'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'OL'</span><span class="jsdoc-syntax">,     </span><span class="jsdoc-string">'P'</span><span class="jsdoc-syntax">,       </span><span class="jsdoc-string">'PLAINTEXT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'PRE'</span><span class="jsdoc-syntax">,
1617        </span><span class="jsdoc-string">'TABLE'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'UL'</span><span class="jsdoc-syntax">,         </span><span class="jsdoc-string">'XMP'</span><span class="jsdoc-syntax">,
1618
1619        </span><span class="jsdoc-string">'CAPTION'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'COL'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'COLGROUP'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TBODY'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TD'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TFOOT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TH'</span><span class="jsdoc-syntax">,
1620       </span><span class="jsdoc-string">'THEAD'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'TR'</span><span class="jsdoc-syntax">,
1621
1622       </span><span class="jsdoc-string">'DIR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'MENU'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'OL'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'UL'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'DL'</span><span class="jsdoc-syntax">,
1623
1624       </span><span class="jsdoc-string">'EMBED'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'OBJECT'
1625 </span><span class="jsdoc-syntax">];
1626
1627
1628 </span><span class="jsdoc-var">Roo.HtmlEditorCore.black </span><span class="jsdoc-syntax">= [
1629     </span><span class="jsdoc-comment">//    'embed',  'object', // enable - backend responsiblity to clean thiese
1630         </span><span class="jsdoc-string">'APPLET'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// 
1631         </span><span class="jsdoc-string">'BASE'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'BASEFONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BGSOUND'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BLINK'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">,
1632         </span><span class="jsdoc-string">'FRAME'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'FRAMESET'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'HEAD'</span><span class="jsdoc-syntax">,    </span><span class="jsdoc-string">'HTML'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'ILAYER'</span><span class="jsdoc-syntax">,
1633         </span><span class="jsdoc-string">'IFRAME'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'LAYER'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'LINK'</span><span class="jsdoc-syntax">,     </span><span class="jsdoc-string">'META'</span><span class="jsdoc-syntax">,    </span><span class="jsdoc-string">'OBJECT'</span><span class="jsdoc-syntax">,
1634         </span><span class="jsdoc-string">'SCRIPT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'STYLE' </span><span class="jsdoc-syntax">,</span><span class="jsdoc-string">'TITLE'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'XML'</span><span class="jsdoc-syntax">,
1635         </span><span class="jsdoc-comment">//'FONT' // CLEAN LATER..
1636         </span><span class="jsdoc-string">'COLGROUP'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'COL'   </span><span class="jsdoc-comment">// messy tables.
1637
1638
1639 </span><span class="jsdoc-syntax">];
1640 </span><span class="jsdoc-var">Roo.HtmlEditorCore.clean </span><span class="jsdoc-syntax">= [ </span><span class="jsdoc-comment">// ?? needed???
1641      </span><span class="jsdoc-string">'SCRIPT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'STYLE'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TITLE'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'XML'
1642 </span><span class="jsdoc-syntax">];
1643 </span><span class="jsdoc-var">Roo.HtmlEditorCore.tag_remove </span><span class="jsdoc-syntax">= [
1644     </span><span class="jsdoc-string">'FONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TBODY'
1645 </span><span class="jsdoc-syntax">];
1646 </span><span class="jsdoc-comment">// attributes..
1647
1648 </span><span class="jsdoc-var">Roo.HtmlEditorCore.ablack </span><span class="jsdoc-syntax">= [
1649     </span><span class="jsdoc-string">'on'
1650 </span><span class="jsdoc-syntax">];
1651
1652 </span><span class="jsdoc-var">Roo.HtmlEditorCore.aclean </span><span class="jsdoc-syntax">= [
1653     </span><span class="jsdoc-string">'action'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'background'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'codebase'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'dynsrc'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'lowsrc'
1654 </span><span class="jsdoc-syntax">];
1655
1656 </span><span class="jsdoc-comment">// protocols..
1657 </span><span class="jsdoc-var">Roo.HtmlEditorCore.pwhite</span><span class="jsdoc-syntax">= [
1658         </span><span class="jsdoc-string">'http'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'https'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'mailto'
1659 </span><span class="jsdoc-syntax">];
1660
1661 </span><span class="jsdoc-comment">// white listed style attributes.
1662 </span><span class="jsdoc-var">Roo.HtmlEditorCore.cwhite</span><span class="jsdoc-syntax">= [
1663       </span><span class="jsdoc-comment">//  'text-align', /// default is to allow most things..
1664
1665
1666 //        'font-size'//??
1667 </span><span class="jsdoc-syntax">];
1668
1669 </span><span class="jsdoc-comment">// black listed style attributes.
1670 </span><span class="jsdoc-var">Roo.HtmlEditorCore.cblack</span><span class="jsdoc-syntax">= [
1671       </span><span class="jsdoc-comment">//  'font-size' -- this can be set by the project 
1672 </span><span class="jsdoc-syntax">];
1673
1674
1675
1676
1677     </span></code></body></html>