Fix Image events wip_alan_T7586_more_events_for_editor
authorAlan <alan@roojs.com>
Fri, 17 Feb 2023 06:29:21 +0000 (14:29 +0800)
committerAlan <alan@roojs.com>
Fri, 17 Feb 2023 06:29:21 +0000 (14:29 +0800)
Roo/bootstrap/form/HtmlEditorToolbar/Standard.js
Roo/form/HtmlEditor.js
docs/json/roodata.json
docs/src/Roo_bootstrap_form_HtmlEditor.js.html
docs/src/Roo_bootstrap_form_HtmlEditorToolbar_Standard.js.html
docs/src/Roo_form_HtmlEditor.js.html
docs/symbols/Roo.bootstrap.form.HtmlEditor.json
examples/bootstrap/Editor.js
roojs-ui-debug.js
roojs-ui.js

index d2ea4e2..72ccc68 100644 (file)
@@ -221,19 +221,26 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
         }
     
          
-        this.addFiles(Array.prototype.slice.call(this.input.dom.files));
+        this.addFiles(Array.prototype.slice.call(this.input.dom.files), false);
     },
     
-    addFiles : function(far) {
+    addFiles : function(far, fire_add) {
 
+         
+        var editor =  this.editorcore;
+  
         if (!far.length) {
+            if (fire_add) {
+                editor.owner.fireEvent('editorevent', editor.owner, false);
+                editor.owner.fireEvent('imageadd', editor.owner, false);
+            }
             return;
         }
         
         var f = far.pop();
         
         if (!f.type.match(/^image/)) {
-            this.addFiles(far);
+            this.addFiles(far, fire_add);
             return;
         }
          
@@ -241,7 +248,6 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
         
         var bl = sn  && this.editorcore.enableBlocks ? Roo.htmleditor.Block.factory(sn) : false;
         
-        var editor =  this.editorcore;
         
         var reader = new FileReader();
         reader.addEventListener('load', (function() {
@@ -261,9 +267,7 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
                     caption_display : 'none'  //default to hide captions..
                  });
                 editor.insertAtCursor(fig.toHTML());
-                editor.owner.fireEvent('editorevent', editor.owner, false);
-                editor.owner.fireEvent('imageadd', editor.owner, false);
-                this.addFiles(far);
+                this.addFiles(far, true);
                 return;
             }
             // just a standard img..
@@ -274,9 +278,7 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
                 return;
             }
             editor.insertAtCursor('<img src="' + reader.result +'">');
-            editor.owner.fireEvent('editorevent', editor.owner, false);
-            editor.owner.fireEvent('imageadd', editor.owner, false);
-            this.addFiles(far);
+            this.addFiles(far, true);
             
         }).createDelegate(this));
         reader.readAsDataURL(f);
@@ -442,6 +444,11 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
                 selection.removeAllRanges();
                 selection.addRange(range);
                 this.updateToolbar(null, null, null);
+                if (sn.tagName.toUpperCase() == 'FIGURE') {
+                    this.editor.fireEvent('imagedelete', this.editor, sn);
+                }
+                
+                this.selectedNode = false;
                 this.editorcore.fireEditorEvent(false);
                 return;
             }   
@@ -461,6 +468,11 @@ Roo.extend(Roo.bootstrap.form.HtmlEditorToolbar.Standard, Roo.bootstrap.nav.Simp
         
         selection.removeAllRanges();
         selection.addRange(range);
+        if (sn.tagName.toUpperCase() == 'IMG"') {
+            this.editor.fireEvent('imagedelete', this.editor, sn);
+        }
+        
+        this.selectedNode = false;
         this.editorcore.fireEditorEvent(false);
         
         
index ce3bcf4..de06645 100644 (file)
@@ -222,18 +222,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             * @param {Roo.HtmlEditorCore} this
             */
             paste: true,
-             /**
-            * @event imageadd
-            * Fires when on any editor when an image is added (excluding paste)
-            * @param {Roo.HtmlEditorCore} this
-            */
-           imageadd: true ,
-            /**
-            * @event imagedelete
-            * Fires when on any editor when an image is deleted
-            * @param {Roo.HtmlEditorCore} this
-            */
-           imagedelete: true  
+            
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
index 8202127..e592984 100644 (file)
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           },
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           },
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           },
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
         ],
         "returns" : []
       },
+      {
+        "name" : "imageadd",
+        "type" : "function",
+        "desc" : "Fires when on any editor when an image is added (excluding paste)",
+        "sig" : "function (_self)\n{\n\n}",
+        "memberOf" : "",
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "params" : [
+          {
+            "name" : "this",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "imagedelete",
+        "type" : "function",
+        "desc" : "Fires when on any editor when an image is deleted",
+        "sig" : "function (_self, img)\n{\n\n}",
+        "memberOf" : "",
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "params" : [
+          {
+            "name" : "this",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
+            "desc" : "",
+            "isOptional" : false
+          },
+          {
+            "name" : "img",
+            "type" : "HTMLElement",
+            "desc" : "could also be a figure if blocks are enabled",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "imageupdated",
+        "type" : "function",
+        "desc" : "Fires when on any editor when an image is changed (excluding paste)",
+        "sig" : "function (_self, img)\n{\n\n}",
+        "memberOf" : "",
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "params" : [
+          {
+            "name" : "this",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
+            "desc" : "",
+            "isOptional" : false
+          },
+          {
+            "name" : "img",
+            "type" : "HTMLElement",
+            "desc" : "could also be a figure if blocks are enabled",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "initialize",
         "type" : "function",
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
       {
         "name" : "paste",
         "type" : "function",
-        "desc" : "Fires after the user pastes into input",
-        "sig" : "function (_self, e)\n{\n\n}",
-        "memberOf" : "Roo.bootstrap.form.Input",
+        "desc" : "Fires when press user pastes into the editor",
+        "sig" : "function (_self)\n{\n\n}",
+        "memberOf" : "",
         "example" : "",
         "deprecated" : "",
         "since" : "",
         "params" : [
           {
             "name" : "this",
-            "type" : "Roo.form.Field",
+            "type" : "Roo.HtmlEditorCore",
             "desc" : "",
             "isOptional" : false
-          },
-          {
-            "name" : "e",
-            "type" : "Roo.EventObject",
-            "desc" : "The event Object",
-            "isOptional" : false
           }
         ],
         "returns" : []
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           },
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           }
         "params" : [],
         "returns" : []
       },
+      {
+        "name" : "stylesheetsclick",
+        "type" : "function",
+        "desc" : "Fires when press the Sytlesheets button",
+        "sig" : "function (_self)\n{\n\n}",
+        "memberOf" : "",
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "params" : [
+          {
+            "name" : "this",
+            "type" : "Roo.HtmlEditorCore",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "sync",
         "type" : "function",
         "params" : [
           {
             "name" : "this",
-            "type" : "HtmlEditor",
+            "type" : "Roo.bootstrap.form.HtmlEditor",
             "desc" : "",
             "isOptional" : false
           },
index 52dbdb5..653ba01 100644 (file)
  */
 
 </span><span class="jsdoc-var">Roo.bootstrap.form.HtmlEditor </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">){
-    </span><span class="jsdoc-var">Roo.bootstrap.form.HtmlEditor.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">);
-    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">) {
-        </span><span class="jsdoc-var">this.toolbars </span><span class="jsdoc-syntax">= [];
-    }
 
-    </span><span class="jsdoc-var">this.editorcore </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.HtmlEditorCore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">owner </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">));
     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
             </span><span class="jsdoc-comment">/**
              * @event initialize
              * Fires when the editor is fully initialized (including the iframe)
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
             </span><span class="jsdoc-var">initialize</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-comment">/**
              * @event activate
              * Fires when the editor is first receives the focus. Any insertion must wait
              * until after this event.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
             </span><span class="jsdoc-var">activate</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
              </span><span class="jsdoc-comment">/**
              * @event beforesync
              * Fires before the textarea is updated with content from the editor iframe. Return false
              * to cancel the sync.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              * @param {String} html
              */
             </span><span class="jsdoc-var">beforesync</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
              * @event beforepush
              * Fires before the iframe editor is updated with content from the textarea. Return false
              * to cancel the push.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              * @param {String} html
              */
             </span><span class="jsdoc-var">beforepush</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
              </span><span class="jsdoc-comment">/**
              * @event sync
              * Fires when the textarea is updated with content from the editor iframe.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              * @param {String} html
              */
             </span><span class="jsdoc-var">sync</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
              </span><span class="jsdoc-comment">/**
              * @event push
              * Fires when the iframe editor is updated with content from the textarea.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              * @param {String} html
              */
             </span><span class="jsdoc-var">push</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
              </span><span class="jsdoc-comment">/**
              * @event editmodechange
              * Fires when the editor switches edit modes
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              * @param {Boolean} sourceEdit True if source edit, false if standard editing.
              */
             </span><span class="jsdoc-var">editmodechange</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-comment">/**
              * @event editorevent
              * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
             </span><span class="jsdoc-var">editorevent</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-comment">/**
              * @event firstfocus
              * Fires when on first focus - needed by toolbars..
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
             </span><span class="jsdoc-var">firstfocus</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-comment">/**
              * @event autosave
              * Auto save the htmlEditor value as a file into Events
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
             </span><span class="jsdoc-var">autosave</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-comment">/**
              * @event savedpreview
              * preview the saved version of htmlEditor
-             * @param {HtmlEditor} this
+             * @param {Roo.bootstrap.form.HtmlEditor} this
              */
-            </span><span class="jsdoc-var">savedpreview</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
-        </span><span class="jsdoc-syntax">});
+            </span><span class="jsdoc-var">savedpreview</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+             </span><span class="jsdoc-comment">/**
+            * @event stylesheetsclick
+            * Fires when press the Sytlesheets button
+            * @param {Roo.HtmlEditorCore} this
+            */
+            </span><span class="jsdoc-var">stylesheetsclick</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-comment">/**
+            * @event paste
+            * Fires when press user pastes into the editor
+            * @param {Roo.HtmlEditorCore} this
+            */
+            </span><span class="jsdoc-var">paste</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-comment">/**
+            * @event imageadd
+            * Fires when on any editor when an image is added (excluding paste)
+            * @param {Roo.bootstrap.form.HtmlEditor} this
+            */
+           </span><span class="jsdoc-var">imageadd</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-comment">/**
+            * @event imageupdated
+            * Fires when on any editor when an image is changed (excluding paste)
+            * @param {Roo.bootstrap.form.HtmlEditor} this
+            * @param {HTMLElement} img could also be a figure if blocks are enabled
+            */
+           </span><span class="jsdoc-var">imageupdate</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">,
+           </span><span class="jsdoc-comment">/**
+            * @event imagedelete
+            * Fires when on any editor when an image is deleted
+            * @param {Roo.bootstrap.form.HtmlEditor} this
+            * @param {HTMLElement} img could also be a figure if blocks are enabled
+            */
+           </span><span class="jsdoc-var">imagedelete</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
+    </span><span class="jsdoc-syntax">});
+    </span><span class="jsdoc-var">Roo.bootstrap.form.HtmlEditor.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">);
+    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-var">this.toolbars </span><span class="jsdoc-syntax">= [];
+    }
+
+    </span><span class="jsdoc-var">this.editorcore </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.HtmlEditorCore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">({ </span><span class="jsdoc-var">owner </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">));
+
 };
 
 
index 7b28b6c..21a44fd 100644 (file)
         }
 
 
-        </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Array.prototype.slice.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.input.dom.files</span><span class="jsdoc-syntax">));
+        </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Array.prototype.slice.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.input.dom.files</span><span class="jsdoc-syntax">), </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
     },
 
-    </span><span class="jsdoc-var">addFiles </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">) {
+    </span><span class="jsdoc-var">addFiles </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fire_add</span><span class="jsdoc-syntax">) {
+
+
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">editor </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">this.editorcore</span><span class="jsdoc-syntax">;
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">far.length</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fire_add</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'imageadd'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+            }
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">f </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">far.pop</span><span class="jsdoc-syntax">();
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">f.type.match</span><span class="jsdoc-syntax">(/^image/)) {
-            </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fire_add</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
 
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">bl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn  </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.editorcore.enableBlocks </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
 
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">editor </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">this.editorcore</span><span class="jsdoc-syntax">;
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">reader </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">FileReader</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">reader.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">() {
                 </span><span class="jsdoc-var">bl.image_src </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">reader.result</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-comment">//bl.caption = f.name;
                 </span><span class="jsdoc-var">bl.updateElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'imageupdate'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-comment">// we only do the first file!! and replace.
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
                     </span><span class="jsdoc-var">caption_display </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'none'  </span><span class="jsdoc-comment">//default to hide captions..
                  </span><span class="jsdoc-syntax">});
                 </span><span class="jsdoc-var">editor.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fig.toHTML</span><span class="jsdoc-syntax">());
-                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
             </span><span class="jsdoc-comment">// just a standard img..
             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">sn.tagName.toUpperCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'IMG'</span><span class="jsdoc-syntax">) {
                 </span><span class="jsdoc-var">sn.src </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">reader.result</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'imageupdate'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor.owner</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
             </span><span class="jsdoc-var">editor.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'&lt;img src=&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">reader.result </span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'&quot;&gt;'</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">editor.owner.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'editorevent'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">this.addFiles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
 
         })</span><span class="jsdoc-var">.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">));
         </span><span class="jsdoc-var">reader.readAsDataURL</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">selection.removeAllRanges</span><span class="jsdoc-syntax">();
                 </span><span class="jsdoc-var">selection.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">this.updateToolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.tagName.toUpperCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'FIGURE'</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-var">this.editor.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'imagedelete'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
+                }
+
+                </span><span class="jsdoc-var">this.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-var">this.editorcore.fireEditorEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
 
         </span><span class="jsdoc-var">selection.removeAllRanges</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">selection.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.tagName.toUpperCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'IMG&quot;'</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">this.editor.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'imagedelete'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.editor</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
+        }
+
+        </span><span class="jsdoc-var">this.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-var">this.editorcore.fireEditorEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
 
 
index 98dc47c..7e651fc 100644 (file)
             * Fires when press user pastes into the editor
             * @param {Roo.HtmlEditorCore} this
             */
-            </span><span class="jsdoc-var">paste</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
-        </span><span class="jsdoc-syntax">});
+            </span><span class="jsdoc-var">paste</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+
+        });
         </span><span class="jsdoc-var">this.defaultAutoCreate </span><span class="jsdoc-syntax">=  {
             </span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;textarea&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">'width: ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.width </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'px;height: ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.height </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'px;'</span><span class="jsdoc-syntax">,
index 52eafc1..ffaf9ea 100644 (file)
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         },
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         },
       "params" : [],
       "returns" : []
     },
+    {
+      "name" : "stylesheetsclick",
+      "type" : "function",
+      "desc" : "Fires when press the Sytlesheets button",
+      "sig" : "function (_self)\n{\n\n}",
+      "memberOf" : "",
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "params" : [
+        {
+          "name" : "this",
+          "type" : "Roo.HtmlEditorCore",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "initialize",
       "type" : "function",
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         }
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
+    {
+      "name" : "imageadd",
+      "type" : "function",
+      "desc" : "Fires when on any editor when an image is added (excluding paste)",
+      "sig" : "function (_self)\n{\n\n}",
+      "memberOf" : "",
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "params" : [
+        {
+          "name" : "this",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         }
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         }
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         },
       ],
       "returns" : []
     },
+    {
+      "name" : "imagedelete",
+      "type" : "function",
+      "desc" : "Fires when on any editor when an image is deleted",
+      "sig" : "function (_self, img)\n{\n\n}",
+      "memberOf" : "",
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "params" : [
+        {
+          "name" : "this",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
+          "desc" : "",
+          "isOptional" : false
+        },
+        {
+          "name" : "img",
+          "type" : "HTMLElement",
+          "desc" : "could also be a figure if blocks are enabled",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "beforesync",
       "type" : "function",
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         },
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         }
       "returns" : []
     },
     {
-      "name" : "savedpreview",
+      "name" : "imageupdated",
       "type" : "function",
-      "desc" : "preview the saved version of htmlEditor",
-      "sig" : "function (_self)\n{\n\n}",
+      "desc" : "Fires when on any editor when an image is changed (excluding paste)",
+      "sig" : "function (_self, img)\n{\n\n}",
       "memberOf" : "",
       "example" : "",
       "deprecated" : "",
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
+        },
+        {
+          "name" : "img",
+          "type" : "HTMLElement",
+          "desc" : "could also be a figure if blocks are enabled",
+          "isOptional" : false
         }
       ],
       "returns" : []
     },
     {
-      "name" : "push",
+      "name" : "savedpreview",
       "type" : "function",
-      "desc" : "Fires when the iframe editor is updated with content from the textarea.",
-      "sig" : "function (_self, html)\n{\n\n}",
+      "desc" : "preview the saved version of htmlEditor",
+      "sig" : "function (_self)\n{\n\n}",
       "memberOf" : "",
       "example" : "",
       "deprecated" : "",
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
-          "desc" : "",
-          "isOptional" : false
-        },
-        {
-          "name" : "html",
-          "type" : "String",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         }
       "returns" : []
     },
     {
-      "name" : "autosave",
+      "name" : "paste",
       "type" : "function",
-      "desc" : "Auto save the htmlEditor value as a file into Events",
+      "desc" : "Fires when press user pastes into the editor",
       "sig" : "function (_self)\n{\n\n}",
       "memberOf" : "",
       "example" : "",
       "params" : [
         {
           "name" : "this",
-          "type" : "HtmlEditor",
+          "type" : "Roo.HtmlEditorCore",
           "desc" : "",
           "isOptional" : false
         }
       "returns" : []
     },
     {
-      "name" : "paste",
+      "name" : "push",
       "type" : "function",
-      "desc" : "Fires after the user pastes into input",
-      "sig" : "function (_self, e)\n{\n\n}",
-      "memberOf" : "Roo.bootstrap.form.Input",
+      "desc" : "Fires when the iframe editor is updated with content from the textarea.",
+      "sig" : "function (_self, html)\n{\n\n}",
+      "memberOf" : "",
       "example" : "",
       "deprecated" : "",
       "since" : "",
       "params" : [
         {
           "name" : "this",
-          "type" : "Roo.form.Field",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
           "desc" : "",
           "isOptional" : false
         },
         {
-          "name" : "e",
-          "type" : "Roo.EventObject",
-          "desc" : "The event Object",
+          "name" : "html",
+          "type" : "String",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
+    {
+      "name" : "autosave",
+      "type" : "function",
+      "desc" : "Auto save the htmlEditor value as a file into Events",
+      "sig" : "function (_self)\n{\n\n}",
+      "memberOf" : "",
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "params" : [
+        {
+          "name" : "this",
+          "type" : "Roo.bootstrap.form.HtmlEditor",
+          "desc" : "",
           "isOptional" : false
         }
       ],
index 5372731..9dde1eb 100644 (file)
@@ -63,6 +63,15 @@ Roo.example.Editor = new Roo.XComponent({
                                                 render : function (_self)
                                                 {
                                                     _this.previewPanel = _self;
+                                                },
+                                                imageadd : function(a) {
+                                                    Roo.log(['imageadd', a])
+                                                },
+                                                imageupdate : function(a,b) {
+                                                    Roo.log(['imageupdate', a,b])
+                                                },
+                                                imagedelete : function(a,b) {
+                                                    Roo.log(['imagedelete', a,b])
                                                 }
                                             }
                                         }
index f42a03b..6fbd580 100644 (file)
@@ -27334,7 +27334,19 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             * Fires when press user pastes into the editor
             * @param {Roo.HtmlEditorCore} this
             */
-            paste: true 
+            paste: true,
+             /**
+            * @event imageadd
+            * Fires when on any editor when an image is added (excluding paste)
+            * @param {Roo.HtmlEditorCore} this
+            */
+           imageadd: true ,
+            /**
+            * @event imagedelete
+            * Fires when on any editor when an image is deleted
+            * @param {Roo.HtmlEditorCore} this
+            */
+           imagedelete: true  
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
index 74c0a88..e07413e 100644 (file)
@@ -1197,10 +1197,10 @@ Roo.HtmlEditorCore.tag_remove=['FONT','TBODY'];Roo.HtmlEditorCore.ablack=['on'];
 
 // Roo/form/HtmlEditor.js
 Roo.form.HtmlEditor=function(A){Roo.form.HtmlEditor.superclass.constructor.call(this,A);if(!this.toolbars){this.toolbars=[];}this.editorcore=new Roo.HtmlEditorCore(Roo.apply({owner:this},A));};Roo.extend(Roo.form.HtmlEditor,Roo.form.Field,{clearUp:true,toolbars:false,resizable:false,height:300,width:500,stylesheets:false,cblack:false,cwhite:false,black:false,white:false,allowComments:false,enableBlocks:true,autoClean:true,bodyCls:'',language:'en',frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',actionMode:'container',defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"new-password"}
-,initComponent:function(){this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true,editorevent:true,firstfocus:true,autosave:true,savedpreview:true,stylesheetsclick:true,paste:true});this.defaultAutoCreate={tag:"textarea",style:'width: '+this.width+'px;height: '+this.height+'px;',autocomplete:"new-password"}
-;},createToolbar:function(A){Roo.log("create toolbars");if(!A.toolbars||!A.toolbars.length){A.toolbars=[new Roo.form.HtmlEditor.ToolbarStandard()];}for(var i=0;i<A.toolbars.length;i++){A.toolbars[i]=Roo.factory(typeof(A.toolbars[i])=='string'?{xtype:A.toolbars[i]}
-:A.toolbars[i],Roo.form.HtmlEditor);A.toolbars[i].init(A);}},getSelectedNode:function(){if(this.toolbars.length<2||!this.toolbars[1].tb){return false;}return this.toolbars[1].tb.selectedNode;},onRender:function(ct,A){var _t=this;Roo.form.HtmlEditor.superclass.onRender.call(this,ct,A);
-this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.editorcore.onRender(ct,A);if(this.resizable){this.resizeEl=new Roo.Resizable(this.wrap,{pinned:true,wrap:true,dynamic:true,minHeight:this.height,height:this.height,handles:this.resizable,width:this.width,listeners:{resize:function(r,w,h){_t.onResize(w,h);
+,initComponent:function(){this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true,editorevent:true,firstfocus:true,autosave:true,savedpreview:true,stylesheetsclick:true,paste:true,imageadd:true,imagedelete:true}
+);this.defaultAutoCreate={tag:"textarea",style:'width: '+this.width+'px;height: '+this.height+'px;',autocomplete:"new-password"};},createToolbar:function(A){Roo.log("create toolbars");if(!A.toolbars||!A.toolbars.length){A.toolbars=[new Roo.form.HtmlEditor.ToolbarStandard()];
+}for(var i=0;i<A.toolbars.length;i++){A.toolbars[i]=Roo.factory(typeof(A.toolbars[i])=='string'?{xtype:A.toolbars[i]}:A.toolbars[i],Roo.form.HtmlEditor);A.toolbars[i].init(A);}},getSelectedNode:function(){if(this.toolbars.length<2||!this.toolbars[1].tb){return false;
+}return this.toolbars[1].tb.selectedNode;},onRender:function(ct,A){var _t=this;Roo.form.HtmlEditor.superclass.onRender.call(this,ct,A);this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.editorcore.onRender(ct,A);if(this.resizable){this.resizeEl=new Roo.Resizable(this.wrap,{pinned:true,wrap:true,dynamic:true,minHeight:this.height,height:this.height,handles:this.resizable,width:this.width,listeners:{resize:function(r,w,h){_t.onResize(w,h);
 }}});}this.createToolbar(this);if(!this.width){this.setSize(this.wrap.getSize());}if(this.resizeEl){this.resizeEl.resizeTo.defer(100,this.resizeEl,[this.width,this.height]);}this.keyNav=new Roo.KeyNav(this.el,{"tab":function(e){e.preventDefault();var B=this.getValue();
 var C=this.el.dom.selectionStart;var D=this.el.dom.selectionEnd;if(!e.shiftKey){this.setValue(B.substring(0,C)+"\t"+B.substring(D));this.el.dom.setSelectionRange(D+1,D+1);return;}var f=B.substring(0,C).split("\t");if(f.pop().length!=0){return;}this.setValue(f.join("\t")+B.substring(D));
 this.el.dom.setSelectionRange(C-1,C-1);},"home":function(e){e.preventDefault();var B=this.el.dom.selectionStart;var C=this.getValue().split("\n");if(!C.length){return;}if(e.ctrlKey){this.el.dom.setSelectionRange(0,0);return;}var D=0;for(var i=0;i<C.length;