Merge branch 'master' of http://git.roojs.com/roojs1
[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-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">bd.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">) {
380                     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fig </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">);
381                     </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fig</span><span class="jsdoc-syntax">) {
382                         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bf </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.BlockFigure</span><span class="jsdoc-syntax">({
383                             </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">fig
384                         </span><span class="jsdoc-syntax">});
385                         </span><span class="jsdoc-var">bf.updateElement</span><span class="jsdoc-syntax">();
386                     }
387
388                 });
389                 </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">});
390             }
391
392             </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">;
393
394             </span><span class="jsdoc-comment">//?? tidy?
395             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
396                 </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">div</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">});
397                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
398                     </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">,
399                     </span><span class="jsdoc-var">attrib_white </span><span class="jsdoc-syntax">: [
400                             </span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">,
401                             </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">,
402                             </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
403                             </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">,
404                             </span><span class="jsdoc-string">'colspan'</span><span class="jsdoc-syntax">,
405                             </span><span class="jsdoc-string">'rowspan'</span><span class="jsdoc-syntax">,
406                             </span><span class="jsdoc-string">'data-display'</span><span class="jsdoc-syntax">,
407                             </span><span class="jsdoc-string">'data-caption-display'</span><span class="jsdoc-syntax">,
408                             </span><span class="jsdoc-string">'data-width'</span><span class="jsdoc-syntax">,
409                             </span><span class="jsdoc-string">'data-caption'</span><span class="jsdoc-syntax">,
410                             </span><span class="jsdoc-string">'start' </span><span class="jsdoc-syntax">,
411                             </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">,
412                             </span><span class="jsdoc-comment">// youtube embed.
413                             </span><span class="jsdoc-string">'class'</span><span class="jsdoc-syntax">,
414                             </span><span class="jsdoc-string">'allowfullscreen'</span><span class="jsdoc-syntax">,
415                             </span><span class="jsdoc-string">'frameborder'</span><span class="jsdoc-syntax">,
416                             </span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">,
417                             </span><span class="jsdoc-string">'height'</span><span class="jsdoc-syntax">,
418                             </span><span class="jsdoc-string">'alt'
419                             </span><span class="jsdoc-syntax">],
420                     </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">]
421                 });
422                 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterEmpty</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">});
423
424                 </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">({
425                     </span><span class="jsdoc-var">inner</span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">true
426                 </span><span class="jsdoc-syntax">});
427                 </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">);
428
429             }
430
431
432             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
433                 </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!
434                 </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">;
435                 </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]){
436                     </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">;
437                 }
438             }
439             </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">);
440             </span><span class="jsdoc-comment">// fix up the special chars.. normaly like back quotes in word...
441             // however we do not want to do this with chinese..
442             </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">) {
443
444                 </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">();
445
446                 </span><span class="jsdoc-comment">// Get the character value, handling surrogate pairs
447                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">match.length </span><span class="jsdoc-syntax">== 2) {
448                     </span><span class="jsdoc-comment">// It's a surrogate pair, calculate the Unicode code point
449                     </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;
450                     </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;
451                     </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;
452                 }  </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(
453                     (</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 ) ||
454                     (</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 ) ||
455                     (</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 )
456                 ) {
457                         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">match</span><span class="jsdoc-syntax">;
458                 }
459
460                 </span><span class="jsdoc-comment">// No, use a numeric entity. Here we brazenly (and possibly mistakenly)
461                 </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">;
462
463
464             });
465
466
467
468             </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">){
469                 </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">;
470                 </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">);
471             }
472         }
473     },
474
475     </span><span class="jsdoc-comment">/**
476      * TEXTAREA -&gt; EDITABLE
477      * Protected method that will not generally be called directly. Pushes the value of the textarea
478      * into the iframe editor.
479      */
480     </span><span class="jsdoc-var">pushValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
481     {
482         </span><span class="jsdoc-comment">//Roo.log(&quot;HtmlEditorCore:pushValue (TEXT-&gt;EDITOR)&quot;);
483         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
484             </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">();
485
486
487             </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">){
488                 </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">);
489                 </span><span class="jsdoc-var">d.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
490
491                 </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">;
492                 </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">);
493             }
494             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
495                 </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
496                 </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
497             </span><span class="jsdoc-syntax">}
498             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
499                 </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">);
500             }
501
502             </span><span class="jsdoc-var">this.updateLanguage</span><span class="jsdoc-syntax">();
503
504             </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">;
505             </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">) {
506                 </span><span class="jsdoc-comment">// add an extra line at the end.
507                 </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">));
508             }
509
510
511         }
512     },
513
514     </span><span class="jsdoc-comment">// private
515     </span><span class="jsdoc-var">deferFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
516         </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">);
517     },
518
519     </span><span class="jsdoc-comment">// doc'ed in Field
520     </span><span class="jsdoc-var">focus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
521         </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">){
522             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
523         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
524             </span><span class="jsdoc-var">this.el.focus</span><span class="jsdoc-syntax">();
525         }
526     },
527
528     </span><span class="jsdoc-var">assignDocWin</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
529     {
530         </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">;
531
532          </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">){
533             </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">;
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">;
535         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
536 </span><span class="jsdoc-comment">//            if (!Roo.get(this.frameId)) {
537 //                return;
538 //            }
539 //            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
540 //            this.win = Roo.get(this.frameId).dom.contentWindow;
541
542             </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">) {
543                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
544             }
545
546             </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">);
547             </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">);
548         }
549     },
550
551     </span><span class="jsdoc-comment">// private
552     </span><span class="jsdoc-var">initEditor </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
553         </span><span class="jsdoc-comment">//console.log(&quot;INIT EDITOR&quot;);
554         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
555
556
557
558         </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">;
559         </span><span class="jsdoc-var">this.doc.open</span><span class="jsdoc-syntax">();
560         </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">());
561         </span><span class="jsdoc-var">this.doc.close</span><span class="jsdoc-syntax">();
562
563         </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">);
564         </span><span class="jsdoc-comment">//var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
565         // this copies styles from the containing element into thsi one..
566         // not sure why we need all of this..
567         //var ss = this.el.getStyles('font-size', 'background-image', 'background-repeat');
568
569         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
570         //ss['background-attachment'] = 'fixed'; // w3c
571         </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
572         </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">);
573
574         </span><span class="jsdoc-comment">//Roo.DomHelper.applyStyles(dbody, ss);
575         </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">, {
576
577             </span><span class="jsdoc-string">'mouseup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
578             </span><span class="jsdoc-string">'dblclick'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
579             </span><span class="jsdoc-string">'click'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
580             </span><span class="jsdoc-string">'keyup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
581
582             </span><span class="jsdoc-var">buffer</span><span class="jsdoc-syntax">:100,
583             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
584         </span><span class="jsdoc-syntax">});
585         </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">, {
586             </span><span class="jsdoc-string">'paste'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onPasteEvent</span><span class="jsdoc-syntax">,
587             </span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
588         </span><span class="jsdoc-syntax">});
589         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isGecko</span><span class="jsdoc-syntax">){
590             </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">);
591         }
592         </span><span class="jsdoc-comment">//??? needed???
593         </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">){
594             </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">);
595         }
596         </span><span class="jsdoc-var">this.initialized </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
597
598
599         </span><span class="jsdoc-comment">// initialize special key events - enter
600         </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">});
601
602
603
604         </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">);
605         </span><span class="jsdoc-var">this.pushValue</span><span class="jsdoc-syntax">();
606     },
607     </span><span class="jsdoc-comment">// this is to prevent a href clicks resulting in a redirect?
608
609     </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">)
610     {
611         </span><span class="jsdoc-comment">// I think we better assume paste is going to be a dirty load of rubish from word..
612
613         // even pasting into a 'email version' of this widget will have to clean up that mess.
614         </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">);
615
616         </span><span class="jsdoc-comment">// check what type of paste - if it's an image, then handle it differently.
617         </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) {
618             </span><span class="jsdoc-comment">// pasting images? 
619             </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">) ||
620                 (</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">) ||
621                 (</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">);
622
623             </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">();
624             </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">;
625             </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">()
626             {
627
628                 </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">;
629                 </span><span class="jsdoc-comment">// is insert asycn?
630                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.enableBlocks</span><span class="jsdoc-syntax">) {
631
632                     </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">) {
633                         </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
634                             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
635                         }
636                         </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">({
637                             </span><span class="jsdoc-var">image_src  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">img.src
638                         </span><span class="jsdoc-syntax">});
639                         </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..
640
641                     </span><span class="jsdoc-syntax">});
642                 }
643                 </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">));
644                 </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">);
645             });
646             </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]);
647
648             </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
649
650             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
651         }
652         </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 ) {
653             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
654         }
655         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">images </span><span class="jsdoc-syntax">= [];
656         </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
657         </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) {
658             </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">));
659             </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">) : [];
660         }
661         </span><span class="jsdoc-comment">// Roo.log(images);
662         // Roo.log(imgs);
663         // fixme..
664         </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.
665                        </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">(); })
666                        </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">; });
667
668         </span><span class="jsdoc-comment">//Roo.log(html);
669         </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">);
670
671         </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">;
672
673
674         </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">();
675         </span><span class="jsdoc-comment">// check if d contains a table, and prevent nesting??
676         //Roo.log(d.getElementsByTagName('table'));
677         //Roo.log(sn);
678         //Roo.log(sn.closest('table'));
679         </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">)) {
680             </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
681             </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">);
682             </span><span class="jsdoc-comment">//Roo.log(&quot;prevent?&quot;); // fixme - 
683             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
684         }
685
686
687
688         </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) {
689             </span><span class="jsdoc-comment">// replace all v:imagedata - with img.
690             </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">));
691             </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">) {
692                 </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">);
693                 </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
694             });
695
696
697             </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">) {
698                 </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">]);
699             });
700         }
701         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
702             </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">});
703
704             </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">});
705             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
706                 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">,
707                 </span><span class="jsdoc-var">attrib_white </span><span class="jsdoc-syntax">: [
708                     </span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">,
709                     </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">,
710                     </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
711                     </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">,
712                     </span><span class="jsdoc-string">'colspan'</span><span class="jsdoc-syntax">,
713                     </span><span class="jsdoc-string">'rowspan'
714                 </span><span class="jsdoc-comment">/*  THESE ARE NOT ALLWOED FOR PASTE
715                  *    'data-display',
716                     'data-caption-display',
717                     'data-width',
718                     'data-caption',
719                     'start' ,
720                     'style',
721                     // youtube embed.
722                     'class',
723                     'allowfullscreen',
724                     'frameborder',
725                     'width',
726                     'height',
727                     'alt'
728                     */
729                     </span><span class="jsdoc-syntax">],
730                 </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">]
731             });
732             </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">});
733             </span><span class="jsdoc-comment">// should be fonts..
734             </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">]} );
735             </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">});
736             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterHashLink</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">});
737             </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">});
738             </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">});
739             </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">});
740             </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterEmpty</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">});
741
742
743         }
744         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
745
746             </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">) {
747                 </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
748                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
749                 }
750                 </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">({
751                     </span><span class="jsdoc-var">image_src  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">img.src
752                 </span><span class="jsdoc-syntax">});
753                 </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..
754
755             </span><span class="jsdoc-syntax">});
756         }
757
758
759         </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">));
760         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
761             </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">);
762         }
763
764
765         </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
766         </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">);
767         </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
768         </span><span class="jsdoc-comment">// default behaveiour should be our local cleanup paste? (optional?)
769         // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
770         //this.owner.fireEvent('paste', e, v);
771     </span><span class="jsdoc-syntax">},
772     </span><span class="jsdoc-comment">// private
773     </span><span class="jsdoc-var">onDestroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
774
775
776
777         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.rendered</span><span class="jsdoc-syntax">){
778
779             </span><span class="jsdoc-comment">//for (var i =0; i &lt; this.toolbars.length;i++) {
780             //    // fixme - ask toolbars for heights?
781             //    this.toolbars[i].onDestroy();
782            // }
783
784             //this.wrap.dom.innerHTML = '';
785             //this.wrap.remove();
786         </span><span class="jsdoc-syntax">}
787     },
788
789     </span><span class="jsdoc-comment">// private
790     </span><span class="jsdoc-var">onFirstFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
791
792         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
793         </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">));
794
795         </span><span class="jsdoc-var">this.activated </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
796
797
798         </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
799             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
800             </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">();
801             </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){
802                 </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);
803                 </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">));
804                 </span><span class="jsdoc-var">r.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
805                 </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
806             }
807             </span><span class="jsdoc-keyword">try</span><span class="jsdoc-syntax">{
808                 </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">);
809                 </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">);
810             }</span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){}
811         }
812         </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">);
813     },
814
815     </span><span class="jsdoc-comment">// private
816     </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">){
817         </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;
818         </span><span class="jsdoc-comment">//if(Roo.isSafari){ // safari
819         //    adjust *= 2;
820        // }
821         </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);
822         </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
823             </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 };
824             </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">;
825             </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">;
826             </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">];
827
828         }
829
830
831         </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">);
832
833         </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">);
834     },
835
836     </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">)
837     {
838
839
840         </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) {
841             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// we do not handle this.. (undo manager does..)
842         </span><span class="jsdoc-syntax">}
843         </span><span class="jsdoc-comment">// clicking a 'block'?
844
845         // in theory this detects if the last element is not a br, then we try and do that.
846         // its so clicking in space at bottom triggers adding a br and moving the cursor.
847         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e </span><span class="jsdoc-syntax">&amp;&amp;
848             </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;
849             </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;
850             </span><span class="jsdoc-var">this.doc.body.lastChild
851            </span><span class="jsdoc-syntax">) {
852             </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">;
853             </span><span class="jsdoc-comment">// gtx-trans is google translate plugin adding crap.
854             </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">) {
855                 </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lc.previousSibling</span><span class="jsdoc-syntax">;
856             }
857             </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">) {
858             </span><span class="jsdoc-comment">// if last element is &lt;BR&gt; - then dont do anything.
859
860                 </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">);
861                 </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">);
862                 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
863                 </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">);
864                 </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
865                 </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">();
866                 </span><span class="jsdoc-var">sel.removeAllRanges</span><span class="jsdoc-syntax">();
867                 </span><span class="jsdoc-var">sel.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
868             }
869         }
870
871
872
873         </span><span class="jsdoc-var">this.fireEditorEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
874       </span><span class="jsdoc-comment">//  this.updateToolbar();
875         </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
876     </span><span class="jsdoc-syntax">},
877
878     </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">)
879     {
880         </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">);
881     },
882
883     </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">)
884     {
885         </span><span class="jsdoc-comment">// could be a bit smarter... -&gt; wrap the current selected tRoo..
886         </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">||
887             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'code' </span><span class="jsdoc-syntax">||
888             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'sup' </span><span class="jsdoc-syntax">||
889             </span><span class="jsdoc-var">tg.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'sub'
890             </span><span class="jsdoc-syntax">) {
891
892             </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">());
893             </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">());
894             </span><span class="jsdoc-var">wrappingNode.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range.extractContents</span><span class="jsdoc-syntax">());
895             </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">wrappingNode</span><span class="jsdoc-syntax">);
896
897             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
898
899
900
901         }
902         </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">);
903         </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
904     },
905
906     </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">)
907     {
908
909
910         </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">();
911         </span><span class="jsdoc-var">range.deleteContents</span><span class="jsdoc-syntax">();
912                </span><span class="jsdoc-comment">//alert(Sender.getAttribute('label'));
913
914         </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">));
915         </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
916     } ,
917
918
919
920     </span><span class="jsdoc-comment">/**
921      * Executes a Midas editor command on the editor document and performs necessary focus and
922      * toolbar updates. &lt;b&gt;This should only be called after the editor is initialized.&lt;/b&gt;
923      * @param {String} cmd The Midas command
924      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
925      */
926     </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">)
927     {
928
929         </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
930             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyleft'</span><span class="jsdoc-syntax">:
931             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyright'</span><span class="jsdoc-syntax">:
932             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifycenter'</span><span class="jsdoc-syntax">:
933                 </span><span class="jsdoc-comment">// if we are in a cell, then we will adjust the
934                 </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">();
935                 </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">);
936                 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">td</span><span class="jsdoc-syntax">) {
937                     </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">);
938                     </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">);
939                     </span><span class="jsdoc-var">bl.updateElement</span><span class="jsdoc-syntax">();
940                     </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">);
941                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
942                 }
943                 </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">// 
944                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
945             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">:
946             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">:
947             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">:
948                 </span><span class="jsdoc-comment">// if there is no selection, then we insert, and set the curson inside it..
949                 </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">);
950                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
951
952
953             </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
954                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
955         }
956
957
958         </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
959         </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">);
960         </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">);
961         </span><span class="jsdoc-comment">//this.updateToolbar();
962         </span><span class="jsdoc-var">this.owner.deferFocus</span><span class="jsdoc-syntax">();
963     },
964
965     </span><span class="jsdoc-comment">/**
966      * Executes a Midas editor command directly on the editor document.
967      * For visual commands, you should use {@link #relayCmd} instead.
968      * &lt;b&gt;This should only be called after the editor is initialized.&lt;/b&gt;
969      * @param {String} cmd The Midas command
970      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
971      */
972     </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">){
973         </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">);
974         </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
975     },
976
977
978
979     </span><span class="jsdoc-comment">/**
980      * Inserts the passed text at the current cursor position. Note: the editor must be initialized and activated
981      * to insert tRoo.
982      * @param {String} text | dom node.. 
983      */
984     </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">)
985     {
986
987         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.activated</span><span class="jsdoc-syntax">){
988             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
989         }
990
991         </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">){
992             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
993
994
995             </span><span class="jsdoc-comment">// from jquery ui (MIT licenced)
996             </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">;
997             </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">;
998
999             </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">) {
1000
1001                 </span><span class="jsdoc-comment">// delete the existing?
1002
1003                 </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">();
1004                 </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);
1005                 </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">;
1006                 </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1007                 </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
1008                 </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
1009
1010                 </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.removeAllRanges</span><span class="jsdoc-syntax">();
1011                 </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">);
1012
1013
1014
1015             } </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">) {
1016                 </span><span class="jsdoc-comment">// no firefox support
1017                 </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">;
1018                 </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">);
1019
1020             } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
1021                 </span><span class="jsdoc-comment">// no firefox support
1022                 </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">;
1023                 </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">);
1024             }
1025             </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
1026
1027             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1028         }
1029     },
1030  </span><span class="jsdoc-comment">// private
1031     </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">){
1032         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.ctrlKey</span><span class="jsdoc-syntax">){
1033             </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">;
1034
1035             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">&gt; 0){
1036                 </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">();
1037                 </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">){
1038                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'b'</span><span class="jsdoc-syntax">:
1039                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">;
1040                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1041                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'i'</span><span class="jsdoc-syntax">:
1042                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">;
1043                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1044
1045                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'u'</span><span class="jsdoc-syntax">:
1046                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">;
1047                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1048
1049                     </span><span class="jsdoc-comment">//case 'v':
1050                       //  this.cleanUpPaste.defer(100, this);
1051                       //  return;
1052
1053                 </span><span class="jsdoc-syntax">}
1054                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">){
1055
1056                     </span><span class="jsdoc-var">this.relayCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">);
1057                     </span><span class="jsdoc-comment">//this.win.focus();
1058                     //this.execCmd(cmd);
1059                     //this.deferFocus();
1060                     </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
1061                 }
1062
1063             }
1064         }
1065     },
1066
1067     </span><span class="jsdoc-comment">// private
1068     </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
1069
1070
1071         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">){
1072             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1073                 </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">;
1074                 </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">){
1075                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1076                     </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">();
1077                     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
1078                         </span><span class="jsdoc-var">r.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1079                         </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">);
1080                         </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1081                     }
1082                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1083                 }
1084                 </span><span class="jsdoc-comment">/// this is handled by Roo.htmleditor.KeyEnter
1085                  /*
1086                 if(k == e.ENTER){
1087                     r = this.doc.selection.createRange();
1088                     if(r){
1089                         var target = r.parentElement();
1090                         if(!target || target.tagName.toLowerCase() != 'li'){
1091                             e.stopEvent();
1092                             r.pasteHTML('&lt;br/&gt;');
1093                             r.collapse(false);
1094                             r.select();
1095                         }
1096                     }
1097                 }
1098                 */
1099                 //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1100                 //    this.cleanUpPaste.defer(100, this);
1101                 //    return;
1102                 //}
1103
1104
1105             </span><span class="jsdoc-syntax">};
1106         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isOpera</span><span class="jsdoc-syntax">){
1107             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1108                 </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">();
1109                 </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">){
1110                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1111                     </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
1112                     </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">);
1113                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1114                 }
1115
1116                 </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1117                 //    this.cleanUpPaste.defer(100, this);
1118                  //   return;
1119                 //}
1120
1121             </span><span class="jsdoc-syntax">};
1122         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
1123             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
1124                 </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">();
1125
1126                 </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">){
1127                     </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
1128                     </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">);
1129                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
1130                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1131                 }
1132                  </span><span class="jsdoc-var">this.mozKeyPress</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
1133
1134                </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
1135                  //   this.cleanUpPaste.defer(100, this);
1136                  //   return;
1137                // }
1138
1139              </span><span class="jsdoc-syntax">};
1140         }
1141     }(),
1142
1143     </span><span class="jsdoc-var">getAllAncestors</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1144     {
1145         </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">();
1146         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= [];
1147         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">) {
1148             </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..
1149             </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getParentElement</span><span class="jsdoc-syntax">();
1150         }
1151
1152
1153         </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">)) {
1154             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">);
1155             </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.parentNode</span><span class="jsdoc-syntax">;
1156         }
1157         </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">);
1158         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">;
1159     },
1160     </span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
1161     </span><span class="jsdoc-var">lastSelNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
1162
1163
1164     </span><span class="jsdoc-var">getSelection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1165     {
1166         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
1167         </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">);
1168     },
1169     </span><span class="jsdoc-comment">/**
1170      * Select a dom node
1171      * @param {DomElement} node the node to select
1172      */
1173     </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">)
1174     {
1175         </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">();
1176         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1177             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1178         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1179             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1180         }
1181         </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">) {
1182             </span><span class="jsdoc-var">nodeRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1183         }
1184         </span><span class="jsdoc-comment">//
1185         </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">();
1186         </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
1187         </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
1188     },
1189
1190     </span><span class="jsdoc-var">getSelectedNode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1191     {
1192         </span><span class="jsdoc-comment">// this may only work on Gecko!!!
1193
1194         // should we cache this!!!!
1195
1196
1197
1198         </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">();
1199
1200         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">) {
1201             </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">();
1202             </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) {
1203                 </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">();
1204                 </span><span class="jsdoc-var">testRange.moveToElementText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">);
1205                 </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">)) {
1206                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1207                 }
1208                 </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">)) {
1209                     </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
1210                 }
1211                 </span><span class="jsdoc-var">parent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">parent.parentElement</span><span class="jsdoc-syntax">;
1212             }
1213             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">parent</span><span class="jsdoc-syntax">;
1214         }
1215
1216         </span><span class="jsdoc-comment">// is ancestor a text element.
1217         </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">;
1218         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ac.nodeType </span><span class="jsdoc-syntax">== 3) {
1219             </span><span class="jsdoc-var">ac </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ac.parentNode</span><span class="jsdoc-syntax">;
1220         }
1221
1222         </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">;
1223
1224         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodes </span><span class="jsdoc-syntax">= [];
1225         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">other_nodes </span><span class="jsdoc-syntax">= [];
1226         </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">;
1227         </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">++) {
1228             </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 ? 
1229                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1230             }
1231             </span><span class="jsdoc-comment">// fullly contained node.
1232
1233             </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) {
1234                 </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">]);
1235                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1236             }
1237
1238             </span><span class="jsdoc-comment">// probably selected..
1239             </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)) {
1240                 </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">]);
1241                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1242             }
1243             </span><span class="jsdoc-comment">// outer..
1244             </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))  {
1245                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
1246             }
1247
1248
1249             </span><span class="jsdoc-var">has_other_nodes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
1250         }
1251         </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">) {
1252             </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">other_nodes</span><span class="jsdoc-syntax">;
1253         }
1254         </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)) {
1255             </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
1256         }
1257
1258         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">[0];
1259     },
1260
1261
1262     </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">)
1263     {
1264         </span><span class="jsdoc-comment">// this has strange effects when using with 
1265         // top toolbar - not sure if it's a great idea.
1266         //this.editor.contentWindow.focus();
1267         </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">) {
1268             </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1269                 </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">();
1270             } </span><span class="jsdoc-keyword">catch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1271                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
1272             }
1273         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
1274             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
1275         }
1276     },
1277     </span><span class="jsdoc-var">getParentElement</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1278     {
1279
1280         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
1281         </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">();
1282
1283         </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">);
1284
1285         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1286             </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">;
1287             </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
1288                 </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.parentNode</span><span class="jsdoc-syntax">;
1289             }
1290             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">;
1291         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1292             </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
1293         }
1294
1295     },
1296     </span><span class="jsdoc-comment">/***
1297      *
1298      * Range intersection.. the hard stuff...
1299      *  '-1' = before
1300      *  '0' = hits..
1301      *  '1' = after.
1302      *         [ -- selected range --- ]
1303      *   [fail]                        [fail]
1304      *
1305      *    basically..
1306      *      if end is before start or  hits it. fail.
1307      *      if start is after end or hits it fail.
1308      *
1309      *   if either hits (but other is outside. - then it's not 
1310      *   
1311      *    
1312      **/
1313
1314
1315     // @see http://www.thismuchiknow.co.uk/?p=64.
1316     </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">)
1317     {
1318         </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">();
1319         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1320             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1321         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1322             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1323         }
1324
1325         </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">();
1326         </span><span class="jsdoc-var">rangeStartRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1327
1328         </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">();
1329         </span><span class="jsdoc-var">rangeEndRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
1330
1331         </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">();
1332         </span><span class="jsdoc-var">nodeStartRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1333
1334         </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">();
1335         </span><span class="jsdoc-var">nodeEndRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
1336
1337         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">rangeStartRange.compareBoundaryPoints</span><span class="jsdoc-syntax">(
1338                  </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;
1339                </span><span class="jsdoc-var">rangeEndRange.compareBoundaryPoints</span><span class="jsdoc-syntax">(
1340                  </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;
1341
1342
1343     },
1344     </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">)
1345     {
1346         </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">();
1347         </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
1348             </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1349         } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
1350             </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
1351         }
1352
1353
1354         </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1355
1356         </span><span class="jsdoc-var">nodeRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
1357
1358         </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">);
1359         </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">);
1360
1361         </span><span class="jsdoc-comment">//Roo.log(node.tagName + ': ss='+ss +', ee='+ee)
1362
1363         </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;
1364         </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;
1365
1366         </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">) {
1367             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0; </span><span class="jsdoc-comment">// outer
1368         </span><span class="jsdoc-syntax">}
1369         </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">) {
1370             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">1; </span><span class="jsdoc-comment">//right trailed.
1371         </span><span class="jsdoc-syntax">}
1372
1373         </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">) {
1374             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">2;  </span><span class="jsdoc-comment">// left trailed.
1375         </span><span class="jsdoc-syntax">}
1376         </span><span class="jsdoc-comment">// fully contined.
1377         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">3;
1378     },
1379
1380     </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
1381
1382        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">swapCodes  </span><span class="jsdoc-syntax">= [
1383             [    8211, </span><span class="jsdoc-string">&quot;&amp;#8211;&quot; </span><span class="jsdoc-syntax">],
1384             [    8212, </span><span class="jsdoc-string">&quot;&amp;#8212;&quot; </span><span class="jsdoc-syntax">],
1385             [    8216,  </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
1386             [    8217, </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
1387             [    8220, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
1388             [    8221, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
1389             [    8226, </span><span class="jsdoc-string">&quot;*&quot; </span><span class="jsdoc-syntax">],
1390             [    8230, </span><span class="jsdoc-string">&quot;...&quot; </span><span class="jsdoc-syntax">]
1391         ];
1392         </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">;
1393         </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">) {
1394             </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
1395
1396             </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]);
1397         });
1398
1399         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">output</span><span class="jsdoc-syntax">;
1400     },
1401
1402
1403
1404
1405
1406     </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">)
1407     {
1408
1409         </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">});
1410         </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</span><span class="jsdoc-syntax">({
1411                 </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">,
1412                 </span><span class="jsdoc-var">attrib_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ablack</span><span class="jsdoc-syntax">,
1413                 </span><span class="jsdoc-var">attrib_clean </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.aclean</span><span class="jsdoc-syntax">,
1414                 </span><span class="jsdoc-var">style_white </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cwhite</span><span class="jsdoc-syntax">,
1415                 </span><span class="jsdoc-var">style_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cblack
1416         </span><span class="jsdoc-syntax">});
1417         </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">});
1418         </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">} );
1419
1420
1421     },
1422
1423     </span><span class="jsdoc-comment">/**
1424      * Clean up MS wordisms...
1425      * @deprecated - use filter directly
1426      */
1427     </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">)
1428     {
1429         </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">});
1430         </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">]} );
1431
1432     },
1433
1434
1435     </span><span class="jsdoc-comment">/**
1436
1437      * @deprecated - use filters
1438      */
1439     </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">)
1440     {
1441         </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">});
1442
1443
1444     },
1445
1446
1447
1448     </span><span class="jsdoc-var">applyBlacklists </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1449     {
1450         </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">: [];
1451         </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">:  [];
1452
1453         </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">;
1454         </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">;
1455         </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">;
1456
1457         </span><span class="jsdoc-var">this.white </span><span class="jsdoc-syntax">= [];
1458         </span><span class="jsdoc-var">this.black </span><span class="jsdoc-syntax">= [];
1459         </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">) {
1460             </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) {
1461                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1462             }
1463             </span><span class="jsdoc-var">this.white.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1464
1465         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1466
1467         </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">) {
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-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) {
1472                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1473             }
1474             </span><span class="jsdoc-var">this.white.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1475
1476         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1477
1478
1479         </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">) {
1480             </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) {
1481                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1482             }
1483             </span><span class="jsdoc-var">this.black.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1484
1485         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1486
1487         </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">) {
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-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) {
1492                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1493             }
1494             </span><span class="jsdoc-var">this.black.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1495
1496         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1497
1498
1499         </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">: [];
1500         </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">:  [];
1501
1502         </span><span class="jsdoc-var">this.cwhite </span><span class="jsdoc-syntax">= [];
1503         </span><span class="jsdoc-var">this.cblack </span><span class="jsdoc-syntax">= [];
1504         </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">) {
1505             </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) {
1506                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1507             }
1508             </span><span class="jsdoc-var">this.cwhite.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1509
1510         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1511
1512         </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">) {
1513             </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) {
1514                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1515             }
1516             </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) {
1517                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1518             }
1519             </span><span class="jsdoc-var">this.cwhite.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1520
1521         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1522
1523
1524         </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">) {
1525             </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) {
1526                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1527             }
1528             </span><span class="jsdoc-var">this.cblack.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1529
1530         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1531
1532         </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">) {
1533             </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) {
1534                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1535             }
1536             </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) {
1537                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1538             }
1539             </span><span class="jsdoc-var">this.cblack.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">);
1540
1541         }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
1542     },
1543
1544     </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">)
1545     {
1546         </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">){
1547             </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">({
1548                 </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'link'</span><span class="jsdoc-syntax">,
1549                 </span><span class="jsdoc-var">rel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'stylesheet'</span><span class="jsdoc-syntax">,
1550                 </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1551                 </span><span class="jsdoc-var">href </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">stylesheets
1552             </span><span class="jsdoc-syntax">});
1553
1554             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1555         }
1556         </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">;
1557
1558         </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">) {
1559             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.length</span><span class="jsdoc-syntax">){
1560                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1561             }
1562
1563             </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">({
1564                 </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'link'</span><span class="jsdoc-syntax">,
1565                 </span><span class="jsdoc-var">rel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'stylesheet'</span><span class="jsdoc-syntax">,
1566                 </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1567                 </span><span class="jsdoc-var">href </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">s
1568             </span><span class="jsdoc-syntax">});
1569         });
1570
1571
1572     },
1573
1574
1575     </span><span class="jsdoc-var">updateLanguage </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1576     {
1577         </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">) {
1578             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1579         }
1580         </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">);
1581     },
1582
1583
1584     </span><span class="jsdoc-var">removeStylesheets </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
1585     {
1586         </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">;
1587
1588         </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">){
1589             </span><span class="jsdoc-var">s.remove</span><span class="jsdoc-syntax">();
1590         });
1591     },
1592
1593     </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">)
1594     {
1595         </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">({
1596             </span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">,
1597             </span><span class="jsdoc-var">type </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text/css'</span><span class="jsdoc-syntax">,
1598             </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">style
1599         </span><span class="jsdoc-syntax">});
1600
1601         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
1602     }
1603
1604     </span><span class="jsdoc-comment">// hide stuff that is not compatible
1605     /**
1606      * @event blur
1607      * @hide
1608      */
1609     /**
1610      * @event change
1611      * @hide
1612      */
1613     /**
1614      * @event focus
1615      * @hide
1616      */
1617     /**
1618      * @event specialkey
1619      * @hide
1620      */
1621     /**
1622      * @cfg {String} fieldClass @hide
1623      */
1624     /**
1625      * @cfg {String} focusClass @hide
1626      */
1627     /**
1628      * @cfg {String} autoCreate @hide
1629      */
1630     /**
1631      * @cfg {String} inputType @hide
1632      */
1633     /**
1634      * @cfg {String} invalidClass @hide
1635      */
1636     /**
1637      * @cfg {String} invalidText @hide
1638      */
1639     /**
1640      * @cfg {String} msgFx @hide
1641      */
1642     /**
1643      * @cfg {String} validateOnBlur @hide
1644      */
1645 </span><span class="jsdoc-syntax">});
1646
1647 </span><span class="jsdoc-var">Roo.HtmlEditorCore.white </span><span class="jsdoc-syntax">= [
1648         </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">,
1649
1650        </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">,
1651        </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">,
1652        </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">,
1653        </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">,
1654        </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">,
1655
1656        </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">,
1657       </span><span class="jsdoc-string">'THEAD'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'TR'</span><span class="jsdoc-syntax">,
1658
1659       </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">,
1660
1661       </span><span class="jsdoc-string">'EMBED'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'OBJECT'
1662 </span><span class="jsdoc-syntax">];
1663
1664
1665 </span><span class="jsdoc-var">Roo.HtmlEditorCore.black </span><span class="jsdoc-syntax">= [
1666     </span><span class="jsdoc-comment">//    'embed',  'object', // enable - backend responsiblity to clean thiese
1667         </span><span class="jsdoc-string">'APPLET'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// 
1668         </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">,
1669         </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">,
1670         </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">,
1671         </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">,
1672         </span><span class="jsdoc-comment">//'FONT' // CLEAN LATER..
1673         </span><span class="jsdoc-string">'COLGROUP'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'COL'   </span><span class="jsdoc-comment">// messy tables.
1674
1675
1676 </span><span class="jsdoc-syntax">];
1677 </span><span class="jsdoc-var">Roo.HtmlEditorCore.clean </span><span class="jsdoc-syntax">= [ </span><span class="jsdoc-comment">// ?? needed???
1678      </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'
1679 </span><span class="jsdoc-syntax">];
1680 </span><span class="jsdoc-var">Roo.HtmlEditorCore.tag_remove </span><span class="jsdoc-syntax">= [
1681     </span><span class="jsdoc-string">'FONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TBODY'
1682 </span><span class="jsdoc-syntax">];
1683 </span><span class="jsdoc-comment">// attributes..
1684
1685 </span><span class="jsdoc-var">Roo.HtmlEditorCore.ablack </span><span class="jsdoc-syntax">= [
1686     </span><span class="jsdoc-string">'on'
1687 </span><span class="jsdoc-syntax">];
1688
1689 </span><span class="jsdoc-var">Roo.HtmlEditorCore.aclean </span><span class="jsdoc-syntax">= [
1690     </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'
1691 </span><span class="jsdoc-syntax">];
1692
1693 </span><span class="jsdoc-comment">// protocols..
1694 </span><span class="jsdoc-var">Roo.HtmlEditorCore.pwhite</span><span class="jsdoc-syntax">= [
1695         </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'
1696 </span><span class="jsdoc-syntax">];
1697
1698 </span><span class="jsdoc-comment">// white listed style attributes.
1699 </span><span class="jsdoc-var">Roo.HtmlEditorCore.cwhite</span><span class="jsdoc-syntax">= [
1700       </span><span class="jsdoc-comment">//  'text-align', /// default is to allow most things..
1701
1702
1703 //        'font-size'//??
1704 </span><span class="jsdoc-syntax">];
1705
1706 </span><span class="jsdoc-comment">// black listed style attributes.
1707 </span><span class="jsdoc-var">Roo.HtmlEditorCore.cblack</span><span class="jsdoc-syntax">= [
1708       </span><span class="jsdoc-comment">//  'font-size' -- this can be set by the project 
1709 </span><span class="jsdoc-syntax">];
1710
1711
1712
1713
1714     </span></code></body></html>