Roo/UndoManager.js
authorAlan <alan@roojs.com>
Tue, 22 Feb 2022 07:14:39 +0000 (15:14 +0800)
committerAlan <alan@roojs.com>
Tue, 22 Feb 2022 07:14:39 +0000 (15:14 +0800)
Roo/bootstrap/dash/namespace.js
Roo/htmleditor
Roo/rtf
Roo/bootstrap/namespace.js
Roo/htmleditor/Block.js
Roo/htmleditor/BlockFigure.js
Roo/htmleditor/BlockTable.js
Roo/htmleditor/BlockTd.js
Roo/htmleditor/Filter.js
Roo/htmleditor/FilterAttributes.js
Roo/htmleditor/FilterBlack.js
Roo/htmleditor/FilterBlock.js
Roo/htmleditor/FilterComment.js
Roo/htmleditor/FilterEmpty.js
Roo/htmleditor/FilterKeepChildren.js
Roo/htmleditor/FilterLongBr.js
Roo/htmleditor/FilterParagraph.js
Roo/htmleditor/FilterSpan.js
Roo/htmleditor/FilterStyleToTag.js
Roo/htmleditor/FilterTableWidth.js
Roo/htmleditor/FilterWord.js
Roo/htmleditor/KeyEnter.js
Roo/htmleditor/TidyEntities.js
Roo/htmleditor/TidySerializer.js
Roo/htmleditor/TidyWriter.js
Roo/htmleditor/namespace.js
Roo/rtf/Ctrl.js
Roo/rtf/Document.js
Roo/rtf/Group.js
Roo/rtf/Hex.js
Roo/rtf/Paragraph.js
Roo/rtf/Parser.js
Roo/rtf/Span.js
Roo/rtf/namespace.js
Roo/form/HtmlEditor/Td.js
Roo/lib/Range.js
Roo/lib/Selection.js
Roo/lib/UndoManager.js
docs/src/Roo_bootstrap_dash_namespace.js.html
docs/src/Roo_bootstrap_namespace.js.html
docs/src/Roo_htmleditor_Block.js.html
docs/src/Roo_htmleditor_BlockFigure.js.html
docs/src/Roo_htmleditor_BlockTable.js.html
docs/src/Roo_htmleditor_BlockTd.js.html
docs/src/Roo_htmleditor_Filter.js.html
docs/src/Roo_htmleditor_FilterAttributes.js.html
docs/src/Roo_htmleditor_FilterBlack.js.html
docs/src/Roo_htmleditor_FilterBlock.js.html
docs/src/Roo_htmleditor_FilterComment.js.html
docs/src/Roo_htmleditor_FilterKeepChildren.js.html
docs/src/Roo_htmleditor_FilterLongBr.js.html
docs/src/Roo_htmleditor_FilterParagraph.js.html
docs/src/Roo_htmleditor_FilterSpan.js.html
docs/src/Roo_htmleditor_FilterStyleToTag.js.html
docs/src/Roo_htmleditor_FilterTableWidth.js.html
docs/src/Roo_htmleditor_FilterWord.js.html
docs/src/Roo_htmleditor_KeyEnter.js.html
docs/src/Roo_htmleditor_Tidy.js.html
docs/src/Roo_htmleditor_TidyEntities.js.html
docs/src/Roo_htmleditor_TidySerializer.js.html
docs/src/Roo_htmleditor_TidyWriter.js.html
docs/src/Roo_htmleditor_namespace.js.html
docs/src/Roo_lib_Range.js.html
docs/src/Roo_lib_Selection.js.html
docs/src/Roo_lib_UndoManager.js.html
docs/src/Roo_rtf_Ctrl.js.html
docs/src/Roo_rtf_Document.js.html
docs/src/Roo_rtf_Group.js.html
docs/src/Roo_rtf_Hex.js.html
docs/src/Roo_rtf_Paragraph.js.html
docs/src/Roo_rtf_Parser.js.html
docs/src/Roo_rtf_Span.js.html
docs/src/Roo_rtf_namespace.js.html
Array.js
Date.js
Roo.js
Roo/BasicDialog.js
Roo/ContentPanel.js
Roo/DomHelper.js
Roo/HtmlEditorCore.js
docs/symbols/Roo.MessageBox.json
docs/symbols/Roo.htmleditor.Block.json
docs/symbols/Roo.htmleditor.BlockFigure.json
docs/symbols/Roo.htmleditor.BlockTable.json
docs/symbols/Roo.htmleditor.BlockTd.json
docs/symbols/Roo.htmleditor.Filter.json
docs/symbols/Roo.htmleditor.FilterAttributes.json
docs/symbols/Roo.htmleditor.FilterBlack.json
docs/symbols/Roo.htmleditor.FilterBlock.json
docs/symbols/Roo.htmleditor.FilterComment.json
docs/symbols/Roo.htmleditor.FilterKeepChildren.json
docs/symbols/Roo.htmleditor.FilterLongBr.json
docs/symbols/Roo.htmleditor.FilterParagraph.json
docs/symbols/Roo.htmleditor.FilterSpan.json
docs/symbols/Roo.htmleditor.FilterStyleToTag.json
docs/symbols/Roo.htmleditor.FilterTableWidth.json
docs/symbols/Roo.htmleditor.FilterWord.json
docs/symbols/Roo.htmleditor.KeyEnter.json
docs/symbols/Roo.htmleditor.Tidy.json
docs/symbols/Roo.htmleditor.TidyEntities.json
docs/symbols/Roo.htmleditor.TidySerializer.json
docs/symbols/Roo.htmleditor.TidyWriter.json
docs/symbols/Roo.htmleditor.json
docs/symbols/Roo.lib.Range.json
docs/symbols/Roo.lib.Selection.json
docs/symbols/Roo.lib.UndoManager.json
docs/symbols/Roo.rtf.json
Roo/MessageBox.js
Roo/PagingToolbar.js
Roo/Toolbar.js
Roo/bootstrap/form/SecurePass.js
Roo/data/Store.js
String.js
Roo/form/BasicForm.js
Roo/form/DateField.js
Roo/form/HtmlEditor.js
Roo/form/Layout.js
Roo/form/HtmlEditor/ToolbarContext.js
Roo/form/HtmlEditor/ToolbarStandard.js
Roo/grid/Grid.js
Roo/grid/GridView.js
Roo/menu/Item.js
Roo/menu/Menu.js
buildSDK/bundle_build.sh
buildSDK/dependancy_bootstrap.txt
buildSDK/dependancy_core.txt
buildSDK/dependancy_ui.txt
css/inline-editor.css
css/toolbar.css
css/undoreset.css
css-bootstrap4/bootstrap.css.map
css-bootstrap4/bootstrap.min.css.map
css-bootstrap4/roojs-bootstrap-debug.css.map
css-bootstrap4/roojs-bootstrap.css.map
css-bootstrap4/sb-admin-2.css
css-bootstrap4/sb-admin-2.css.map
css-bootstrap4/sb-admin-2.min.css
css-bootstrap4/sb-admin-2.min.css.map
docs/json/roodata.json
docs/src/Array.js.html
docs/src/Date.js.html
docs/src/Roo.js.html
docs/src/Roo_BasicDialog.js.html
docs/src/Roo_ContentPanel.js.html
docs/src/Roo_DomHelper.js.html
docs/src/Roo_HtmlEditorCore.js.html
docs/src/Roo_MessageBox.js.html
docs/src/Roo_PagingToolbar.js.html
docs/src/Roo_Toolbar.js.html
docs/src/Roo_bootstrap_form_SecurePass.js.html
docs/src/Roo_data_Store.js.html
docs/src/Roo_form_BasicForm.js.html
docs/src/Roo_form_DateField.js.html
docs/src/Roo_form_HtmlEditor.js.html
docs/src/Roo_form_HtmlEditor_ToolbarContext.js.html
docs/src/Roo_form_HtmlEditor_ToolbarStandard.js.html
docs/src/Roo_form_Layout.js.html
docs/src/Roo_grid_Grid.js.html
docs/src/Roo_grid_GridView.js.html
docs/src/Roo_menu_Item.js.html
docs/src/Roo_menu_Menu.js.html
docs/src/String.js.html
roojs-all.js
roojs-bootstrap-debug.js
roojs-bootstrap.js
roojs-core-debug.js
roojs-core.js
roojs-debug.js
examples/form/htmledit.html
examples/form/htmledit.js
docs/tree.json
docs/symbols/Array.json
docs/symbols/Roo.BasicDialog.json
docs/symbols/Roo.ContentPanel.json
docs/symbols/Roo.DomHelper.json
docs/symbols/Roo.GridPanel.json
docs/symbols/Roo.HtmlEditorCore.json
docs/symbols/Roo.NestedLayoutPanel.json
docs/symbols/Roo.PagingToolbar.json
docs/symbols/Roo.Toolbar.TextItem.json
docs/symbols/Roo.Toolbar.json
docs/symbols/Roo.TreePanel.json
docs/symbols/Roo.data.JsonStore.json
docs/symbols/Roo.data.SimpleStore.json
docs/symbols/Roo.data.Store.json
docs/symbols/Roo.form.BasicForm.json
docs/symbols/Roo.form.Column.json
docs/symbols/Roo.form.DateField.json
docs/symbols/Roo.form.Form.json
docs/symbols/Roo.form.HtmlEditor.json
docs/symbols/Roo.form.Layout.json
docs/symbols/Roo.form.Row.json
docs/symbols/Roo.grid.Calendar.json
docs/symbols/Roo.grid.EditorGrid.json
docs/symbols/Roo.grid.Grid.json
docs/symbols/Roo.grid.PropertyGrid.json
docs/symbols/Roo.json
docs/symbols/Roo.menu.CheckItem.json
docs/symbols/Roo.menu.Item.json
docs/symbols/Roo.menu.Menu.json
docs/symbols/String.json
roojs-ui-debug.js
roojs-ui.js

103 files changed:
Array.js
Date.js
Roo.js
Roo/BasicDialog.js
Roo/ContentPanel.js
Roo/DomHelper.js
Roo/HtmlEditorCore.js
Roo/MessageBox.js
Roo/PagingToolbar.js
Roo/Toolbar.js
Roo/bootstrap/form/SecurePass.js
Roo/data/Store.js
Roo/form/BasicForm.js
Roo/form/DateField.js
Roo/form/HtmlEditor.js
Roo/form/HtmlEditor/ToolbarContext.js
Roo/form/HtmlEditor/ToolbarStandard.js
Roo/form/Layout.js
Roo/grid/Grid.js
Roo/grid/GridView.js
Roo/menu/Item.js
Roo/menu/Menu.js
String.js
buildSDK/bundle_build.sh
buildSDK/dependancy_bootstrap.txt
buildSDK/dependancy_core.txt
buildSDK/dependancy_ui.txt
css-bootstrap4/bootstrap.css.map
css-bootstrap4/bootstrap.min.css.map
css-bootstrap4/roojs-bootstrap-debug.css.map
css-bootstrap4/roojs-bootstrap.css.map
css-bootstrap4/sb-admin-2.css
css-bootstrap4/sb-admin-2.css.map
css-bootstrap4/sb-admin-2.min.css
css-bootstrap4/sb-admin-2.min.css.map
css/inline-editor.css
css/toolbar.css
css/undoreset.css
docs/json/roodata.json
docs/src/Array.js.html
docs/src/Date.js.html
docs/src/Roo.js.html
docs/src/Roo_BasicDialog.js.html
docs/src/Roo_ContentPanel.js.html
docs/src/Roo_DomHelper.js.html
docs/src/Roo_HtmlEditorCore.js.html
docs/src/Roo_MessageBox.js.html
docs/src/Roo_PagingToolbar.js.html
docs/src/Roo_Toolbar.js.html
docs/src/Roo_bootstrap_form_SecurePass.js.html
docs/src/Roo_data_Store.js.html
docs/src/Roo_form_BasicForm.js.html
docs/src/Roo_form_DateField.js.html
docs/src/Roo_form_HtmlEditor.js.html
docs/src/Roo_form_HtmlEditor_ToolbarContext.js.html
docs/src/Roo_form_HtmlEditor_ToolbarStandard.js.html
docs/src/Roo_form_Layout.js.html
docs/src/Roo_grid_Grid.js.html
docs/src/Roo_grid_GridView.js.html
docs/src/Roo_menu_Item.js.html
docs/src/Roo_menu_Menu.js.html
docs/src/String.js.html
docs/symbols/Array.json
docs/symbols/Roo.BasicDialog.json
docs/symbols/Roo.ContentPanel.json
docs/symbols/Roo.DomHelper.json
docs/symbols/Roo.GridPanel.json
docs/symbols/Roo.HtmlEditorCore.json
docs/symbols/Roo.NestedLayoutPanel.json
docs/symbols/Roo.PagingToolbar.json
docs/symbols/Roo.Toolbar.TextItem.json
docs/symbols/Roo.Toolbar.json
docs/symbols/Roo.TreePanel.json
docs/symbols/Roo.data.JsonStore.json
docs/symbols/Roo.data.SimpleStore.json
docs/symbols/Roo.data.Store.json
docs/symbols/Roo.form.BasicForm.json
docs/symbols/Roo.form.Column.json
docs/symbols/Roo.form.DateField.json
docs/symbols/Roo.form.Form.json
docs/symbols/Roo.form.HtmlEditor.json
docs/symbols/Roo.form.Layout.json
docs/symbols/Roo.form.Row.json
docs/symbols/Roo.grid.Calendar.json
docs/symbols/Roo.grid.EditorGrid.json
docs/symbols/Roo.grid.Grid.json
docs/symbols/Roo.grid.PropertyGrid.json
docs/symbols/Roo.json
docs/symbols/Roo.menu.CheckItem.json
docs/symbols/Roo.menu.Item.json
docs/symbols/Roo.menu.Menu.json
docs/symbols/String.json
docs/tree.json
examples/form/htmledit.html
examples/form/htmledit.js
roojs-all.js
roojs-bootstrap-debug.js
roojs-bootstrap.js
roojs-core-debug.js
roojs-core.js
roojs-debug.js
roojs-ui-debug.js
roojs-ui.js

index a3b684d..4ede928 100644 (file)
--- a/Array.js
+++ b/Array.js
@@ -63,27 +63,47 @@ Roo.applyIf(Array.prototype, {
      */
     equals : function(b)
     {
      */
     equals : function(b)
     {
-        // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
-       if (this === b) {
-           return true;
-        }
-       if (b == null) {
-           return false;
-       }
-       if (this.length !== b.length) {
-           return false;
-       }
-      
-       // sort?? a.sort().equals(b.sort());
+            // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
+        if (this === b) {
+            return true;
+        }
+        if (b == null) {
+            return false;
+        }
+        if (this.length !== b.length) {
+            return false;
+        }
+          
+        // sort?? a.sort().equals(b.sort());
+          
+        for (var i = 0; i < this.length; ++i) {
+            if (this[i] !== b[i]) {
+            return false;
+            }
+        }
+        return true;
+    } 
+    
+    
+    
+    
+});
+
+Roo.applyIf(Array, {
+ /**
+     * from
+     * @static
+     * @param {Array} o Or Array like object (eg. nodelist)
+     * @returns {Array} 
+     */
+    from : function(o)
+    {
+        var ret= [];
+    
+        for (var i =0; i < o.length; i++) { 
+            ret[i] = o[i];
+        }
+        return ret;
       
       
-       for (var i = 0; i < this.length; ++i) {
-           if (this[i] !== b[i]) {
-               return false;
-           }
-       }
-       return true;
     }
 });
     }
 });
-
-
diff --git a/Date.js b/Date.js
index 6f217a5..fffb3b7 100644 (file)
--- a/Date.js
+++ b/Date.js
@@ -301,17 +301,17 @@ Date.createParser = function(format) {
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-        + "{v = new Date(y, m, d, h, i, s);}\n"
+        + "{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-        + "{v = new Date(y, m, d, h, i);}\n"
+        + "{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
-        + "{v = new Date(y, m, d, h);}\n"
+        + "{v = new Date(y, m, d, h); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
-        + "{v = new Date(y, m, d);}\n"
+        + "{v = new Date(y, m, d); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0)\n"
         + "else if (y >= 0 && m >= 0)\n"
-        + "{v = new Date(y, m);}\n"
+        + "{v = new Date(y, m); v.setFullYear(y);}\n"
         + "else if (y >= 0)\n"
         + "else if (y >= 0)\n"
-        + "{v = new Date(y);}\n"
+        + "{v = new Date(y); v.setFullYear(y);}\n"
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
@@ -371,7 +371,7 @@ Date.formatCodeToRegex = function(character, currentGroup) {
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
+            c:"m = Math.max(0,parseInt(results[" + currentGroup + "], 10) - 1);\n",
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
diff --git a/Roo.js b/Roo.js
index 08881e1..612a227 100644 (file)
--- a/Roo.js
+++ b/Roo.js
@@ -691,7 +691,7 @@ Roo.factory(conf, Roo.data);
                                        return 'xs'
                        }
                        
                                        return 'xs'
                        }
                        
-               }
+               } 
         
     });
 
         
     });
 
@@ -700,6 +700,5 @@ Roo.factory(conf, Roo.data);
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
-                "Roo.app", "Roo.ux",
-                "Roo.bootstrap",
-                "Roo.bootstrap.dash");
+                "Roo.app", "Roo.ux" 
+               );
index 0070805..d8034fd 100644 (file)
@@ -12,6 +12,7 @@
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
+ * @parent none builder
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
index 3d14399..0984532 100644 (file)
@@ -12,7 +12,7 @@
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
- * @parent Roo.BorderLayout Roo.LayoutDialog builder-top
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
@@ -25,7 +25,7 @@
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
- * @cfg {String} region [required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)
+ * @cfg {String} region (center|north|south|east|west) [required] which region to put this panel on (when used with xtype constructors)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
@@ -460,327 +460,6 @@ layout.addxtype({
     }
 });
 
     }
 });
 
-/**
- * @class Roo.GridPanel
- * @extends Roo.ContentPanel
- * @constructor
- * Create a new GridPanel.
- * @param {Roo.grid.Grid} grid The grid for this panel
- * @param {String/Object} config A string to set only the panel's title, or a config object
- */
-Roo.GridPanel = function(grid, config){
-    
-  
-    this.wrapper = Roo.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
-        {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
-        
-    this.wrapper.dom.appendChild(grid.getGridEl().dom);
-    
-    Roo.GridPanel.superclass.constructor.call(this, this.wrapper, config);
-    
-    if(this.toolbar){
-        this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);
-    }
-    // xtype created footer. - not sure if will work as we normally have to render first..
-    if (this.footer && !this.footer.el && this.footer.xtype) {
-        
-        this.footer.container = this.grid.getView().getFooterPanel(true);
-        this.footer.dataSource = this.grid.dataSource;
-        this.footer = Roo.factory(this.footer, Roo);
-        
-    }
-    
-    grid.monitorWindowResize = false; // turn off autosizing
-    grid.autoHeight = false;
-    grid.autoWidth = false;
-    this.grid = grid;
-    this.grid.getGridEl().replaceClass("x-layout-inactive-content", "x-layout-component-panel");
-};
-
-Roo.extend(Roo.GridPanel, Roo.ContentPanel, {
-    getId : function(){
-        return this.grid.id;
-    },
-    
-    /**
-     * Returns the grid for this panel
-     * @return {Roo.grid.Grid} 
-     */
-    getGrid : function(){
-        return this.grid;    
-    },
-    
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var grid = this.grid;
-            var size = this.adjustForComponents(width, height);
-            grid.getGridEl().setSize(size.width, size.height);
-            grid.autoSize();
-        }
-    },
-    
-    beforeSlide : function(){
-        this.grid.getView().scroller.clip();
-    },
-    
-    afterSlide : function(){
-        this.grid.getView().scroller.unclip();
-    },
-    
-    destroy : function(){
-        this.grid.destroy();
-        delete this.grid;
-        Roo.GridPanel.superclass.destroy.call(this); 
-    }
-});
-
-
-/**
- * @class Roo.NestedLayoutPanel
- * @extends Roo.ContentPanel
- * @constructor
- * Create a new NestedLayoutPanel.
- * 
- * 
- * @param {Roo.BorderLayout} layout [required] The layout for this panel
- * @param {String/Object} config A string to set only the title or a config object
- */
-Roo.NestedLayoutPanel = function(layout, config)
-{
-    // construct with only one argument..
-    /* FIXME - implement nicer consturctors
-    if (layout.layout) {
-        config = layout;
-        layout = config.layout;
-        delete config.layout;
-    }
-    if (layout.xtype && !layout.getEl) {
-        // then layout needs constructing..
-        layout = Roo.factory(layout, Roo);
-    }
-    */
-    
-    
-    Roo.NestedLayoutPanel.superclass.constructor.call(this, layout.getEl(), config);
-    
-    layout.monitorWindowResize = false; // turn off autosizing
-    this.layout = layout;
-    this.layout.getEl().addClass("x-layout-nested-layout");
-    
-    
-    
-    
-};
-
-Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
-
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var size = this.adjustForComponents(width, height);
-            var el = this.layout.getEl();
-            el.setSize(size.width, size.height);
-            var touch = el.dom.offsetWidth;
-            this.layout.layout();
-            // ie requires a double layout on the first pass
-            if(Roo.isIE && !this.initialized){
-                this.initialized = true;
-                this.layout.layout();
-            }
-        }
-    },
-    
-    // activate all subpanels if not currently active..
-    
-    setActiveState : function(active){
-        this.active = active;
-        if(!active){
-            this.fireEvent("deactivate", this);
-            return;
-        }
-        
-        this.fireEvent("activate", this);
-        // not sure if this should happen before or after..
-        if (!this.layout) {
-            return; // should not happen..
-        }
-        var reg = false;
-        for (var r in this.layout.regions) {
-            reg = this.layout.getRegion(r);
-            if (reg.getActivePanel()) {
-                //reg.showPanel(reg.getActivePanel()); // force it to activate.. 
-                reg.setActivePanel(reg.getActivePanel());
-                continue;
-            }
-            if (!reg.panels.length) {
-                continue;
-            }
-            reg.showPanel(reg.getPanel(0));
-        }
-        
-        
-        
-        
-    },
-    
-    /**
-     * Returns the nested BorderLayout for this panel
-     * @return {Roo.BorderLayout} 
-     */
-    getLayout : function(){
-        return this.layout;
-    },
-    
-     /**
-     * Adds a xtype elements to the layout of the nested panel
-     * <pre><code>
-
-panel.addxtype({
-       xtype : 'ContentPanel',
-       region: 'west',
-       items: [ .... ]
-   }
-);
-
-panel.addxtype({
-        xtype : 'NestedLayoutPanel',
-        region: 'west',
-        layout: {
-           center: { },
-           west: { }   
-        },
-        items : [ ... list of content panels or nested layout panels.. ]
-   }
-);
-</code></pre>
-     * @param {Object} cfg Xtype definition of item to add.
-     */
-    addxtype : function(cfg) {
-        return this.layout.addxtype(cfg);
-    
-    }
-});
-
-Roo.ScrollPanel = function(el, config, content){
-    config = config || {};
-    config.fitToFrame = true;
-    Roo.ScrollPanel.superclass.constructor.call(this, el, config, content);
-    
-    this.el.dom.style.overflow = "hidden";
-    var wrap = this.el.wrap({cls: "x-scroller x-layout-inactive-content"});
-    this.el.removeClass("x-layout-inactive-content");
-    this.el.on("mousewheel", this.onWheel, this);
-
-    var up = wrap.createChild({cls: "x-scroller-up", html: "&#160;"}, this.el.dom);
-    var down = wrap.createChild({cls: "x-scroller-down", html: "&#160;"});
-    up.unselectable(); down.unselectable();
-    up.on("click", this.scrollUp, this);
-    down.on("click", this.scrollDown, this);
-    up.addClassOnOver("x-scroller-btn-over");
-    down.addClassOnOver("x-scroller-btn-over");
-    up.addClassOnClick("x-scroller-btn-click");
-    down.addClassOnClick("x-scroller-btn-click");
-    this.adjustments = [0, -(up.getHeight() + down.getHeight())];
-
-    this.resizeEl = this.el;
-    this.el = wrap; this.up = up; this.down = down;
-};
-
-Roo.extend(Roo.ScrollPanel, Roo.ContentPanel, {
-    increment : 100,
-    wheelIncrement : 5,
-    scrollUp : function(){
-        this.resizeEl.scroll("up", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    scrollDown : function(){
-        this.resizeEl.scroll("down", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    afterScroll : function(){
-        var el = this.resizeEl;
-        var t = el.dom.scrollTop, h = el.dom.scrollHeight, ch = el.dom.clientHeight;
-        this.up[t == 0 ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-        this.down[h - t <= ch ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-    },
-
-    setSize : function(){
-        Roo.ScrollPanel.superclass.setSize.apply(this, arguments);
-        this.afterScroll();
-    },
-
-    onWheel : function(e){
-        var d = e.getWheelDelta();
-        this.resizeEl.dom.scrollTop -= (d*this.wheelIncrement);
-        this.afterScroll();
-        e.stopEvent();
-    },
-
-    setContent : function(content, loadScripts){
-        this.resizeEl.update(content, loadScripts);
-    }
-
-});
-
-
-
-/**
- * @class Roo.TreePanel
- * @extends Roo.ContentPanel
- * Treepanel component
- * 
- * @constructor
- * Create a new TreePanel. - defaults to fit/scoll contents.
- * @param {String/Object} config A string to set only the panel's title, or a config object
- */
-Roo.TreePanel = function(config){
-    var el = config.el;
-    var tree = config.tree;
-    delete config.tree; 
-    delete config.el; // hopefull!
-    
-    // wrapper for IE7 strict & safari scroll issue
-    
-    var treeEl = el.createChild();
-    config.resizeEl = treeEl;
-    
-    
-    
-    Roo.TreePanel.superclass.constructor.call(this, el, config);
-    this.tree = new Roo.tree.TreePanel(treeEl , tree);
-    //console.log(tree);
-    this.on('activate', function()
-    {
-        if (this.tree.rendered) {
-            return;
-        }
-        //console.log('render tree');
-        this.tree.render();
-    });
-    // this should not be needed.. - it's actually the 'el' that resizes?
-    // actuall it breaks the containerScroll - dragging nodes auto scroll at top
-    
-    //this.on('resize',  function (cp, w, h) {
-    //        this.tree.innerCt.setWidth(w);
-    //        this.tree.innerCt.setHeight(h);
-    //        //this.tree.innerCt.setStyle('overflow-y', 'auto');
-    //});
-
-        
-    
-};
-
-Roo.extend(Roo.TreePanel, Roo.ContentPanel, {   
-    fitToFrame : true,
-    autoScroll : true,
-    /*
-     * @cfg {Roo.tree.TreePanel} tree [required] The tree TreePanel, with config etc.
-     */
-    tree : false
-
-});
-
 
 
 
 
 
 
index f12b888..a896788 100644 (file)
@@ -245,211 +245,319 @@ Roo.DomHelper = function(){
         el.insertBefore(node, before);
         return node;
     };
         el.insertBefore(node, before);
         return node;
     };
+    
+    // this is a bit like the react update code...
+    // 
+    
+    var updateNode = function(from, to)
+    {
+        // should we handle non-standard elements?
+        Roo.log(["UpdateNode" , from, to]);
+        if (from.nodeType != to.nodeType) {
+            Roo.log(["ReplaceChild - mismatch notType" , to, from ]);
+            from.parentNode.replaceChild(to, from);
+        }
+        
+        if (from.nodeType == 3) {
+            // assume it's text?!
+            if (from.data == to.data) {
+                return;
+            }
+            from.data = to.data;
+            return;
+        }
+        if (!from.parentNode) {
+            // not sure why this is happening?
+            return;
+        }
+        // assume 'to' doesnt have '1/3 nodetypes!
+        // not sure why, by from, parent node might not exist?
+        if (from.nodeType !=1 || from.tagName != to.tagName) {
+            Roo.log(["ReplaceChild" , from, to ]);
+            
+            from.parentNode.replaceChild(to, from);
+            return;
+        }
+        // compare attributes
+        var ar = Array.from(from.attributes);
+        for(var i = 0; i< ar.length;i++) {
+            if (to.hasAttribute(ar[i].name)) {
+                continue;
+            }
+            if (ar[i].name == 'id') { // always keep ids?
+               continue;
+            }
+            //if (ar[i].name == 'style') {
+            //   throw "style removed?";
+            //}
+            Roo.log("removeAttribute" + ar[i].name);
+            from.removeAttribute(ar[i].name);
+        }
+        ar = to.attributes;
+        for(var i = 0; i< ar.length;i++) {
+            if (from.getAttribute(ar[i].name) == to.getAttribute(ar[i].name)) {
+                Roo.log("skipAttribute " + ar[i].name  + '=' + to.getAttribute(ar[i].name));
+                continue;
+            }
+            Roo.log("updateAttribute " + ar[i].name + '=>' + to.getAttribute(ar[i].name));
+            from.setAttribute(ar[i].name, to.getAttribute(ar[i].name));
+        }
+        // children
+        var far = Array.from(from.childNodes);
+        var tar = Array.from(to.childNodes);
+        // if the lengths are different.. then it's probably a editable content change, rather than
+        // a change of the block definition..
+        
+        // this did notwork , as our rebuilt nodes did not include ID's so did not match at all.
+         /*if (from.innerHTML == to.innerHTML) {
+            return;
+        }
+        if (far.length != tar.length) {
+            from.innerHTML = to.innerHTML;
+            return;
+        }
+        */
+        
+        for(var i = 0; i < Math.max(tar.length, far.length); i++) {
+            if (i >= far.length) {
+                from.appendChild(tar[i]);
+                Roo.log(["add", tar[i]]);
+                
+            } else if ( i  >= tar.length) {
+                from.removeChild(far[i]);
+                Roo.log(["remove", far[i]]);
+            } else {
+                
+                updateNode(far[i], tar[i]);
+            }    
+        }
+        
+        
+        
+        
+    };
+    
+    
 
     return {
 
     return {
-    /** True to force the use of DOM instead of html fragments @type Boolean */
-    useDom : false,
-
-    /**
-     * Returns the markup for the passed Element(s) config
-     * @param {Object} o The Dom object spec (and children)
-     * @return {String}
-     */
-    markup : function(o){
-        return createHtml(o);
-    },
-
-    /**
-     * Applies a style specification to an element
-     * @param {String/HTMLElement} el The element to apply styles to
-     * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
-     * a function which returns such a specification.
-     */
-    applyStyles : function(el, styles){
-        if(styles){
-           el = Roo.fly(el);
-           if(typeof styles == "string"){
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               var matches;
-               while ((matches = re.exec(styles)) != null){
-                   el.setStyle(matches[1], matches[2]);
-               }
-           }else if (typeof styles == "object"){
-               for (var style in styles){
-                  el.setStyle(style, styles[style]);
+        /** True to force the use of DOM instead of html fragments @type Boolean */
+        useDom : false,
+    
+        /**
+         * Returns the markup for the passed Element(s) config
+         * @param {Object} o The Dom object spec (and children)
+         * @return {String}
+         */
+        markup : function(o){
+            return createHtml(o);
+        },
+    
+        /**
+         * Applies a style specification to an element
+         * @param {String/HTMLElement} el The element to apply styles to
+         * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
+         * a function which returns such a specification.
+         */
+        applyStyles : function(el, styles){
+            if(styles){
+               el = Roo.fly(el);
+               if(typeof styles == "string"){
+                   var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+                   var matches;
+                   while ((matches = re.exec(styles)) != null){
+                       el.setStyle(matches[1], matches[2]);
+                   }
+               }else if (typeof styles == "object"){
+                   for (var style in styles){
+                      el.setStyle(style, styles[style]);
+                   }
+               }else if (typeof styles == "function"){
+                    Roo.DomHelper.applyStyles(el, styles.call());
                }
                }
-           }else if (typeof styles == "function"){
-                Roo.DomHelper.applyStyles(el, styles.call());
-           }
-        }
-    },
-
-    /**
-     * Inserts an HTML fragment into the Dom
-     * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
-     * @param {HTMLElement} el The context element
-     * @param {String} html The HTML fragmenet
-     * @return {HTMLElement} The new node
-     */
-    insertHtml : function(where, el, html){
-        where = where.toLowerCase();
-        if(el.insertAdjacentHTML){
-            if(tableRe.test(el.tagName)){
-                var rs;
-                if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
-                    return rs;
+            }
+        },
+    
+        /**
+         * Inserts an HTML fragment into the Dom
+         * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
+         * @param {HTMLElement} el The context element
+         * @param {String} html The HTML fragmenet
+         * @return {HTMLElement} The new node
+         */
+        insertHtml : function(where, el, html){
+            where = where.toLowerCase();
+            if(el.insertAdjacentHTML){
+                if(tableRe.test(el.tagName)){
+                    var rs;
+                    if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
+                        return rs;
+                    }
+                }
+                switch(where){
+                    case "beforebegin":
+                        el.insertAdjacentHTML('BeforeBegin', html);
+                        return el.previousSibling;
+                    case "afterbegin":
+                        el.insertAdjacentHTML('AfterBegin', html);
+                        return el.firstChild;
+                    case "beforeend":
+                        el.insertAdjacentHTML('BeforeEnd', html);
+                        return el.lastChild;
+                    case "afterend":
+                        el.insertAdjacentHTML('AfterEnd', html);
+                        return el.nextSibling;
                 }
                 }
+                throw 'Illegal insertion point -> "' + where + '"';
             }
             }
+            var range = el.ownerDocument.createRange();
+            var frag;
             switch(where){
             switch(where){
-                case "beforebegin":
-                    el.insertAdjacentHTML('BeforeBegin', html);
+                 case "beforebegin":
+                    range.setStartBefore(el);
+                    frag = range.createContextualFragment(html);
+                    el.parentNode.insertBefore(frag, el);
                     return el.previousSibling;
                     return el.previousSibling;
-                case "afterbegin":
-                    el.insertAdjacentHTML('AfterBegin', html);
-                    return el.firstChild;
+                 case "afterbegin":
+                    if(el.firstChild){
+                        range.setStartBefore(el.firstChild);
+                        frag = range.createContextualFragment(html);
+                        el.insertBefore(frag, el.firstChild);
+                        return el.firstChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.firstChild;
+                    }
                 case "beforeend":
                 case "beforeend":
-                    el.insertAdjacentHTML('BeforeEnd', html);
-                    return el.lastChild;
+                    if(el.lastChild){
+                        range.setStartAfter(el.lastChild);
+                        frag = range.createContextualFragment(html);
+                        el.appendChild(frag);
+                        return el.lastChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.lastChild;
+                    }
                 case "afterend":
                 case "afterend":
-                    el.insertAdjacentHTML('AfterEnd', html);
-                    return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-        }
-        var range = el.ownerDocument.createRange();
-        var frag;
-        switch(where){
-             case "beforebegin":
-                range.setStartBefore(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el);
-                return el.previousSibling;
-             case "afterbegin":
-                if(el.firstChild){
-                    range.setStartBefore(el.firstChild);
+                    range.setStartAfter(el);
                     frag = range.createContextualFragment(html);
                     frag = range.createContextualFragment(html);
-                    el.insertBefore(frag, el.firstChild);
-                    return el.firstChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.firstChild;
+                    el.parentNode.insertBefore(frag, el.nextSibling);
+                    return el.nextSibling;
                 }
                 }
-            case "beforeend":
-                if(el.lastChild){
-                    range.setStartAfter(el.lastChild);
-                    frag = range.createContextualFragment(html);
-                    el.appendChild(frag);
-                    return el.lastChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.lastChild;
+                throw 'Illegal insertion point -> "' + where + '"';
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them before el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertBefore : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "beforeBegin");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them after el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object} o The Dom object spec (and children)
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertAfter : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them as the first child of el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertFirst : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterBegin");
+        },
+    
+        // private
+        doInsert : function(el, o, returnElement, pos, sibling){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml(pos, el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and appends them to el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        append : function(el, o, returnElement){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.appendChild(newNode);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml("beforeEnd", el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and overwrites the contents of el with them
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        overwrite : function(el, o, returnElement)
+        {
+            el = Roo.getDom(el);
+            if (o.ns) {
+              
+                while (el.childNodes.length) {
+                    el.removeChild(el.firstChild);
                 }
                 }
-            case "afterend":
-                range.setStartAfter(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el.nextSibling);
-                return el.nextSibling;
+                createDom(o, el);
+            } else {
+                el.innerHTML = createHtml(o);   
             }
             }
-            throw 'Illegal insertion point -> "' + where + '"';
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them before el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertBefore : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "beforeBegin");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them after el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object} o The Dom object spec (and children)
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertAfter : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them as the first child of el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertFirst : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterBegin");
-    },
-
-    // private
-    doInsert : function(el, o, returnElement, pos, sibling){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml(pos, el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and appends them to el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    append : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.appendChild(newNode);
-        }else{
+            
+            return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
+        },
+    
+        /**
+         * Creates a new Roo.DomHelper.Template from the Dom object spec
+         * @param {Object} o The Dom object spec (and children)
+         * @return {Roo.DomHelper.Template} The new template
+         */
+        createTemplate : function(o){
             var html = createHtml(o);
             var html = createHtml(o);
-            newNode = this.insertHtml("beforeEnd", el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and overwrites the contents of el with them
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    overwrite : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        if (o.ns) {
-          
-            while (el.childNodes.length) {
-                el.removeChild(el.firstChild);
-            }
-            createDom(o, el);
-        } else {
-            el.innerHTML = createHtml(o);   
+            return new Roo.Template(html);
+        },
+         /**
+         * Updates the first element with the spec from the o (replacing if necessary)
+         * This iterates through the children, and updates attributes / children etc..
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         */
+        
+        update : function(el, o)
+        {
+            updateNode(Roo.getDom(el), createDom(o));
+            
         }
         
         }
         
-        return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
-    },
-
-    /**
-     * Creates a new Roo.DomHelper.Template from the Dom object spec
-     * @param {Object} o The Dom object spec (and children)
-     * @return {Roo.DomHelper.Template} The new template
-     */
-    createTemplate : function(o){
-        var html = createHtml(o);
-        return new Roo.Template(html);
-    }
+        
     };
 }();
     };
 }();
index e17b998..e682312 100644 (file)
@@ -71,7 +71,8 @@ Roo.HtmlEditorCore = function(config){
          * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
          * @param {Roo.HtmlEditorCore} this
          */
          * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
          * @param {Roo.HtmlEditorCore} this
          */
-        editorevent: true
+        editorevent: true 
+         
         
     });
     
         
     });
     
@@ -107,15 +108,30 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @cfg {Number} width (in pixels)
      */   
     width: 500,
      * @cfg {Number} width (in pixels)
      */   
     width: 500,
+     /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
     
     
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
     /**
      * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
      * 
      */
     stylesheets: false,
     /**
      * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
      * 
      */
     stylesheets: false,
+     /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
     
     /**
     
     /**
-     * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
+     * @cfg {boolean} allowComments - default false - allow comments in HTML source
+     *          - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
     // id of frame..
      */
     allowComments: false,
     // id of frame..
@@ -139,6 +155,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      
     bodyCls : '',
 
      
     bodyCls : '',
 
+    
+    undoManager : false,
     /**
      * Protected method that will not generally be called directly. It
      * is called when the editor initializes the iframe with HTML contents. Override this method if you
     /**
      * Protected method that will not generally be called directly. It
      * is called when the editor initializes the iframe with HTML contents. Override this method if you
@@ -165,7 +183,10 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
                    '</style>';
         } else {
                     'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
                    '</style>';
         } else {
-            for (var i in this.stylesheets) { 
+            for (var i in this.stylesheets) {
+                if (typeof(this.stylesheets[i]) != 'string') {
+                    continue;
+                }
                 st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
             }
             
                 st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
             }
             
@@ -174,14 +195,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         st +=  '<style type="text/css">' +
             'IMG { cursor: pointer } ' +
         '</style>';
         st +=  '<style type="text/css">' +
             'IMG { cursor: pointer } ' +
         '</style>';
-
-        var cls = 'roo-htmleditor-body';
+        
+        st += '<meta name="google" content="notranslate">';
+        
+        var cls = 'notranslate roo-htmleditor-body';
         
         if(this.bodyCls.length){
             cls += ' ' + this.bodyCls;
         }
         
         
         if(this.bodyCls.length){
             cls += ' ' + this.bodyCls;
         }
         
-        return '<html><head>' + st  +
+        return '<html  class="notranslate" translate="no"><head>' + st  +
             //<style type="text/css">' +
             //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
             //'</style>' +
             //<style type="text/css">' +
             //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
             //'</style>' +
@@ -224,7 +247,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         this.iframe = iframe.dom;
 
         
         this.iframe = iframe.dom;
 
-         this.assignDocWin();
+        this.assignDocWin();
         
         this.doc.designMode = 'on';
        
         
         this.doc.designMode = 'on';
        
@@ -240,6 +263,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                 if(this.doc.body || this.doc.readyState == 'complete'){
                     try {
                         this.doc.designMode="on";
                 if(this.doc.body || this.doc.readyState == 'complete'){
                     try {
                         this.doc.designMode="on";
+                        
                     } catch (e) {
                         return;
                     }
                     } catch (e) {
                         return;
                     }
@@ -287,10 +311,10 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         if(this.sourceEditMode){
  
         
         if(this.sourceEditMode){
  
-            Roo.get(this.iframe).addClass(['x-hidden','hide']);     //FIXME - what's the BS styles for these
+            Roo.get(this.iframe).addClass(['x-hidden','hide', 'd-none']);     //FIXME - what's the BS styles for these
             
         }else{
             
         }else{
-            Roo.get(this.iframe).removeClass(['x-hidden','hide']);
+            Roo.get(this.iframe).removeClass(['x-hidden','hide', 'd-none']);
             //this.iframe.className = '';
             this.deferFocus();
         }
             //this.iframe.className = '';
             this.deferFocus();
         }
@@ -307,7 +331,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
-    cleanHtml : function(html){
+    cleanHtml : function(html)
+    {
         html = String(html);
         if(html.length > 5){
             if(Roo.isSafari){ // strip safari nonsense
         html = String(html);
         if(html.length > 5){
             if(Roo.isSafari){ // strip safari nonsense
@@ -325,11 +350,38 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
-    syncValue : function(){
+    syncValue : function()
+    {
+        //Roo.log("HtmlEditorCore:syncValue (EDITOR->TEXT)");
         if(this.initialized){
         if(this.initialized){
+            
+            this.undoManager.addEvent();
+
+            
             var bd = (this.doc.body || this.doc.documentElement);
             var bd = (this.doc.body || this.doc.documentElement);
-            //this.cleanUpPaste(); -- this is done else where and causes havoc..
-            var html = bd.innerHTML;
+           
+            
+            var sel = this.win.getSelection();
+            
+            var div = document.createElement('div');
+            div.innerHTML = bd.innerHTML;
+            var gtx = div.getElementsByClassName('gtx-trans-icon'); // google translate - really annoying and difficult to get rid of.
+            if (gtx.length > 0) {
+                var rm = gtx.item(0).parentNode;
+                rm.parentNode.removeChild(rm);
+            }
+            
+           
+            if (this.enableBlocks) {
+                new Roo.htmleditor.FilterBlock({ node : div });
+            }
+            //?? tidy?
+            var tidy = new Roo.htmleditor.TidySerializer({
+                inner:  true
+            });
+            var html  = tidy.serialize(div);
+            
+            
             if(Roo.isSafari){
                 var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
                 var m = bs ? bs.match(/text-align:(.*?);/i) : false;
             if(Roo.isSafari){
                 var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
                 var m = bs ? bs.match(/text-align:(.*?);/i) : false;
@@ -374,24 +426,41 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     },
 
     /**
     },
 
     /**
+     * TEXTAREA -> EDITABLE
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
-    pushValue : function(){
+    pushValue : function()
+    {
+        //Roo.log("HtmlEditorCore:pushValue (TEXT->EDITOR)");
         if(this.initialized){
             var v = this.el.dom.value.trim();
             
         if(this.initialized){
             var v = this.el.dom.value.trim();
             
-//            if(v.length < 1){
-//                v = '&#160;';
-//            }
             
             if(this.owner.fireEvent('beforepush', this, v) !== false){
                 var d = (this.doc.body || this.doc.documentElement);
                 d.innerHTML = v;
             
             if(this.owner.fireEvent('beforepush', this, v) !== false){
                 var d = (this.doc.body || this.doc.documentElement);
                 d.innerHTML = v;
-                this.cleanUpPaste();
+                 
                 this.el.dom.value = d.innerHTML;
                 this.owner.fireEvent('push', this, v);
             }
                 this.el.dom.value = d.innerHTML;
                 this.owner.fireEvent('push', this, v);
             }
+            if (this.autoClean) {
+                new Roo.htmleditor.FilterParagraph({node : this.doc.body}); // paragraphs
+                new Roo.htmleditor.FilterSpan({node : this.doc.body}); // empty spans
+            }
+            if (this.enableBlocks) {
+                Roo.htmleditor.Block.initAll(this.doc.body);
+            }
+            
+            this.updateLanguage();
+            
+            var lc = this.doc.body.lastChild;
+            if (lc && lc.nodeType == 1 && lc.getAttribute("contenteditable") == "false") {
+                // add an extra line at the end.
+                this.doc.body.appendChild(this.doc.createElement('br'));
+            }
+            
+            
         }
     },
 
         }
     },
 
@@ -453,28 +522,136 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
+        dbody.setAttribute("translate", "no");
+        
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
-            //'mousedown': this.onEditorEvent,
+             
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
+            
             buffer:100,
             scope: this
         });
             buffer:100,
             scope: this
         });
+        Roo.EventManager.on(this.doc, {
+            'paste': this.onPasteEvent,
+            scope : this
+        });
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
+        //??? needed???
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
+        
+        // initialize special key events - enter
+        new Roo.htmleditor.KeyEnter({core : this});
+        
+         
+        
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
-
+    // this is to prevent a href clicks resulting in a redirect?
+   
+    onPasteEvent : function(e,v)
+    {
+        // I think we better assume paste is going to be a dirty load of rubish from word..
+        
+        // even pasting into a 'email version' of this widget will have to clean up that mess.
+        var cd = (e.browserEvent.clipboardData || window.clipboardData);
+        
+        // check what type of paste - if it's an image, then handle it differently.
+        if (cd.files.length > 0) {
+            // pasting images?
+            var urlAPI = (window.createObjectURL && window) || 
+                (window.URL && URL.revokeObjectURL && URL) || 
+                (window.webkitURL && webkitURL);
+    
+            var url = urlAPI.createObjectURL( cd.files[0]);
+            this.insertAtCursor('<img src=" + url + ">');
+            return false;
+        }
+        
+        var html = cd.getData('text/html'); // clipboard event
+        var parser = new Roo.rtf.Parser(cd.getData('text/rtf'));
+        var images = parser.doc ? parser.doc.getElementsByType('pict') : [];
+        Roo.log(images);
+        //Roo.log(imgs);
+        // fixme..
+        images = images.filter(function(g) { return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/); }) // ignore headers
+                       .map(function(g) { return g.toDataURL(); })
+                       .filter(function(g) { return g != 'about:blank'; });
+        
+        
+        html = this.cleanWordChars(html);
+        
+        var d = (new DOMParser().parseFromString(html, 'text/html')).body;
+        
+        
+        var sn = this.getParentElement();
+        // check if d contains a table, and prevent nesting??
+        //Roo.log(d.getElementsByTagName('table'));
+        //Roo.log(sn);
+        //Roo.log(sn.closest('table'));
+        if (d.getElementsByTagName('table').length && sn && sn.closest('table')) {
+            e.preventDefault();
+            this.insertAtCursor("You can not nest tables");
+            //Roo.log("prevent?"); // fixme - 
+            return false;
+        }
+        
+        if (images.length > 0) {
+            Roo.each(d.getElementsByTagName('img'), function(img, i) {
+                img.setAttribute('src', images[i]);
+            });
+        }
+        if (this.autoClean) {
+            new Roo.htmleditor.FilterStyleToTag({ node : d });
+            new Roo.htmleditor.FilterAttributes({
+                node : d,
+                attrib_white : ['href', 'src', 'name', 'align'],
+                attrib_clean : ['href', 'src' ] 
+            });
+            new Roo.htmleditor.FilterBlack({ node : d, tag : this.black});
+            // should be fonts..
+            new Roo.htmleditor.FilterKeepChildren({node : d, tag : [ 'FONT', 'O:P' ]} );
+            new Roo.htmleditor.FilterParagraph({ node : d });
+            new Roo.htmleditor.FilterSpan({ node : d });
+            new Roo.htmleditor.FilterLongBr({ node : d });
+        }
+        if (this.enableBlocks) {
+                
+            Array.from(d.getElementsByTagName('img')).forEach(function(img) {
+                if (img.closest('figure')) { // assume!! that it's aready
+                    return;
+                }
+                var fig  = new Roo.htmleditor.BlockFigure({
+                    image_src  : img.src
+                });
+                fig.updateElement(img); // replace it..
+                
+            });
+        }
+        
+        
+        this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));
+        if (this.enableBlocks) {
+            Roo.htmleditor.Block.initAll(this.doc.body);
+        }
+        
+        
+        e.preventDefault();
+        return false;
+        // default behaveiour should be our local cleanup paste? (optional?)
+        // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
+        //this.owner.fireEvent('paste', e, v);
+    },
     // private
     onDestroy : function(){
         
     // private
     onDestroy : function(){
         
@@ -496,7 +673,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     onFirstFocus : function(){
         
         this.assignDocWin();
     onFirstFocus : function(){
         
         this.assignDocWin();
-        
+        this.undoManager = new Roo.lib.UndoManager(100,(this.doc.body || this.doc.documentElement));
         
         this.activated = true;
          
         
         this.activated = true;
          
@@ -541,10 +718,48 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     onEditorEvent : function(e)
     {
 
     onEditorEvent : function(e)
     {
-        this.owner.fireEvent('editorevent', this, e);
+         
+        
+        if (e && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+            return; // we do not handle this.. (undo manager does..)
+        }
+        // in theory this detects if the last element is not a br, then we try and do that.
+        // its so clicking in space at bottom triggers adding a br and moving the cursor.
+        if (e &&
+            e.target.nodeName == 'BODY' &&
+            e.type == "mouseup" &&
+            this.doc.body.lastChild
+           ) {
+            var lc = this.doc.body.lastChild;
+            // gtx-trans is google translate plugin adding crap.
+            while ((lc.nodeType == 3 && lc.nodeValue == '') || lc.id == 'gtx-trans') {
+                lc = lc.previousSibling;
+            }
+            if (lc.nodeType == 1 && lc.nodeName != 'BR') {
+            // if last element is <BR> - then dont do anything.
+            
+                var ns = this.doc.createElement('br');
+                this.doc.body.appendChild(ns);
+                range = this.doc.createRange();
+                range.setStartAfter(ns);
+                range.collapse(true);
+                var sel = this.win.getSelection();
+                sel.removeAllRanges();
+                sel.addRange(range);
+            }
+        }
+        
+        
+        
+        this.fireEditorEvent(e);
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
+    
+    fireEditorEvent: function(e)
+    {
+        this.owner.fireEvent('editorevent', this, e);
+    },
 
     insertTag : function(tg)
     {
 
     insertTag : function(tg)
     {
@@ -566,7 +781,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             
         }
         this.execCmd("formatblock",   tg);
             
         }
         this.execCmd("formatblock",   tg);
-        
+        this.undoManager.addEvent(); 
     },
     
     insertText : function(txt)
     },
     
     insertText : function(txt)
@@ -578,6 +793,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
+        this.undoManager.addEvent();
     } ,
     
      
     } ,
     
      
@@ -588,7 +804,37 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
-    relayCmd : function(cmd, value){
+    relayCmd : function(cmd, value)
+    {
+        
+        switch (cmd) {
+            case 'justifyleft':
+            case 'justifyright':
+            case 'justifycenter':
+                // if we are in a cell, then we will adjust the
+                var n = this.getParentElement();
+                var td = n.closest('td');
+                if (td) {
+                    var bl = Roo.htmleditor.Block.factory(td);
+                    bl.textAlign = cmd.replace('justify','');
+                    bl.updateElement();
+                    this.owner.fireEvent('editorevent', this);
+                    return;
+                }
+                this.execCmd('styleWithCSS', true); // 
+                break;
+            case 'bold':
+            case 'italic':
+                // if there is no selection, then we insert, and set the curson inside it..
+                this.execCmd('styleWithCSS', false); 
+                break;
+                
+        
+            default:
+                break;
+        }
+        
+        
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
@@ -621,20 +867,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         if(!this.activated){
             return;
         }
         if(!this.activated){
             return;
         }
-        /*
-        if(Roo.isIE){
-            this.win.focus();
-            var r = this.doc.selection.createRange();
-            if(r){
-                r.collapse(true);
-                r.pasteHTML(text);
-                this.syncValue();
-                this.deferFocus();
-            
-            }
-            return;
-        }
-        */
+         
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
@@ -644,19 +877,31 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
+                
+                // delete the existing?
+                
+                this.createRange(this.getSelection()).deleteContents();
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
+                range = range.cloneRange();
+                range.collapse(false);
+                 
+                win.getSelection().removeAllRanges();
+                win.getSelection().addRange(range);
+                
+                
+                
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
+            
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
-            
             this.syncValue();
             
             this.deferFocus();
             this.syncValue();
             
             this.deferFocus();
@@ -681,15 +926,17 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                         cmd = 'underline';
                         break;
                     
                         cmd = 'underline';
                         break;
                     
-                    case 'v':
-                        this.cleanUpPaste.defer(100, this);
-                        return;
+                    //case 'v':
+                      //  this.cleanUpPaste.defer(100, this);
+                      //  return;
                         
                 }
                 if(cmd){
                         
                 }
                 if(cmd){
-                    this.win.focus();
-                    this.execCmd(cmd);
-                    this.deferFocus();
+                    
+                    this.relayCmd(cmd);
+                    //this.win.focus();
+                    //this.execCmd(cmd);
+                    //this.deferFocus();
                     e.preventDefault();
                 }
                 
                     e.preventDefault();
                 }
                 
@@ -699,6 +946,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
+        
+        
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
@@ -712,23 +961,25 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     }
                     return;
                 }
                     }
                     return;
                 }
-                
+                /// this is handled by Roo.htmleditor.KeyEnter
+                 /*
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
-                            r.pasteHTML('<br />');
+                            r.pasteHTML('<br/>');
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                */
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                //    return;
+                //}
                 
                 
             };
                 
                 
             };
@@ -741,10 +992,11 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+               
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                 //   return;
+                //}
                 
             };
         }else if(Roo.isSafari){
                 
             };
         }else if(Roo.isSafari){
@@ -757,10 +1009,12 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.deferFocus();
                     return;
                 }
                     this.deferFocus();
                     return;
                 }
-               if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                 this.mozKeyPress(e);
+                
+               //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                 //   this.cleanUpPaste.defer(100, this);
+                 //   return;
+               // }
                 
              };
         }
                 
              };
         }
@@ -790,7 +1044,27 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     getSelection : function() 
     {
         this.assignDocWin();
     getSelection : function() 
     {
         this.assignDocWin();
-        return Roo.isIE ? this.doc.selection : this.win.getSelection();
+        return Roo.lib.Selection.wrap(Roo.isIE ? this.doc.selection : this.win.getSelection(), this.doc);
+    },
+    /**
+     * Select a dom node
+     * @param {DomElement} node the node to select
+     */
+    selectNode : function(node, collapse)
+    {
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
+        }
+        if (collapse === true) {
+            nodeRange.collapse(true);
+        }
+        //
+        var s = this.win.getSelection();
+        s.removeAllRanges();
+        s.addRange(nodeRange);
     },
     
     getSelectedNode: function() 
     },
     
     getSelectedNode: function() 
@@ -799,8 +1073,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         // should we cache this!!!!
         
         
         // should we cache this!!!!
         
-        
-        
+         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
@@ -864,6 +1137,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         return nodes[0];
     },
         
         return nodes[0];
     },
+    
+    
     createRange: function(sel)
     {
         // this has strange effects when using with 
     createRange: function(sel)
     {
         // this has strange effects when using with 
@@ -981,26 +1256,21 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         // fully contined.
         return 3;
     },
         // fully contined.
         return 3;
     },
-
-    // private? - in a new class?
-    cleanUpPaste :  function()
-    {
-        // cleans up the whole document..
-        Roo.log('cleanuppaste');
-        
-        this.cleanUpChildren(this.doc.body);
-        var clean = this.cleanWordChars(this.doc.body.innerHTML);
-        if (clean != this.doc.body.innerHTML) {
-            this.doc.body.innerHTML = clean;
-        }
-        
-    },
-    
     cleanWordChars : function(input) {// change the chars to hex code
     cleanWordChars : function(input) {// change the chars to hex code
-        var he = Roo.HtmlEditorCore;
         
         
+       var swapCodes  = [ 
+            [    8211, "&#8211;" ], 
+            [    8212, "&#8212;" ], 
+            [    8216,  "'" ],  
+            [    8217, "'" ],  
+            [    8220, '"' ],  
+            [    8221, '"' ],  
+            [    8226, "*" ],  
+            [    8230, "..." ]
+        ]; 
         var output = input;
         var output = input;
-        Roo.each(he.swapCodes, function(sw) { 
+        Roo.each(swapCodes, function(sw) { 
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
@@ -1009,487 +1279,60 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         return output;
     },
     
         return output;
     },
     
-    
-    cleanUpChildren : function (n)
-    {
-        if (!n.childNodes.length) {
-            return;
-        }
-        for (var i = n.childNodes.length-1; i > -1 ; i--) {
-           this.cleanUpChild(n.childNodes[i]);
-        }
-    },
-    
+     
     
         
     
     cleanUpChild : function (node)
     {
     
         
     
     cleanUpChild : function (node)
     {
-        var ed = this;
-        //console.log(node);
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            if (!this.allowComments) {
-                node.parentNode.removeChild(node);
-            }
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        var lcname = node.tagName.toLowerCase();
-        // we ignore whitelists... ?? = not really the way to go, but we probably have not got a full
-        // whitelist of tags..
-        
-        if (this.black.indexOf(lcname) > -1 && this.clearUp ) {
-            // remove node.
-            node.parentNode.removeChild(node);
-            return;
-            
-        }
-        
-        var remove_keep_children= Roo.HtmlEditorCore.remove.indexOf(node.tagName.toLowerCase()) > -1;
-        
-        // spans with no attributes - just remove them..
-        if ((!node.attributes || !node.attributes.length) && lcname == 'span') { 
-            remove_keep_children = true;
-        }
-        
-        // remove <a name=....> as rendering on yahoo mailer is borked with this.
-        // this will have to be flaged elsewhere - perhaps ablack=name... on the mailer..
-        
-        //if (node.tagName.toLowerCase() == 'a' && !node.hasAttribute('href')) {
-        //    remove_keep_children = true;
-        //}
-        
-        if (remove_keep_children) {
-            this.cleanUpChildren(node);
-            // inserts everything just before this node...
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-            }
-            node.parentNode.removeChild(node);
-            return;
-        }
-        
-        if (!node.attributes || !node.attributes.length) {
-            
-          
-            
-            
-            this.cleanUpChildren(node);
-            return;
-        }
-        
-        function cleanAttr(n,v)
-        {
-            
-            if (v.match(/^\./) || v.match(/^\//)) {
-                return;
-            }
-            if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/) || v.match(/^ftp:/)) {
-                return;
-            }
-            if (v.match(/^#/)) {
-                return;
-            }
-            if (v.match(/^\{/)) { // allow template editing.
-                return;
-            }
-//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
-            node.removeAttribute(n);
-            
-        }
-        
-        var cwhite = this.cwhite;
-        var cblack = this.cblack;
-            
-        function cleanStyle(n,v)
-        {
-            if (v.match(/expression/)) { //XSS?? should we even bother..
-                node.removeAttribute(n);
-                return;
-            }
-            
-            var parts = v.split(/;/);
-            var clean = [];
-            
-            Roo.each(parts, function(p) {
-                p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                if (!p.length) {
-                    return true;
-                }
-                var l = p.split(':').shift().replace(/\s+/g,'');
-                l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                
-                if ( cwhite.length && cblack.indexOf(l) > -1) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                //Roo.log()
-                // only allow 'c whitelisted system attributes'
-                if ( cwhite.length &&  cwhite.indexOf(l) < 0 && cwhite.indexOf(l.toLowerCase()) < 0 ) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                
-                
-                 
-                
-                clean.push(p);
-                return true;
-            });
-            if (clean.length) { 
-                node.setAttribute(n, clean.join(';'));
-            } else {
-                node.removeAttribute(n);
-            }
-            
-        }
-        
-        
-        for (var i = node.attributes.length-1; i > -1 ; i--) {
-            var a = node.attributes[i];
-            //console.log(a);
-            
-            if (a.name.toLowerCase().substr(0,2)=='on')  {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase()) > -1) {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase()) > -1) {
-                cleanAttr(a.name,a.value); // fixme..
-                continue;
-            }
-            if (a.name == 'style') {
-                cleanStyle(a.name,a.value);
-                continue;
-            }
-            /// clean up MS crap..
-            // tecnically this should be a list of valid class'es..
-            
-            
-            if (a.name == 'class') {
-                if (a.value.match(/^Mso/)) {
-                    node.removeAttribute('class');
-                }
-                
-                if (a.value.match(/^body$/)) {
-                    node.removeAttribute('class');
-                }
-                continue;
-            }
-            
-            // style cleanup!?
-            // class cleanup?
-            
-        }
-        
-        
-        this.cleanUpChildren(node);
         
         
+        new Roo.htmleditor.FilterComment({node : node});
+        new Roo.htmleditor.FilterAttributes({
+                node : node,
+                attrib_black : this.ablack,
+                attrib_clean : this.aclean,
+                style_white : this.cwhite,
+                style_black : this.cblack
+        });
+        new Roo.htmleditor.FilterBlack({ node : node, tag : this.black});
+        new Roo.htmleditor.FilterKeepChildren({node : node, tag : this.tag_remove} );
+         
         
     },
     
     /**
      * Clean up MS wordisms...
         
     },
     
     /**
      * Clean up MS wordisms...
+     * @deprecated - use filter directly
      */
     cleanWord : function(node)
     {
      */
     cleanWord : function(node)
     {
-        if (!node) {
-            this.cleanWord(this.doc.body);
-            return;
-        }
-        
-        if(
-                node.nodeName == 'SPAN' &&
-                !node.hasAttributes() &&
-                node.childNodes.length == 1 &&
-                node.firstChild.nodeName == "#text"  
-        ) {
-            var textNode = node.firstChild;
-            node.removeChild(textNode);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
-            }
-            node.parentNode.insertBefore(textNode, node);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
-            }
-            node.parentNode.removeChild(node);
-        }
-        
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            node.parentNode.removeChild(node);
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        
-        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
-            node.parentNode.removeChild(node);
-            return;
-        }
-        //Roo.log(node.tagName);
-        // remove - but keep children..
-        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
-            //Roo.log('-- removed');
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-                // move node to parent - and clean it..
-                this.cleanWord(cn);
-            }
-            node.parentNode.removeChild(node);
-            /// no need to iterate chidlren = it's got none..
-            //this.iterateChildren(node, this.cleanWord);
-            return;
-        }
-        // clean styles
-        if (node.className.length) {
-            
-            var cn = node.className.split(/\W+/);
-            var cna = [];
-            Roo.each(cn, function(cls) {
-                if (cls.match(/Mso[a-zA-Z]+/)) {
-                    return;
-                }
-                cna.push(cls);
-            });
-            node.className = cna.length ? cna.join(' ') : '';
-            if (!cna.length) {
-                node.removeAttribute("class");
-            }
-        }
-        
-        if (node.hasAttribute("lang")) {
-            node.removeAttribute("lang");
-        }
-        
-        if (node.hasAttribute("style")) {
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        this.iterateChildren(node, this.cleanWord);
+        new Roo.htmleditor.FilterWord({ node : node ? node : this.doc.body });
         
         
-        
-        
-    },
-    /**
-     * iterateChildren of a Node, calling fn each time, using this as the scole..
-     * @param {DomNode} node node to iterate children of.
-     * @param {Function} fn method of this class to call on each item.
-     */
-    iterateChildren : function(node, fn)
-    {
-        if (!node.childNodes.length) {
-                return;
-        }
-        for (var i = node.childNodes.length-1; i > -1 ; i--) {
-           fn.call(this, node.childNodes[i])
-        }
     },
     },
-    
+   
     
     /**
     
     /**
-     * cleanTableWidths.
-     *
-     * Quite often pasting from word etc.. results in tables with column and widths.
-     * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
-     *
+
+     * @deprecated - use filters
      */
     cleanTableWidths : function(node)
     {
      */
     cleanTableWidths : function(node)
     {
-         
-         
-        if (!node) {
-            this.cleanTableWidths(this.doc.body);
-            return;
-        }
-        
-        // ignore list...
-        if (node.nodeName == "#text" || node.nodeName == "#comment") {
-            return; 
-        }
-        Roo.log(node.tagName);
-        if (!node.tagName.toLowerCase().match(/^(table|td|tr)$/)) {
-            this.iterateChildren(node, this.cleanTableWidths);
-            return;
-        }
-        if (node.hasAttribute('width')) {
-            node.removeAttribute('width');
-        }
-        
-         
-        if (node.hasAttribute("style")) {
-            // pretty basic...
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        
-        this.iterateChildren(node, this.cleanTableWidths);
-        
+        new Roo.htmleditor.FilterTableWidth({ node : node ? node : this.doc.body});
         
         
     },
     
     },
     
-    
-    
-    
-    domToHTML : function(currentElement, depth, nopadtext) {
-        
-        depth = depth || 0;
-        nopadtext = nopadtext || false;
-    
-        if (!currentElement) {
-            return this.domToHTML(this.doc.body);
-        }
-        
-        //Roo.log(currentElement);
-        var j;
-        var allText = false;
-        var nodeName = currentElement.nodeName;
-        var tagName = Roo.util.Format.htmlEncode(currentElement.tagName);
-        
-        if  (nodeName == '#text') {
-            
-            return nopadtext ? currentElement.nodeValue : currentElement.nodeValue.trim();
-        }
-        
-        
-        var ret = '';
-        if (nodeName != 'BODY') {
-             
-            var i = 0;
-            // Prints the node tagName, such as <A>, <IMG>, etc
-            if (tagName) {
-                var attr = [];
-                for(i = 0; i < currentElement.attributes.length;i++) {
-                    // quoting?
-                    var aname = currentElement.attributes.item(i).name;
-                    if (!currentElement.attributes.item(i).value.length) {
-                        continue;
-                    }
-                    attr.push(aname + '="' + Roo.util.Format.htmlEncode(currentElement.attributes.item(i).value) + '"' );
-                }
-                
-                ret = "<"+currentElement.tagName+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">";
-            } 
-            else {
-                
-                // eack
-            }
-        } else {
-            tagName = false;
-        }
-        if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(tagName) > -1) {
-            return ret;
-        }
-        if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN'].indexOf(tagName) > -1) { // or code?
-            nopadtext = true;
-        }
-        
-        
-        // Traverse the tree
-        i = 0;
-        var currentElementChild = currentElement.childNodes.item(i);
-        var allText = true;
-        var innerHTML  = '';
-        lastnode = '';
-        while (currentElementChild) {
-            // Formatting code (indent the tree so it looks nice on the screen)
-            var nopad = nopadtext;
-            if (lastnode == 'SPAN') {
-                nopad  = true;
-            }
-            // text
-            if  (currentElementChild.nodeName == '#text') {
-                var toadd = Roo.util.Format.htmlEncode(currentElementChild.nodeValue);
-                toadd = nopadtext ? toadd : toadd.trim();
-                if (!nopad && toadd.length > 80) {
-                    innerHTML  += "\n" + (new Array( depth + 1 )).join( "  "  );
-                }
-                innerHTML  += toadd;
-                
-                i++;
-                currentElementChild = currentElement.childNodes.item(i);
-                lastNode = '';
-                continue;
-            }
-            allText = false;
-            
-            innerHTML  += nopad ? '' : "\n" + (new Array( depth + 1 )).join( "  "  );
-                
-            // Recursively traverse the tree structure of the child node
-            innerHTML   += this.domToHTML(currentElementChild, depth+1, nopadtext);
-            lastnode = currentElementChild.nodeName;
-            i++;
-            currentElementChild=currentElement.childNodes.item(i);
-        }
-        
-        ret += innerHTML;
-        
-        if (!allText) {
-                // The remaining code is mostly for formatting the tree
-            ret+= nopadtext ? '' : "\n" + (new Array( depth  )).join( "  "  );
-        }
-        
-        
-        if (tagName) {
-            ret+= "</"+tagName+">";
-        }
-        return ret;
-        
-    },
+     
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
+        this.aclean = typeof(this.owner.aclean) != 'undefined' && this.owner.aclean ? this.owner.aclean :  Roo.HtmlEditorCore.aclean;
+        this.ablack = typeof(this.owner.ablack) != 'undefined' && this.owner.ablack ? this.owner.ablack :  Roo.HtmlEditorCore.ablack;
+        this.tag_remove = typeof(this.owner.tag_remove) != 'undefined' && this.owner.tag_remove ? this.owner.tag_remove :  Roo.HtmlEditorCore.tag_remove;
+        
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
@@ -1607,6 +1450,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
     },
     
         
     },
     
+    
+    updateLanguage : function()
+    {
+        if (!this.iframe || !this.iframe.contentDocument) {
+            return;
+        }
+        Roo.get(this.iframe.contentDocument.body).attr("lang", this.language);
+    },
+    
+    
     removeStylesheets : function()
     {
         var _this = this;
     removeStylesheets : function()
     {
         var _this = this;
@@ -1671,36 +1524,40 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 });
 
 Roo.HtmlEditorCore.white = [
 });
 
 Roo.HtmlEditorCore.white = [
-        'area', 'br', 'img', 'input', 'hr', 'wbr',
+        'AREA', 'BR', 'IMG', 'INPUT', 'HR', 'WBR',
         
         
-       'address', 'blockquote', 'center', 'dd',      'dir',       'div', 
-       'dl',      'dt',         'h1',     'h2',      'h3',        'h4', 
-       'h5',      'h6',         'hr',     'isindex', 'listing',   'marquee', 
-       'menu',    'multicol',   'ol',     'p',       'plaintext', 'pre', 
-       'table',   'ul',         'xmp', 
+       'ADDRESS', 'BLOCKQUOTE', 'CENTER', 'DD',      'DIR',       'DIV', 
+       'DL',      'DT',         'H1',     'H2',      'H3',        'H4', 
+       'H5',      'H6',         'HR',     'ISINDEX', 'LISTING',   'MARQUEE', 
+       'MENU',    'MULTICOL',   'OL',     'P',       'PLAINTEXT', 'PRE', 
+       'TABLE',   'UL',         'XMP', 
        
        
-       'caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', 
-      'thead',   'tr', 
+       'CAPTION', 'COL', 'COLGROUP', 'TBODY', 'TD', 'TFOOT', 'TH', 
+      'THEAD',   'TR', 
      
      
-      'dir', 'menu', 'ol', 'ul', 'dl',
+      'DIR', 'MENU', 'OL', 'UL', 'DL',
        
        
-      'embed',  'object'
+      'EMBED',  'OBJECT'
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
-        'applet', // 
-        'base',   'basefont', 'bgsound', 'blink',  'body', 
-        'frame',  'frameset', 'head',    'html',   'ilayer', 
-        'iframe', 'layer',  'link',     'meta',    'object',   
-        'script', 'style' ,'title',  'xml' // clean later..
+        'APPLET', // 
+        'BASE',   'BASEFONT', 'BGSOUND', 'BLINK',  'BODY', 
+        'FRAME',  'FRAMESET', 'HEAD',    'HTML',   'ILAYER', 
+        'IFRAME', 'LAYER',  'LINK',     'META',    'OBJECT',   
+        'SCRIPT', 'STYLE' ,'TITLE',  'XML',
+        //'FONT' // CLEAN LATER..
+        'COLGROUP', 'COL'   // messy tables.
+        
+        
 ];
 ];
-Roo.HtmlEditorCore.clean = [
-    'script', 'style', 'title', 'xml'
+Roo.HtmlEditorCore.clean = [ // ?? needed???
+     'SCRIPT', 'STYLE', 'TITLE', 'XML'
 ];
 ];
-Roo.HtmlEditorCore.remove = [
-    'font'
+Roo.HtmlEditorCore.tag_remove = [
+    'FONT', 'TBODY'  
 ];
 // attributes..
 
 ];
 // attributes..
 
@@ -1731,15 +1588,6 @@ Roo.HtmlEditorCore.cblack= [
 ];
 
 
 ];
 
 
-Roo.HtmlEditorCore.swapCodes   =[ 
-    [    8211, "&#8211;" ], 
-    [    8212, "&#8212;" ], 
-    [    8216,  "'" ],  
-    [    8217, "'" ],  
-    [    8220, '"' ],  
-    [    8221, '"' ],  
-    [    8226, "*" ],  
-    [    8230, "..." ]
-]; 
+
 
     
\ No newline at end of file
 
     
\ No newline at end of file
index a43dd34..5f640f0 100644 (file)
@@ -11,6 +11,7 @@
  
 /**
  * @class Roo.MessageBox
  
 /**
  * @class Roo.MessageBox
+ * @static
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
@@ -120,6 +121,7 @@ Roo.MessageBox = function(){
                         }
                     }
                 });
                         }
                     }
                 });
+              
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
@@ -363,6 +365,7 @@ Roo.Msg.show({
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
+            dlg.toFront();
             return this;
         },
 
             return this;
         },
 
index 9b0d7ec..22f35d3 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
@@ -255,7 +255,11 @@ Roo.extend(Roo.PagingToolbar, Roo.Toolbar, {
             this.loading.disable();
         }
     },
             this.loading.disable();
         }
     },
-
+    /**
+     * event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.
+     * @param {String} which (first|prev|next|last|refresh)  which button to press.
+     *
+     */
     // private
     onClick : function(which){
         var ds = this.ds;
     // private
     onClick : function(which){
         var ds = this.ds;
index 05edb01..cee6171 100644 (file)
@@ -11,7 +11,7 @@
 
 /**
  * @class Roo.Toolbar
 
 /**
  * @class Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field 
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
@@ -547,7 +547,23 @@ Roo.extend(Roo.Toolbar.TextItem, Roo.Toolbar.Item, {
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
-    focus:Roo.emptyFn
+    focus:Roo.emptyFn,
+     /**
+     * Shows this button
+     */
+    show: function(){
+        this.hidden = false;
+        this.el.style.display = "";
+    },
+    
+    /**
+     * Hides this button
+     */
+    hide: function(){
+        this.hidden = true;
+        this.el.style.display = "none";
+    }
+    
 });
 
 /**
 });
 
 /**
index e921d79..b75bc8d 100644 (file)
@@ -351,4 +351,4 @@ Roo.extend(Roo.bootstrap.form.SecurePass, Roo.bootstrap.form.Input, {
         return this.IsLongEnough(pwd, 6) || !this.IsLongEnough(pwd, 0);
     }
           
         return this.IsLongEnough(pwd, 6) || !this.IsLongEnough(pwd, 0);
     }
           
-})
\ No newline at end of file
+});
\ No newline at end of file
index 4d891f9..d75d308 100644 (file)
@@ -332,6 +332,16 @@ Roo.extend(Roo.data.Store, Roo.util.Observable, {
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
+     * <li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
+     * <pre>
+                {
+                    data : data,  // array of key=>value data like JsonReader
+                    total : data.length,
+                    success : true
+                    
+                }
+        </pre>
+            }.</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
index 2a6bb59..45f315f 100644 (file)
@@ -549,11 +549,12 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
      * @param {Boolean} asString
      * @return {Object}
      */
      * @param {Boolean} asString
      * @return {Object}
      */
-    getValues : function(asString){
+    getValues : function(asString)
+    {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues()); // get the full set of data, as we might be copying comboboxes from external into this one.
             }, this);
         }
         
             }, this);
         }
         
@@ -586,21 +587,31 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
+     * Normally this will not return readOnly data 
+     * @param {Boolean} with_readonly return readonly field data.
      * @return {Object}
      */
      * @return {Object}
      */
-    getFieldValues : function(with_hidden)
+    getFieldValues : function(with_readonly)
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues());
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
+            
+            if (f.readOnly && with_readonly !== true) {
+                return; // skip read only values. - this is in theory to stop 'old' values being copied over new ones
+                        // if a subform contains a copy of them.
+                        // if you have subforms with the same editable data, you will need to copy the data back
+                        // and forth.
+            }
+            
             if (!f.getName()) {
                 return;
             }
             if (!f.getName()) {
                 return;
             }
index 34ec579..030f671 100644 (file)
@@ -97,6 +97,16 @@ Roo.extend(Roo.form.DateField, Roo.form.TriggerField,  {
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
+       
+       
+       /**
+     * @cfg {Date/String} zeroValue
+     * if the date is less that this number, then the field is rendered as empty
+     * default is 1800
+     */
+       zeroValue : '1800-01-01',
+       
+       
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
@@ -273,6 +283,15 @@ dateField.setValue('2006-5-4');
 
     // private
     parseDate : function(value){
 
     // private
     parseDate : function(value){
+               
+               if (value instanceof Date) {
+                       if (value < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                               return  '';
+                       }
+                       return value;
+               }
+               
+               
         if(!value || value instanceof Date){
             return value;
         }
         if(!value || value instanceof Date){
             return value;
         }
@@ -288,6 +307,9 @@ dateField.setValue('2006-5-4');
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
+               if (v < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                       v = '';
+               }
         return v;
     },
 
         return v;
     },
 
index 3e973cd..a6baf6f 100644 (file)
@@ -59,7 +59,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
     width: 500,
     
     /**
     width: 500,
     
     /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .
      * 
      */
     stylesheets: false,
      * 
      */
     stylesheets: false,
@@ -90,7 +90,27 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
+    
+    /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    /**
+     * @cfg {string} bodyCls default '' default classes to add to body of editable area - usually undoreset is a good start..
+     */
+    bodyCls : '',
+    /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
     
     
+     
     // id of frame..
     frameId: false,
     
     // id of frame..
     frameId: false,
     
@@ -195,7 +215,13 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
-            stylesheetsclick: true
+            stylesheetsclick: true,
+            /**
+            * @event paste
+            * Fires when press user pastes into the editor
+            * @param {Roo.HtmlEditorCore} this
+            */
+            paste: true 
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
@@ -226,8 +252,19 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
          
         
     },
          
         
     },
-
-     
+    /**
+     * get the Context selected node
+     * @returns {DomElement|boolean} selected node if active or false if none
+     * 
+     */
+    getSelectedNode : function()
+    {
+        if (this.toolbars.length < 2 || !this.toolbars[1].tb) {
+            return false;
+        }
+        return this.toolbars[1].tb.selectedNode;
+    
+    },
     // private
     onRender : function(ct, position)
     {
     // private
     onRender : function(ct, position)
     {
@@ -448,6 +485,8 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
+            this.el.dom.scrollTop = 0;
+            
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
@@ -515,7 +554,17 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
         this.editorcore.pushValue();
     },
 
         this.editorcore.pushValue();
     },
 
+    /**
+     * update the language in the body - really done by core
+     * @param {String} language - eg. en / ar / zh-CN etc..
+     */
+    updateLanguage : function(lang)
+    {
+        this.language = lang;
+        this.editorcore.language = lang;
+        this.editorcore.updateLanguage();
      
      
+    },
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
index 2684c3b..e2413dc 100644 (file)
@@ -41,189 +41,138 @@ Roo.form.HtmlEditor.ToolbarContext = function(config)
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
-    'IMG' : {
-        width : {
+    'IMG' : [
+        {
+            name : 'width',
             title: "Width",
             width: 40
         },
             title: "Width",
             width: 40
         },
-        height:  {
+        {
+            name : 'height',
             title: "Height",
             width: 40
         },
             title: "Height",
             width: 40
         },
-        align: {
+        {
+            name : 'align',
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
-        border: {
+        {
+            name : 'border',
             title: "Border",
             width: 40
         },
             title: "Border",
             width: 40
         },
-        alt: {
+        {
+            name : 'alt',
             title: "Alt",
             width: 120
         },
             title: "Alt",
             width: 120
         },
-        src : {
+        {
+            name : 'src',
             title: "Src",
             width: 220
         }
         
             title: "Src",
             width: 220
         }
         
-    },
-    'A' : {
-        name : {
+    ],
+    
+    'FIGURE' : [
+        {
+            name : 'align',
+            title: "Align",
+            opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
+            width : 80  
+        }
+    ],
+    'A' : [
+        {
+            name : 'name',
             title: "Name",
             width: 50
         },
             title: "Name",
             width: 50
         },
-        target:  {
+        {
+            name : 'target',
             title: "Target",
             width: 120
         },
             title: "Target",
             width: 120
         },
-        href:  {
+        {
+            name : 'href',
             title: "Href",
             width: 220
         } // border?
         
             title: "Href",
             width: 220
         } // border?
         
-    },
-    'TABLE' : {
-        rows : {
-            title: "Rows",
-            width: 20
-        },
-        cols : {
-            title: "Cols",
-            width: 20
-        },
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },
-        border : {
-            title: "Border",
-            width: 20
-        }
-    },
-    'TD' : {
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },   
-        align: {
-            title: "Align",
-            opts : [[""],[ "left"],[ "center"],[ "right"],[ "justify"],[ "char"]],
-            width: 80
-        },
-        valign: {
-            title: "Valign",
-            opts : [[""],[ "top"],[ "middle"],[ "bottom"],[ "baseline"]],
-            width: 80
-        },
-        colspan: {
-            title: "Colspan",
-            width: 20
-            
-        },
-         'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'INPUT' : {
-        name : {
+    ],
+    
+    'INPUT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        value : {
+        {
+            name : 'value',
             title: "Value",
             width: 120
         },
             title: "Value",
             width: 120
         },
-        width : {
+        {
+            name : 'width',
             title: "Width",
             width: 40
         }
             title: "Width",
             width: 40
         }
-    },
-    'LABEL' : {
-        'for' : {
+    ],
+    'LABEL' : [
+         {
+            name : 'for',
             title: "For",
             width: 120
         }
             title: "For",
             width: 120
         }
-    },
-    'TEXTAREA' : {
-          name : {
+    ],
+    'TEXTAREA' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        rows : {
+        {
+            name : 'rows',
             title: "Rows",
             width: 20
         },
             title: "Rows",
             width: 20
         },
-        cols : {
+        {
+            name : 'cols',
             title: "Cols",
             width: 20
         }
             title: "Cols",
             width: 20
         }
-    },
-    'SELECT' : {
-        name : {
+    ],
+    'SELECT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        selectoptions : {
+        {
+            name : 'selectoptions',
             title: "Options",
             width: 200
         }
             title: "Options",
             width: 200
         }
-    },
+    ],
     
     // should we really allow this??
     // should this just be 
     
     // should we really allow this??
     // should this just be 
-    'BODY' : {
-        title : {
+    'BODY' : [
+        
+        {
+            name : 'title',
             title: "Title",
             width: 200,
             disabled : true
         }
             title: "Title",
             width: 200,
             disabled : true
         }
-    },
-    'SPAN' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'DIV' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-     'P' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    
-    '*' : {
-        // empty..
-    }
+    ],
+    '*' : [
+        // empty.
+    ]
 
 };
 
 
 };
 
@@ -309,9 +258,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
-           
+        // block toolbars are built in updateToolbar when needed.
         for (var i in  ty) {
         for (var i in  ty) {
-          
+            
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
@@ -338,8 +287,13 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
-    updateToolbar: function(editor,ev,sel){
-
+    updateToolbar: function(editor ,ev, sel)
+    {
+        
+        if (ev) {
+            ev.stopEvent(); // se if we can stop this looping with mutiple events.
+        }
+        
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
@@ -347,38 +301,40 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
              this.editor.onFirstFocus();
             return;
         }
              this.editor.onFirstFocus();
             return;
         }
-        
+        //Roo.log(ev ? ev.target : 'NOTARGET');
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
+        
+        
+        
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
-            ev.target && ev.target.tagName == 'IMG') {
+            ev.target && ev.target.tagName != 'BODY' ) { // && ev.target.tagName == 'IMG') {
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
-         
-              var nodeRange = sel.ownerDocument.createRange();
-            try {
-                nodeRange.selectNode(sel);
-            } catch (e) {
-                nodeRange.selectNodeContents(sel);
-            }
-            //nodeRange.collapse(true);
-            var s = this.editorcore.win.getSelection();
-            s.removeAllRanges();
-            s.addRange(nodeRange);
-        }  
+            
+            // this triggers looping?
+            //this.editorcore.selectNode(sel);
+             
+        }
         
         
+        // this forces an id..
+        Array.from(this.editorcore.doc.body.querySelectorAll('.roo-ed-selection')).forEach(function(e) {
+             e.classList.remove('roo-ed-selection');
+        });
+        //Roo.select('.roo-ed-selection', false, this.editorcore.doc).removeClass('roo-ed-selection');
+        //Roo.get(node).addClass('roo-ed-selection');
       
       
-        var updateFooter = sel ? false : true;
+        //var updateFooter = sel ? false : true; 
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
-        var ty= Roo.form.HtmlEditor.ToolbarContext.types;
+        var ty = Roo.form.HtmlEditor.ToolbarContext.types;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
@@ -386,86 +342,145 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
-        // pick a menu that exists..
-        var tn = sel.tagName.toUpperCase();
-        //sel = typeof(ty[tn]) != 'undefined' ? sel : this.editor.doc.body;
-        
-        tn = sel.tagName.toUpperCase();
         
         
+        var tn = sel.tagName.toUpperCase();
         var lastSel = this.tb.selectedNode;
         var lastSel = this.tb.selectedNode;
-        
         this.tb.selectedNode = sel;
         this.tb.selectedNode = sel;
+        var left_label = tn;
         
         
-        // if current menu does not match..
+        // ok see if we are editing a block?
         
         
-        if ((this.tb.name != tn) || (lastSel != this.tb.selectedNode) || ev === false) {
-                
-            this.tb.el.hide();
-            ///console.log("show: " + tn);
-            this.tb =  typeof(ty[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
-            this.tb.el.show();
-            // update name
-            this.tb.items.first().el.innerHTML = tn + ':&nbsp;';
-            
+        var db = false;
+        // you are not actually selecting the block.
+        if (sel && sel.hasAttribute('data-block')) {
+            db = sel;
+        } else if (sel && sel.closest('[data-block]')) {
             
             
-            // update attributes
-            if (this.tb.fields) {
-                this.tb.fields.each(function(e) {
-                    if (e.stylename) {
-                        e.setValue(sel.style[e.stylename]);
-                        return;
-                    } 
-                   e.setValue(sel.getAttribute(e.attrname));
-                });
-            }
+            db = sel.closest('[data-block]');
+            //var cepar = sel.closest('[contenteditable=true]');
+            //if (db && cepar && cepar.tagName != 'BODY') {
+            //   db = false; // we are inside an editable block.. = not sure how we are going to handle nested blocks!?
+            //}   
+        }
+        
+        
+        var block = false;
+        //if (db && !sel.hasAttribute('contenteditable') && sel.getAttribute('contenteditable') != 'true' ) {
+        if (db && this.editorcore.enableBlocks) {
+            block = Roo.htmleditor.Block.factory(db);
             
             
-            var hasStyles = false;
-            for(var i in this.styles) {
-                hasStyles = true;
-                break;
-            }
             
             
-            // update styles
-            if (hasStyles) { 
-                var st = this.tb.fields.item(0);
-                
-                st.store.removeAll();
-               
-                
-                var cn = sel.className.split(/\s+/);
+            if (block) {
+                 db.className = (
+                        db.classList.length > 0  ? db.className + ' ' : ''
+                    )  + 'roo-ed-selection';
+                 
+                 // since we removed it earlier... its not there..
+                tn = 'BLOCK.' + db.getAttribute('data-block');
                 
                 
-                var avs = [];
-                if (this.styles['*']) {
-                    
-                    Roo.each(this.styles['*'], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
+                //this.editorcore.selectNode(db);
+                if (typeof(this.toolbars[tn]) == 'undefined') {
+                   this.toolbars[tn] = this.buildToolbar( false  ,tn ,block.friendly_name, block);
                 }
                 }
-                if (this.styles[tn]) { 
-                    Roo.each(this.styles[tn], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
-                }
-                
-                st.store.loadData(avs);
-                st.collapse();
-                st.setValue(cn);
+                this.toolbars[tn].selectedNode = db;
+                left_label = block.friendly_name;
+                ans = this.editorcore.getAllAncestors();
             }
             }
-            // flag our selected Node.
-            this.tb.selectedNode = sel;
-           
-           
-            Roo.menu.MenuMgr.hideAll();
-
+            
+                
+            
         }
         
         }
         
-        if (!updateFooter) {
-            //this.footDisp.dom.innerHTML = ''; 
-            return;
+        
+        if (this.tb.name == tn && lastSel == this.tb.selectedNode && ev !== false) {
+            return; // no change?
         }
         }
+        
+        
+          
+        this.tb.el.hide();
+        ///console.log("show: " + tn);
+        this.tb =  typeof(this.toolbars[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
+        
+        this.tb.el.show();
+        // update name
+        this.tb.items.first().el.innerHTML = left_label + ':&nbsp;';
+        
+        
+        // update attributes
+        if (block && this.tb.fields) {
+             
+            this.tb.fields.each(function(e) {
+                e.setValue(block[e.name]);
+            });
+            
+            
+        } else  if (this.tb.fields && this.tb.selectedNode) {
+            this.tb.fields.each( function(e) {
+                if (e.stylename) {
+                    e.setValue(this.tb.selectedNode.style[e.stylename]);
+                    return;
+                } 
+                e.setValue(this.tb.selectedNode.getAttribute(e.attrname));
+            }, this);
+            this.updateToolbarStyles(this.tb.selectedNode);  
+        }
+        
+        
+       
+        Roo.menu.MenuMgr.hideAll();
+
+        
+        
+    
         // update the footer
         //
         // update the footer
         //
+        this.updateFooter(ans);
+             
+    },
+    
+    updateToolbarStyles : function(sel)
+    {
+        var hasStyles = false;
+        for(var i in this.styles) {
+            hasStyles = true;
+            break;
+        }
+        
+        // update styles
+        if (hasStyles && this.tb.hasStyles) { 
+            var st = this.tb.fields.item(0);
+            
+            st.store.removeAll();
+            var cn = sel.className.split(/\s+/);
+            
+            var avs = [];
+            if (this.styles['*']) {
+                
+                Roo.each(this.styles['*'], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            if (this.styles[tn]) { 
+                Roo.each(this.styles[tn], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            
+            st.store.loadData(avs);
+            st.collapse();
+            st.setValue(cn);
+        }
+    },
+    
+     
+    updateFooter : function(ans)
+    {
         var html = '';
         var html = '';
+        if (ans === false) {
+            this.footDisp.dom.innerHTML = '';
+            return;
+        }
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
@@ -485,10 +500,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         this.footDisp.dom.innerHTML = html;
             
         
         this.footDisp.dom.innerHTML = html;
             
-        //this.editorsyncValue();
+        
     },
     },
-     
-    
    
        
     // private
    
        
     // private
@@ -513,7 +526,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
            item.enable();
         });
     },
            item.enable();
         });
     },
-    buildToolbar: function(tlist, nm)
+    buildToolbar: function(tlist, nm, friendly_name, block)
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
@@ -524,18 +537,22 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
        
         var tb = new Roo.Toolbar(wdiv);
         
        
         var tb = new Roo.Toolbar(wdiv);
-        // add the name..
+        ///this.tb = tb; // << this sets the active toolbar..
+        if (tlist === false && block) {
+            tlist = block.contextMenu(this);
+        }
         
         
-        tb.add(nm+ ":&nbsp;");
+        tb.hasStyles = false;
+        tb.name = nm;
+        
+        tb.add((typeof(friendly_name) == 'undefined' ? nm : friendly_name) + ":&nbsp;");
+        
+        var styles = Array.from(this.styles);
         
         
-        var styles = [];
-        for(var i in this.styles) {
-            styles.push(i);
-        }
         
         // styles...
         if (styles && styles.length) {
         
         // styles...
         if (styles && styles.length) {
-            
+            tb.hasStyles = true;
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
@@ -565,9 +582,18 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
-        var tbops = tbc.options;
         
         
-        for (var i in tlist) {
+        
+        for (var i = 0; i < tlist.length; i++) {
+            
+            // newer versions will use xtype cfg to create menus.
+            if (typeof(tlist[i].xtype) != 'undefined') {
+                
+                tb[typeof(tlist[i].name)== 'undefined' ? 'add' : 'addField'](Roo.factory(tlist[i]));
+                
+                
+                continue;
+            }
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
@@ -575,8 +601,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
-            if (item.optname) {
-                opts = tbops[item.optname];
+            if (item.optname) { // use the b
+                opts = Roo.form.HtmlEditor.ToolbarContext.options[item.optname];
            
             }
             
            
             }
             
@@ -588,13 +614,15 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                         fields: ['val', 'display'],
                         data : opts  
                     }),
                         fields: ['val', 'display'],
                         data : opts  
                     }),
-                    name : '-roo-edit-' + i,
-                    attrname : i,
+                    name : '-roo-edit-' + tlist[i].name,
+                    
+                    attrname : tlist[i].name,
                     stylename : item.style ? item.style : false,
                     stylename : item.style ? item.style : false,
+                    
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
-                    mode: typeof(tbc.stores[i]) != 'undefined'  ? 'remote' : 'local',
+                    mode: typeof(tbc.stores[tlist[i].name]) != 'undefined'  ? 'remote' : 'local',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
@@ -602,11 +630,20 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
+                             
+                            
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
+                                editorcore.syncValue();
+                                return;
+                            }
+                            if (r === false) {
+                                tb.selectedNode.removeAttribute(c.attrname);
+                                editorcore.syncValue();
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
+                            editorcore.syncValue();
                         }
                     }
 
                         }
                     }
 
@@ -614,7 +651,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                 continue;
                     
                  
                 continue;
                     
                  
-                
+                /*
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
@@ -622,16 +659,19 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     value: ''
                 }));
                 continue;
                     value: ''
                 }));
                 continue;
+                */
             }
             tb.addField( new Roo.form.TextField({
             }
             tb.addField( new Roo.form.TextField({
-                name: '-roo-edit-' + i,
-                attrname : i,
+                name: '-roo-edit-' + tlist[i].name,
+                attrname : tlist[i].name,
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
+                        
+                         
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
@@ -641,8 +681,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var _this = this;
         }
         
         var _this = this;
-        
+        var show_delete = !block || block.deleteTitle !== false;
         if(nm == 'BODY'){
         if(nm == 'BODY'){
+            show_delete = false;
             tb.addSeparator();
         
             tb.addButton( {
             tb.addSeparator();
         
             tb.addButton( {
@@ -658,60 +699,61 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         tb.addFill();
         }
         
         tb.addFill();
-        tb.addButton( {
-            text: 'Remove Tag',
-    
-            listeners : {
-                click : function ()
-                {
-                    // remove
-                    // undo does not work.
-                     
-                    var sn = tb.selectedNode;
-                    
-                    var pn = sn.parentNode;
-                    
-                    var stn =  sn.childNodes[0];
-                    var en = sn.childNodes[sn.childNodes.length - 1 ];
-                    while (sn.childNodes.length) {
-                        var node = sn.childNodes[0];
-                        sn.removeChild(node);
-                        //Roo.log(node);
-                        pn.insertBefore(node, sn);
+        if (show_delete) {
+            tb.addButton({
+                text: block && block.deleteTitle ? block.deleteTitle  : 'Remove Block or Formating', // remove the tag, and puts the children outside...
+        
+                listeners : {
+                    click : function ()
+                    {
+                        var sn = tb.selectedNode;
+                        if (block) {
+                            sn = Roo.htmleditor.Block.factory(tb.selectedNode).removeNode();
+                            
+                        }
+                        if (!sn) {
+                            return;
+                        }
+                        var stn =  sn.childNodes[0] || sn.nextSibling || sn.previousSibling || sn.parentNode;
+                        if (sn.hasAttribute('data-block')) {
+                            stn =  sn.nextSibling || sn.previousSibling || sn.parentNode;
+                            sn.parentNode.removeChild(sn);
+                            
+                        } else if (sn && sn.tagName != 'BODY') {
+                            // remove and keep parents.
+                            a = new Roo.htmleditor.FilterKeepChildren({tag : false});
+                            a.replaceTag(sn);
+                        }
+                        
+                        
+                        var range = editorcore.createRange();
+            
+                        range.setStart(stn,0);
+                        range.setEnd(stn,0); 
+                        var selection = editorcore.getSelection();
+                        selection.removeAllRanges();
+                        selection.addRange(range);
+                        
+                        
+                        //_this.updateToolbar(null, null, pn);
+                        _this.updateToolbar(null, null, null);
+                        _this.updateFooter(false);
                         
                     }
                         
                     }
-                    pn.removeChild(sn);
-                    var range = editorcore.createRange();
-        
-                    range.setStart(stn,0);
-                    range.setEnd(en,0); //????
-                    //range.selectNode(sel);
-                    
-                    
-                    var selection = editorcore.getSelection();
-                    selection.removeAllRanges();
-                    selection.addRange(range);
-                    
-                    
-                    
-                    //_this.updateToolbar(null, null, pn);
-                    _this.updateToolbar(null, null, null);
-                    _this.footDisp.dom.innerHTML = ''; 
                 }
                 }
-            }
-            
+                
+                        
                     
                 
                     
                 
-            
-        });
-        
+            });
+        }    
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
-        tb.name = nm;
+        
         // dont need to disable them... as they will get hidden
         return tb;
          
         // dont need to disable them... as they will get hidden
         return tb;
          
@@ -755,6 +797,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         
     },
         
         
     },
+    // when the footer contect changes
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
@@ -767,17 +810,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         var ans = this.footerEls;
         var sel = ans[n];
         
         var ans = this.footerEls;
         var sel = ans[n];
         
-         // pick
-        var range = this.editorcore.createRange();
-        
-        range.selectNodeContents(sel);
-        //range.selectNode(sel);
-        
-        
-        var selection = this.editorcore.getSelection();
-        selection.removeAllRanges();
-        selection.addRange(range);
-        
+        this.editorcore.selectNode(sel);
         
         
         this.updateToolbar(null, null, sel);
         
         
         this.updateToolbar(null, null, sel);
index 00d2faa..b58a4cf 100644 (file)
@@ -1,4 +1,3 @@
-// <script type="text/javascript">
 /*
  * Based on
  * Ext JS Library 1.1.1
 /*
  * Based on
  * Ext JS Library 1.1.1
@@ -8,9 +7,9 @@
  */
 
 /**
  */
 
 /**
- * @class Roo.form.HtmlEditorToolbar1
+ * @class Roo.form.HtmlEditor.ToolbarStandard
  * Basic Toolbar
  * Basic Toolbar
- * 
+
  * Usage:
  *
  new Roo.form.HtmlEditor({
  * Usage:
  *
  new Roo.form.HtmlEditor({
@@ -24,7 +23,7 @@
      
  * 
  * @cfg {Object} disable List of elements to disable..
      
  * 
  * @cfg {Object} disable List of elements to disable..
- * @cfg {Array} btns List of additional buttons.
+ * @cfg {Roo.Toolbar.Item|Roo.Toolbar.Button|Roo.Toolbar.SplitButton|Roo.form.Field} btns[] List of additional buttons.
  * 
  * 
  * NEEDS Extra CSS? 
  * 
  * 
  * NEEDS Extra CSS? 
@@ -49,7 +48,7 @@ Roo.form.HtmlEditor.ToolbarStandard = function(config)
     // dont call parent... till later.
 }
 
     // dont call parent... till later.
 }
 
-Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
+Roo.form.HtmlEditor.ToolbarStandard.prototype = {
     
     tb: false,
     
     
     tb: false,
     
@@ -395,7 +394,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                     tabIndex:-1
                 });
             }
                     tabIndex:-1
                 });
             }
-             cmenu.menu.items.push({
+            cmenu.menu.items.push({
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
@@ -447,7 +446,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
-                    editorcore.doc.body.innerHTML = editorcore.domToHTML();
+                    new Roo.htmleditor.Tidy(editorcore.doc.body);
                     editorcore.syncValue();
                 },
                 tabIndex:-1
                     editorcore.syncValue();
                 },
                 tabIndex:-1
@@ -484,7 +483,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
-                var b = Roo.factory(this.btns[i],Roo.form);
+                var b = Roo.factory(this.btns[i],this.btns[i].xns || Roo.form);
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
@@ -525,11 +524,45 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
     },
     // private used internally
     createLink : function(){
     },
     // private used internally
     createLink : function(){
-        Roo.log("create link?");
-        var url = prompt(this.createLinkText, this.defaultLinkValue);
-        if(url && url != 'http:/'+'/'){
-            this.editorcore.relayCmd('createlink', url);
+        //Roo.log("create link?");
+        var ec = this.editorcore;
+        var ar = ec.getAllAncestors();
+        var n = false;
+        for(var i = 0;i< ar.length;i++) {
+            if (ar[i] && ar[i].nodeName == 'A') {
+                n = ar[i];
+                break;
+            }
         }
         }
+        
+        (function() {
+            
+            Roo.MessageBox.show({
+                title : "Add / Edit Link URL",
+                msg : "Enter the url for the link",
+                buttons: Roo.MessageBox.OKCANCEL,
+                fn: function(btn, url){
+                    if (btn != 'ok') {
+                        return;
+                    }
+                    if(url && url != 'http:/'+'/'){
+                        if (n) {
+                            n.setAttribute('href', url);
+                        } else {
+                            ec.relayCmd('createlink', url);
+                        }
+                    }
+                },
+                minWidth:250,
+                prompt:true,
+                //multiline: multiline,
+                modal : true,
+                value :  n  ? n.getAttribute('href') : '' 
+            });
+            
+             
+        }).defer(100, this); // we have to defer this , otherwise the mouse click gives focus to the main window.
+        
     },
 
     
     },
 
     
@@ -642,6 +675,11 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 this.tb.items.each(function(item){
                     item.enable();
                 });
                 this.tb.items.each(function(item){
                     item.enable();
                 });
+                // initialize 'blocks'
+                Roo.each(Roo.get(this.editorcore.doc.body).query('*[data-block]'), function(e) {
+                    Roo.htmleditor.Block.factory(e).updateElement(e);
+                },this);
+            
             }
             
         }
             }
             
         }
@@ -768,7 +806,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
            item.enable();
         });
     }
            item.enable();
         });
     }
-});
+};
 
 
 
 
 
 
index a917b7e..bea1524 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -163,6 +163,7 @@ Roo.extend(Roo.form.Layout, Roo.Component, {
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
+ * @children Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -197,7 +198,7 @@ Roo.extend(Roo.form.Column, Roo.form.Layout, {
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
index a4e9fc1..b7488a6 100644 (file)
@@ -438,8 +438,10 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, {
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
-    
-   
+     /**
+    * @cfg {boolean} sortColMenu Sort the column order menu when it shows (usefull for long lists..) default false
+    */ 
+    sortColMenu : false,
     
     // private
     rendered : false,
     
     // private
     rendered : false,
index 20e4d3a..dd5c895 100644 (file)
@@ -1390,13 +1390,28 @@ Roo.extend(Roo.grid.GridView, Roo.grid.AbstractGridView, {
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
+        
+        var items = [];
         for(var i = 0; i < colCount; i++){
         for(var i = 0; i < colCount; i++){
-            this.colMenu.add(new Roo.menu.CheckItem({
+            items.push({
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
-            }));
+            });
+        }
+        
+        if (this.grid.sortColMenu) {
+            items.sort(function(a,b) {
+                if (a.text == b.text) {
+                    return 0;
+                }
+                return a.text.toUpperCase() > b.text.toUpperCase() ? 1 : -1;
+            });
+        }
+        
+        for(var i = 0; i < colCount; i++){
+            this.colMenu.add(new Roo.menu.CheckItem(items[i]));
         }
     },
 
         }
     },
 
index df93aa9..623eda2 100644 (file)
@@ -35,7 +35,7 @@ Roo.extend(Roo.menu.Item, Roo.menu.BaseItem, {
      */
     text: '',
      /**
      */
     text: '',
      /**
-     * @cfg {String} HTML to render in menu
+     * @cfg {String} html to render in menu
      * The text to show on the menu item (HTML version).
      */
     html: '',
      * The text to show on the menu item (HTML version).
      */
     html: '',
index e2f2bab..0888ad2 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
- * @children Roo.menu.BaseItem
+ * @children Roo.menu.Item Roo.menu.Separator Roo.menu.TextItem
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
index f5a603e..5096998 100644 (file)
--- a/String.js
+++ b/String.js
@@ -114,3 +114,13 @@ String.prototype.unicodeClean = function () {
     );
 };
   
     );
 };
   
+
+/**
+  * Make the first letter of a string uppercase
+  *
+  * @return {String} The new string.
+  */
+String.prototype.toUpperCaseFirst = function () {
+    return this.charAt(0).toUpperCase() + this.slice(1);
+};  
+  
index df1de5c..b35527b 100644 (file)
@@ -32,5 +32,9 @@ roojspacker -i buildSDK/dependancy_core.txt  -i buildSDK/dependancy_ui.txt  \
     -i buildSDK/dependancy_svg.txt \
    --doc-target=docs -D
 
     -i buildSDK/dependancy_svg.txt \
    --doc-target=docs -D
 
+#build old ROOJS css 
+seed buildSDK/cssmini.js 
+
+
 # SCSS (really uses the C scss)
 php buildSDK/scss-bootstrap.php
\ No newline at end of file
 # SCSS (really uses the C scss)
 php buildSDK/scss-bootstrap.php
\ No newline at end of file
index f3bb951..4966679 100644 (file)
@@ -1,5 +1,6 @@
 
 
 
 
+Roo.bootstrap.namespace
 
 Roo.bootstrap.version
 Roo.bootstrap.menu.namespace
 
 Roo.bootstrap.version
 Roo.bootstrap.menu.namespace
@@ -126,6 +127,26 @@ Roo.bootstrap.form.CheckBox
 Roo.bootstrap.form.Radio
 Roo.bootstrap.form.SecurePass
 
 Roo.bootstrap.form.Radio
 Roo.bootstrap.form.SecurePass
 
+Roo.htmleditor.namespace
+Roo.htmleditor.Filter
+Roo.htmleditor.FilterAttributes
+Roo.htmleditor.FilterBlack
+Roo.htmleditor.FilterComment
+Roo.htmleditor.FilterKeepChildren
+Roo.htmleditor.FilterParagraph
+Roo.htmleditor.FilterSpan
+Roo.htmleditor.FilterTableWidth
+Roo.htmleditor.FilterWord
+Roo.htmleditor.FilterStyleToTag
+Roo.htmleditor.FilterLongBr
+Roo.htmleditor.FilterBlock
+Roo.htmleditor.KeyEnter
+
+Roo.htmleditor.Block
+Roo.htmleditor.BlockFigure
+Roo.htmleditor.BlockTable
+Roo.htmleditor.BlockTd
+
 Roo.HtmlEditorCore
 Roo.bootstrap.form.HtmlEditor
 Roo.bootstrap.form.HtmlEditorToolbarStandard
 Roo.HtmlEditorCore
 Roo.bootstrap.form.HtmlEditor
 Roo.bootstrap.form.HtmlEditorToolbarStandard
@@ -139,6 +160,8 @@ Roo.bootstrap.PagingToolbar
 Roo.bootstrap.MessageBar
 
 Roo.bootstrap.Graph
 Roo.bootstrap.MessageBar
 
 Roo.bootstrap.Graph
+Roo.bootstrap.dash.namespace
+
 Roo.bootstrap.dash.NumberBox
 Roo.bootstrap.dash.TabBox
 Roo.bootstrap.dash.TabPane
 Roo.bootstrap.dash.NumberBox
 Roo.bootstrap.dash.TabBox
 Roo.bootstrap.dash.TabPane
index 3ec724a..1f805bc 100644 (file)
@@ -28,7 +28,9 @@ Roo.lib.ColorAnim
 Roo.lib.Easing
 Roo.lib.Motion
 Roo.lib.Scroll
 Roo.lib.Easing
 Roo.lib.Motion
 Roo.lib.Scroll
-
+Roo.lib.UndoManager
+Roo.lib.Range
+Roo.lib.Selection
 // --- end if base ---
 
 
 // --- end if base ---
 
 
index 55305d0..1a1846f 100644 (file)
@@ -94,6 +94,39 @@ Roo.form.ComboBoxArray
 Roo.form.ComboNested
 Roo.form.Checkbox
 Roo.form.Radio
 Roo.form.ComboNested
 Roo.form.Checkbox
 Roo.form.Radio
+
+Roo.rtf.namespace
+Roo.rtf.Hex
+Roo.rtf.Paragraph
+Roo.rtf.Span
+Roo.rtf.Group
+Roo.rtf.Document
+Roo.rtf.Ctrl
+Roo.rtf.Parser
+
+Roo.htmleditor.namespace
+Roo.htmleditor.Filter
+Roo.htmleditor.FilterAttributes
+Roo.htmleditor.FilterBlack
+Roo.htmleditor.FilterComment
+Roo.htmleditor.FilterKeepChildren
+Roo.htmleditor.FilterParagraph
+Roo.htmleditor.FilterSpan
+Roo.htmleditor.FilterTableWidth
+Roo.htmleditor.FilterWord
+Roo.htmleditor.FilterStyleToTag
+Roo.htmleditor.FilterLongBr
+Roo.htmleditor.FilterBlock
+Roo.htmleditor.TidySerializer
+Roo.htmleditor.TidyWriter
+Roo.htmleditor.TidyEntities
+Roo.htmleditor.KeyEnter
+
+Roo.htmleditor.Block
+Roo.htmleditor.BlockFigure
+Roo.htmleditor.BlockTable
+Roo.htmleditor.BlockTd
+
 Roo.HtmlEditorCore
 Roo.form.HtmlEditor
 Roo.form.HtmlEditor.ToolbarStandard
 Roo.HtmlEditorCore
 Roo.form.HtmlEditor
 Roo.form.HtmlEditor.ToolbarStandard
@@ -123,6 +156,11 @@ Roo.SplitLayoutRegion
 Roo.CenterLayoutRegion
 Roo.LayoutStateManager
 Roo.ContentPanel
 Roo.CenterLayoutRegion
 Roo.LayoutStateManager
 Roo.ContentPanel
+Roo.GridPanel
+Roo.NestedLayoutPanel
+Roo.ScrollPanel
+Roo.TreePanel
+
 //             *** Can be Optional *** - only if you use it..
 Roo.ReaderLayout
 
 //             *** Can be Optional *** - only if you use it..
 Roo.ReaderLayout
 
index b110e78..7209e42 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "bootstrap.css",
        "sources": [
        "version": 3,
        "file": "bootstrap.css",
        "sources": [
-               "../../../../../tmp/scss61Ld1C",
+               "../../../../../tmp/scssAkR73n",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
index 68871b6..92410c7 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "bootstrap.min.css",
        "sources": [
        "version": 3,
        "file": "bootstrap.min.css",
        "sources": [
-               "../../../../../tmp/scss61Ld1C",
+               "../../../../../tmp/scssAkR73n",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
index 7ec94b4..3272e4e 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "roojs-bootstrap-debug.css",
        "sources": [
        "version": 3,
        "file": "roojs-bootstrap-debug.css",
        "sources": [
-               "../../../../../tmp/scssm9WH5F",
+               "../../../../../tmp/scss8LzQ5T",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/roojs-bootstrap/roojs-bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/roojs-bootstrap/roojs-bootstrap.scss",
index 6e18ebd..b196af4 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "roojs-bootstrap.css",
        "sources": [
        "version": 3,
        "file": "roojs-bootstrap.css",
        "sources": [
-               "../../../../../tmp/scssm9WH5F",
+               "../../../../../tmp/scss8LzQ5T",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/roojs-bootstrap/roojs-bootstrap.scss",
                "../scss/bootstrap/_functions.scss",
                "../scss/bootstrap/_variables.scss",
                "../scss/roojs-bootstrap/roojs-bootstrap.scss",
index 2860f8b..072db07 100644 (file)
@@ -7995,47 +7995,47 @@ form.user .btn-user {
 
 @keyframes noise-anim {
   0% {
 
 @keyframes noise-anim {
   0% {
-    clip: rect(86px, 9999px, 67px, 0); }
+    clip: rect(81px, 9999px, 57px, 0); }
   5% {
   5% {
-    clip: rect(53px, 9999px, 12px, 0); }
+    clip: rect(44px, 9999px, 23px, 0); }
   10% {
   10% {
-    clip: rect(97px, 9999px, 12px, 0); }
+    clip: rect(36px, 9999px, 5px, 0); }
   15% {
   15% {
-    clip: rect(16px, 9999px, 22px, 0); }
+    clip: rect(57px, 9999px, 20px, 0); }
   20% {
   20% {
-    clip: rect(62px, 9999px, 48px, 0); }
+    clip: rect(28px, 9999px, 77px, 0); }
   25% {
   25% {
-    clip: rect(28px, 9999px, 37px, 0); }
+    clip: rect(17px, 9999px, 24px, 0); }
   30% {
   30% {
-    clip: rect(78px, 9999px, 96px, 0); }
+    clip: rect(92px, 9999px, 10px, 0); }
   35% {
   35% {
-    clip: rect(50px, 9999px, 47px, 0); }
+    clip: rect(100px, 9999px, 74px, 0); }
   40% {
   40% {
-    clip: rect(53px, 9999px, 79px, 0); }
+    clip: rect(63px, 9999px, 69px, 0); }
   45% {
   45% {
-    clip: rect(92px, 9999px, 20px, 0); }
+    clip: rect(96px, 9999px, 47px, 0); }
   50% {
   50% {
-    clip: rect(99px, 9999px, 20px, 0); }
+    clip: rect(78px, 9999px, 94px, 0); }
   55% {
   55% {
-    clip: rect(49px, 9999px, 23px, 0); }
+    clip: rect(88px, 9999px, 92px, 0); }
   60% {
   60% {
-    clip: rect(98px, 9999px, 20px, 0); }
+    clip: rect(80px, 9999px, 36px, 0); }
   65% {
   65% {
-    clip: rect(78px, 9999px, 22px, 0); }
+    clip: rect(47px, 9999px, 15px, 0); }
   70% {
   70% {
-    clip: rect(36px, 9999px, 45px, 0); }
+    clip: rect(59px, 9999px, 44px, 0); }
   75% {
   75% {
-    clip: rect(99px, 9999px, 3px, 0); }
+    clip: rect(13px, 9999px, 56px, 0); }
   80% {
   80% {
-    clip: rect(67px, 9999px, 100px, 0); }
+    clip: rect(28px, 9999px, 44px, 0); }
   85% {
   85% {
-    clip: rect(3px, 9999px, 80px, 0); }
+    clip: rect(91px, 9999px, 14px, 0); }
   90% {
   90% {
-    clip: rect(24px, 9999px, 82px, 0); }
+    clip: rect(48px, 9999px, 68px, 0); }
   95% {
   95% {
-    clip: rect(22px, 9999px, 1px, 0); }
+    clip: rect(9px, 9999px, 94px, 0); }
   100% {
   100% {
-    clip: rect(82px, 9999px, 29px, 0); } }
+    clip: rect(66px, 9999px, 61px, 0); } }
 
 .error:after {
   content: attr(data-text);
 
 .error:after {
   content: attr(data-text);
@@ -8051,47 +8051,47 @@ form.user .btn-user {
 
 @keyframes noise-anim-2 {
   0% {
 
 @keyframes noise-anim-2 {
   0% {
-    clip: rect(28px, 9999px, 21px, 0); }
+    clip: rect(80px, 9999px, 17px, 0); }
   5% {
   5% {
-    clip: rect(11px, 9999px, 1px, 0); }
+    clip: rect(2px, 9999px, 72px, 0); }
   10% {
   10% {
-    clip: rect(75px, 9999px, 31px, 0); }
+    clip: rect(25px, 9999px, 80px, 0); }
   15% {
   15% {
-    clip: rect(49px, 9999px, 67px, 0); }
+    clip: rect(52px, 9999px, 90px, 0); }
   20% {
   20% {
-    clip: rect(72px, 9999px, 67px, 0); }
+    clip: rect(34px, 9999px, 91px, 0); }
   25% {
   25% {
-    clip: rect(98px, 9999px, 9px, 0); }
+    clip: rect(7px, 9999px, 31px, 0); }
   30% {
   30% {
-    clip: rect(63px, 9999px, 39px, 0); }
+    clip: rect(50px, 9999px, 58px, 0); }
   35% {
   35% {
-    clip: rect(24px, 9999px, 96px, 0); }
+    clip: rect(79px, 9999px, 93px, 0); }
   40% {
   40% {
-    clip: rect(35px, 9999px, 21px, 0); }
+    clip: rect(97px, 9999px, 70px, 0); }
   45% {
   45% {
-    clip: rect(86px, 9999px, 65px, 0); }
+    clip: rect(45px, 9999px, 33px, 0); }
   50% {
   50% {
-    clip: rect(58px, 9999px, 95px, 0); }
+    clip: rect(64px, 9999px, 46px, 0); }
   55% {
   55% {
-    clip: rect(51px, 9999px, 78px, 0); }
+    clip: rect(96px, 9999px, 46px, 0); }
   60% {
   60% {
-    clip: rect(30px, 9999px, 89px, 0); }
+    clip: rect(66px, 9999px, 1px, 0); }
   65% {
   65% {
-    clip: rect(2px, 9999px, 8px, 0); }
+    clip: rect(8px, 9999px, 1px, 0); }
   70% {
   70% {
-    clip: rect(69px, 9999px, 36px, 0); }
+    clip: rect(94px, 9999px, 16px, 0); }
   75% {
   75% {
-    clip: rect(80px, 9999px, 46px, 0); }
+    clip: rect(72px, 9999px, 21px, 0); }
   80% {
   80% {
-    clip: rect(93px, 9999px, 66px, 0); }
+    clip: rect(28px, 9999px, 29px, 0); }
   85% {
   85% {
-    clip: rect(88px, 9999px, 77px, 0); }
+    clip: rect(51px, 9999px, 43px, 0); }
   90% {
   90% {
-    clip: rect(61px, 9999px, 18px, 0); }
+    clip: rect(98px, 9999px, 90px, 0); }
   95% {
   95% {
-    clip: rect(92px, 9999px, 40px, 0); }
+    clip: rect(25px, 9999px, 48px, 0); }
   100% {
   100% {
-    clip: rect(65px, 9999px, 76px, 0); } }
+    clip: rect(50px, 9999px, 46px, 0); } }
 
 .error:before {
   content: attr(data-text);
 
 .error:before {
   content: attr(data-text);
index e715caa..b3ff45f 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "sb-admin-2.css",
        "sources": [
        "version": 3,
        "file": "sb-admin-2.css",
        "sources": [
-               "../../../../../tmp/scsseOYB1j",
+               "../../../../../tmp/scssFxSFMc",
                "../scss/startbootstrap-sb-admin-2/sb-admin-2.scss",
                "../scss/startbootstrap-sb-admin-2/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/startbootstrap-sb-admin-2/sb-admin-2.scss",
                "../scss/startbootstrap-sb-admin-2/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/startbootstrap-sb-admin-2/_footer.scss"
        ],
        "names": [],
                "../scss/startbootstrap-sb-admin-2/_footer.scss"
        ],
        "names": [],
-       "mappings": "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"
+       "mappings": "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"
 }
\ No newline at end of file
 }
\ No newline at end of file
index 6c7cd20..93c3066 100644 (file)
@@ -3,6 +3,6 @@
  * Copyright 2011-2020 The Bootstrap Authors
  * Copyright 2011-2020 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  * Copyright 2011-2020 The Bootstrap Authors
  * Copyright 2011-2020 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--blue: #4e73df;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #e74a3b;--orange: #fd7e14;--yellow: #f6c23e;--green: #1cc88a;--teal: #20c9a6;--cyan: #36b9cc;--white: #fff;--gray: #858796;--gray-dark: #5a5c69;--primary: #4e73df;--secondary: #858796;--success: #1cc88a;--info: #36b9cc;--warning: #f6c23e;--danger: #e74a3b;--light: #f8f9fc;--dark: #5a5c69;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#858796;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#4e73df;text-decoration:none;background-color:transparent}a:hover{color:#224abe;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#858796;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:400;line-height:1.2}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#858796}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dddfeb;border-radius:.35rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#858796}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#3a3b45;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#3a3b45}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:.75rem;padding-left:.75rem;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-.75rem;margin-left:-.75rem}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-xl,.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-lg,.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-md,.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-sm,.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col,.col-auto,.col-12,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{position:relative;width:100%;padding-right:.75rem;padding-left:.75rem}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#858796}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #e3e6f0}.table thead th{vertical-align:bottom;border-bottom:2px solid #e3e6f0}.table tbody+tbody{border-top:2px solid #e3e6f0}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #e3e6f0}.table-bordered th,.table-bordered td{border:1px solid #e3e6f0}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{color:#858796;background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#cdd8f6}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#a3b6ee}.table-hover .table-primary:hover{background-color:#b7c7f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b7c7f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#dddde2}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#c0c1c8}.table-hover .table-secondary:hover{background-color:#cfcfd6}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#cfcfd6}.table-success,.table-success>th,.table-success>td{background-color:#bff0de}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#89e2c2}.table-hover .table-success:hover{background-color:#aaebd3}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aaebd3}.table-info,.table-info>th,.table-info>td{background-color:#c7ebf1}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#96dbe4}.table-hover .table-info:hover{background-color:#b3e4ec}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b3e4ec}.table-warning,.table-warning>th,.table-warning>td{background-color:#fceec9}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#fadf9b}.table-hover .table-warning:hover{background-color:#fbe6b1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbe6b1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f8ccc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#f3a199}.table-hover .table-danger:hover{background-color:#f5b7b1}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f5b7b1}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfd}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#d1d1d5}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#a9aab1}.table-hover .table-dark:hover{background-color:#c4c4c9}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#c4c4c9}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#5a5c69;border-color:#6c6e7e}.table .thead-light th{color:#6e707e;background-color:#eaecf4;border-color:#e3e6f0}.table-dark{color:#fff;background-color:#5a5c69}.table-dark th,.table-dark td,.table-dark thead th{border-color:#6c6e7e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;background-clip:padding-box;border:1px solid #d1d3e2;border-radius:.35rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.form-control:focus{color:#6e707e;background-color:#fff;border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.form-control::placeholder{color:#858796;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eaecf4;opacity:1}input.form-control[type="date"],input.form-control[type="time"],input.form-control[type="datetime-local"],input.form-control[type="month"]{appearance:none}select.form-control:focus::-ms-value{color:#6e707e;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#858796;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{color:#858796}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#1cc88a}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(28,200,138,0.9);border-radius:.35rem}.form-row>.col>.valid-tooltip,.form-row>[class*="col-"]>.valid-tooltip{left:5px}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#1cc88a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#1cc88a;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#1cc88a}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#1cc88a}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{border-color:#1cc88a}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{border-color:#34e3a4;background-color:#34e3a4}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before{border-color:#1cc88a}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#1cc88a}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e74a3b}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(231,74,59,0.9);border-radius:.35rem}.form-row>.col>.invalid-tooltip,.form-row>[class*="col-"]>.invalid-tooltip{left:5px}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#e74a3b;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#e74a3b;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#e74a3b}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#e74a3b}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{border-color:#e74a3b}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{border-color:#ed7468;background-color:#ed7468}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before{border-color:#e74a3b}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#e74a3b}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#858796;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.35rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#858796;text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:hover{color:#fff;background-color:#2e59d9;border-color:#2653d4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#2e59d9;border-color:#2653d4;box-shadow:0 0 0 .2rem rgba(105,136,228,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary.active:not(:disabled):not(.disabled),.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2653d4;border-color:#244ec9}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary.active:not(:disabled):not(.disabled):focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(105,136,228,0.5)}.btn-secondary{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:hover{color:#fff;background-color:#717384;border-color:#6b6d7d}.btn-secondary:focus,.btn-secondary.focus{color:#fff;background-color:#717384;border-color:#6b6d7d;box-shadow:0 0 0 .2rem rgba(151,153,166,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary.active:not(:disabled):not(.disabled),.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#6b6d7d;border-color:#656776}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary.active:not(:disabled):not(.disabled):focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(151,153,166,0.5)}.btn-success{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:hover{color:#fff;background-color:#17a673;border-color:#169b6b}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#17a673;border-color:#169b6b;box-shadow:0 0 0 .2rem rgba(62,208,156,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:not(:disabled):not(.disabled):active,.btn-success.active:not(:disabled):not(.disabled),.show>.btn-success.dropdown-toggle{color:#fff;background-color:#169b6b;border-color:#149063}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success.active:not(:disabled):not(.disabled):focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(62,208,156,0.5)}.btn-info{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:hover{color:#fff;background-color:#2c9faf;border-color:#2a96a5}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#2c9faf;border-color:#2a96a5;box-shadow:0 0 0 .2rem rgba(84,196,212,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:not(:disabled):not(.disabled):active,.btn-info.active:not(:disabled):not(.disabled),.show>.btn-info.dropdown-toggle{color:#fff;background-color:#2a96a5;border-color:#278c9b}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info.active:not(:disabled):not(.disabled):focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,196,212,0.5)}.btn-warning{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:hover{color:#fff;background-color:#f4b619;border-color:#f4b30d}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#f4b619;border-color:#f4b30d;box-shadow:0 0 0 .2rem rgba(247,203,91,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning.active:not(:disabled):not(.disabled),.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#f4b30d;border-color:#e9aa0b}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning.active:not(:disabled):not(.disabled):focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,203,91,0.5)}.btn-danger{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:hover{color:#fff;background-color:#e02d1b;border-color:#d52a1a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#e02d1b;border-color:#d52a1a;box-shadow:0 0 0 .2rem rgba(235,101,88,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger.active:not(:disabled):not(.disabled),.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#d52a1a;border-color:#ca2819}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger.active:not(:disabled):not(.disabled):focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(235,101,88,0.5)}.btn-light{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:hover{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed}.btn-light:focus,.btn-light.focus{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed;box-shadow:0 0 0 .2rem rgba(220,221,225,0.5)}.btn-light.disabled,.btn-light:disabled{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:not(:disabled):not(.disabled):active,.btn-light.active:not(:disabled):not(.disabled),.show>.btn-light.dropdown-toggle{color:#3a3b45;background-color:#d4daed;border-color:#cbd3e9}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light.active:not(:disabled):not(.disabled):focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,221,225,0.5)}.btn-dark{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:hover{color:#fff;background-color:#484a54;border-color:#42444e}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#484a54;border-color:#42444e;box-shadow:0 0 0 .2rem rgba(115,116,128,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark.active:not(:disabled):not(.disabled),.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#42444e;border-color:#3d3e47}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark.active:not(:disabled):not(.disabled):focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(115,116,128,0.5)}.btn-outline-primary{color:#4e73df;border-color:#4e73df}.btn-outline-primary:hover{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#4e73df;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary.active:not(:disabled):not(.disabled),.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.btn-outline-secondary{color:#858796;border-color:#858796}.btn-outline-secondary:hover{color:#fff;background-color:#858796;border-color:#858796}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#858796;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary.active:not(:disabled):not(.disabled),.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#858796;border-color:#858796}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.btn-outline-success{color:#1cc88a;border-color:#1cc88a}.btn-outline-success:hover{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1cc88a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success.active:not(:disabled):not(.disabled),.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.btn-outline-info{color:#36b9cc;border-color:#36b9cc}.btn-outline-info:hover{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#36b9cc;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info.active:not(:disabled):not(.disabled),.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.btn-outline-warning{color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:hover{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f6c23e;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning.active:not(:disabled):not(.disabled),.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.btn-outline-danger{color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:hover{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e74a3b;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger.active:not(:disabled):not(.disabled),.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.btn-outline-light{color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:hover{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fc;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light.active:not(:disabled):not(.disabled),.show>.btn-outline-light.dropdown-toggle{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.btn-outline-dark{color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:hover{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#5a5c69;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark.active:not(:disabled):not(.disabled),.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.btn-link{font-weight:400;color:#4e73df;text-decoration:none}.btn-link:hover{color:#224abe;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#858796;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input.btn-block[type="submit"],input.btn-block[type="reset"],input.btn-block[type="button"]{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.15s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.85rem;color:#858796;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #e3e6f0;border-radius:.35rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #eaecf4}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#3a3b45;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#2e2f37;text-decoration:none;background-color:#f8f9fc}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4e73df}.dropdown-item.disabled,.dropdown-item:disabled{color:#858796;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#858796;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#3a3b45}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n + 3),.input-group.has-validation>.custom-select:nth-last-child(n + 3),.input-group.has-validation>.custom-file:nth-last-child(n + 3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;text-align:center;white-space:nowrap;background-color:#eaecf4;border:1px solid #d1d3e2;border-radius:.35rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n + 3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n + 3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#4e73df;background-color:#4e73df}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#bac8f3}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#e5ebfa;border-color:#e5ebfa}.custom-control-input[disabled]~.custom-control-label,.custom-control-input:disabled~.custom-control-label{color:#858796}.custom-control-input[disabled]~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before{background-color:#eaecf4}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#b7b9cc solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50% / 50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.35rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#4e73df;background-color:#4e73df}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#b7b9cc;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #d1d3e2;border-radius:.35rem;appearance:none}.custom-select:focus{border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-select:focus::-ms-value{color:#6e707e;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#858796;background-color:#eaecf4}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#bac8f3;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-file-input[disabled]~.custom-file-label,.custom-file-input:disabled~.custom-file-label{background-color:#eaecf4}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;border:1px solid #d1d3e2;border-radius:.35rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#6e707e;content:"Browse";background-color:#eaecf4;border-left:inherit;border-radius:0 .35rem .35rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#e5ebfa}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#e5ebfa}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#e5ebfa}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dddfeb;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dddfeb;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#b7b9cc}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#b7b9cc}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#b7b9cc}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#858796;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dddfeb}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#eaecf4 #eaecf4 #dddfeb}.nav-tabs .nav-link.disabled{color:#858796;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#dddfeb #dddfeb #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.35rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4e73df}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.35rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50% / 100% 100% no-repeat}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #e3e6f0;border-radius:.35rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid #e3e6f0}.card-header:first-child{border-radius:calc(.35rem - 1px) calc(.35rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid #e3e6f0}.card-footer:last-child{border-radius:0 0 calc(.35rem - 1px) calc(.35rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.35rem - 1px)}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card-deck .card{margin-bottom:.75rem}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-.75rem;margin-left:-.75rem}.card-deck .card{flex:1 0 0%;margin-right:.75rem;margin-bottom:0;margin-left:.75rem}}.card-group>.card{margin-bottom:.75rem}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eaecf4;border-radius:.35rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#858796;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#858796}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.35rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#4e73df;background-color:#fff;border:1px solid #dddfeb}.page-link:hover{z-index:2;color:#224abe;text-decoration:none;background-color:#eaecf4;border-color:#dddfeb}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.35rem;border-bottom-left-radius:.35rem}.page-item:last-child .page-link{border-top-right-radius:.35rem;border-bottom-right-radius:.35rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#4e73df;border-color:#4e73df}.page-item.disabled .page-link{color:#858796;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dddfeb}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.35rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#4e73df}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#2653d4}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.badge-secondary{color:#fff;background-color:#858796}a.badge-secondary:hover,a.badge-secondary:focus{color:#fff;background-color:#6b6d7d}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.badge-success{color:#fff;background-color:#1cc88a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#169b6b}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.badge-info{color:#fff;background-color:#36b9cc}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#2a96a5}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.badge-warning{color:#fff;background-color:#f6c23e}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#f4b30d}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.badge-danger{color:#fff;background-color:#e74a3b}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#d52a1a}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.badge-light{color:#3a3b45;background-color:#f8f9fc}a.badge-light:hover,a.badge-light:focus{color:#3a3b45;background-color:#d4daed}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.badge-dark{color:#fff;background-color:#5a5c69}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#42444e}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eaecf4;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.35rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#293c74;background-color:#dce3f9;border-color:#cdd8f6}.alert-primary hr{border-top-color:#b7c7f2}.alert-primary .alert-link{color:#1c294e}.alert-secondary{color:#45464e;background-color:#e7e7ea;border-color:#dddde2}.alert-secondary hr{border-top-color:#cfcfd6}.alert-secondary .alert-link{color:#2d2e33}.alert-success{color:#0f6848;background-color:#d2f4e8;border-color:#bff0de}.alert-success hr{border-top-color:#aaebd3}.alert-success .alert-link{color:#093b29}.alert-info{color:#1c606a;background-color:#d7f1f5;border-color:#c7ebf1}.alert-info hr{border-top-color:#b3e4ec}.alert-info .alert-link{color:#113b42}.alert-warning{color:#806520;background-color:#fdf3d8;border-color:#fceec9}.alert-warning hr{border-top-color:#fbe6b1}.alert-warning .alert-link{color:#574516}.alert-danger{color:#78261f;background-color:#fadbd8;border-color:#f8ccc8}.alert-danger hr{border-top-color:#f5b7b1}.alert-danger .alert-link{color:#4f1915}.alert-light{color:#818183;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686869}.alert-dark{color:#2f3037;background-color:#dedee1;border-color:#d1d1d5}.alert-dark hr{border-top-color:#c4c4c9}.alert-dark .alert-link{color:#18181c}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#eaecf4;border-radius:.35rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#4e73df;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.35rem}.list-group-item-action{width:100%;color:#6e707e;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#6e707e;text-decoration:none;background-color:#f8f9fc}.list-group-item-action:active{color:#858796;background-color:#eaecf4}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#858796;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4e73df;border-color:#4e73df}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#293c74;background-color:#cdd8f6}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#293c74;background-color:#b7c7f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#293c74;border-color:#293c74}.list-group-item-secondary{color:#45464e;background-color:#dddde2}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#45464e;background-color:#cfcfd6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#45464e;border-color:#45464e}.list-group-item-success{color:#0f6848;background-color:#bff0de}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f6848;background-color:#aaebd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f6848;border-color:#0f6848}.list-group-item-info{color:#1c606a;background-color:#c7ebf1}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#1c606a;background-color:#b3e4ec}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#1c606a;border-color:#1c606a}.list-group-item-warning{color:#806520;background-color:#fceec9}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#806520;background-color:#fbe6b1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#806520;border-color:#806520}.list-group-item-danger{color:#78261f;background-color:#f8ccc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#78261f;background-color:#f5b7b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#78261f;border-color:#78261f}.list-group-item-light{color:#818183;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818183;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818183;border-color:#818183}.list-group-item-dark{color:#2f3037;background-color:#d1d1d5}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#2f3037;background-color:#c4c4c9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#2f3037;border-color:#2f3037}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#858796;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #e3e6f0;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #e3e6f0;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.35rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc(-.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#858796}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50% / 100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#4e73df !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#2653d4 !important}.bg-secondary{background-color:#858796 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#6b6d7d !important}.bg-success{background-color:#1cc88a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#169b6b !important}.bg-info{background-color:#36b9cc !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#2a96a5 !important}.bg-warning{background-color:#f6c23e !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#f4b30d !important}.bg-danger{background-color:#e74a3b !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#d52a1a !important}.bg-light{background-color:#f8f9fc !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#d4daed !important}.bg-dark{background-color:#5a5c69 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#42444e !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #e3e6f0 !important}.border-top{border-top:1px solid #e3e6f0 !important}.border-right{border-right:1px solid #e3e6f0 !important}.border-bottom{border-bottom:1px solid #e3e6f0 !important}.border-left{border-left:1px solid #e3e6f0 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#4e73df !important}.border-secondary{border-color:#858796 !important}.border-success{border-color:#1cc88a !important}.border-info{border-color:#36b9cc !important}.border-warning{border-color:#f6c23e !important}.border-danger{border-color:#e74a3b !important}.border-light{border-color:#f8f9fc !important}.border-dark{border-color:#5a5c69 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded{border-radius:.35rem !important}.rounded-top{border-top-left-radius:.35rem !important;border-top-right-radius:.35rem !important}.rounded-right{border-top-right-radius:.35rem !important;border-bottom-right-radius:.35rem !important}.rounded-bottom{border-bottom-right-radius:.35rem !important;border-bottom-left-radius:.35rem !important}.rounded-left{border-top-left-radius:.35rem !important;border-bottom-left-radius:.35rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem 0 rgba(58,59,69,0.2) !important}.shadow{box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase,.sidebar .sidebar-heading,.dropdown .dropdown-menu .dropdown-header{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#4e73df !important}a.text-primary:hover,a.text-primary:focus{color:#224abe !important}.text-secondary{color:#858796 !important}a.text-secondary:hover,a.text-secondary:focus{color:#60616f !important}.text-success{color:#1cc88a !important}a.text-success:hover,a.text-success:focus{color:#13855c !important}.text-info{color:#36b9cc !important}a.text-info:hover,a.text-info:focus{color:#258391 !important}.text-warning{color:#f6c23e !important}a.text-warning:hover,a.text-warning:focus{color:#dda20a !important}.text-danger{color:#e74a3b !important}a.text-danger:hover,a.text-danger:focus{color:#be2617 !important}.text-light{color:#f8f9fc !important}a.text-light:hover,a.text-light:focus{color:#c2cbe5 !important}.text-dark{color:#5a5c69 !important}a.text-dark:hover,a.text-dark:focus{color:#373840 !important}.text-body{color:#858796 !important}.text-muted{color:#858796 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #b7b9cc;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dddfeb !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#e3e6f0}.table .thead-dark th{color:inherit;border-color:#e3e6f0}}html{position:relative;min-height:100%}body{height:100%}a:focus{outline:none}#wrapper{display:flex}#wrapper #content-wrapper{background-color:#f8f9fc;width:100%;overflow-x:hidden}#wrapper #content-wrapper #content{flex:1 0 auto}.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{padding-left:1.5rem;padding-right:1.5rem}.scroll-to-top{position:fixed;right:1rem;bottom:1rem;display:none;width:2.75rem;height:2.75rem;text-align:center;color:#fff;background:rgba(90,92,105,0.5);line-height:46px}.scroll-to-top:focus,.scroll-to-top:hover{color:white}.scroll-to-top:hover{background:#5a5c69}.scroll-to-top i{font-weight:800}@keyframes growIn{0%{transform:scale(0.9);opacity:0}100%{transform:scale(1);opacity:1}}.animated--grow-in,.sidebar .nav-item .collapse{animation-name:growIn;animation-duration:200ms;animation-timing-function:transform cubic-bezier(0.18, 1.25, 0.4, 1),opacity cubic-bezier(0, 1, 0.4, 1)}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.animated--fade-in{animation-name:fadeIn;animation-duration:200ms;animation-timing-function:opacity cubic-bezier(0, 1, 0.4, 1)}.bg-gradient-primary{background-color:#4e73df;background-image:linear-gradient(180deg, #4e73df 10%, #224abe 100%);background-size:cover}.bg-gradient-secondary{background-color:#858796;background-image:linear-gradient(180deg, #858796 10%, #60616f 100%);background-size:cover}.bg-gradient-success{background-color:#1cc88a;background-image:linear-gradient(180deg, #1cc88a 10%, #13855c 100%);background-size:cover}.bg-gradient-info{background-color:#36b9cc;background-image:linear-gradient(180deg, #36b9cc 10%, #258391 100%);background-size:cover}.bg-gradient-warning{background-color:#f6c23e;background-image:linear-gradient(180deg, #f6c23e 10%, #dda20a 100%);background-size:cover}.bg-gradient-danger{background-color:#e74a3b;background-image:linear-gradient(180deg, #e74a3b 10%, #be2617 100%);background-size:cover}.bg-gradient-light{background-color:#f8f9fc;background-image:linear-gradient(180deg, #f8f9fc 10%, #c2cbe5 100%);background-size:cover}.bg-gradient-dark{background-color:#5a5c69;background-image:linear-gradient(180deg, #5a5c69 10%, #373840 100%);background-size:cover}.bg-gray-100{background-color:#f8f9fc !important}.bg-gray-200{background-color:#eaecf4 !important}.bg-gray-300{background-color:#dddfeb !important}.bg-gray-400{background-color:#d1d3e2 !important}.bg-gray-500{background-color:#b7b9cc !important}.bg-gray-600{background-color:#858796 !important}.bg-gray-700{background-color:#6e707e !important}.bg-gray-800{background-color:#5a5c69 !important}.bg-gray-900{background-color:#3a3b45 !important}.o-hidden{overflow:hidden !important}.text-xs{font-size:.7rem}.text-lg{font-size:1.2rem}.text-gray-100{color:#f8f9fc !important}.text-gray-200{color:#eaecf4 !important}.text-gray-300{color:#dddfeb !important}.text-gray-400{color:#d1d3e2 !important}.text-gray-500{color:#b7b9cc !important}.text-gray-600{color:#858796 !important}.text-gray-700{color:#6e707e !important}.text-gray-800{color:#5a5c69 !important}.text-gray-900{color:#3a3b45 !important}.icon-circle{height:2.5rem;width:2.5rem;border-radius:100%;display:flex;align-items:center;justify-content:center}.border-left-primary{border-left:0.25rem solid #4e73df !important}.border-bottom-primary{border-bottom:0.25rem solid #4e73df !important}.border-left-secondary{border-left:0.25rem solid #858796 !important}.border-bottom-secondary{border-bottom:0.25rem solid #858796 !important}.border-left-success{border-left:0.25rem solid #1cc88a !important}.border-bottom-success{border-bottom:0.25rem solid #1cc88a !important}.border-left-info{border-left:0.25rem solid #36b9cc !important}.border-bottom-info{border-bottom:0.25rem solid #36b9cc !important}.border-left-warning{border-left:0.25rem solid #f6c23e !important}.border-bottom-warning{border-bottom:0.25rem solid #f6c23e !important}.border-left-danger{border-left:0.25rem solid #e74a3b !important}.border-bottom-danger{border-bottom:0.25rem solid #e74a3b !important}.border-left-light{border-left:0.25rem solid #f8f9fc !important}.border-bottom-light{border-bottom:0.25rem solid #f8f9fc !important}.border-left-dark{border-left:0.25rem solid #5a5c69 !important}.border-bottom-dark{border-bottom:0.25rem solid #5a5c69 !important}.progress-sm{height:.5rem}.rotate-15{transform:rotate(15deg)}.rotate-n-15{transform:rotate(-15deg)}.dropdown .dropdown-menu{font-size:.85rem}.dropdown .dropdown-menu .dropdown-header{font-weight:800;font-size:0.65rem;color:#b7b9cc}.dropdown.no-arrow .dropdown-toggle::after{display:none}.sidebar .nav-item.dropdown .dropdown-toggle::after,.topbar .nav-item.dropdown .dropdown-toggle::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f105';font-family:'Font Awesome 5 Free'}.sidebar .nav-item.dropdown.show .dropdown-toggle::after,.topbar .nav-item.dropdown.show .dropdown-toggle::after{content:'\f107'}.sidebar .nav-item .nav-link,.topbar .nav-item .nav-link{position:relative}.sidebar .nav-item .nav-link .badge-counter,.topbar .nav-item .nav-link .badge-counter{position:absolute;transform:scale(0.7);transform-origin:top right;right:.25rem;margin-top:-.25rem}.sidebar .nav-item .nav-link .img-profile,.topbar .nav-item .nav-link .img-profile{height:2rem;width:2rem}.topbar{height:4.375rem}.topbar #sidebarToggleTop{height:2.5rem;width:2.5rem}.topbar #sidebarToggleTop:hover{background-color:#eaecf4}.topbar #sidebarToggleTop:active{background-color:#dddfeb}.topbar .navbar-search{width:25rem}.topbar .navbar-search input{font-size:0.85rem;height:auto}.topbar .topbar-divider{width:0;border-right:1px solid #e3e6f0;height:calc(4.375rem - 2rem);margin:auto 1rem}.topbar .nav-item .nav-link{height:4.375rem;display:flex;align-items:center;padding:0 0.75rem}.topbar .nav-item .nav-link:focus{outline:none}.topbar .nav-item:focus{outline:none}.topbar .dropdown{position:static}.topbar .dropdown .dropdown-menu{width:calc(100% - 1.5rem);right:.75rem}.topbar .dropdown-list{padding:0;border:none;overflow:hidden}.topbar .dropdown-list .dropdown-header{background-color:#4e73df;border:1px solid #4e73df;padding-top:0.75rem;padding-bottom:0.75rem;color:#fff}.topbar .dropdown-list .dropdown-item{white-space:normal;padding-top:0.5rem;padding-bottom:0.5rem;border-left:1px solid #e3e6f0;border-right:1px solid #e3e6f0;border-bottom:1px solid #e3e6f0;line-height:1.3rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image{position:relative;height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image img{height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator{background-color:#eaecf4;height:0.75rem;width:0.75rem;border-radius:100%;position:absolute;bottom:0;right:0;border:0.125rem solid #fff}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:10rem}.topbar .dropdown-list .dropdown-item:active{background-color:#eaecf4;color:#3a3b45}@media (min-width: 576px){.topbar .dropdown{position:relative}.topbar .dropdown .dropdown-menu{width:auto;right:0}.topbar .dropdown-list{width:20rem !important}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:13.375rem}}.topbar.navbar-dark .navbar-nav .nav-item .nav-link{color:rgba(255,255,255,0.8)}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover{color:#fff}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:active{color:#fff}.topbar.navbar-light .navbar-nav .nav-item .nav-link{color:#d1d3e2}.topbar.navbar-light .navbar-nav .nav-item .nav-link:hover{color:#b7b9cc}.topbar.navbar-light .navbar-nav .nav-item .nav-link:active{color:#858796}.sidebar{width:6.5rem;min-height:100vh}.sidebar .nav-item{position:relative}.sidebar .nav-item:last-child{margin-bottom:1rem}.sidebar .nav-item .nav-link{text-align:center;padding:0.75rem 1rem;width:6.5rem}.sidebar .nav-item .nav-link span{font-size:0.65rem;display:block}.sidebar .nav-item.active .nav-link{font-weight:700}.sidebar .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px}.sidebar .nav-item .collapse .collapse-inner{border-radius:.35rem;box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15)}.sidebar .nav-item .collapsing{display:none;transition:none}.sidebar .nav-item .collapse .collapse-inner,.sidebar .nav-item .collapsing .collapse-inner{padding:.5rem 0;min-width:10rem;font-size:.85rem;margin:0 0 1rem 0}.sidebar .nav-item .collapse .collapse-inner .collapse-header,.sidebar .nav-item .collapsing .collapse-inner .collapse-header{margin:0;white-space:nowrap;padding:.5rem 1.5rem;text-transform:uppercase;font-weight:800;font-size:0.65rem;color:#b7b9cc}.sidebar .nav-item .collapse .collapse-inner .collapse-item,.sidebar .nav-item .collapsing .collapse-inner .collapse-item{padding:0.5rem 1rem;margin:0 0.5rem;display:block;color:#3a3b45;text-decoration:none;border-radius:.35rem;white-space:nowrap}.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover{background-color:#eaecf4}.sidebar .nav-item .collapse .collapse-inner .collapse-item:active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:active{background-color:#dddfeb}.sidebar .nav-item .collapse .collapse-inner .collapse-item.active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item.active{color:#4e73df;font-weight:700}.sidebar #sidebarToggle{width:2.5rem;height:2.5rem;text-align:center;margin-bottom:1rem;cursor:pointer}.sidebar #sidebarToggle::after{font-weight:900;content:'\f104';font-family:'Font Awesome 5 Free';margin-right:0.1rem}.sidebar #sidebarToggle:hover{text-decoration:none}.sidebar #sidebarToggle:focus{outline:none}.sidebar.toggled{width:0 !important;overflow:hidden}.sidebar.toggled #sidebarToggle::after{content:'\f105';font-family:'Font Awesome 5 Free';margin-left:0.25rem}.sidebar.toggled .sidebar-card{display:none}.sidebar .sidebar-brand{height:4.375rem;text-decoration:none;font-size:1rem;font-weight:800;padding:1.5rem 1rem;text-align:center;text-transform:uppercase;letter-spacing:0.05rem;z-index:1}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:none}.sidebar hr.sidebar-divider{margin:0 1rem 1rem}.sidebar .sidebar-heading{text-align:center;padding:0 1rem;font-weight:800;font-size:0.65rem}.sidebar .sidebar-card{display:flex;flex-direction:column;align-items:center;font-size:.875rem;border-radius:.35rem;color:rgba(255,255,255,0.8);margin-left:1rem;margin-right:1rem;margin-bottom:1rem;padding:1rem;background-color:rgba(0,0,0,0.1)}.sidebar .sidebar-card .sidebar-card-illustration{height:3rem;display:block}.sidebar .sidebar-card .sidebar-card-title{font-weight:bold}.sidebar .sidebar-card p{font-size:0.75rem;color:rgba(255,255,255,0.5)}@media (min-width: 768px){.sidebar{width:14rem !important}.sidebar .nav-item .collapse{position:relative;left:0;z-index:1;top:0;animation:none}.sidebar .nav-item .collapse .collapse-inner{border-radius:0;box-shadow:none}.sidebar .nav-item .collapsing{display:block;transition:height 0.15s ease}.sidebar .nav-item .collapse,.sidebar .nav-item .collapsing{margin:0 1rem}.sidebar .nav-item .nav-link{display:block;width:100%;text-align:left;padding:1rem;width:14rem}.sidebar .nav-item .nav-link i{font-size:0.85rem;margin-right:0.25rem}.sidebar .nav-item .nav-link span{font-size:0.85rem;display:inline}.sidebar .nav-item .nav-link[data-toggle="collapse"]::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free'}.sidebar .nav-item .nav-link.collapsed[data-toggle="collapse"]::after{content:'\f105'}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:inline}.sidebar .sidebar-heading{text-align:left}.sidebar.toggled{overflow:visible;width:6.5rem !important}.sidebar.toggled .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px;animation-name:growIn;animation-duration:200ms;animation-timing-function:transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1)}.sidebar.toggled .nav-item .collapse .collapse-inner{box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15);border-radius:.35rem}.sidebar.toggled .nav-item .collapsing{display:none;transition:none}.sidebar.toggled .nav-item .collapse,.sidebar.toggled .nav-item .collapsing{margin:0}.sidebar.toggled .nav-item:last-child{margin-bottom:1rem}.sidebar.toggled .nav-item .nav-link{text-align:center;padding:0.75rem 1rem;width:6.5rem}.sidebar.toggled .nav-item .nav-link span{font-size:0.65rem;display:block}.sidebar.toggled .nav-item .nav-link i{margin-right:0}.sidebar.toggled .nav-item .nav-link[data-toggle="collapse"]::after{display:none}.sidebar.toggled .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar.toggled .sidebar-brand .sidebar-brand-text{display:none}.sidebar.toggled .sidebar-heading{text-align:center}}.sidebar-light .sidebar-brand{color:#6e707e}.sidebar-light hr.sidebar-divider{border-top:1px solid #eaecf4}.sidebar-light .sidebar-heading{color:#b7b9cc}.sidebar-light .nav-item .nav-link{color:#858796}.sidebar-light .nav-item .nav-link i{color:#d1d3e2}.sidebar-light .nav-item .nav-link:active,.sidebar-light .nav-item .nav-link:focus,.sidebar-light .nav-item .nav-link:hover{color:#6e707e}.sidebar-light .nav-item .nav-link:active i,.sidebar-light .nav-item .nav-link:focus i,.sidebar-light .nav-item .nav-link:hover i{color:#6e707e}.sidebar-light .nav-item .nav-link[data-toggle="collapse"]::after{color:#b7b9cc}.sidebar-light .nav-item.active .nav-link{color:#6e707e}.sidebar-light .nav-item.active .nav-link i{color:#6e707e}.sidebar-light #sidebarToggle{background-color:#eaecf4}.sidebar-light #sidebarToggle::after{color:#b7b9cc}.sidebar-light #sidebarToggle:hover{background-color:#dddfeb}.sidebar-dark .sidebar-brand{color:#fff}.sidebar-dark hr.sidebar-divider{border-top:1px solid rgba(255,255,255,0.15)}.sidebar-dark .sidebar-heading{color:rgba(255,255,255,0.4)}.sidebar-dark .nav-item .nav-link{color:rgba(255,255,255,0.8)}.sidebar-dark .nav-item .nav-link i{color:rgba(255,255,255,0.3)}.sidebar-dark .nav-item .nav-link:active,.sidebar-dark .nav-item .nav-link:focus,.sidebar-dark .nav-item .nav-link:hover{color:#fff}.sidebar-dark .nav-item .nav-link:active i,.sidebar-dark .nav-item .nav-link:focus i,.sidebar-dark .nav-item .nav-link:hover i{color:#fff}.sidebar-dark .nav-item .nav-link[data-toggle="collapse"]::after{color:rgba(255,255,255,0.5)}.sidebar-dark .nav-item.active .nav-link{color:#fff}.sidebar-dark .nav-item.active .nav-link i{color:#fff}.sidebar-dark #sidebarToggle{background-color:rgba(255,255,255,0.2)}.sidebar-dark #sidebarToggle::after{color:rgba(255,255,255,0.5)}.sidebar-dark #sidebarToggle:hover{background-color:rgba(255,255,255,0.25)}.sidebar-dark.toggled #sidebarToggle::after{color:rgba(255,255,255,0.5)}.btn-circle{border-radius:100%;height:2.5rem;width:2.5rem;font-size:1rem;display:inline-flex;align-items:center;justify-content:center}.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn{height:1.8rem;width:1.8rem;font-size:0.75rem}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn{height:3.5rem;width:3.5rem;font-size:1.35rem}.btn-icon-split{padding:0;overflow:hidden;display:inline-flex;align-items:stretch;justify-content:center}.btn-icon-split .icon{background:rgba(0,0,0,0.15);display:inline-block;padding:.375rem .75rem}.btn-icon-split .text{display:inline-block;padding:.375rem .75rem}.btn-icon-split.btn-sm .icon,.btn-group-sm>.btn-icon-split.btn .icon{padding:.25rem .5rem}.btn-icon-split.btn-sm .text,.btn-group-sm>.btn-icon-split.btn .text{padding:.25rem .5rem}.btn-icon-split.btn-lg .icon,.btn-group-lg>.btn-icon-split.btn .icon{padding:.5rem 1rem}.btn-icon-split.btn-lg .text,.btn-group-lg>.btn-icon-split.btn .text{padding:.5rem 1rem}.card .card-header .dropdown{line-height:1}.card .card-header .dropdown .dropdown-menu{line-height:1.5}.card .card-header[data-toggle="collapse"]{text-decoration:none;position:relative;padding:0.75rem 3.25rem 0.75rem 1.25rem}.card .card-header[data-toggle="collapse"]::after{position:absolute;right:0;top:0;padding-right:1.725rem;line-height:51px;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free';color:#d1d3e2}.card .card-header.collapsed[data-toggle="collapse"]{border-radius:.35rem}.card .card-header.collapsed[data-toggle="collapse"]::after{content:'\f105'}.chart-area{position:relative;height:10rem;width:100%}@media (min-width: 768px){.chart-area{height:20rem}}.chart-bar{position:relative;height:10rem;width:100%}@media (min-width: 768px){.chart-bar{height:20rem}}.chart-pie{position:relative;height:15rem;width:100%}@media (min-width: 768px){.chart-pie{height:calc(20rem - 43px) !important}}.bg-login-image{background:url("https://source.unsplash.com/K4mSJ7kc0As/600x800");background-position:center;background-size:cover}.bg-register-image{background:url("https://source.unsplash.com/Mv9hjnEUHR4/600x800");background-position:center;background-size:cover}.bg-password-image{background:url("https://source.unsplash.com/oWTW-jNGl9I/600x800");background-position:center;background-size:cover}form.user .custom-checkbox.small label{line-height:1.5rem}form.user .form-control-user{font-size:0.8rem;border-radius:10rem;padding:1.5rem 1rem}form.user .btn-user{font-size:0.8rem;border-radius:10rem;padding:0.75rem 1rem}.btn-google{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:hover{color:#fff;background-color:#e12717;border-color:#e6e6e6}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#e12717;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-google.disabled,.btn-google:disabled{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:not(:disabled):not(.disabled):active,.btn-google.active:not(:disabled):not(.disabled),.show>.btn-google.dropdown-toggle{color:#fff;background-color:#d62516;border-color:#dfdfdf}.btn-google:not(:disabled):not(.disabled):active:focus,.btn-google.active:not(:disabled):not(.disabled):focus,.show>.btn-google.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-facebook{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:hover{color:#fff;background-color:#30497c;border-color:#e6e6e6}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#30497c;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-facebook.disabled,.btn-facebook:disabled{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:not(:disabled):not(.disabled):active,.btn-facebook.active:not(:disabled):not(.disabled),.show>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;border-color:#dfdfdf}.btn-facebook:not(:disabled):not(.disabled):active:focus,.btn-facebook.active:not(:disabled):not(.disabled):focus,.show>.btn-facebook.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.error{color:#5a5c69;font-size:7rem;position:relative;line-height:1;width:12.5rem}@keyframes noise-anim{0%{clip:rect(98px, 9999px, 89px, 0)}5%{clip:rect(7px, 9999px, 18px, 0)}10%{clip:rect(41px, 9999px, 46px, 0)}15%{clip:rect(62px, 9999px, 14px, 0)}20%{clip:rect(64px, 9999px, 26px, 0)}25%{clip:rect(94px, 9999px, 15px, 0)}30%{clip:rect(29px, 9999px, 73px, 0)}35%{clip:rect(48px, 9999px, 77px, 0)}40%{clip:rect(83px, 9999px, 3px, 0)}45%{clip:rect(34px, 9999px, 24px, 0)}50%{clip:rect(96px, 9999px, 28px, 0)}55%{clip:rect(74px, 9999px, 55px, 0)}60%{clip:rect(55px, 9999px, 18px, 0)}65%{clip:rect(20px, 9999px, 65px, 0)}70%{clip:rect(8px, 9999px, 34px, 0)}75%{clip:rect(14px, 9999px, 47px, 0)}80%{clip:rect(99px, 9999px, 79px, 0)}85%{clip:rect(18px, 9999px, 6px, 0)}90%{clip:rect(83px, 9999px, 48px, 0)}95%{clip:rect(69px, 9999px, 18px, 0)}100%{clip:rect(99px, 9999px, 45px, 0)}}.error:after{content:attr(data-text);position:absolute;left:2px;text-shadow:-1px 0 #e74a3b;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0, 900px, 0, 0);animation:noise-anim 2s infinite linear alternate-reverse}@keyframes noise-anim-2{0%{clip:rect(66px, 9999px, 11px, 0)}5%{clip:rect(15px, 9999px, 10px, 0)}10%{clip:rect(9px, 9999px, 7px, 0)}15%{clip:rect(89px, 9999px, 84px, 0)}20%{clip:rect(4px, 9999px, 32px, 0)}25%{clip:rect(65px, 9999px, 99px, 0)}30%{clip:rect(35px, 9999px, 46px, 0)}35%{clip:rect(67px, 9999px, 46px, 0)}40%{clip:rect(53px, 9999px, 10px, 0)}45%{clip:rect(5px, 9999px, 93px, 0)}50%{clip:rect(3px, 9999px, 25px, 0)}55%{clip:rect(9px, 9999px, 100px, 0)}60%{clip:rect(84px, 9999px, 95px, 0)}65%{clip:rect(42px, 9999px, 29px, 0)}70%{clip:rect(12px, 9999px, 37px, 0)}75%{clip:rect(53px, 9999px, 76px, 0)}80%{clip:rect(63px, 9999px, 16px, 0)}85%{clip:rect(6px, 9999px, 76px, 0)}90%{clip:rect(7px, 9999px, 32px, 0)}95%{clip:rect(77px, 9999px, 39px, 0)}100%{clip:rect(18px, 9999px, 59px, 0)}}.error:before{content:attr(data-text);position:absolute;left:-2px;text-shadow:1px 0 #4e73df;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0, 900px, 0, 0);animation:noise-anim-2 3s infinite linear alternate-reverse}footer.sticky-footer{padding:2rem 0;flex-shrink:0}footer.sticky-footer .copyright{line-height:1;font-size:0.8rem}body.sidebar-toggled footer.sticky-footer{width:100%}
+ */:root{--blue: #4e73df;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #e74a3b;--orange: #fd7e14;--yellow: #f6c23e;--green: #1cc88a;--teal: #20c9a6;--cyan: #36b9cc;--white: #fff;--gray: #858796;--gray-dark: #5a5c69;--primary: #4e73df;--secondary: #858796;--success: #1cc88a;--info: #36b9cc;--warning: #f6c23e;--danger: #e74a3b;--light: #f8f9fc;--dark: #5a5c69;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#858796;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#4e73df;text-decoration:none;background-color:transparent}a:hover{color:#224abe;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#858796;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:400;line-height:1.2}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#858796}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dddfeb;border-radius:.35rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#858796}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#3a3b45;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#3a3b45}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:.75rem;padding-left:.75rem;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-.75rem;margin-left:-.75rem}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-xl,.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-lg,.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-md,.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-sm,.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col,.col-auto,.col-12,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{position:relative;width:100%;padding-right:.75rem;padding-left:.75rem}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#858796}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #e3e6f0}.table thead th{vertical-align:bottom;border-bottom:2px solid #e3e6f0}.table tbody+tbody{border-top:2px solid #e3e6f0}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #e3e6f0}.table-bordered th,.table-bordered td{border:1px solid #e3e6f0}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{color:#858796;background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#cdd8f6}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#a3b6ee}.table-hover .table-primary:hover{background-color:#b7c7f2}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b7c7f2}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#dddde2}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#c0c1c8}.table-hover .table-secondary:hover{background-color:#cfcfd6}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#cfcfd6}.table-success,.table-success>th,.table-success>td{background-color:#bff0de}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#89e2c2}.table-hover .table-success:hover{background-color:#aaebd3}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aaebd3}.table-info,.table-info>th,.table-info>td{background-color:#c7ebf1}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#96dbe4}.table-hover .table-info:hover{background-color:#b3e4ec}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b3e4ec}.table-warning,.table-warning>th,.table-warning>td{background-color:#fceec9}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#fadf9b}.table-hover .table-warning:hover{background-color:#fbe6b1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbe6b1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f8ccc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#f3a199}.table-hover .table-danger:hover{background-color:#f5b7b1}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f5b7b1}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#fbfcfd}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#d1d1d5}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#a9aab1}.table-hover .table-dark:hover{background-color:#c4c4c9}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#c4c4c9}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#5a5c69;border-color:#6c6e7e}.table .thead-light th{color:#6e707e;background-color:#eaecf4;border-color:#e3e6f0}.table-dark{color:#fff;background-color:#5a5c69}.table-dark th,.table-dark td,.table-dark thead th{border-color:#6c6e7e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;background-clip:padding-box;border:1px solid #d1d3e2;border-radius:.35rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.form-control:focus{color:#6e707e;background-color:#fff;border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.form-control::placeholder{color:#858796;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eaecf4;opacity:1}input.form-control[type="date"],input.form-control[type="time"],input.form-control[type="datetime-local"],input.form-control[type="month"]{appearance:none}select.form-control:focus::-ms-value{color:#6e707e;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#858796;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{color:#858796}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#1cc88a}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(28,200,138,0.9);border-radius:.35rem}.form-row>.col>.valid-tooltip,.form-row>[class*="col-"]>.valid-tooltip{left:5px}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#1cc88a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#1cc88a;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%231cc88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#1cc88a}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#1cc88a}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{border-color:#1cc88a}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{border-color:#34e3a4;background-color:#34e3a4}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before{border-color:#1cc88a}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#1cc88a}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{border-color:#1cc88a;box-shadow:0 0 0 .2rem rgba(28,200,138,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#e74a3b}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(231,74,59,0.9);border-radius:.35rem}.form-row>.col>.invalid-tooltip,.form-row>[class*="col-"]>.invalid-tooltip{left:5px}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#e74a3b;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#e74a3b;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74a3b' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74a3b' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#e74a3b}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#e74a3b}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{border-color:#e74a3b}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{border-color:#ed7468;background-color:#ed7468}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before{border-color:#e74a3b}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#e74a3b}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{border-color:#e74a3b;box-shadow:0 0 0 .2rem rgba(231,74,59,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#858796;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.35rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#858796;text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:hover{color:#fff;background-color:#2e59d9;border-color:#2653d4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#2e59d9;border-color:#2653d4;box-shadow:0 0 0 .2rem rgba(105,136,228,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary.active:not(:disabled):not(.disabled),.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2653d4;border-color:#244ec9}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary.active:not(:disabled):not(.disabled):focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(105,136,228,0.5)}.btn-secondary{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:hover{color:#fff;background-color:#717384;border-color:#6b6d7d}.btn-secondary:focus,.btn-secondary.focus{color:#fff;background-color:#717384;border-color:#6b6d7d;box-shadow:0 0 0 .2rem rgba(151,153,166,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#858796;border-color:#858796}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary.active:not(:disabled):not(.disabled),.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#6b6d7d;border-color:#656776}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary.active:not(:disabled):not(.disabled):focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(151,153,166,0.5)}.btn-success{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:hover{color:#fff;background-color:#17a673;border-color:#169b6b}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#17a673;border-color:#169b6b;box-shadow:0 0 0 .2rem rgba(62,208,156,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-success:not(:disabled):not(.disabled):active,.btn-success.active:not(:disabled):not(.disabled),.show>.btn-success.dropdown-toggle{color:#fff;background-color:#169b6b;border-color:#149063}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success.active:not(:disabled):not(.disabled):focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(62,208,156,0.5)}.btn-info{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:hover{color:#fff;background-color:#2c9faf;border-color:#2a96a5}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#2c9faf;border-color:#2a96a5;box-shadow:0 0 0 .2rem rgba(84,196,212,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-info:not(:disabled):not(.disabled):active,.btn-info.active:not(:disabled):not(.disabled),.show>.btn-info.dropdown-toggle{color:#fff;background-color:#2a96a5;border-color:#278c9b}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info.active:not(:disabled):not(.disabled):focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,196,212,0.5)}.btn-warning{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:hover{color:#fff;background-color:#f4b619;border-color:#f4b30d}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#f4b619;border-color:#f4b30d;box-shadow:0 0 0 .2rem rgba(247,203,91,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning.active:not(:disabled):not(.disabled),.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#f4b30d;border-color:#e9aa0b}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning.active:not(:disabled):not(.disabled):focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,203,91,0.5)}.btn-danger{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:hover{color:#fff;background-color:#e02d1b;border-color:#d52a1a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#e02d1b;border-color:#d52a1a;box-shadow:0 0 0 .2rem rgba(235,101,88,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger.active:not(:disabled):not(.disabled),.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#d52a1a;border-color:#ca2819}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger.active:not(:disabled):not(.disabled):focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(235,101,88,0.5)}.btn-light{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:hover{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed}.btn-light:focus,.btn-light.focus{color:#3a3b45;background-color:#dde2f1;border-color:#d4daed;box-shadow:0 0 0 .2rem rgba(220,221,225,0.5)}.btn-light.disabled,.btn-light:disabled{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-light:not(:disabled):not(.disabled):active,.btn-light.active:not(:disabled):not(.disabled),.show>.btn-light.dropdown-toggle{color:#3a3b45;background-color:#d4daed;border-color:#cbd3e9}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light.active:not(:disabled):not(.disabled):focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,221,225,0.5)}.btn-dark{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:hover{color:#fff;background-color:#484a54;border-color:#42444e}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#484a54;border-color:#42444e;box-shadow:0 0 0 .2rem rgba(115,116,128,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark.active:not(:disabled):not(.disabled),.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#42444e;border-color:#3d3e47}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark.active:not(:disabled):not(.disabled):focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(115,116,128,0.5)}.btn-outline-primary{color:#4e73df;border-color:#4e73df}.btn-outline-primary:hover{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#4e73df;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary.active:not(:disabled):not(.disabled),.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#4e73df;border-color:#4e73df}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.btn-outline-secondary{color:#858796;border-color:#858796}.btn-outline-secondary:hover{color:#fff;background-color:#858796;border-color:#858796}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#858796;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary.active:not(:disabled):not(.disabled),.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#858796;border-color:#858796}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.btn-outline-success{color:#1cc88a;border-color:#1cc88a}.btn-outline-success:hover{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1cc88a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success.active:not(:disabled):not(.disabled),.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#1cc88a;border-color:#1cc88a}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.btn-outline-info{color:#36b9cc;border-color:#36b9cc}.btn-outline-info:hover{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#36b9cc;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info.active:not(:disabled):not(.disabled),.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#36b9cc;border-color:#36b9cc}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.btn-outline-warning{color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:hover{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f6c23e;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning.active:not(:disabled):not(.disabled),.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f6c23e;border-color:#f6c23e}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.btn-outline-danger{color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:hover{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e74a3b;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger.active:not(:disabled):not(.disabled),.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#e74a3b;border-color:#e74a3b}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.btn-outline-light{color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:hover{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fc;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light.active:not(:disabled):not(.disabled),.show>.btn-outline-light.dropdown-toggle{color:#3a3b45;background-color:#f8f9fc;border-color:#f8f9fc}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.btn-outline-dark{color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:hover{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#5a5c69;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark.active:not(:disabled):not(.disabled),.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#5a5c69;border-color:#5a5c69}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark.active:not(:disabled):not(.disabled):focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.btn-link{font-weight:400;color:#4e73df;text-decoration:none}.btn-link:hover{color:#224abe;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#858796;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input.btn-block[type="submit"],input.btn-block[type="reset"],input.btn-block[type="button"]{width:100%}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.15s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.85rem;color:#858796;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #e3e6f0;border-radius:.35rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #eaecf4}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#3a3b45;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#2e2f37;text-decoration:none;background-color:#f8f9fc}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4e73df}.dropdown-item.disabled,.dropdown-item:disabled{color:#858796;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#858796;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#3a3b45}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.form-control:not(:last-child),.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.form-control:nth-last-child(n + 3),.input-group.has-validation>.custom-select:nth-last-child(n + 3),.input-group.has-validation>.custom-file:nth-last-child(n + 3) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;text-align:center;white-space:nowrap;background-color:#eaecf4;border:1px solid #d1d3e2;border-radius:.35rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + .5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group.has-validation>.input-group-append:nth-last-child(n + 3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n + 3)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#4e73df;background-color:#4e73df}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#bac8f3}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#e5ebfa;border-color:#e5ebfa}.custom-control-input[disabled]~.custom-control-label,.custom-control-input:disabled~.custom-control-label{color:#858796}.custom-control-input[disabled]~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before{background-color:#eaecf4}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#b7b9cc solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50% / 50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.35rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#4e73df;background-color:#4e73df}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#b7b9cc;border-radius:.5rem;transition:transform 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(78,115,223,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#6e707e;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%235a5c69' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #d1d3e2;border-radius:.35rem;appearance:none}.custom-select:focus{border-color:#bac8f3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-select:focus::-ms-value{color:#6e707e;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#858796;background-color:#eaecf4}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #6e707e}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#bac8f3;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.custom-file-input[disabled]~.custom-file-label,.custom-file-input:disabled~.custom-file-label{background-color:#eaecf4}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#6e707e;background-color:#fff;border:1px solid #d1d3e2;border-radius:.35rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#6e707e;content:"Browse";background-color:#eaecf4;border-left:inherit;border-radius:0 .35rem .35rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(78,115,223,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#e5ebfa}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#e5ebfa}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dddfeb;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#4e73df;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#e5ebfa}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dddfeb;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dddfeb;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#b7b9cc}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#b7b9cc}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#b7b9cc}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#858796;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dddfeb}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.35rem;border-top-right-radius:.35rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#eaecf4 #eaecf4 #dddfeb}.nav-tabs .nav-link.disabled{color:#858796;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#6e707e;background-color:#fff;border-color:#dddfeb #dddfeb #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.35rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4e73df}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.35rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50% / 100% 100% no-repeat}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #e3e6f0;border-radius:.35rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid #e3e6f0}.card-header:first-child{border-radius:calc(.35rem - 1px) calc(.35rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid #e3e6f0}.card-footer:last-child{border-radius:0 0 calc(.35rem - 1px) calc(.35rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.35rem - 1px)}.card-img,.card-img-top,.card-img-bottom{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.35rem - 1px);border-top-right-radius:calc(.35rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.35rem - 1px);border-bottom-left-radius:calc(.35rem - 1px)}.card-deck .card{margin-bottom:.75rem}@media (min-width: 576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-.75rem;margin-left:-.75rem}.card-deck .card{flex:1 0 0%;margin-right:.75rem;margin-bottom:0;margin-left:.75rem}}.card-group>.card{margin-bottom:.75rem}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eaecf4;border-radius:.35rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#858796;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#858796}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.35rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#4e73df;background-color:#fff;border:1px solid #dddfeb}.page-link:hover{z-index:2;color:#224abe;text-decoration:none;background-color:#eaecf4;border-color:#dddfeb}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.35rem;border-bottom-left-radius:.35rem}.page-item:last-child .page-link{border-top-right-radius:.35rem;border-bottom-right-radius:.35rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#4e73df;border-color:#4e73df}.page-item.disabled .page-link{color:#858796;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dddfeb}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.35rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#4e73df}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#2653d4}a.badge-primary:focus,a.badge-primary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,115,223,0.5)}.badge-secondary{color:#fff;background-color:#858796}a.badge-secondary:hover,a.badge-secondary:focus{color:#fff;background-color:#6b6d7d}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;box-shadow:0 0 0 .2rem rgba(133,135,150,0.5)}.badge-success{color:#fff;background-color:#1cc88a}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#169b6b}a.badge-success:focus,a.badge-success.focus{outline:0;box-shadow:0 0 0 .2rem rgba(28,200,138,0.5)}.badge-info{color:#fff;background-color:#36b9cc}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#2a96a5}a.badge-info:focus,a.badge-info.focus{outline:0;box-shadow:0 0 0 .2rem rgba(54,185,204,0.5)}.badge-warning{color:#fff;background-color:#f6c23e}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#f4b30d}a.badge-warning:focus,a.badge-warning.focus{outline:0;box-shadow:0 0 0 .2rem rgba(246,194,62,0.5)}.badge-danger{color:#fff;background-color:#e74a3b}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#d52a1a}a.badge-danger:focus,a.badge-danger.focus{outline:0;box-shadow:0 0 0 .2rem rgba(231,74,59,0.5)}.badge-light{color:#3a3b45;background-color:#f8f9fc}a.badge-light:hover,a.badge-light:focus{color:#3a3b45;background-color:#d4daed}a.badge-light:focus,a.badge-light.focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,252,0.5)}.badge-dark{color:#fff;background-color:#5a5c69}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#42444e}a.badge-dark:focus,a.badge-dark.focus{outline:0;box-shadow:0 0 0 .2rem rgba(90,92,105,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eaecf4;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.35rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#293c74;background-color:#dce3f9;border-color:#cdd8f6}.alert-primary hr{border-top-color:#b7c7f2}.alert-primary .alert-link{color:#1c294e}.alert-secondary{color:#45464e;background-color:#e7e7ea;border-color:#dddde2}.alert-secondary hr{border-top-color:#cfcfd6}.alert-secondary .alert-link{color:#2d2e33}.alert-success{color:#0f6848;background-color:#d2f4e8;border-color:#bff0de}.alert-success hr{border-top-color:#aaebd3}.alert-success .alert-link{color:#093b29}.alert-info{color:#1c606a;background-color:#d7f1f5;border-color:#c7ebf1}.alert-info hr{border-top-color:#b3e4ec}.alert-info .alert-link{color:#113b42}.alert-warning{color:#806520;background-color:#fdf3d8;border-color:#fceec9}.alert-warning hr{border-top-color:#fbe6b1}.alert-warning .alert-link{color:#574516}.alert-danger{color:#78261f;background-color:#fadbd8;border-color:#f8ccc8}.alert-danger hr{border-top-color:#f5b7b1}.alert-danger .alert-link{color:#4f1915}.alert-light{color:#818183;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686869}.alert-dark{color:#2f3037;background-color:#dedee1;border-color:#d1d1d5}.alert-dark hr{border-top-color:#c4c4c9}.alert-dark .alert-link{color:#18181c}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#eaecf4;border-radius:.35rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#4e73df;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.35rem}.list-group-item-action{width:100%;color:#6e707e;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#6e707e;text-decoration:none;background-color:#f8f9fc}.list-group-item-action:active{color:#858796;background-color:#eaecf4}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#858796;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4e73df;border-color:#4e73df}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.35rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.35rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#293c74;background-color:#cdd8f6}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#293c74;background-color:#b7c7f2}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#293c74;border-color:#293c74}.list-group-item-secondary{color:#45464e;background-color:#dddde2}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#45464e;background-color:#cfcfd6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#45464e;border-color:#45464e}.list-group-item-success{color:#0f6848;background-color:#bff0de}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f6848;background-color:#aaebd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f6848;border-color:#0f6848}.list-group-item-info{color:#1c606a;background-color:#c7ebf1}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#1c606a;background-color:#b3e4ec}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#1c606a;border-color:#1c606a}.list-group-item-warning{color:#806520;background-color:#fceec9}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#806520;background-color:#fbe6b1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#806520;border-color:#806520}.list-group-item-danger{color:#78261f;background-color:#f8ccc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#78261f;background-color:#f5b7b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#78261f;border-color:#78261f}.list-group-item-light{color:#818183;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818183;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818183;border-color:#818183}.list-group-item-dark{color:#2f3037;background-color:#d1d1d5}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#2f3037;background-color:#c4c4c9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#2f3037;border-color:#2f3037}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#858796;background-color:rgba(255,255,255,0.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #e3e6f0;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #e3e6f0;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.35rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Nunito",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc(-.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#858796}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:50% / 100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#4e73df !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#2653d4 !important}.bg-secondary{background-color:#858796 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#6b6d7d !important}.bg-success{background-color:#1cc88a !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#169b6b !important}.bg-info{background-color:#36b9cc !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#2a96a5 !important}.bg-warning{background-color:#f6c23e !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#f4b30d !important}.bg-danger{background-color:#e74a3b !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#d52a1a !important}.bg-light{background-color:#f8f9fc !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#d4daed !important}.bg-dark{background-color:#5a5c69 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#42444e !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #e3e6f0 !important}.border-top{border-top:1px solid #e3e6f0 !important}.border-right{border-right:1px solid #e3e6f0 !important}.border-bottom{border-bottom:1px solid #e3e6f0 !important}.border-left{border-left:1px solid #e3e6f0 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#4e73df !important}.border-secondary{border-color:#858796 !important}.border-success{border-color:#1cc88a !important}.border-info{border-color:#36b9cc !important}.border-warning{border-color:#f6c23e !important}.border-danger{border-color:#e74a3b !important}.border-light{border-color:#f8f9fc !important}.border-dark{border-color:#5a5c69 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded{border-radius:.35rem !important}.rounded-top{border-top-left-radius:.35rem !important;border-top-right-radius:.35rem !important}.rounded-right{border-top-right-radius:.35rem !important;border-bottom-right-radius:.35rem !important}.rounded-bottom{border-bottom-right-radius:.35rem !important;border-bottom-left-radius:.35rem !important}.rounded-left{border-top-left-radius:.35rem !important;border-bottom-left-radius:.35rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 0.125rem 0.25rem 0 rgba(58,59,69,0.2) !important}.shadow{box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-.25rem !important}.mt-n1,.my-n1{margin-top:-.25rem !important}.mr-n1,.mx-n1{margin-right:-.25rem !important}.mb-n1,.my-n1{margin-bottom:-.25rem !important}.ml-n1,.mx-n1{margin-left:-.25rem !important}.m-n2{margin:-.5rem !important}.mt-n2,.my-n2{margin-top:-.5rem !important}.mr-n2,.mx-n2{margin-right:-.5rem !important}.mb-n2,.my-n2{margin-bottom:-.5rem !important}.ml-n2,.mx-n2{margin-left:-.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem !important}.m-sm-n2{margin:-.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem !important}.m-md-n2{margin:-.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem !important}.m-lg-n2{margin:-.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem !important}.m-xl-n2{margin:-.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase,.sidebar .sidebar-heading,.dropdown .dropdown-menu .dropdown-header{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#4e73df !important}a.text-primary:hover,a.text-primary:focus{color:#224abe !important}.text-secondary{color:#858796 !important}a.text-secondary:hover,a.text-secondary:focus{color:#60616f !important}.text-success{color:#1cc88a !important}a.text-success:hover,a.text-success:focus{color:#13855c !important}.text-info{color:#36b9cc !important}a.text-info:hover,a.text-info:focus{color:#258391 !important}.text-warning{color:#f6c23e !important}a.text-warning:hover,a.text-warning:focus{color:#dda20a !important}.text-danger{color:#e74a3b !important}a.text-danger:hover,a.text-danger:focus{color:#be2617 !important}.text-light{color:#f8f9fc !important}a.text-light:hover,a.text-light:focus{color:#c2cbe5 !important}.text-dark{color:#5a5c69 !important}a.text-dark:hover,a.text-dark:focus{color:#373840 !important}.text-body{color:#858796 !important}.text-muted{color:#858796 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;word-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #b7b9cc;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dddfeb !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#e3e6f0}.table .thead-dark th{color:inherit;border-color:#e3e6f0}}html{position:relative;min-height:100%}body{height:100%}a:focus{outline:none}#wrapper{display:flex}#wrapper #content-wrapper{background-color:#f8f9fc;width:100%;overflow-x:hidden}#wrapper #content-wrapper #content{flex:1 0 auto}.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{padding-left:1.5rem;padding-right:1.5rem}.scroll-to-top{position:fixed;right:1rem;bottom:1rem;display:none;width:2.75rem;height:2.75rem;text-align:center;color:#fff;background:rgba(90,92,105,0.5);line-height:46px}.scroll-to-top:focus,.scroll-to-top:hover{color:white}.scroll-to-top:hover{background:#5a5c69}.scroll-to-top i{font-weight:800}@keyframes growIn{0%{transform:scale(0.9);opacity:0}100%{transform:scale(1);opacity:1}}.animated--grow-in,.sidebar .nav-item .collapse{animation-name:growIn;animation-duration:200ms;animation-timing-function:transform cubic-bezier(0.18, 1.25, 0.4, 1),opacity cubic-bezier(0, 1, 0.4, 1)}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.animated--fade-in{animation-name:fadeIn;animation-duration:200ms;animation-timing-function:opacity cubic-bezier(0, 1, 0.4, 1)}.bg-gradient-primary{background-color:#4e73df;background-image:linear-gradient(180deg, #4e73df 10%, #224abe 100%);background-size:cover}.bg-gradient-secondary{background-color:#858796;background-image:linear-gradient(180deg, #858796 10%, #60616f 100%);background-size:cover}.bg-gradient-success{background-color:#1cc88a;background-image:linear-gradient(180deg, #1cc88a 10%, #13855c 100%);background-size:cover}.bg-gradient-info{background-color:#36b9cc;background-image:linear-gradient(180deg, #36b9cc 10%, #258391 100%);background-size:cover}.bg-gradient-warning{background-color:#f6c23e;background-image:linear-gradient(180deg, #f6c23e 10%, #dda20a 100%);background-size:cover}.bg-gradient-danger{background-color:#e74a3b;background-image:linear-gradient(180deg, #e74a3b 10%, #be2617 100%);background-size:cover}.bg-gradient-light{background-color:#f8f9fc;background-image:linear-gradient(180deg, #f8f9fc 10%, #c2cbe5 100%);background-size:cover}.bg-gradient-dark{background-color:#5a5c69;background-image:linear-gradient(180deg, #5a5c69 10%, #373840 100%);background-size:cover}.bg-gray-100{background-color:#f8f9fc !important}.bg-gray-200{background-color:#eaecf4 !important}.bg-gray-300{background-color:#dddfeb !important}.bg-gray-400{background-color:#d1d3e2 !important}.bg-gray-500{background-color:#b7b9cc !important}.bg-gray-600{background-color:#858796 !important}.bg-gray-700{background-color:#6e707e !important}.bg-gray-800{background-color:#5a5c69 !important}.bg-gray-900{background-color:#3a3b45 !important}.o-hidden{overflow:hidden !important}.text-xs{font-size:.7rem}.text-lg{font-size:1.2rem}.text-gray-100{color:#f8f9fc !important}.text-gray-200{color:#eaecf4 !important}.text-gray-300{color:#dddfeb !important}.text-gray-400{color:#d1d3e2 !important}.text-gray-500{color:#b7b9cc !important}.text-gray-600{color:#858796 !important}.text-gray-700{color:#6e707e !important}.text-gray-800{color:#5a5c69 !important}.text-gray-900{color:#3a3b45 !important}.icon-circle{height:2.5rem;width:2.5rem;border-radius:100%;display:flex;align-items:center;justify-content:center}.border-left-primary{border-left:0.25rem solid #4e73df !important}.border-bottom-primary{border-bottom:0.25rem solid #4e73df !important}.border-left-secondary{border-left:0.25rem solid #858796 !important}.border-bottom-secondary{border-bottom:0.25rem solid #858796 !important}.border-left-success{border-left:0.25rem solid #1cc88a !important}.border-bottom-success{border-bottom:0.25rem solid #1cc88a !important}.border-left-info{border-left:0.25rem solid #36b9cc !important}.border-bottom-info{border-bottom:0.25rem solid #36b9cc !important}.border-left-warning{border-left:0.25rem solid #f6c23e !important}.border-bottom-warning{border-bottom:0.25rem solid #f6c23e !important}.border-left-danger{border-left:0.25rem solid #e74a3b !important}.border-bottom-danger{border-bottom:0.25rem solid #e74a3b !important}.border-left-light{border-left:0.25rem solid #f8f9fc !important}.border-bottom-light{border-bottom:0.25rem solid #f8f9fc !important}.border-left-dark{border-left:0.25rem solid #5a5c69 !important}.border-bottom-dark{border-bottom:0.25rem solid #5a5c69 !important}.progress-sm{height:.5rem}.rotate-15{transform:rotate(15deg)}.rotate-n-15{transform:rotate(-15deg)}.dropdown .dropdown-menu{font-size:.85rem}.dropdown .dropdown-menu .dropdown-header{font-weight:800;font-size:0.65rem;color:#b7b9cc}.dropdown.no-arrow .dropdown-toggle::after{display:none}.sidebar .nav-item.dropdown .dropdown-toggle::after,.topbar .nav-item.dropdown .dropdown-toggle::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f105';font-family:'Font Awesome 5 Free'}.sidebar .nav-item.dropdown.show .dropdown-toggle::after,.topbar .nav-item.dropdown.show .dropdown-toggle::after{content:'\f107'}.sidebar .nav-item .nav-link,.topbar .nav-item .nav-link{position:relative}.sidebar .nav-item .nav-link .badge-counter,.topbar .nav-item .nav-link .badge-counter{position:absolute;transform:scale(0.7);transform-origin:top right;right:.25rem;margin-top:-.25rem}.sidebar .nav-item .nav-link .img-profile,.topbar .nav-item .nav-link .img-profile{height:2rem;width:2rem}.topbar{height:4.375rem}.topbar #sidebarToggleTop{height:2.5rem;width:2.5rem}.topbar #sidebarToggleTop:hover{background-color:#eaecf4}.topbar #sidebarToggleTop:active{background-color:#dddfeb}.topbar .navbar-search{width:25rem}.topbar .navbar-search input{font-size:0.85rem;height:auto}.topbar .topbar-divider{width:0;border-right:1px solid #e3e6f0;height:calc(4.375rem - 2rem);margin:auto 1rem}.topbar .nav-item .nav-link{height:4.375rem;display:flex;align-items:center;padding:0 0.75rem}.topbar .nav-item .nav-link:focus{outline:none}.topbar .nav-item:focus{outline:none}.topbar .dropdown{position:static}.topbar .dropdown .dropdown-menu{width:calc(100% - 1.5rem);right:.75rem}.topbar .dropdown-list{padding:0;border:none;overflow:hidden}.topbar .dropdown-list .dropdown-header{background-color:#4e73df;border:1px solid #4e73df;padding-top:0.75rem;padding-bottom:0.75rem;color:#fff}.topbar .dropdown-list .dropdown-item{white-space:normal;padding-top:0.5rem;padding-bottom:0.5rem;border-left:1px solid #e3e6f0;border-right:1px solid #e3e6f0;border-bottom:1px solid #e3e6f0;line-height:1.3rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image{position:relative;height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image img{height:2.5rem;width:2.5rem}.topbar .dropdown-list .dropdown-item .dropdown-list-image .status-indicator{background-color:#eaecf4;height:0.75rem;width:0.75rem;border-radius:100%;position:absolute;bottom:0;right:0;border:0.125rem solid #fff}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:10rem}.topbar .dropdown-list .dropdown-item:active{background-color:#eaecf4;color:#3a3b45}@media (min-width: 576px){.topbar .dropdown{position:relative}.topbar .dropdown .dropdown-menu{width:auto;right:0}.topbar .dropdown-list{width:20rem !important}.topbar .dropdown-list .dropdown-item .text-truncate{max-width:13.375rem}}.topbar.navbar-dark .navbar-nav .nav-item .nav-link{color:rgba(255,255,255,0.8)}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:hover{color:#fff}.topbar.navbar-dark .navbar-nav .nav-item .nav-link:active{color:#fff}.topbar.navbar-light .navbar-nav .nav-item .nav-link{color:#d1d3e2}.topbar.navbar-light .navbar-nav .nav-item .nav-link:hover{color:#b7b9cc}.topbar.navbar-light .navbar-nav .nav-item .nav-link:active{color:#858796}.sidebar{width:6.5rem;min-height:100vh}.sidebar .nav-item{position:relative}.sidebar .nav-item:last-child{margin-bottom:1rem}.sidebar .nav-item .nav-link{text-align:center;padding:0.75rem 1rem;width:6.5rem}.sidebar .nav-item .nav-link span{font-size:0.65rem;display:block}.sidebar .nav-item.active .nav-link{font-weight:700}.sidebar .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px}.sidebar .nav-item .collapse .collapse-inner{border-radius:.35rem;box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15)}.sidebar .nav-item .collapsing{display:none;transition:none}.sidebar .nav-item .collapse .collapse-inner,.sidebar .nav-item .collapsing .collapse-inner{padding:.5rem 0;min-width:10rem;font-size:.85rem;margin:0 0 1rem 0}.sidebar .nav-item .collapse .collapse-inner .collapse-header,.sidebar .nav-item .collapsing .collapse-inner .collapse-header{margin:0;white-space:nowrap;padding:.5rem 1.5rem;text-transform:uppercase;font-weight:800;font-size:0.65rem;color:#b7b9cc}.sidebar .nav-item .collapse .collapse-inner .collapse-item,.sidebar .nav-item .collapsing .collapse-inner .collapse-item{padding:0.5rem 1rem;margin:0 0.5rem;display:block;color:#3a3b45;text-decoration:none;border-radius:.35rem;white-space:nowrap}.sidebar .nav-item .collapse .collapse-inner .collapse-item:hover,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:hover{background-color:#eaecf4}.sidebar .nav-item .collapse .collapse-inner .collapse-item:active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item:active{background-color:#dddfeb}.sidebar .nav-item .collapse .collapse-inner .collapse-item.active,.sidebar .nav-item .collapsing .collapse-inner .collapse-item.active{color:#4e73df;font-weight:700}.sidebar #sidebarToggle{width:2.5rem;height:2.5rem;text-align:center;margin-bottom:1rem;cursor:pointer}.sidebar #sidebarToggle::after{font-weight:900;content:'\f104';font-family:'Font Awesome 5 Free';margin-right:0.1rem}.sidebar #sidebarToggle:hover{text-decoration:none}.sidebar #sidebarToggle:focus{outline:none}.sidebar.toggled{width:0 !important;overflow:hidden}.sidebar.toggled #sidebarToggle::after{content:'\f105';font-family:'Font Awesome 5 Free';margin-left:0.25rem}.sidebar.toggled .sidebar-card{display:none}.sidebar .sidebar-brand{height:4.375rem;text-decoration:none;font-size:1rem;font-weight:800;padding:1.5rem 1rem;text-align:center;text-transform:uppercase;letter-spacing:0.05rem;z-index:1}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:none}.sidebar hr.sidebar-divider{margin:0 1rem 1rem}.sidebar .sidebar-heading{text-align:center;padding:0 1rem;font-weight:800;font-size:0.65rem}.sidebar .sidebar-card{display:flex;flex-direction:column;align-items:center;font-size:.875rem;border-radius:.35rem;color:rgba(255,255,255,0.8);margin-left:1rem;margin-right:1rem;margin-bottom:1rem;padding:1rem;background-color:rgba(0,0,0,0.1)}.sidebar .sidebar-card .sidebar-card-illustration{height:3rem;display:block}.sidebar .sidebar-card .sidebar-card-title{font-weight:bold}.sidebar .sidebar-card p{font-size:0.75rem;color:rgba(255,255,255,0.5)}@media (min-width: 768px){.sidebar{width:14rem !important}.sidebar .nav-item .collapse{position:relative;left:0;z-index:1;top:0;animation:none}.sidebar .nav-item .collapse .collapse-inner{border-radius:0;box-shadow:none}.sidebar .nav-item .collapsing{display:block;transition:height 0.15s ease}.sidebar .nav-item .collapse,.sidebar .nav-item .collapsing{margin:0 1rem}.sidebar .nav-item .nav-link{display:block;width:100%;text-align:left;padding:1rem;width:14rem}.sidebar .nav-item .nav-link i{font-size:0.85rem;margin-right:0.25rem}.sidebar .nav-item .nav-link span{font-size:0.85rem;display:inline}.sidebar .nav-item .nav-link[data-toggle="collapse"]::after{width:1rem;text-align:center;float:right;vertical-align:0;border:0;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free'}.sidebar .nav-item .nav-link.collapsed[data-toggle="collapse"]::after{content:'\f105'}.sidebar .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar .sidebar-brand .sidebar-brand-text{display:inline}.sidebar .sidebar-heading{text-align:left}.sidebar.toggled{overflow:visible;width:6.5rem !important}.sidebar.toggled .nav-item .collapse{position:absolute;left:calc(6.5rem + 1.5rem / 2);z-index:1;top:2px;animation-name:growIn;animation-duration:200ms;animation-timing-function:transform cubic-bezier(0.18, 1.25, 0.4, 1), opacity cubic-bezier(0, 1, 0.4, 1)}.sidebar.toggled .nav-item .collapse .collapse-inner{box-shadow:0 0.15rem 1.75rem 0 rgba(58,59,69,0.15);border-radius:.35rem}.sidebar.toggled .nav-item .collapsing{display:none;transition:none}.sidebar.toggled .nav-item .collapse,.sidebar.toggled .nav-item .collapsing{margin:0}.sidebar.toggled .nav-item:last-child{margin-bottom:1rem}.sidebar.toggled .nav-item .nav-link{text-align:center;padding:0.75rem 1rem;width:6.5rem}.sidebar.toggled .nav-item .nav-link span{font-size:0.65rem;display:block}.sidebar.toggled .nav-item .nav-link i{margin-right:0}.sidebar.toggled .nav-item .nav-link[data-toggle="collapse"]::after{display:none}.sidebar.toggled .sidebar-brand .sidebar-brand-icon i{font-size:2rem}.sidebar.toggled .sidebar-brand .sidebar-brand-text{display:none}.sidebar.toggled .sidebar-heading{text-align:center}}.sidebar-light .sidebar-brand{color:#6e707e}.sidebar-light hr.sidebar-divider{border-top:1px solid #eaecf4}.sidebar-light .sidebar-heading{color:#b7b9cc}.sidebar-light .nav-item .nav-link{color:#858796}.sidebar-light .nav-item .nav-link i{color:#d1d3e2}.sidebar-light .nav-item .nav-link:active,.sidebar-light .nav-item .nav-link:focus,.sidebar-light .nav-item .nav-link:hover{color:#6e707e}.sidebar-light .nav-item .nav-link:active i,.sidebar-light .nav-item .nav-link:focus i,.sidebar-light .nav-item .nav-link:hover i{color:#6e707e}.sidebar-light .nav-item .nav-link[data-toggle="collapse"]::after{color:#b7b9cc}.sidebar-light .nav-item.active .nav-link{color:#6e707e}.sidebar-light .nav-item.active .nav-link i{color:#6e707e}.sidebar-light #sidebarToggle{background-color:#eaecf4}.sidebar-light #sidebarToggle::after{color:#b7b9cc}.sidebar-light #sidebarToggle:hover{background-color:#dddfeb}.sidebar-dark .sidebar-brand{color:#fff}.sidebar-dark hr.sidebar-divider{border-top:1px solid rgba(255,255,255,0.15)}.sidebar-dark .sidebar-heading{color:rgba(255,255,255,0.4)}.sidebar-dark .nav-item .nav-link{color:rgba(255,255,255,0.8)}.sidebar-dark .nav-item .nav-link i{color:rgba(255,255,255,0.3)}.sidebar-dark .nav-item .nav-link:active,.sidebar-dark .nav-item .nav-link:focus,.sidebar-dark .nav-item .nav-link:hover{color:#fff}.sidebar-dark .nav-item .nav-link:active i,.sidebar-dark .nav-item .nav-link:focus i,.sidebar-dark .nav-item .nav-link:hover i{color:#fff}.sidebar-dark .nav-item .nav-link[data-toggle="collapse"]::after{color:rgba(255,255,255,0.5)}.sidebar-dark .nav-item.active .nav-link{color:#fff}.sidebar-dark .nav-item.active .nav-link i{color:#fff}.sidebar-dark #sidebarToggle{background-color:rgba(255,255,255,0.2)}.sidebar-dark #sidebarToggle::after{color:rgba(255,255,255,0.5)}.sidebar-dark #sidebarToggle:hover{background-color:rgba(255,255,255,0.25)}.sidebar-dark.toggled #sidebarToggle::after{color:rgba(255,255,255,0.5)}.btn-circle{border-radius:100%;height:2.5rem;width:2.5rem;font-size:1rem;display:inline-flex;align-items:center;justify-content:center}.btn-circle.btn-sm,.btn-group-sm>.btn-circle.btn{height:1.8rem;width:1.8rem;font-size:0.75rem}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn{height:3.5rem;width:3.5rem;font-size:1.35rem}.btn-icon-split{padding:0;overflow:hidden;display:inline-flex;align-items:stretch;justify-content:center}.btn-icon-split .icon{background:rgba(0,0,0,0.15);display:inline-block;padding:.375rem .75rem}.btn-icon-split .text{display:inline-block;padding:.375rem .75rem}.btn-icon-split.btn-sm .icon,.btn-group-sm>.btn-icon-split.btn .icon{padding:.25rem .5rem}.btn-icon-split.btn-sm .text,.btn-group-sm>.btn-icon-split.btn .text{padding:.25rem .5rem}.btn-icon-split.btn-lg .icon,.btn-group-lg>.btn-icon-split.btn .icon{padding:.5rem 1rem}.btn-icon-split.btn-lg .text,.btn-group-lg>.btn-icon-split.btn .text{padding:.5rem 1rem}.card .card-header .dropdown{line-height:1}.card .card-header .dropdown .dropdown-menu{line-height:1.5}.card .card-header[data-toggle="collapse"]{text-decoration:none;position:relative;padding:0.75rem 3.25rem 0.75rem 1.25rem}.card .card-header[data-toggle="collapse"]::after{position:absolute;right:0;top:0;padding-right:1.725rem;line-height:51px;font-weight:900;content:'\f107';font-family:'Font Awesome 5 Free';color:#d1d3e2}.card .card-header.collapsed[data-toggle="collapse"]{border-radius:.35rem}.card .card-header.collapsed[data-toggle="collapse"]::after{content:'\f105'}.chart-area{position:relative;height:10rem;width:100%}@media (min-width: 768px){.chart-area{height:20rem}}.chart-bar{position:relative;height:10rem;width:100%}@media (min-width: 768px){.chart-bar{height:20rem}}.chart-pie{position:relative;height:15rem;width:100%}@media (min-width: 768px){.chart-pie{height:calc(20rem - 43px) !important}}.bg-login-image{background:url("https://source.unsplash.com/K4mSJ7kc0As/600x800");background-position:center;background-size:cover}.bg-register-image{background:url("https://source.unsplash.com/Mv9hjnEUHR4/600x800");background-position:center;background-size:cover}.bg-password-image{background:url("https://source.unsplash.com/oWTW-jNGl9I/600x800");background-position:center;background-size:cover}form.user .custom-checkbox.small label{line-height:1.5rem}form.user .form-control-user{font-size:0.8rem;border-radius:10rem;padding:1.5rem 1rem}form.user .btn-user{font-size:0.8rem;border-radius:10rem;padding:0.75rem 1rem}.btn-google{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:hover{color:#fff;background-color:#e12717;border-color:#e6e6e6}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#e12717;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-google.disabled,.btn-google:disabled{color:#fff;background-color:#ea4335;border-color:#fff}.btn-google:not(:disabled):not(.disabled):active,.btn-google.active:not(:disabled):not(.disabled),.show>.btn-google.dropdown-toggle{color:#fff;background-color:#d62516;border-color:#dfdfdf}.btn-google:not(:disabled):not(.disabled):active:focus,.btn-google.active:not(:disabled):not(.disabled):focus,.show>.btn-google.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-facebook{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:hover{color:#fff;background-color:#30497c;border-color:#e6e6e6}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#30497c;border-color:#e6e6e6;box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.btn-facebook.disabled,.btn-facebook:disabled{color:#fff;background-color:#3b5998;border-color:#fff}.btn-facebook:not(:disabled):not(.disabled):active,.btn-facebook.active:not(:disabled):not(.disabled),.show>.btn-facebook.dropdown-toggle{color:#fff;background-color:#2d4373;border-color:#dfdfdf}.btn-facebook:not(:disabled):not(.disabled):active:focus,.btn-facebook.active:not(:disabled):not(.disabled):focus,.show>.btn-facebook.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,255,255,0.5)}.error{color:#5a5c69;font-size:7rem;position:relative;line-height:1;width:12.5rem}@keyframes noise-anim{0%{clip:rect(4px, 9999px, 12px, 0)}5%{clip:rect(42px, 9999px, 32px, 0)}10%{clip:rect(18px, 9999px, 87px, 0)}15%{clip:rect(31px, 9999px, 38px, 0)}20%{clip:rect(31px, 9999px, 11px, 0)}25%{clip:rect(44px, 9999px, 48px, 0)}30%{clip:rect(62px, 9999px, 32px, 0)}35%{clip:rect(17px, 9999px, 67px, 0)}40%{clip:rect(12px, 9999px, 40px, 0)}45%{clip:rect(32px, 9999px, 87px, 0)}50%{clip:rect(56px, 9999px, 75px, 0)}55%{clip:rect(31px, 9999px, 80px, 0)}60%{clip:rect(62px, 9999px, 44px, 0)}65%{clip:rect(93px, 9999px, 40px, 0)}70%{clip:rect(81px, 9999px, 47px, 0)}75%{clip:rect(97px, 9999px, 16px, 0)}80%{clip:rect(38px, 9999px, 90px, 0)}85%{clip:rect(41px, 9999px, 6px, 0)}90%{clip:rect(63px, 9999px, 97px, 0)}95%{clip:rect(9px, 9999px, 26px, 0)}100%{clip:rect(17px, 9999px, 47px, 0)}}.error:after{content:attr(data-text);position:absolute;left:2px;text-shadow:-1px 0 #e74a3b;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0, 900px, 0, 0);animation:noise-anim 2s infinite linear alternate-reverse}@keyframes noise-anim-2{0%{clip:rect(7px, 9999px, 9px, 0)}5%{clip:rect(8px, 9999px, 13px, 0)}10%{clip:rect(58px, 9999px, 6px, 0)}15%{clip:rect(81px, 9999px, 4px, 0)}20%{clip:rect(40px, 9999px, 84px, 0)}25%{clip:rect(97px, 9999px, 26px, 0)}30%{clip:rect(99px, 9999px, 64px, 0)}35%{clip:rect(52px, 9999px, 76px, 0)}40%{clip:rect(16px, 9999px, 38px, 0)}45%{clip:rect(12px, 9999px, 10px, 0)}50%{clip:rect(25px, 9999px, 89px, 0)}55%{clip:rect(77px, 9999px, 95px, 0)}60%{clip:rect(31px, 9999px, 73px, 0)}65%{clip:rect(80px, 9999px, 85px, 0)}70%{clip:rect(94px, 9999px, 26px, 0)}75%{clip:rect(21px, 9999px, 3px, 0)}80%{clip:rect(90px, 9999px, 77px, 0)}85%{clip:rect(24px, 9999px, 50px, 0)}90%{clip:rect(33px, 9999px, 72px, 0)}95%{clip:rect(76px, 9999px, 72px, 0)}100%{clip:rect(42px, 9999px, 44px, 0)}}.error:before{content:attr(data-text);position:absolute;left:-2px;text-shadow:1px 0 #4e73df;top:0;color:#5a5c69;background:#f8f9fc;overflow:hidden;clip:rect(0, 900px, 0, 0);animation:noise-anim-2 3s infinite linear alternate-reverse}footer.sticky-footer{padding:2rem 0;flex-shrink:0}footer.sticky-footer .copyright{line-height:1;font-size:0.8rem}body.sidebar-toggled footer.sticky-footer{width:100%}
 
 /*# sourceMappingURL=sb-admin-2.min.css.map */
\ No newline at end of file
 
 /*# sourceMappingURL=sb-admin-2.min.css.map */
\ No newline at end of file
index 6c7519f..7179752 100644 (file)
@@ -2,7 +2,7 @@
        "version": 3,
        "file": "sb-admin-2.min.css",
        "sources": [
        "version": 3,
        "file": "sb-admin-2.min.css",
        "sources": [
-               "../../../../../tmp/scsseOYB1j",
+               "../../../../../tmp/scssFxSFMc",
                "../scss/startbootstrap-sb-admin-2/sb-admin-2.scss",
                "../scss/startbootstrap-sb-admin-2/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/startbootstrap-sb-admin-2/sb-admin-2.scss",
                "../scss/startbootstrap-sb-admin-2/_variables.scss",
                "../scss/bootstrap/bootstrap.scss",
                "../scss/startbootstrap-sb-admin-2/_footer.scss"
        ],
        "names": [],
                "../scss/startbootstrap-sb-admin-2/_footer.scss"
        ],
        "names": [],
-       "mappings": "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"
+       "mappings": "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"
 }
\ No newline at end of file
 }
\ No newline at end of file
index 98e1e09..5d02aa6 100644 (file)
 .roo-htmleditor-body dl {
        /*bringing lists on to the page with breathing room */
        margin-left:2em;
 .roo-htmleditor-body dl {
        /*bringing lists on to the page with breathing room */
        margin-left:2em;
-}     
\ No newline at end of file
+}
+
+
+.roo-htmleditor-body::selection,
+.roo-htmleditor-body *::selection 
+{
+       background: #d9e8fb; 
+}
+
+.roo-htmleditor-body table.roo-ed-selection,
+.roo-htmleditor-body td.roo-ed-selection
+{
+       background-color: #d9e8fb;
+}
+
+
index 91136d9..db083be 100644 (file)
     margin-top: 2px;
     margin-left: 2px;
     max-height: 95%;
     margin-top: 2px;
     margin-left: 2px;
     max-height: 95%;
-    overflow-y: scroll;
+    overflow-y: auto;
 }
 
 .x-menu-plain
 }
 
 .x-menu-plain
index 0139afe..3d933c8 100644 (file)
@@ -43,3 +43,12 @@ menu, .undoreset nav, .undoreset output, .undoreset ruby, .undoreset section, .u
 /* Pre */
 .undoreset pre, .undoreset code { display: block; font-family: Courier New; white-space: pre; margin: 1em 0; }
 
 /* Pre */
 .undoreset pre, .undoreset code { display: block; font-family: Courier New; white-space: pre; margin: 1em 0; }
 
+
+/** sneaked in here - as this file is used by editor */
+.roo-htmleditor-body [contenteditable=true]:focus-visible {
+    background-color: #fafafa;
+    padding: 0 5px;;
+}
+.roo-htmleditor-body [contenteditable=true]:hover {
+    border: 1px solid #ccc;
+}
\ No newline at end of file
index d839074..812c850 100644 (file)
         ],
         "returns" : []
       },
         ],
         "returns" : []
       },
+      {
+        "name" : "from",
+        "type" : "function",
+        "desc" : "from",
+        "sig" : "(o)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "o",
+            "type" : "Array",
+            "desc" : "Or Array like object (eg. nodelist)",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "indexOf",
         "type" : "function",
       {
         "name" : "indexOf",
         "type" : "function",
     "tree_parent" : []
   },
   "Roo" : {
     "tree_parent" : []
   },
   "Roo" : {
-    "props" : [],
+    "props" : [
+      {
+        "name" : "grid",
+        "type" : "Roo.grid.Grid",
+        "desc" : "The grid for this panel",
+        "memberOf" : ""
+      },
+      {
+        "name" : "layout",
+        "type" : "Roo.BorderLayout",
+        "desc" : "[required] The layout for this panel",
+        "memberOf" : ""
+      }
+    ],
     "events" : [],
     "methods" : [
       {
     "events" : [],
     "methods" : [
       {
           }
         ]
       },
           }
         ]
       },
+      {
+        "name" : "log",
+        "type" : "function",
+        "desc" : "Logs to console if it can.",
+        "sig" : "(string)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "string",
+            "type" : "String|Object",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "namespace",
+        "type" : "function",
+        "desc" : "Creates namespaces to be used for scoping variables and classes so that they are not global.  Usage:\n<pre><code>\nRoo.namespace('Company', 'Company.data');\nCompany.Widget = function() { ... }\nCompany.data.CustomStore = function(config) { ... }\n</code></pre>",
+        "sig" : "(namespace1, namespace2, etc)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "namespace1",
+            "type" : "String",
+            "desc" : "",
+            "isOptional" : false
+          },
+          {
+            "name" : "namespace2",
+            "type" : "String",
+            "desc" : "",
+            "isOptional" : false
+          },
+          {
+            "name" : "etc",
+            "type" : "String",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "onReady",
         "type" : "function",
       {
         "name" : "onReady",
         "type" : "function",
       "Roo.LayoutDialog"
     ],
     "tree_children" : [],
       "Roo.LayoutDialog"
     ],
     "tree_children" : [],
-    "tree_parent" : []
+    "tree_parent" : [
+      "none",
+      "builder"
+    ]
   },
   "Roo.BasicLayoutRegion" : {
     "props" : [
   },
   "Roo.BasicLayoutRegion" : {
     "props" : [
       {
         "name" : "region",
         "type" : "String",
       {
         "name" : "region",
         "type" : "String",
-        "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+        "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
         "memberOf" : ""
       },
       {
         "memberOf" : ""
       },
       {
     "tree_parent" : [
       "Roo.BorderLayout",
       "Roo.LayoutDialog",
     "tree_parent" : [
       "Roo.BorderLayout",
       "Roo.LayoutDialog",
-      "builder-top"
+      "builder"
     ]
   },
   "Roo.DDView" : {
     ]
   },
   "Roo.DDView" : {
             "desc" : "The new node"
           }
         ]
             "desc" : "The new node"
           }
         ]
+      },
+      {
+        "name" : "update",
+        "type" : "function",
+        "desc" : "Updates the first element with the spec from the o (replacing if necessary)\nThis iterates through the children, and updates attributes / children etc..",
+        "sig" : "(el, o)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "el",
+            "type" : "String/HTMLElement/Element",
+            "desc" : "The context element",
+            "isOptional" : false
+          },
+          {
+            "name" : "o",
+            "type" : "Object/String",
+            "desc" : "The Dom object spec (and children) or raw HTML blob",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
       }
     ],
     "isAbstract" : false,
       }
     ],
     "isAbstract" : false,
         "desc" : "True for this panel to adjust its size to fit when the region resizes  (defaults to false)",
         "memberOf" : "Roo.ContentPanel"
       },
         "desc" : "True for this panel to adjust its size to fit when the region resizes  (defaults to false)",
         "memberOf" : "Roo.ContentPanel"
       },
+      {
+        "name" : "grid",
+        "type" : "Roo.grid.Grid",
+        "desc" : "The grid for this panel",
+        "memberOf" : "Roo"
+      },
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "region",
         "type" : "String",
       {
         "name" : "region",
         "type" : "String",
-        "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+        "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
         "memberOf" : "Roo.ContentPanel"
       },
       {
         "memberOf" : "Roo.ContentPanel"
       },
       {
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
-    "tree_parent" : []
+    "tree_parent" : [
+      "Roo.BorderLayout",
+      "Roo.LayoutDialog",
+      "builder"
+    ]
   },
   "Roo.HtmlEditorCore" : {
     "props" : [
   },
   "Roo.HtmlEditorCore" : {
     "props" : [
       {
         "name" : "allowComments",
         "type" : "boolean",
       {
         "name" : "allowComments",
         "type" : "boolean",
-        "desc" : "- default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.",
+        "desc" : "- default false - allow comments in HTML source\n         - by default they are stripped - if you are editing email you may need this.",
         "memberOf" : ""
       },
       {
         "memberOf" : ""
       },
       {
         "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
         "memberOf" : "Roo.Component"
       },
         "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
         "memberOf" : "Roo.Component"
       },
+      {
+        "name" : "autoClean",
+        "type" : "boolean",
+        "desc" : "- default true - loading and saving will remove quite a bit of formating,\n        if you are doing an email editor, this probably needs disabling, it's designed",
+        "memberOf" : ""
+      },
       {
         "name" : "disableClass",
         "type" : "String",
         "desc" : "CSS class added to the component when it is disabled (defaults to \"x-item-disabled\").",
         "memberOf" : "Roo.Component"
       },
       {
         "name" : "disableClass",
         "type" : "String",
         "desc" : "CSS class added to the component when it is disabled (defaults to \"x-item-disabled\").",
         "memberOf" : "Roo.Component"
       },
+      {
+        "name" : "enableBlocks",
+        "type" : "boolean",
+        "desc" : "- default true - if the block editor (table and figure should be enabled)",
+        "memberOf" : ""
+      },
       {
         "name" : "height",
         "type" : "Number",
       {
         "name" : "height",
         "type" : "Number",
         "desc" : "y)\nHow this component should hidden. Supported values are\n\"visibility\" (css visibility), \"offsets\" (negative offset position) and\n\"display\" (css display) - defaults to \"display\".",
         "memberOf" : "Roo.Component"
       },
         "desc" : "y)\nHow this component should hidden. Supported values are\n\"visibility\" (css visibility), \"offsets\" (negative offset position) and\n\"display\" (css display) - defaults to \"display\".",
         "memberOf" : "Roo.Component"
       },
+      {
+        "name" : "language",
+        "type" : "String",
+        "desc" : "default en - language of text (usefull for rtl languages)",
+        "memberOf" : ""
+      },
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "cleanTableWidths",
         "type" : "function",
       {
         "name" : "cleanTableWidths",
         "type" : "function",
-        "desc" : "cleanTableWidths.\n\nQuite often pasting from word etc.. results in tables with column and widths.\nThis does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..",
+        "desc" : "",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "memberOf" : "",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "memberOf" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
-        "deprecated" : "",
+        "deprecated" : "This has been deprecated: - use filters",
         "since" : "",
         "see" : "",
         "exceptions" : "",
         "since" : "",
         "see" : "",
         "exceptions" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
-        "deprecated" : "",
+        "deprecated" : "This has been deprecated: - use filter directly",
         "since" : "",
         "see" : "",
         "exceptions" : "",
         "since" : "",
         "see" : "",
         "exceptions" : "",
         "params" : [],
         "returns" : []
       },
         "params" : [],
         "returns" : []
       },
-      {
-        "name" : "iterateChildren",
-        "type" : "function",
-        "desc" : "iterateChildren of a Node, calling fn each time, using this as the scole..",
-        "sig" : "(node, fn)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "node",
-            "type" : "DomNode",
-            "desc" : "node to iterate children of.",
-            "isOptional" : false
-          },
-          {
-            "name" : "fn",
-            "type" : "Function",
-            "desc" : "method of this class to call on each item.",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
       {
         "name" : "on",
         "type" : "function",
       {
         "name" : "on",
         "type" : "function",
       {
         "name" : "pushValue",
         "type" : "function",
       {
         "name" : "pushValue",
         "type" : "function",
-        "desc" : "Protected method that will not generally be called directly. Pushes the value of the textarea\ninto the iframe editor.",
+        "desc" : "TEXTAREA -> EDITABLE\nProtected method that will not generally be called directly. Pushes the value of the textarea\ninto the iframe editor.",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "memberOf" : "",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "memberOf" : "",
         ],
         "returns" : []
       },
         ],
         "returns" : []
       },
+      {
+        "name" : "selectNode",
+        "type" : "function",
+        "desc" : "Select a dom node",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "the node to select",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "setDisabled",
         "type" : "function",
       {
         "name" : "setDisabled",
         "type" : "function",
     "tree_children" : [],
     "tree_parent" : []
   },
     "tree_children" : [],
     "tree_parent" : []
   },
+  "Roo.MessageBox" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "alert",
+        "type" : "function",
+        "desc" : "Displays a standard read-only message box with an OK button (comparable to the basic JavaScript Window.alert).\nIf a callback function is passed it will be called after the user clicks the button, and the\nid of the button that was clicked will be passed as the only parameter to the callback\n(could also be the top-right close button).",
+        "sig" : "(title, msg, fn, scope)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "title",
+            "type" : "String",
+            "desc" : "The title bar text",
+            "isOptional" : false
+          },
+          {
+            "name" : "msg",
+            "type" : "String",
+            "desc" : "The message box body text",
+            "isOptional" : false
+          },
+          {
+            "name" : "fn",
+            "type" : "Function",
+            "desc" : "(optional) The callback function invoked after the message box is closed",
+            "isOptional" : false
+          },
+          {
+            "name" : "scope",
+            "type" : "Object",
+            "desc" : "(optional) The scope of the callback function",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "confirm",
+        "type" : "function",
+        "desc" : "Displays a confirmation message box with Yes and No buttons (comparable to JavaScript's Window.confirm).\nIf a callback function is passed it will be called after the user clicks either button, and the id of the\nbutton that was clicked will be passed as the only parameter to the callback (could also be the top-right close button).",
+        "sig" : "(title, msg, fn, scope)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "title",
+            "type" : "String",
+            "desc" : "The title bar text",
+            "isOptional" : false
+          },
+          {
+            "name" : "msg",
+            "type" : "String",
+            "desc" : "The message box body text",
+            "isOptional" : false
+          },
+          {
+            "name" : "fn",
+            "type" : "Function",
+            "desc" : "(optional) The callback function invoked after the message box is closed",
+            "isOptional" : false
+          },
+          {
+            "name" : "scope",
+            "type" : "Object",
+            "desc" : "(optional) The scope of the callback function",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "getDialog",
+        "type" : "function",
+        "desc" : "Returns a reference to the underlying {@link Roo.BasicDialog} element",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.BasicDialog",
+            "desc" : "The BasicDialog element"
+          }
+        ]
+      },
+      {
+        "name" : "hide",
+        "type" : "function",
+        "desc" : "Hides the message box if it is displayed",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      },
+      {
+        "name" : "isVisible",
+        "type" : "function",
+        "desc" : "Returns true if the message box is currently displayed",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Boolean",
+            "desc" : "True if the message box is visible, else false"
+          }
+        ]
+      },
+      {
+        "name" : "progress",
+        "type" : "function",
+        "desc" : "Displays a message box with a progress bar.  This message box has no buttons and is not closeable by\nthe user.  You are responsible for updating the progress bar as needed via {@link Roo.MessageBox#updateProgress}\nand closing the message box when the process is complete.",
+        "sig" : "(title, msg)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "title",
+            "type" : "String",
+            "desc" : "The title bar text",
+            "isOptional" : false
+          },
+          {
+            "name" : "msg",
+            "type" : "String",
+            "desc" : "The message box body text",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "prompt",
+        "type" : "function",
+        "desc" : "Displays a message box with OK and Cancel buttons prompting the user to enter some text (comparable to\nJavaScript's Window.prompt).  The prompt can be a single-line or multi-line textbox.  If a callback function\nis passed it will be called after the user clicks either button, and the id of the button that was clicked\n(could also be the top-right close button) and the text that was entered will be passed as the two\nparameters to the callback.",
+        "sig" : "(title, msg, fn, scope, multiline)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "title",
+            "type" : "String",
+            "desc" : "The title bar text",
+            "isOptional" : false
+          },
+          {
+            "name" : "msg",
+            "type" : "String",
+            "desc" : "The message box body text",
+            "isOptional" : false
+          },
+          {
+            "name" : "fn",
+            "type" : "Function",
+            "desc" : "(optional) The callback function invoked after the message box is closed",
+            "isOptional" : false
+          },
+          {
+            "name" : "scope",
+            "type" : "Object",
+            "desc" : "(optional) The scope of the callback function",
+            "isOptional" : false
+          },
+          {
+            "name" : "multiline",
+            "type" : "Boolean/Number",
+            "desc" : "(optional) True to create a multiline textbox using the defaultTextHeight\nproperty, or the height in pixels to create the textbox (defaults to false / single-line)",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "show",
+        "type" : "function",
+        "desc" : "Displays a new message box, or reinitializes an existing message box, based on the config options\npassed in. All functions (e.g. prompt, alert, etc) on MessageBox call this function internally.\nThe following config object properties are supported:\n<pre>\nProperty    Type             Description\n----------  ---------------  ------------------------------------------------------------------------------------\nanimEl            String/Element   An id or Element from which the message box should animate as it opens and\n                                   closes (defaults to undefined)\nbuttons           Object/Boolean   A button config object (e.g., Roo.MessageBox.OKCANCEL or {ok:'Foo',\n                                   cancel:'Bar'}), or false to not show any buttons (defaults to false)\nclosable          Boolean          False to hide the top-right close button (defaults to true).  Note that\n                                   progress and wait dialogs will ignore this property and always hide the\n                                   close button as they can only be closed programmatically.\ncls               String           A custom CSS class to apply to the message box element\ndefaultTextHeight Number           The default height in pixels of the message box's multiline textarea if\n                                   displayed (defaults to 75)\nfn                Function         A callback function to execute after closing the dialog.  The arguments to the\n                                   function will be btn (the name of the button that was clicked, if applicable,\n                                   e.g. \"ok\"), and text (the value of the active text field, if applicable).\n                                   Progress and wait dialogs will ignore this option since they do not respond to\n                                   user actions and can only be closed programmatically, so any required function\n                                   should be called by the same code after it closes the dialog.\nicon              String           A CSS class that provides a background image to be used as an icon for\n                                   the dialog (e.g., Roo.MessageBox.WARNING or 'custom-class', defaults to '')\nmaxWidth          Number           The maximum width in pixels of the message box (defaults to 600)\nminWidth          Number           The minimum width in pixels of the message box (defaults to 100)\nmodal             Boolean          False to allow user interaction with the page while the message box is\n                                   displayed (defaults to true)\nmsg               String           A string that will replace the existing message box body text (defaults\n                                   to the XHTML-compliant non-breaking space character '&#160;')\nmultiline         Boolean          True to prompt the user to enter multi-line text (defaults to false)\nprogress          Boolean          True to display a progress bar (defaults to false)\nprogressText      String           The text to display inside the progress bar if progress = true (defaults to '')\nprompt            Boolean          True to prompt the user to enter single-line text (defaults to false)\nproxyDrag         Boolean          True to display a lightweight proxy while dragging (defaults to false)\ntitle             String           The title text\nvalue             String           The string value to set into the active textbox element if displayed\nwait              Boolean          True to display a progress bar (defaults to false)\nwidth             Number           The width of the dialog in pixels\n</pre>\n\nExample usage:\n<pre><code>\nRoo.Msg.show({\n   title: 'Address',\n   msg: 'Please enter your address:',\n   width: 300,\n   buttons: Roo.MessageBox.OKCANCEL,\n   multiline: true,\n   fn: saveAddress,\n   animEl: 'addAddressBtn'\n});\n</code></pre>",
+        "sig" : "(config)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "config",
+            "type" : "Object",
+            "desc" : "Configuration options",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "updateProgress",
+        "type" : "function",
+        "desc" : "Updates a progress-style message box's text and progress bar.  Only relevant on message boxes\ninitiated via {@link Roo.MessageBox#progress} or by calling {@link Roo.MessageBox#show} with progress: true.",
+        "sig" : "(value, text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "value",
+            "type" : "Number",
+            "desc" : "Any number between 0 and 1 (e.g., .5)",
+            "isOptional" : false
+          },
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "(optional) If defined, the message box's body text is replaced with the specified string (defaults to undefined)",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "updateText",
+        "type" : "function",
+        "desc" : "Updates the message box body text",
+        "sig" : "(text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "(optional) Replaces the message box element's innerHTML with the specified string (defaults to\nthe XHTML-compliant non-breaking space character '&amp;#160;')",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      },
+      {
+        "name" : "wait",
+        "type" : "function",
+        "desc" : "Displays a message box with an infinitely auto-updating progress bar.  This can be used to block user\ninteraction while waiting for a long-running process to complete that does not have defined intervals.\nYou are responsible for closing the message box when the process is complete.",
+        "sig" : "(msg, title)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "msg",
+            "type" : "String",
+            "desc" : "The message box body text",
+            "isOptional" : false
+          },
+          {
+            "name" : "title",
+            "type" : "String",
+            "desc" : "(optional) The title bar text",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Roo.MessageBox",
+            "desc" : "This message box"
+          }
+        ]
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
   "Roo.NestedLayoutPanel" : {
     "props" : [
       {
   "Roo.NestedLayoutPanel" : {
     "props" : [
       {
         "desc" : "True for this panel to adjust its size to fit when the region resizes  (defaults to false)",
         "memberOf" : "Roo.ContentPanel"
       },
         "desc" : "True for this panel to adjust its size to fit when the region resizes  (defaults to false)",
         "memberOf" : "Roo.ContentPanel"
       },
+      {
+        "name" : "layout",
+        "type" : "Roo.BorderLayout",
+        "desc" : "[required] The layout for this panel",
+        "memberOf" : "Roo"
+      },
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "region",
         "type" : "String",
       {
         "name" : "region",
         "type" : "String",
-        "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+        "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
         "memberOf" : "Roo.ContentPanel"
       },
       {
         "memberOf" : "Roo.ContentPanel"
       },
       {
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
-    "tree_parent" : []
+    "tree_parent" : [
+      "Roo.BorderLayout",
+      "Roo.LayoutDialog",
+      "builder"
+    ]
   },
   "Roo.PagingToolbar" : {
     "props" : [
   },
   "Roo.PagingToolbar" : {
     "props" : [
           }
         ]
       },
           }
         ]
       },
+      {
+        "name" : "onClick",
+        "type" : "function",
+        "desc" : "event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.",
+        "sig" : "(which)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "which",
+            "type" : "String",
+            "desc" : "(first|prev|next|last|refresh)  which button to press.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "show",
         "type" : "function",
       {
         "name" : "show",
         "type" : "function",
       "Roo.Toolbar.Separator",
       "Roo.Toolbar.Spacer",
       "Roo.Toolbar.TextItem",
       "Roo.Toolbar.Separator",
       "Roo.Toolbar.Spacer",
       "Roo.Toolbar.TextItem",
+      "Roo.Toolbar.Button",
+      "Roo.Toolbar.SplitButton",
       "Roo.form.Field",
       "Roo.form.Checkbox",
       "Roo.form.ComboBox",
       "Roo.form.Field",
       "Roo.form.Checkbox",
       "Roo.form.ComboBox",
       "Roo.Toolbar.Separator",
       "Roo.Toolbar.Spacer",
       "Roo.Toolbar.TextItem",
       "Roo.Toolbar.Separator",
       "Roo.Toolbar.Spacer",
       "Roo.Toolbar.TextItem",
+      "Roo.Toolbar.Button",
+      "Roo.Toolbar.SplitButton",
       "Roo.form.Field",
       "Roo.form.Checkbox",
       "Roo.form.ComboBox",
       "Roo.form.Field",
       "Roo.form.Checkbox",
       "Roo.form.ComboBox",
       {
         "name" : "hide",
         "type" : "function",
       {
         "name" : "hide",
         "type" : "function",
-        "desc" : "Hides this item.",
+        "desc" : "Hides this button",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "sig" : "()\n{\n\n}",
         "static" : false,
-        "memberOf" : "Roo.Toolbar.Item",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
       {
         "name" : "show",
         "type" : "function",
       {
         "name" : "show",
         "type" : "function",
-        "desc" : "Shows this item.",
+        "desc" : "Shows this button",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "sig" : "()\n{\n\n}",
         "static" : false,
-        "memberOf" : "Roo.Toolbar.Item",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
       {
         "name" : "region",
         "type" : "String",
       {
         "name" : "region",
         "type" : "String",
-        "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+        "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
         "memberOf" : "Roo.ContentPanel"
       },
       {
         "memberOf" : "Roo.ContentPanel"
       },
       {
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
     "isBuilderTop" : false,
     "implementations" : [],
     "tree_children" : [],
-    "tree_parent" : []
+    "tree_parent" : [
+      "Roo.BorderLayout",
+      "Roo.LayoutDialog",
+      "builder"
+    ]
   },
   "Roo.UpdateManager" : {
     "props" : [
   },
   "Roo.UpdateManager" : {
     "props" : [
           {
             "name" : "options",
             "type" : "Object",
           {
             "name" : "options",
             "type" : "Object",
-            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
             "isOptional" : false
           }
         ],
             "isOptional" : false
           }
         ],
           {
             "name" : "options",
             "type" : "Object",
           {
             "name" : "options",
             "type" : "Object",
-            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
             "isOptional" : false
           }
         ],
             "isOptional" : false
           }
         ],
           {
             "name" : "options",
             "type" : "Object",
           {
             "name" : "options",
             "type" : "Object",
-            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+            "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
             "isOptional" : false
           }
         ],
             "isOptional" : false
           }
         ],
     "tree_children" : [],
     "tree_parent" : []
   },
     "tree_children" : [],
     "tree_parent" : []
   },
-  "Roo.dd.DragDropMgr" : {
-    "props" : [],
-    "events" : [],
-    "methods" : [
-      {
-        "name" : "getBestMatch",
-        "type" : "function",
-        "desc" : "Helper function for getting the best match from the list of drag\nand drop objects returned by the drag and drop events when we are\nin INTERSECT mode.  It returns either the first object that the\ncursor is over, or the object that has the greatest overlap with\nthe dragged element.",
-        "sig" : "(dds)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "dds",
-            "type" : "DragDrop[]",
-            "desc" : "The array of drag and drop objects\ntargeted",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "DragDrop",
-            "desc" : "The best single match"
-          }
-        ]
-      },
-      {
-        "name" : "getCss",
-        "type" : "function",
-        "desc" : "Returns the style property for the DOM element (i.e.,\ndocument.getElById(id).style)",
-        "sig" : "(id)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "This has been deprecated: use Roo.getDom instead",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "id",
-            "type" : "String",
-            "desc" : "the id of the elment to get",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "Object",
-            "desc" : "The style property of the element"
-          }
-        ]
-      },
-      {
-        "name" : "getDDById",
-        "type" : "function",
-        "desc" : "Returns the DragDrop instance for a given id",
-        "sig" : "(id)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "id",
-            "type" : "String",
-            "desc" : "the id of the DragDrop object",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "DragDrop",
-            "desc" : "the drag drop object, null if it is not found"
-          }
-        ]
-      },
-      {
-        "name" : "getElement",
-        "type" : "function",
-        "desc" : "Returns the actual DOM element",
-        "sig" : "(id)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "This has been deprecated: use Roo.getDom instead",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "id",
-            "type" : "String",
-            "desc" : "the id of the elment to get",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "Object",
-            "desc" : "The element"
-          }
-        ]
-      },
-      {
-        "name" : "getLocation",
-        "type" : "function",
-        "desc" : "Returns a Region object containing the drag and drop element's position\nand size, including the padding configured for it",
-        "sig" : "(oDD)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "oDD",
-            "type" : "DragDrop",
-            "desc" : "the drag and drop object to get the\n                      location for",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "Roo.lib.Region",
-            "desc" : "a Region object representing the total area\n                            the element occupies, including any padding\n                            the instance is configured for."
-          }
-        ]
-      },
-      {
-        "name" : "getPosX",
-        "type" : "function",
-        "desc" : "Returns the X position of an html element",
-        "sig" : "(el)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "This has been deprecated: use Roo.lib.Dom.getX instead",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "el",
-            "type" : "",
-            "desc" : "the element for which to get the position",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "int",
-            "desc" : "the X coordinate"
-          }
-        ]
-      },
-      {
-        "name" : "getPosY",
-        "type" : "function",
-        "desc" : "Returns the Y position of an html element",
-        "sig" : "(el)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "This has been deprecated: use Roo.lib.Dom.getY instead",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "el",
-            "type" : "",
-            "desc" : "the element for which to get the position",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "int",
-            "desc" : "the Y coordinate"
-          }
-        ]
-      },
-      {
-        "name" : "getRelated",
-        "type" : "function",
-        "desc" : "Returns the drag and drop instances that are in all groups the\npassed in instance belongs to.",
-        "sig" : "(p_oDD, bTargetsOnly)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "p_oDD",
-            "type" : "DragDrop",
-            "desc" : "the obj to get related data for",
-            "isOptional" : false
-          },
-          {
-            "name" : "bTargetsOnly",
-            "type" : "boolean",
-            "desc" : "if true, only return targetable objs",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "DragDrop[]",
-            "desc" : "the related instances"
-          }
-        ]
-      },
-      {
-        "name" : "getScrollLeft",
-        "type" : "function",
-        "desc" : "Gets the scrollLeft",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "int",
-            "desc" : "the document's scrollTop"
-          }
-        ]
-      },
-      {
-        "name" : "getScrollTop",
-        "type" : "function",
-        "desc" : "Gets the scrollTop",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "int",
-            "desc" : "the document's scrollTop"
-          }
-        ]
-      },
-      {
-        "name" : "getStyle",
-        "type" : "function",
-        "desc" : "Returns the specified element style property",
-        "sig" : "(el, styleProp)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "This has been deprecated: use Roo.lib.Dom.getStyle",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "el",
-            "type" : "HTMLElement",
-            "desc" : "the element",
-            "isOptional" : false
-          },
-          {
-            "name" : "styleProp",
-            "type" : "string",
-            "desc" : "the style property",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "string",
-            "desc" : "The value of the style property"
-          }
-        ]
-      },
-      {
-        "name" : "handleWasClicked",
-        "type" : "function",
-        "desc" : "Recursively searches the immediate parent and all child nodes for\nthe handle element in order to determine wheter or not it was\nclicked.",
-        "sig" : "(node)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "node",
-            "type" : "",
-            "desc" : "the html element to inspect",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "isDragDrop",
-        "type" : "function",
-        "desc" : "Utility function to determine if a given element has been\nregistered as a drag drop item.",
-        "sig" : "(id)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "id",
-            "type" : "String",
-            "desc" : "the element id to check",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "true if this element is a DragDrop item,\nfalse otherwise"
-          }
-        ]
-      },
-      {
-        "name" : "isHandle",
-        "type" : "function",
-        "desc" : "Utility function to determine if a given element has been\nregistered as a drag drop handle for the given Drag Drop object.",
-        "sig" : "(id)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "id",
-            "type" : "String",
-            "desc" : "the element id to check",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "true if this element is a DragDrop handle, false\notherwise"
-          }
-        ]
-      },
-      {
-        "name" : "isLegalTarget",
-        "type" : "function",
-        "desc" : "Returns true if the specified dd target is a legal target for\nthe specifice drag obj",
-        "sig" : "(the, the)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "the",
-            "type" : "DragDrop",
-            "desc" : "drag obj",
-            "isOptional" : false
-          },
-          {
-            "name" : "the",
-            "type" : "DragDrop",
-            "desc" : "target",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "true if the target is a legal target for the\ndd obj"
-          }
-        ]
-      },
-      {
-        "name" : "isLocked",
-        "type" : "function",
-        "desc" : "Is drag and drop locked?",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "True if drag and drop is locked, false otherwise."
-          }
-        ]
-      },
-      {
-        "name" : "isTypeOfDD",
-        "type" : "function",
-        "desc" : "My goal is to be able to transparently determine if an object is\ntypeof DragDrop, and the exact subclass of DragDrop.  typeof\nreturns \"object\", oDD.constructor.toString() always returns\n\"DragDrop\" and not the name of the subclass.  So for now it just\nevaluates a well-known variable in DragDrop.",
-        "sig" : "(the)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "the",
-            "type" : "Object",
-            "desc" : "object to evaluate",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "true if typeof oDD = DragDrop"
-          }
-        ]
-      },
-      {
-        "name" : "lock",
-        "type" : "function",
-        "desc" : "Lock all drag and drop functionality",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : []
-      },
-      {
-        "name" : "moveToEl",
-        "type" : "function",
-        "desc" : "Sets the x/y position of an element to the location of the\ntarget element.",
-        "sig" : "(moveEl, targetEl)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "moveEl",
-            "type" : "HTMLElement",
-            "desc" : "The element to move",
-            "isOptional" : false
-          },
-          {
-            "name" : "targetEl",
-            "type" : "HTMLElement",
-            "desc" : "The position reference element",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "numericSort",
-        "type" : "function",
-        "desc" : "Numeric array sort function",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : []
-      },
-      {
-        "name" : "refreshCache",
-        "type" : "function",
-        "desc" : "Refreshes the cache of the top-left and bottom-right points of the\ndrag and drop objects in the specified group(s).  This is in the\nformat that is stored in the drag and drop instance, so typical\nusage is:\n<code>\nRoo.dd.DragDropMgr.refreshCache(ddinstance.groups);\n</code>\nAlternatively:\n<code>\nRoo.dd.DragDropMgr.refreshCache({group1:true, group2:true});\n</code>",
-        "sig" : "(groups)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "groups",
-            "type" : "Object",
-            "desc" : "an associative array of groups to refresh",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "regDragDrop",
-        "type" : "function",
-        "desc" : "Each DragDrop instance must be registered with the DragDropMgr.\nThis is executed in DragDrop.init()",
-        "sig" : "(oDD, sGroup)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "oDD",
-            "type" : "DragDrop",
-            "desc" : "the DragDrop object to register",
-            "isOptional" : false
-          },
-          {
-            "name" : "sGroup",
-            "type" : "String",
-            "desc" : "the name of the group this element belongs to",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "regHandle",
-        "type" : "function",
-        "desc" : "Each DragDrop handle element must be registered.  This is done\nautomatically when executing DragDrop.setHandleElId()",
-        "sig" : "(sDDId, sHandleId)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "sDDId",
-            "type" : "String",
-            "desc" : "the DragDrop id this element is a handle for",
-            "isOptional" : false
-          },
-          {
-            "name" : "sHandleId",
-            "type" : "String",
-            "desc" : "the id of the element that is the drag\nhandle",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "startDrag",
-        "type" : "function",
-        "desc" : "Fired when either the drag pixel threshol or the mousedown hold\ntime threshold has been met.",
-        "sig" : "(x, y)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "x",
-            "type" : "",
-            "desc" : "{int} the X position of the original mousedown",
-            "isOptional" : false
-          },
-          {
-            "name" : "y",
-            "type" : "",
-            "desc" : "{int} the Y position of the original mousedown",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "stopEvent",
-        "type" : "function",
-        "desc" : "Utility to stop event propagation and event default, if these\nfeatures are turned on.",
-        "sig" : "(e)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "e",
-            "type" : "Event",
-            "desc" : "the event as returned by this.getEvent()",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "swapNode",
-        "type" : "function",
-        "desc" : "Swap two nodes.  In IE, we use the native method, for others we\nemulate the IE behavior",
-        "sig" : "(n1, n2)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "n1",
-            "type" : "",
-            "desc" : "the first node to swap",
-            "isOptional" : false
-          },
-          {
-            "name" : "n2",
-            "type" : "",
-            "desc" : "the other node to swap",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "unlock",
-        "type" : "function",
-        "desc" : "Unlock all drag and drop functionality",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : []
-      },
-      {
-        "name" : "verifyEl",
-        "type" : "function",
-        "desc" : "This checks to make sure an element exists and is in the DOM.  The\nmain purpose is to handle cases where innerHTML is used to remove\ndrag and drop objects from the DOM.  IE provides an 'unspecified\nerror' when trying to access the offsetParent of such an element",
-        "sig" : "(el)",
-        "static" : false,
-        "memberOf" : "",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "el",
-            "type" : "HTMLElement",
-            "desc" : "the element to check",
-            "isOptional" : false
-          }
-        ],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "boolean",
-            "desc" : "true if the element looks usable"
-          }
-        ]
-      }
-    ],
-    "isAbstract" : false,
-    "isBuilderTop" : false,
-    "implementations" : [],
-    "tree_children" : [],
-    "tree_parent" : []
-  },
   "Roo.dd.DragSource" : {
     "props" : [
       {
   "Roo.dd.DragSource" : {
     "props" : [
       {
       {
         "name" : "getFieldValues",
         "type" : "function",
       {
         "name" : "getFieldValues",
         "type" : "function",
-        "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
-        "sig" : "()\n{\n\n}",
+        "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+        "sig" : "(with_readonly)",
         "static" : false,
         "memberOf" : "",
         "isStatic" : false,
         "static" : false,
         "memberOf" : "",
         "isStatic" : false,
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
+        "params" : [
+          {
+            "name" : "with_readonly",
+            "type" : "Boolean",
+            "desc" : "return readonly field data.",
+            "isOptional" : false
+          }
+        ],
         "returns" : [
           {
             "name" : "",
         "returns" : [
           {
             "name" : "",
     "isAbstract" : false,
     "isBuilderTop" : false,
     "implementations" : [],
     "isAbstract" : false,
     "isBuilderTop" : false,
     "implementations" : [],
-    "tree_children" : [],
+    "tree_children" : [
+      "Roo.form.Row",
+      "Roo.form.Field",
+      "Roo.form.Checkbox",
+      "Roo.form.ComboBox",
+      "Roo.form.ComboBoxArray",
+      "Roo.form.ComboCheck",
+      "Roo.form.ComboNested",
+      "Roo.form.DateField",
+      "Roo.form.DayPicker",
+      "Roo.form.DisplayField",
+      "Roo.form.FCKeditor",
+      "Roo.form.GridField",
+      "Roo.form.Hidden",
+      "Roo.form.HtmlEditor",
+      "Roo.form.MonthField",
+      "Roo.form.NumberField",
+      "Roo.form.Radio",
+      "Roo.form.Select",
+      "Roo.form.Signature",
+      "Roo.form.TextArea",
+      "Roo.form.TextField",
+      "Roo.form.TriggerField",
+      "Roo.Button",
+      "Roo.SplitButton",
+      "Roo.Toolbar.Button",
+      "Roo.Toolbar.SplitButton",
+      "Roo.form.TextItem",
+      "Roo.form.FieldSet"
+    ],
     "tree_parent" : []
   },
   "Roo.form.ComboBox" : {
     "tree_parent" : []
   },
   "Roo.form.ComboBox" : {
         "type" : "Number",
         "desc" : "width (optional) size of component",
         "memberOf" : "Roo.BoxComponent"
         "type" : "Number",
         "desc" : "width (optional) size of component",
         "memberOf" : "Roo.BoxComponent"
+      },
+      {
+        "name" : "zeroValue",
+        "type" : "Date/String",
+        "desc" : "if the date is less that this number, then the field is rendered as empty\ndefault is 1800",
+        "memberOf" : ""
       }
     ],
     "events" : [
       }
     ],
     "events" : [
       {
         "name" : "getFieldValues",
         "type" : "function",
       {
         "name" : "getFieldValues",
         "type" : "function",
-        "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
-        "sig" : "()\n{\n\n}",
+        "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+        "sig" : "(with_readonly)",
         "static" : false,
         "memberOf" : "Roo.form.BasicForm",
         "isStatic" : false,
         "static" : false,
         "memberOf" : "Roo.form.BasicForm",
         "isStatic" : false,
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
+        "params" : [
+          {
+            "name" : "with_readonly",
+            "type" : "Boolean",
+            "desc" : "return readonly field data.",
+            "isOptional" : false
+          }
+        ],
         "returns" : [
           {
             "name" : "",
         "returns" : [
           {
             "name" : "",
         "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
         "memberOf" : "Roo.Component"
       },
         "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
         "memberOf" : "Roo.Component"
       },
+      {
+        "name" : "autoClean",
+        "type" : "boolean",
+        "desc" : "- default true - loading and saving will remove quite a bit of formating,\n        if you are doing an email editor, this probably needs disabling, it's designed",
+        "memberOf" : ""
+      },
       {
         "name" : "blacklist",
         "type" : "Array",
         "desc" : "of html tags - in addition to standard blacklist.",
         "memberOf" : ""
       },
       {
         "name" : "blacklist",
         "type" : "Array",
         "desc" : "of html tags - in addition to standard blacklist.",
         "memberOf" : ""
       },
+      {
+        "name" : "bodyCls",
+        "type" : "string",
+        "desc" : "default '' default classes to add to body of editable area - usually undoreset is a good start..",
+        "memberOf" : ""
+      },
       {
         "name" : "clearUp",
         "type" : "Boolean",
       {
         "name" : "clearUp",
         "type" : "Boolean",
         "desc" : "True to disable the field (defaults to false).",
         "memberOf" : "Roo.form.Field"
       },
         "desc" : "True to disable the field (defaults to false).",
         "memberOf" : "Roo.form.Field"
       },
+      {
+        "name" : "enableBlocks",
+        "type" : "boolean",
+        "desc" : "- default true - if the block editor (table and figure should be enabled)",
+        "memberOf" : ""
+      },
       {
         "name" : "fieldLabel",
         "type" : "String",
       {
         "name" : "fieldLabel",
         "type" : "String",
         "desc" : "y)\nHow this component should hidden. Supported values are\n\"visibility\" (css visibility), \"offsets\" (negative offset position) and\n\"display\" (css display) - defaults to \"display\".",
         "memberOf" : "Roo.Component"
       },
         "desc" : "y)\nHow this component should hidden. Supported values are\n\"visibility\" (css visibility), \"offsets\" (negative offset position) and\n\"display\" (css display) - defaults to \"display\".",
         "memberOf" : "Roo.Component"
       },
+      {
+        "name" : "language",
+        "type" : "String",
+        "desc" : "default en - language of text (usefull for rtl languages)",
+        "memberOf" : ""
+      },
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "listeners",
         "type" : "Object",
       {
         "name" : "stylesheets",
         "type" : "Array",
       {
         "name" : "stylesheets",
         "type" : "Array",
-        "desc" : "url of stylesheets. set to [] to disable stylesheets.",
+        "desc" : "url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .",
         "memberOf" : ""
       },
       {
         "memberOf" : ""
       },
       {
         ],
         "returns" : []
       },
         ],
         "returns" : []
       },
+      {
+        "name" : "paste",
+        "type" : "function",
+        "desc" : "Fires when press user pastes into the editor",
+        "sig" : "function (_self)\n{\n\n}",
+        "memberOf" : "",
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "params" : [
+          {
+            "name" : "this",
+            "type" : "Roo.HtmlEditorCore",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "push",
         "type" : "function",
       {
         "name" : "push",
         "type" : "function",
           }
         ]
       },
           }
         ]
       },
+      {
+        "name" : "getSelectedNode",
+        "type" : "function",
+        "desc" : "get the Context selected node",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      },
       {
         "name" : "getSize",
         "type" : "function",
       {
         "name" : "getSize",
         "type" : "function",
         ],
         "returns" : []
       },
         ],
         "returns" : []
       },
+      {
+        "name" : "updateLanguage",
+        "type" : "function",
+        "desc" : "update the language in the body - really done by core",
+        "sig" : "(language)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "language",
+            "type" : "String",
+            "desc" : "- eg. en / ar / zh-CN etc..",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
       {
         "name" : "validate",
         "type" : "function",
       {
         "name" : "validate",
         "type" : "function",
       "Roo.SplitButton",
       "Roo.Toolbar.Button",
       "Roo.Toolbar.SplitButton",
       "Roo.SplitButton",
       "Roo.Toolbar.Button",
       "Roo.Toolbar.SplitButton",
-      "Roo.form.TextItem"
+      "Roo.form.TextItem",
+      "Roo.form.FieldSet"
     ],
     "tree_parent" : []
   },
     ],
     "tree_parent" : []
   },
       "Roo.SplitButton",
       "Roo.Toolbar.Button",
       "Roo.Toolbar.SplitButton",
       "Roo.SplitButton",
       "Roo.Toolbar.Button",
       "Roo.Toolbar.SplitButton",
-      "Roo.form.TextItem"
+      "Roo.form.TextItem",
+      "Roo.form.FieldSet"
     ],
     "tree_parent" : []
   },
     ],
     "tree_parent" : []
   },
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
+      {
+        "name" : "sortColMenu",
+        "type" : "boolean",
+        "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+        "memberOf" : "Roo.grid.Grid"
+      },
       {
         "name" : "stripeRows",
         "type" : "Boolean",
       {
         "name" : "stripeRows",
         "type" : "Boolean",
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
+      {
+        "name" : "sortColMenu",
+        "type" : "boolean",
+        "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+        "memberOf" : "Roo.grid.Grid"
+      },
       {
         "name" : "stripeRows",
         "type" : "Boolean",
       {
         "name" : "stripeRows",
         "type" : "Boolean",
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : ""
       },
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : ""
       },
+      {
+        "name" : "sortColMenu",
+        "type" : "boolean",
+        "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+        "memberOf" : ""
+      },
       {
         "name" : "stripeRows",
         "type" : "Boolean",
       {
         "name" : "stripeRows",
         "type" : "Boolean",
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
         "desc" : "The selection Model (default = Roo.grid.RowSelectionModel)",
         "memberOf" : "Roo.grid.Grid"
       },
+      {
+        "name" : "sortColMenu",
+        "type" : "boolean",
+        "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+        "memberOf" : "Roo.grid.Grid"
+      },
       {
         "name" : "stripeRows",
         "type" : "Boolean",
       {
         "name" : "stripeRows",
         "type" : "Boolean",
     "tree_children" : [],
     "tree_parent" : []
   },
     "tree_children" : [],
     "tree_parent" : []
   },
+  "Roo.htmleditor" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.Block" : {
+    "props" : [
+      {
+        "name" : "Context",
+        "type" : "Object",
+        "desc" : "menu - see Roo.form.HtmlEditor.ToolbarContext",
+        "memberOf" : ""
+      },
+      {
+        "name" : "friendly_name",
+        "type" : "String",
+        "desc" : "the name that appears in the context bar about this block",
+        "memberOf" : ""
+      },
+      {
+        "name" : "node",
+        "type" : "DomElement",
+        "desc" : "The node to apply stuff to.",
+        "memberOf" : ""
+      }
+    ],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "factory",
+        "type" : "function",
+        "desc" : "factory method to get the block from an element (using cache if necessary)",
+        "sig" : "(the)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "the",
+            "type" : "HtmlElement",
+            "desc" : "dom element",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "getVal",
+        "type" : "function",
+        "desc" : "used by readEleemnt to extract data from a node\nmay need improving as it's pretty basic",
+        "sig" : "(node, tag, attribute, style)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "",
+            "isOptional" : false
+          },
+          {
+            "name" : "tag",
+            "type" : "String",
+            "desc" : "- tag to find, eg. IMG ?? might be better to use DomQuery ?",
+            "isOptional" : false
+          },
+          {
+            "name" : "attribute",
+            "type" : "String",
+            "desc" : "(use html - for contents, or style for using next param as style)",
+            "isOptional" : false
+          },
+          {
+            "name" : "style",
+            "type" : "String",
+            "desc" : "the style property - eg. text-align",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "initAll",
+        "type" : "function",
+        "desc" : "initalize all Elements from content that are 'blockable'",
+        "sig" : "(the)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "the",
+            "type" : "",
+            "desc" : "body element",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "readElement",
+        "type" : "function",
+        "desc" : "Read a node that has a 'data-block' property - and extract the values from it.",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "- the node",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "toHTML",
+        "type" : "function",
+        "desc" : "convert to plain HTML for calling insertAtCursor..",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      },
+      {
+        "name" : "toObject",
+        "type" : "function",
+        "desc" : "create a DomHelper friendly object - for use with \nRoo.DomHelper.markup / overwrite / etc..\n(override this)",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      },
+      {
+        "name" : "updateElement",
+        "type" : "function",
+        "desc" : "Update a node with values from this object",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.BlockFigure" : {
+    "props" : [
+      {
+        "name" : "align",
+        "type" : "String",
+        "desc" : "t) alignment for the block default left",
+        "memberOf" : ""
+      },
+      {
+        "name" : "caption",
+        "type" : "String",
+        "desc" : "the text to appear below  (and in the alt tag)",
+        "memberOf" : ""
+      },
+      {
+        "name" : "caption_display",
+        "type" : "String",
+        "desc" : "e) display or not the caption",
+        "memberOf" : ""
+      },
+      {
+        "name" : "image_height",
+        "type" : "String|number",
+        "desc" : "the height of the image number or %?",
+        "memberOf" : ""
+      },
+      {
+        "name" : "image_src",
+        "type" : "String",
+        "desc" : "the url for the image",
+        "memberOf" : ""
+      },
+      {
+        "name" : "image_width",
+        "type" : "String|number",
+        "desc" : "the width of the image number or %?",
+        "memberOf" : ""
+      }
+    ],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "toObject",
+        "type" : "function",
+        "desc" : "create a DomHelper friendly object - for use with\nRoo.DomHelper.markup / overwrite / etc..",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.BlockTable" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "toObject",
+        "type" : "function",
+        "desc" : "create a DomHelper friendly object - for use with\nRoo.DomHelper.markup / overwrite / etc..\n?? should it be called with option to hide all editing features?",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.BlockTd" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "toObject",
+        "type" : "function",
+        "desc" : "create a DomHelper friendly object - for use with\nRoo.DomHelper.markup / overwrite / etc..\n?? should it be called with option to hide all editing features?",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.Filter" : {
+    "props" : [
+      {
+        "name" : "node",
+        "type" : "DomElement",
+        "desc" : "The node to iterate and filter",
+        "memberOf" : ""
+      },
+      {
+        "name" : "tag",
+        "type" : "boolean|String|Array",
+        "desc" : "Tags to replace",
+        "memberOf" : ""
+      }
+    ],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterAttributes" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterBlack" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterBlock" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterComment" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterKeepChildren" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterLongBr" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterParagraph" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterSpan" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterStyleToTag" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterTableWidth" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.FilterWord" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "replaceTag",
+        "type" : "function",
+        "desc" : "Clean up MS wordisms...",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.KeyEnter" : {
+    "props" : [
+      {
+        "name" : "core",
+        "type" : "Roo.HtmlEditorCore",
+        "desc" : "the editor.",
+        "memberOf" : ""
+      }
+    ],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.TidyEntities" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "decode",
+        "type" : "function",
+        "desc" : "Decodes the specified string, this will replace entities with raw UTF characters.",
+        "sig" : "(text)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "Text to entity decode.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Entity decoded string."
+          }
+        ]
+      },
+      {
+        "name" : "encodeAllRaw",
+        "type" : "function",
+        "desc" : "Encoded the specified text with both the attributes and text entities. This function will produce larger text contents\nsince it doesn't know if the context is within a attribute or text node. This was added for compatibility\nand is exposed as the DOMUtils.encode function.",
+        "sig" : "(text)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "Text to encode.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Entity encoded text."
+          }
+        ]
+      },
+      {
+        "name" : "encodeNamed",
+        "type" : "function",
+        "desc" : "Encodes the specified string using named entities. The core entities will be encoded\nas named ones but all non lower ascii characters will be encoded into named entities.",
+        "sig" : "(text, attr, entities)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "Text to encode.",
+            "isOptional" : false
+          },
+          {
+            "name" : "attr",
+            "type" : "Boolean",
+            "desc" : "Optional flag to specify if the text is attribute contents.",
+            "isOptional" : false
+          },
+          {
+            "name" : "entities",
+            "type" : "Object",
+            "desc" : "Optional parameter with entities to use.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Entity encoded text."
+          }
+        ]
+      },
+      {
+        "name" : "encodeNumeric",
+        "type" : "function",
+        "desc" : "Encodes the specified string using numeric entities. The core entities will be\nencoded as named ones but all non lower ascii characters will be encoded into numeric entities.",
+        "sig" : "(text, attr)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "Text to encode.",
+            "isOptional" : false
+          },
+          {
+            "name" : "attr",
+            "type" : "Boolean",
+            "desc" : "Optional flag to specify if the text is attribute contents.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Entity encoded text."
+          }
+        ]
+      },
+      {
+        "name" : "encodeRaw",
+        "type" : "function",
+        "desc" : "Encodes the specified string using raw entities. This means only the required XML base entities will be encoded.",
+        "sig" : "(text, attr)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "Text to encode.",
+            "isOptional" : false
+          },
+          {
+            "name" : "attr",
+            "type" : "Boolean",
+            "desc" : "Optional flag to specify if the text is attribute contents.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Entity encoded text."
+          }
+        ]
+      },
+      {
+        "name" : "getEncodeFunc",
+        "type" : "function",
+        "desc" : "Returns an encode function based on the name(s) and it's optional entities.",
+        "sig" : "(name, entities)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "name",
+            "type" : "String",
+            "desc" : "Comma separated list of encoders for example named,numeric.",
+            "isOptional" : false
+          },
+          {
+            "name" : "entities",
+            "type" : "String",
+            "desc" : "Optional parameter with entities to use instead of the built in set.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "function",
+            "desc" : "Encode function to be used."
+          }
+        ]
+      },
+      {
+        "name" : "init",
+        "type" : "function",
+        "desc" : "initialize data..",
+        "sig" : "()\n{\n\n}",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.TidySerializer" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "inner",
+        "type" : "function",
+        "desc" : "",
+        "sig" : "(inner)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "inner",
+            "type" : "boolean",
+            "desc" : "do the inner of the node.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "serialize",
+        "type" : "function",
+        "desc" : "Serializes the specified node into a string.",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "Node instance to serialize.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "String with HTML based on DOM tree."
+          }
+        ]
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.htmleditor.TidyWriter" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "cdata",
+        "type" : "function",
+        "desc" : "Writes a cdata node such as <![CDATA[data]]>.",
+        "sig" : "(text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "String to write out inside the cdata.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "comment",
+        "type" : "function",
+        "desc" : "Writes a comment node such as <!-- Comment -->.",
+        "sig" : "(text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "String to write out inside the comment.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "doctype",
+        "type" : "function",
+        "desc" : "Writes a doctype node such as <!DOCTYPE data>.",
+        "sig" : "(text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "String to write out inside the doctype.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "end",
+        "type" : "function",
+        "desc" : "Writes the a end element such as </p>.",
+        "sig" : "(name)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "name",
+            "type" : "String",
+            "desc" : "Name of the element.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "getContent",
+        "type" : "function",
+        "desc" : "Returns the contents that got serialized.",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "HTML contents that got written down."
+          }
+        ]
+      },
+      {
+        "name" : "pi",
+        "type" : "function",
+        "desc" : "Writes a PI node such as <?xml attr=\"value\" ?>.",
+        "sig" : "(name, text)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "name",
+            "type" : "String",
+            "desc" : "Name of the pi.",
+            "isOptional" : false
+          },
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "String to write out inside the pi.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "reset",
+        "type" : "function",
+        "desc" : "Resets the internal buffer if one wants to reuse the writer.",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : []
+      },
+      {
+        "name" : "start",
+        "type" : "function",
+        "desc" : "Writes the a start element such as <p id=\"a\">.",
+        "sig" : "(name, attrs, empty)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "name",
+            "type" : "String",
+            "desc" : "Name of the element.",
+            "isOptional" : false
+          },
+          {
+            "name" : "attrs",
+            "type" : "Array",
+            "desc" : "Optional attribute array or undefined if it hasn't any.",
+            "isOptional" : false
+          },
+          {
+            "name" : "empty",
+            "type" : "Boolean",
+            "desc" : "Optional empty state if the tag should end like <br />.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "text",
+        "type" : "function",
+        "desc" : "Writes a text node.\n\nIn pre - we should not mess with the contents.",
+        "sig" : "(text, raw)",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "text",
+            "type" : "String",
+            "desc" : "String to write out.",
+            "isOptional" : false
+          },
+          {
+            "name" : "raw",
+            "type" : "Boolean",
+            "desc" : "Optional raw state if true the contents wont get encoded.",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
   "Roo.lib" : {
     "props" : [],
     "events" : [],
   "Roo.lib" : {
     "props" : [],
     "events" : [],
     "tree_children" : [],
     "tree_parent" : []
   },
     "tree_children" : [],
     "tree_parent" : []
   },
-  "Roo.lib.RGBColor" : {
+  "Roo.lib.RGBColor" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
+      {
+        "name" : "getCSSHSL",
+        "type" : "function",
+        "desc" : "getCSSHSL",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS HSL Color value - that\nis, a string of the form hsl(h,s%,l%) where h is in the range [0,100] and\ns and l are in the range [0,100]."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSHSLA",
+        "type" : "function",
+        "desc" : "getCSSHSLA",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS HSLA Color value - that\nis, a string of the form hsla(h,s%,l%,a) where h is in the range [0,100],\ns and l are in the range [0,100], and a is in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSHexadecimalRGB",
+        "type" : "function",
+        "desc" : "getCSSHexadecimalRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS hexadecimal RGB Color\nvalue - that is, a string of the form #RRGGBB where each of RR, GG, and BB\nare two-digit hexadecimal numbers."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSIntegerRGB",
+        "type" : "function",
+        "desc" : "getCSSIntegerRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS integer RGB Color\nvalue - that is, a string of the form rgb(r,g,b) where each of r, g, and b\nare integers in the range [0,255]."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSIntegerRGBA",
+        "type" : "function",
+        "desc" : "getCSSIntegerRGBA",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "Returns a string representing this Color as a CSS integer RGBA Color\nvalue - that is, a string of the form rgba(r,g,b,a) where each of r, g, and\nb are integers in the range [0,255] and a is in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSPercentageRGB",
+        "type" : "function",
+        "desc" : "getCSSPercentageRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS percentage RGB Color\nvalue - that is, a string of the form rgb(r%,g%,b%) where each of r, g, and\nb are in the range [0,100]."
+          }
+        ]
+      },
+      {
+        "name" : "getCSSPercentageRGBA",
+        "type" : "function",
+        "desc" : "getCSSPercentageRGBA",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "a string representing this Color as a CSS percentage RGBA Color\nvalue - that is, a string of the form rgba(r%,g%,b%,a) where each of r, g,\nand b are in the range [0,100] and a is in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getHSL",
+        "type" : "function",
+        "desc" : "getHSL",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Object",
+            "desc" : "the HSL and alpha components of this Color as an object with h,\ns, l, and a properties. h is in the range [0,360), s and l are in the range\n[0,100], and a is in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getHSV",
+        "type" : "function",
+        "desc" : "getHSV",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Object",
+            "desc" : "the HSV and alpha components of this Color as an object with h,\ns, v, and a properties. h is in the range [0,360), s and v are in the range\n[0,100], and a is in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getIntegerRGB",
+        "type" : "function",
+        "desc" : "getIntegerRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Object",
+            "desc" : "an object representing the RGBA components of this Color. The red,\ngreen, and blue components are converted to integers in the range [0,255].\nThe alpha is a value in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getPercentageRGB",
+        "type" : "function",
+        "desc" : "getPercentageRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Object",
+            "desc" : "an object representing the RGBA components of this Color. The red,\ngreen, and blue components are converted to numbers in the range [0,100].\nThe alpha is a value in the range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "getRGB",
+        "type" : "function",
+        "desc" : "getRGB",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "Object",
+            "desc" : "the RGB and alpha components of this Color as an object with r,\ng, b, and a properties. r, g, and b are in the range [0,255] and a is in\nthe range [0,1]."
+          }
+        ]
+      },
+      {
+        "name" : "setNodeBackgroundColor",
+        "type" : "function",
+        "desc" : "Sets the background Color of the specified node to this Color. This\nfunctions sets the CSS 'background-color' property for the node. The\nparameter is:",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "- the node whose background Color should be set",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      },
+      {
+        "name" : "setNodeColor",
+        "type" : "function",
+        "desc" : "Sets the Color of the specified node to this Color. This functions sets\nthe CSS 'color' property for the node. The parameter is:",
+        "sig" : "(node)",
+        "static" : false,
+        "memberOf" : "Roo.lib.Color",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [
+          {
+            "name" : "node",
+            "type" : "DomElement",
+            "desc" : "- the node whose Color should be set",
+            "isOptional" : false
+          }
+        ],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.lib.Range" : {
     "props" : [],
     "events" : [],
     "methods" : [
       {
     "props" : [],
     "events" : [],
     "methods" : [
       {
-        "name" : "getCSSHSL",
-        "type" : "function",
-        "desc" : "getCSSHSL",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS HSL Color value - that\nis, a string of the form hsl(h,s%,l%) where h is in the range [0,100] and\ns and l are in the range [0,100]."
-          }
-        ]
-      },
-      {
-        "name" : "getCSSHSLA",
-        "type" : "function",
-        "desc" : "getCSSHSLA",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS HSLA Color value - that\nis, a string of the form hsla(h,s%,l%,a) where h is in the range [0,100],\ns and l are in the range [0,100], and a is in the range [0,1]."
-          }
-        ]
-      },
-      {
-        "name" : "getCSSHexadecimalRGB",
-        "type" : "function",
-        "desc" : "getCSSHexadecimalRGB",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS hexadecimal RGB Color\nvalue - that is, a string of the form #RRGGBB where each of RR, GG, and BB\nare two-digit hexadecimal numbers."
-          }
-        ]
-      },
-      {
-        "name" : "getCSSIntegerRGB",
-        "type" : "function",
-        "desc" : "getCSSIntegerRGB",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS integer RGB Color\nvalue - that is, a string of the form rgb(r,g,b) where each of r, g, and b\nare integers in the range [0,255]."
-          }
-        ]
-      },
-      {
-        "name" : "getCSSIntegerRGBA",
+        "name" : "wrap",
         "type" : "function",
         "type" : "function",
-        "desc" : "getCSSIntegerRGBA",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
+        "desc" : "Wrap a Dom Range object, to give it new features...",
+        "sig" : "(the)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
-        "returns" : [
+        "params" : [
           {
           {
-            "name" : "",
-            "type" : "String",
-            "desc" : "Returns a string representing this Color as a CSS integer RGBA Color\nvalue - that is, a string of the form rgba(r,g,b,a) where each of r, g, and\nb are integers in the range [0,255] and a is in the range [0,1]."
+            "name" : "the",
+            "type" : "Range",
+            "desc" : "range to wrap",
+            "isOptional" : false
           }
           }
-        ]
-      },
+        ],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.lib.Selection" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
       {
       {
-        "name" : "getCSSPercentageRGB",
+        "name" : "insertNode",
         "type" : "function",
         "type" : "function",
-        "desc" : "getCSSPercentageRGB",
-        "sig" : "()\n{\n\n}",
+        "desc" : "insert node at selection",
+        "sig" : "(node, cursor)",
         "static" : false,
         "static" : false,
-        "memberOf" : "Roo.lib.Color",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
-        "returns" : [
+        "params" : [
           {
           {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS percentage RGB Color\nvalue - that is, a string of the form rgb(r%,g%,b%) where each of r, g, and\nb are in the range [0,100]."
-          }
-        ]
-      },
-      {
-        "name" : "getCSSPercentageRGBA",
-        "type" : "function",
-        "desc" : "getCSSPercentageRGBA",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
-        "returns" : [
+            "name" : "node",
+            "type" : "DomElement|string",
+            "desc" : "",
+            "isOptional" : false
+          },
           {
           {
-            "name" : "",
-            "type" : "String",
-            "desc" : "a string representing this Color as a CSS percentage RGBA Color\nvalue - that is, a string of the form rgba(r%,g%,b%,a) where each of r, g,\nand b are in the range [0,100] and a is in the range [0,1]."
+            "name" : "cursor",
+            "type" : "string",
+            "desc" : "(after|in|none) where to place the cursor after inserting.",
+            "isOptional" : false
           }
           }
-        ]
+        ],
+        "returns" : []
       },
       {
       },
       {
-        "name" : "getHSL",
+        "name" : "wrap",
         "type" : "function",
         "type" : "function",
-        "desc" : "getHSL",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
+        "desc" : "Wrap a Dom Range object, to give it new features...",
+        "sig" : "(the)",
+        "static" : true,
+        "memberOf" : "",
+        "isStatic" : true,
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "isConstructor" : false,
         "isPrivate" : false,
         "example" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
-        "returns" : [
+        "params" : [
           {
           {
-            "name" : "",
-            "type" : "Object",
-            "desc" : "the HSL and alpha components of this Color as an object with h,\ns, l, and a properties. h is in the range [0,360), s and l are in the range\n[0,100], and a is in the range [0,1]."
+            "name" : "the",
+            "type" : "Range",
+            "desc" : "range to wrap",
+            "isOptional" : false
           }
           }
-        ]
-      },
+        ],
+        "returns" : []
+      }
+    ],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
+  "Roo.lib.UndoManager" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [
       {
       {
-        "name" : "getHSV",
+        "name" : "addEvent",
         "type" : "function",
         "type" : "function",
-        "desc" : "getHSV",
+        "desc" : "Manually add an event.\nNormall called without arguements - and it will just get added to the stack.",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "sig" : "()\n{\n\n}",
         "static" : false,
-        "memberOf" : "Roo.lib.Color",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "exceptions" : "",
         "requires" : "",
         "params" : [],
         "exceptions" : "",
         "requires" : "",
         "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "Object",
-            "desc" : "the HSV and alpha components of this Color as an object with h,\ns, v, and a properties. h is in the range [0,360), s and v are in the range\n[0,100], and a is in the range [0,1]."
-          }
-        ]
+        "returns" : []
       },
       {
       },
       {
-        "name" : "getIntegerRGB",
+        "name" : "reset",
         "type" : "function",
         "type" : "function",
-        "desc" : "getIntegerRGB",
+        "desc" : "Reset the undo - probaly done on load to clear all history.",
         "sig" : "()\n{\n\n}",
         "static" : false,
         "sig" : "()\n{\n\n}",
         "static" : false,
-        "memberOf" : "Roo.lib.Color",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "exceptions" : "",
         "requires" : "",
         "params" : [],
         "exceptions" : "",
         "requires" : "",
         "params" : [],
-        "returns" : [
-          {
-            "name" : "",
-            "type" : "Object",
-            "desc" : "an object representing the RGBA components of this Color. The red,\ngreen, and blue components are converted to integers in the range [0,255].\nThe alpha is a value in the range [0,1]."
-          }
-        ]
+        "returns" : []
       },
       {
       },
       {
-        "name" : "getPercentageRGB",
+        "name" : "transact",
         "type" : "function",
         "type" : "function",
-        "desc" : "getPercentageRGB",
-        "sig" : "()\n{\n\n}",
+        "desc" : "To push and execute a transaction, the method undoManager.transact\nmust be called by passing a transaction object as the first argument, and a merge\nflag as the second argument. A transaction object has the following properties:\n\nUsage:\n<pre><code>\nundoManager.transact({\n    label: 'Typing',\n    execute: function() { ... },\n    undo: function() { ... },\n    // redo same as execute\n    redo: function() { this.execute(); }\n}, false);\n\n// merge transaction\nundoManager.transact({\n    label: 'Typing',\n    execute: function() { ... },  // this will be run...\n    undo: function() { ... }, // what to do when undo is run.\n    // redo same as execute\n    redo: function() { this.execute(); }\n}, true); \n</code></pre>",
+        "sig" : "(transaction)",
         "static" : false,
         "static" : false,
-        "memberOf" : "Roo.lib.Color",
+        "memberOf" : "",
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "isStatic" : false,
         "isConstructor" : false,
         "isPrivate" : false,
         "see" : "",
         "exceptions" : "",
         "requires" : "",
         "see" : "",
         "exceptions" : "",
         "requires" : "",
-        "params" : [],
-        "returns" : [
+        "params" : [
           {
           {
-            "name" : "",
+            "name" : "transaction",
             "type" : "Object",
             "type" : "Object",
-            "desc" : "an object representing the RGBA components of this Color. The red,\ngreen, and blue components are converted to numbers in the range [0,100].\nThe alpha is a value in the range [0,1]."
+            "desc" : "The transaction to add to the stack.",
+            "isOptional" : false
           }
           }
-        ]
-      },
-      {
-        "name" : "getRGB",
-        "type" : "function",
-        "desc" : "getRGB",
-        "sig" : "()\n{\n\n}",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [],
+        ],
         "returns" : [
           {
             "name" : "",
         "returns" : [
           {
             "name" : "",
-            "type" : "Object",
-            "desc" : "the RGB and alpha components of this Color as an object with r,\ng, b, and a properties. r, g, and b are in the range [0,255] and a is in\nthe range [0,1]."
+            "type" : "String",
+            "desc" : "The HTML fragment"
           }
         ]
           }
         ]
-      },
-      {
-        "name" : "setNodeBackgroundColor",
-        "type" : "function",
-        "desc" : "Sets the background Color of the specified node to this Color. This\nfunctions sets the CSS 'background-color' property for the node. The\nparameter is:",
-        "sig" : "(node)",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "node",
-            "type" : "DomElement",
-            "desc" : "- the node whose background Color should be set",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
-      },
-      {
-        "name" : "setNodeColor",
-        "type" : "function",
-        "desc" : "Sets the Color of the specified node to this Color. This functions sets\nthe CSS 'color' property for the node. The parameter is:",
-        "sig" : "(node)",
-        "static" : false,
-        "memberOf" : "Roo.lib.Color",
-        "isStatic" : false,
-        "isConstructor" : false,
-        "isPrivate" : false,
-        "example" : "",
-        "deprecated" : "",
-        "since" : "",
-        "see" : "",
-        "exceptions" : "",
-        "requires" : "",
-        "params" : [
-          {
-            "name" : "node",
-            "type" : "DomElement",
-            "desc" : "- the node whose Color should be set",
-            "isOptional" : false
-          }
-        ],
-        "returns" : []
       }
     ],
     "isAbstract" : false,
       }
     ],
     "isAbstract" : false,
   },
   "Roo.menu.CheckItem" : {
     "props" : [
   },
   "Roo.menu.CheckItem" : {
     "props" : [
-      {
-        "name" : "HTML",
-        "type" : "String",
-        "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
-        "memberOf" : "Roo.menu.Item"
-      },
       {
         "name" : "actionMode",
         "type" : "String",
       {
         "name" : "actionMode",
         "type" : "String",
         "desc" : "True to hide the containing menu after this item is clicked (defaults to true)",
         "memberOf" : "Roo.menu.BaseItem"
       },
         "desc" : "True to hide the containing menu after this item is clicked (defaults to true)",
         "memberOf" : "Roo.menu.BaseItem"
       },
+      {
+        "name" : "html",
+        "type" : "String",
+        "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
+        "memberOf" : "Roo.menu.Item"
+      },
       {
         "name" : "icon",
         "type" : "String",
       {
         "name" : "icon",
         "type" : "String",
   },
   "Roo.menu.Item" : {
     "props" : [
   },
   "Roo.menu.Item" : {
     "props" : [
-      {
-        "name" : "HTML",
-        "type" : "String",
-        "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
-        "memberOf" : ""
-      },
       {
         "name" : "actionMode",
         "type" : "String",
       {
         "name" : "actionMode",
         "type" : "String",
         "desc" : "True to hide the containing menu after this item is clicked (defaults to true)",
         "memberOf" : "Roo.menu.BaseItem"
       },
         "desc" : "True to hide the containing menu after this item is clicked (defaults to true)",
         "memberOf" : "Roo.menu.BaseItem"
       },
+      {
+        "name" : "html",
+        "type" : "String",
+        "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
+        "memberOf" : ""
+      },
       {
         "name" : "icon",
         "type" : "String",
       {
         "name" : "icon",
         "type" : "String",
       "Roo.menu.DateMenu"
     ],
     "tree_children" : [
       "Roo.menu.DateMenu"
     ],
     "tree_children" : [
-      "Roo.menu.CheckItem",
-      "Roo.menu.ColorItem",
-      "Roo.menu.DateItem",
       "Roo.menu.Item",
       "Roo.menu.Item",
+      "Roo.menu.CheckItem",
       "Roo.menu.Separator",
       "Roo.menu.TextItem"
     ],
       "Roo.menu.Separator",
       "Roo.menu.TextItem"
     ],
     "tree_children" : [],
     "tree_parent" : []
   },
     "tree_children" : [],
     "tree_parent" : []
   },
+  "Roo.rtf" : {
+    "props" : [],
+    "events" : [],
+    "methods" : [],
+    "isAbstract" : false,
+    "isBuilderTop" : false,
+    "implementations" : [],
+    "tree_children" : [],
+    "tree_parent" : []
+  },
   "Roo.state" : {
     "props" : [],
     "events" : [],
   "Roo.state" : {
     "props" : [],
     "events" : [],
           }
         ]
       },
           }
         ]
       },
+      {
+        "name" : "toUpperCaseFirst",
+        "type" : "function",
+        "desc" : "Make the first letter of a string uppercase",
+        "sig" : "()\n{\n\n}",
+        "static" : false,
+        "memberOf" : "",
+        "isStatic" : false,
+        "isConstructor" : false,
+        "isPrivate" : false,
+        "example" : "",
+        "deprecated" : "",
+        "since" : "",
+        "see" : "",
+        "exceptions" : "",
+        "requires" : "",
+        "params" : [],
+        "returns" : [
+          {
+            "name" : "",
+            "type" : "String",
+            "desc" : "The new string."
+          }
+        ]
+      },
       {
         "name" : "toggle",
         "type" : "function",
       {
         "name" : "toggle",
         "type" : "function",
index acf5ea3..773b028 100644 (file)
      */
     </span><span class="jsdoc-var">equals </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">)
     {
      */
     </span><span class="jsdoc-var">equals </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">)
     {
-        </span><span class="jsdoc-comment">// https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
-       </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
-           </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
-        }
-       </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">== </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">) {
-           </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
-       }
-       </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-var">b.length</span><span class="jsdoc-syntax">) {
-           </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
-       }
+            </span><span class="jsdoc-comment">// https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">== </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-var">b.length</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        }
 
 
-       </span><span class="jsdoc-comment">// sort?? a.sort().equals(b.sort());
+        </span><span class="jsdoc-comment">// sort?? a.sort().equals(b.sort());
 
 
-       </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">this.length</span><span class="jsdoc-syntax">; ++</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
-           </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] !== </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) {
-               </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
-           }
-       }
-       </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
+        </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">this.length</span><span class="jsdoc-syntax">; ++</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] !== </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) {
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+            }
+        }
+        </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
     }
     }
+
+
+
+
 });
 
 });
 
+</span><span class="jsdoc-var">Roo.applyIf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">, {
+ </span><span class="jsdoc-comment">/**
+     * from
+     * @static
+     * @param {Array} o Or Array like object (eg. nodelist)
+     * @returns {Array} 
+     */
+    </span><span class="jsdoc-var">from </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">)
+    {
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">= [];
 
 
+        </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">o.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
+            </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
+        }
+        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">;
 
 
+    }
+});
 </span></code></body></html>
\ No newline at end of file
 </span></code></body></html>
\ No newline at end of file
index e90aa3d..274cd35 100644 (file)
@@ -301,17 +301,17 @@ dt = Date.parseDate(&quot;2006-1-15 3:20:01 PM&quot;, &quot;Y-m-d h:i:s A&quot;
     }
 
     </span><span class="jsdoc-var">code </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">&quot;if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0 &amp;&amp; i &gt;= 0 &amp;&amp; s &gt;= 0)\n&quot;
     }
 
     </span><span class="jsdoc-var">code </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">&quot;if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0 &amp;&amp; i &gt;= 0 &amp;&amp; s &gt;= 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h, i, s);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0 &amp;&amp; i &gt;= 0)\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0 &amp;&amp; i &gt;= 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h, i);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0)\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0 &amp;&amp; h &gt;= 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d, h); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0)\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0 &amp;&amp; d &gt; 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m, d); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0)\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0 &amp;&amp; m &gt;= 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y, m); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0)\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;else if (y &gt;= 0)\n&quot;
-        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y);}\n&quot;
+        </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;{v = new Date(y); v.setFullYear(y);}\n&quot;
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;}return (v &amp;&amp; (z || o))?\n&quot; </span><span class="jsdoc-comment">// favour UTC offset over GMT offset
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n&quot; </span><span class="jsdoc-comment">// reset to UTC, then add offset
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n&quot; </span><span class="jsdoc-comment">// reset to GMT, then add offset
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;}return (v &amp;&amp; (z || o))?\n&quot; </span><span class="jsdoc-comment">// favour UTC offset over GMT offset
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n&quot; </span><span class="jsdoc-comment">// reset to UTC, then add offset
         </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n&quot; </span><span class="jsdoc-comment">// reset to GMT, then add offset
@@ -371,7 +371,7 @@ dt = Date.parseDate(&quot;2006-1-15 3:20:01 PM&quot;, &quot;Y-m-d h:i:s A&quot;
             </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;(\\d{1,2})&quot;</span><span class="jsdoc-syntax">}; </span><span class="jsdoc-comment">// Numeric representation of a month, without leading zeros
     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;m&quot;</span><span class="jsdoc-syntax">:
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">:1,
             </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;(\\d{1,2})&quot;</span><span class="jsdoc-syntax">}; </span><span class="jsdoc-comment">// Numeric representation of a month, without leading zeros
     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;m&quot;</span><span class="jsdoc-syntax">:
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">:1,
-            </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;m = parseInt(results[&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">currentGroup </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;], 10) - 1;\n&quot;</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;m = Math.max(0,parseInt(results[&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">currentGroup </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;], 10) - 1);\n&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;(\\d{2})&quot;</span><span class="jsdoc-syntax">}; </span><span class="jsdoc-comment">// Numeric representation of a month, with leading zeros
     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;t&quot;</span><span class="jsdoc-syntax">:
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">:0,
             </span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">&quot;(\\d{2})&quot;</span><span class="jsdoc-syntax">}; </span><span class="jsdoc-comment">// Numeric representation of a month, with leading zeros
     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;t&quot;</span><span class="jsdoc-syntax">:
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">g</span><span class="jsdoc-syntax">:0,
index 5a41799..4ebc34f 100644 (file)
@@ -700,7 +700,6 @@ Roo.factory(conf, Roo.data);
 
 </span><span class="jsdoc-var">Roo.namespace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Roo&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.util&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.grid&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.dd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.tree&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.data&quot;</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-string">&quot;Roo.form&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.menu&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.state&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.lib&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.layout&quot;</span><span class="jsdoc-syntax">,
 
 </span><span class="jsdoc-var">Roo.namespace</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Roo&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.util&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.grid&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.dd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.tree&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.data&quot;</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-string">&quot;Roo.form&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.menu&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.state&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.lib&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.layout&quot;</span><span class="jsdoc-syntax">,
-                </span><span class="jsdoc-string">&quot;Roo.app&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.ux&quot;</span><span class="jsdoc-syntax">,
-                </span><span class="jsdoc-string">&quot;Roo.bootstrap&quot;</span><span class="jsdoc-syntax">,
-                </span><span class="jsdoc-string">&quot;Roo.bootstrap.dash&quot;</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-string">&quot;Roo.app&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;Roo.ux&quot;
+               </span><span class="jsdoc-syntax">);
 </span></code></body></html>
\ No newline at end of file
 </span></code></body></html>
\ No newline at end of file
index 720fa1d..69c3177 100644 (file)
@@ -12,6 +12,7 @@
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
+ * @parent none builder
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * &lt;pre&gt;&lt;code&gt;
 var dlg = new Roo.BasicDialog(&quot;my-dlg&quot;, {
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * &lt;pre&gt;&lt;code&gt;
 var dlg = new Roo.BasicDialog(&quot;my-dlg&quot;, {
index b380b8f..df010d2 100644 (file)
@@ -12,7 +12,7 @@
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
- * @parent Roo.BorderLayout Roo.LayoutDialog builder-top
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
@@ -25,7 +25,7 @@
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to &lt;b&gt;add&lt;/b&gt; to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to &lt;b&gt;add&lt;/b&gt; to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
- * @cfg {String} region [required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)
+ * @cfg {String} region (center|north|south|east|west) [required] which region to put this panel on (when used with xtype constructors)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
@@ -460,327 +460,6 @@ layout.addxtype({
     }
 });
 
     }
 });
 
-</span><span class="jsdoc-comment">/**
- * @class Roo.GridPanel
- * @extends Roo.ContentPanel
- * @constructor
- * Create a new GridPanel.
- * @param {Roo.grid.Grid} grid The grid for this panel
- * @param {String/Object} config A string to set only the panel's title, or a config object
- */
-</span><span class="jsdoc-var">Roo.GridPanel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">grid</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">){
-
-
-    </span><span class="jsdoc-var">this.wrapper </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.DomHelper.append</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document.body</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// wrapper for IE7 strict &amp; safari scroll issue
-        </span><span class="jsdoc-syntax">{</span><span class="jsdoc-var">tag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;div&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;x-layout-grid-wrapper x-layout-inactive-content&quot;</span><span class="jsdoc-syntax">}, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
-
-    </span><span class="jsdoc-var">this.wrapper.dom.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">grid.getGridEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.dom</span><span class="jsdoc-syntax">);
-
-    </span><span class="jsdoc-var">Roo.GridPanel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.wrapper</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.toolbar</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">this.toolbar.el.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.wrapper.dom.firstChild</span><span class="jsdoc-syntax">);
-    }
-    </span><span class="jsdoc-comment">// xtype created footer. - not sure if will work as we normally have to render first..
-    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.footer </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">this.footer.el </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.footer.xtype</span><span class="jsdoc-syntax">) {
-
-        </span><span class="jsdoc-var">this.footer.container </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getFooterPanel</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-var">this.footer.dataSource </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid.dataSource</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-var">this.footer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.footer</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo</span><span class="jsdoc-syntax">);
-
-    }
-
-    </span><span class="jsdoc-var">grid.monitorWindowResize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// turn off autosizing
-    </span><span class="jsdoc-var">grid.autoHeight </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">grid.autoWidth </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">this.grid </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">grid</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">this.grid.getGridEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.replaceClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-layout-inactive-content&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;x-layout-component-panel&quot;</span><span class="jsdoc-syntax">);
-};
-
-</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.GridPanel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.ContentPanel</span><span class="jsdoc-syntax">, {
-    </span><span class="jsdoc-var">getId </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.grid.id</span><span class="jsdoc-syntax">;
-    },
-
-    </span><span class="jsdoc-comment">/**
-     * Returns the grid for this panel
-     * @return {Roo.grid.Grid} 
-     */
-    </span><span class="jsdoc-var">getGrid </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.grid</span><span class="jsdoc-syntax">;
-    },
-
-    </span><span class="jsdoc-var">setSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.ignoreResize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">)){
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">grid </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.grid</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">size </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.adjustForComponents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">grid.getGridEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.setSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">size.width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">size.height</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">grid.autoSize</span><span class="jsdoc-syntax">();
-        }
-    },
-
-    </span><span class="jsdoc-var">beforeSlide </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.scroller.clip</span><span class="jsdoc-syntax">();
-    },
-
-    </span><span class="jsdoc-var">afterSlide </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">this.grid.getView</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.scroller.unclip</span><span class="jsdoc-syntax">();
-    },
-
-    </span><span class="jsdoc-var">destroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">this.grid.destroy</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">this.grid</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-var">Roo.GridPanel.superclass.destroy.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-    }
-});
-
-
-</span><span class="jsdoc-comment">/**
- * @class Roo.NestedLayoutPanel
- * @extends Roo.ContentPanel
- * @constructor
- * Create a new NestedLayoutPanel.
- * 
- * 
- * @param {Roo.BorderLayout} layout [required] The layout for this panel
- * @param {String/Object} config A string to set only the title or a config object
- */
-</span><span class="jsdoc-var">Roo.NestedLayoutPanel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">layout</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">)
-{
-    </span><span class="jsdoc-comment">// construct with only one argument..
-    /* FIXME - implement nicer consturctors
-    if (layout.layout) {
-        config = layout;
-        layout = config.layout;
-        delete config.layout;
-    }
-    if (layout.xtype &amp;&amp; !layout.getEl) {
-        // then layout needs constructing..
-        layout = Roo.factory(layout, Roo);
-    }
-    */
-
-
-    </span><span class="jsdoc-var">Roo.NestedLayoutPanel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">layout.getEl</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
-
-    </span><span class="jsdoc-var">layout.monitorWindowResize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// turn off autosizing
-    </span><span class="jsdoc-var">this.layout </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">layout</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">this.layout.getEl</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-layout-nested-layout&quot;</span><span class="jsdoc-syntax">);
-
-
-
-
-};
-
-</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.NestedLayoutPanel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.ContentPanel</span><span class="jsdoc-syntax">, {
-
-    </span><span class="jsdoc-var">setSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.ignoreResize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">)){
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">size </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.adjustForComponents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.layout.getEl</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-var">el.setSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">size.width</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">size.height</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">touch </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.dom.offsetWidth</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-var">this.layout.layout</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-comment">// ie requires a double layout on the first pass
-            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE </span><span class="jsdoc-syntax">&amp;&amp; !</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
-                </span><span class="jsdoc-var">this.initialized </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-var">this.layout.layout</span><span class="jsdoc-syntax">();
-            }
-        }
-    },
-
-    </span><span class="jsdoc-comment">// activate all subpanels if not currently active..
-
-    </span><span class="jsdoc-var">setActiveState </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">active</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">this.active </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">active</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">active</span><span class="jsdoc-syntax">){
-            </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;deactivate&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;activate&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-comment">// not sure if this should happen before or after..
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.layout</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// should not happen..
-        </span><span class="jsdoc-syntax">}
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">reg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">r </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">this.layout.regions</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">reg </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.layout.getRegion</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">reg.getActivePanel</span><span class="jsdoc-syntax">()) {
-                </span><span class="jsdoc-comment">//reg.showPanel(reg.getActivePanel()); // force it to activate.. 
-                </span><span class="jsdoc-var">reg.setActivePanel</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">reg.getActivePanel</span><span class="jsdoc-syntax">());
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">reg.panels.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-var">reg.showPanel</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">reg.getPanel</span><span class="jsdoc-syntax">(0));
-        }
-
-
-
-
-    },
-
-    </span><span class="jsdoc-comment">/**
-     * Returns the nested BorderLayout for this panel
-     * @return {Roo.BorderLayout} 
-     */
-    </span><span class="jsdoc-var">getLayout </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.layout</span><span class="jsdoc-syntax">;
-    },
-
-     </span><span class="jsdoc-comment">/**
-     * Adds a xtype elements to the layout of the nested panel
-     * &lt;pre&gt;&lt;code&gt;
-
-panel.addxtype({
-       xtype : 'ContentPanel',
-       region: 'west',
-       items: [ .... ]
-   }
-);
-
-panel.addxtype({
-        xtype : 'NestedLayoutPanel',
-        region: 'west',
-        layout: {
-           center: { },
-           west: { }   
-        },
-        items : [ ... list of content panels or nested layout panels.. ]
-   }
-);
-&lt;/code&gt;&lt;/pre&gt;
-     * @param {Object} cfg Xtype definition of item to add.
-     */
-    </span><span class="jsdoc-var">addxtype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">) {
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.layout.addxtype</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cfg</span><span class="jsdoc-syntax">);
-
-    }
-});
-
-</span><span class="jsdoc-var">Roo.ScrollPanel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">content</span><span class="jsdoc-syntax">){
-    </span><span class="jsdoc-var">config </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config </span><span class="jsdoc-syntax">|| {};
-    </span><span class="jsdoc-var">config.fitToFrame </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">Roo.ScrollPanel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">content</span><span class="jsdoc-syntax">);
-
-    </span><span class="jsdoc-var">this.el.dom.style.overflow </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;hidden&quot;</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">wrap </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el.wrap</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;x-scroller x-layout-inactive-content&quot;</span><span class="jsdoc-syntax">});
-    </span><span class="jsdoc-var">this.el.removeClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-layout-inactive-content&quot;</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">this.el.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;mousewheel&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.onWheel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-
-    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">up </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">wrap.createChild</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;x-scroller-up&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;&amp;#160;&quot;</span><span class="jsdoc-syntax">}, </span><span class="jsdoc-var">this.el.dom</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">down </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">wrap.createChild</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;x-scroller-down&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;&amp;#160;&quot;</span><span class="jsdoc-syntax">});
-    </span><span class="jsdoc-var">up.unselectable</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-var">down.unselectable</span><span class="jsdoc-syntax">();
-    </span><span class="jsdoc-var">up.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;click&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.scrollUp</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">down.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;click&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.scrollDown</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">up.addClassOnOver</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-scroller-btn-over&quot;</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">down.addClassOnOver</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-scroller-btn-over&quot;</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">up.addClassOnClick</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-scroller-btn-click&quot;</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">down.addClassOnClick</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-scroller-btn-click&quot;</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-var">this.adjustments </span><span class="jsdoc-syntax">= [0, -(</span><span class="jsdoc-var">up.getHeight</span><span class="jsdoc-syntax">() + </span><span class="jsdoc-var">down.getHeight</span><span class="jsdoc-syntax">())];
-
-    </span><span class="jsdoc-var">this.resizeEl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.el</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">wrap</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">this.up </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">up</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">this.down </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">down</span><span class="jsdoc-syntax">;
-};
-
-</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.ScrollPanel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.ContentPanel</span><span class="jsdoc-syntax">, {
-    </span><span class="jsdoc-var">increment </span><span class="jsdoc-syntax">: 100,
-    </span><span class="jsdoc-var">wheelIncrement </span><span class="jsdoc-syntax">: 5,
-    </span><span class="jsdoc-var">scrollUp </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">this.resizeEl.scroll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;up&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.increment</span><span class="jsdoc-syntax">, {</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.afterScroll</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">});
-    },
-
-    </span><span class="jsdoc-var">scrollDown </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">this.resizeEl.scroll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;down&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.increment</span><span class="jsdoc-syntax">, {</span><span class="jsdoc-var">callback</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.afterScroll</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">});
-    },
-
-    </span><span class="jsdoc-var">afterScroll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.resizeEl</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.dom.scrollTop</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.dom.scrollHeight</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ch </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.dom.clientHeight</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-var">this.up</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">== 0 ? </span><span class="jsdoc-string">&quot;addClass&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;removeClass&quot;</span><span class="jsdoc-syntax">](</span><span class="jsdoc-string">&quot;x-scroller-btn-disabled&quot;</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-var">this.down</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">h </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">&lt;= </span><span class="jsdoc-var">ch </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">&quot;addClass&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;removeClass&quot;</span><span class="jsdoc-syntax">](</span><span class="jsdoc-string">&quot;x-scroller-btn-disabled&quot;</span><span class="jsdoc-syntax">);
-    },
-
-    </span><span class="jsdoc-var">setSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">Roo.ScrollPanel.superclass.setSize.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-var">this.afterScroll</span><span class="jsdoc-syntax">();
-    },
-
-    </span><span class="jsdoc-var">onWheel </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-keyword">var </span><span class="jsdoc-var">d </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getWheelDelta</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-var">this.resizeEl.dom.scrollTop </span><span class="jsdoc-syntax">-= (</span><span class="jsdoc-var">d</span><span class="jsdoc-syntax">*</span><span class="jsdoc-var">this.wheelIncrement</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-var">this.afterScroll</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
-    },
-
-    </span><span class="jsdoc-var">setContent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">content</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">loadScripts</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">this.resizeEl.update</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">content</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">loadScripts</span><span class="jsdoc-syntax">);
-    }
-
-});
-
-
-
-</span><span class="jsdoc-comment">/**
- * @class Roo.TreePanel
- * @extends Roo.ContentPanel
- * Treepanel component
- * 
- * @constructor
- * Create a new TreePanel. - defaults to fit/scoll contents.
- * @param {String/Object} config A string to set only the panel's title, or a config object
- */
-</span><span class="jsdoc-var">Roo.TreePanel </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-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.el</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">config.tree</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.tree</span><span class="jsdoc-syntax">;
-    </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">config.el</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// hopefull!
-
-    // wrapper for IE7 strict &amp; safari scroll issue
-
-    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">treeEl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.createChild</span><span class="jsdoc-syntax">();
-    </span><span class="jsdoc-var">config.resizeEl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">treeEl</span><span class="jsdoc-syntax">;
-
-
-
-    </span><span class="jsdoc-var">Roo.TreePanel.superclass.constructor.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
-
-
-    </span><span class="jsdoc-var">this.tree </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.tree.TreePanel</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">treeEl </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tree</span><span class="jsdoc-syntax">);
-    </span><span class="jsdoc-comment">//console.log(tree);
-    </span><span class="jsdoc-var">this.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'activate'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
-    {
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tree.rendered</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-comment">//console.log('render tree');
-        </span><span class="jsdoc-var">this.tree.render</span><span class="jsdoc-syntax">();
-    });
-    </span><span class="jsdoc-comment">// this should not be needed.. - it's actually the 'el' that resizes?
-    // actuall it breaks the containerScroll - dragging nodes auto scroll at top
-
-    //this.on('resize',  function (cp, w, h) {
-    //        this.tree.innerCt.setWidth(w);
-    //        this.tree.innerCt.setHeight(h);
-    //        //this.tree.innerCt.setStyle('overflow-y', 'auto');
-    //});
-
-
-
-</span><span class="jsdoc-syntax">};
-
-</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.TreePanel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.ContentPanel</span><span class="jsdoc-syntax">, {
-    </span><span class="jsdoc-var">fitToFrame </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
-    </span><span class="jsdoc-var">autoScroll </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
-    </span><span class="jsdoc-comment">/*
-     * @cfg {Roo.tree.TreePanel} tree [required] The tree TreePanel, with config etc.
-     */
-    </span><span class="jsdoc-var">tree </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
-
-</span><span class="jsdoc-syntax">});
-
 
 
 
 
 
 
index 69b7ea6..63de082 100644 (file)
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
     };
 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">;
     };
 
+    </span><span class="jsdoc-comment">// this is a bit like the react update code...
+    // 
+
+    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">updateNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to</span><span class="jsdoc-syntax">)
+    {
+        </span><span class="jsdoc-comment">// should we handle non-standard elements?
+        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">&quot;UpdateNode&quot; </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">from</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to</span><span class="jsdoc-syntax">]);
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.nodeType </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">to.nodeType</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">&quot;ReplaceChild - mismatch notType&quot; </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">from </span><span class="jsdoc-syntax">]);
+            </span><span class="jsdoc-var">from.parentNode.replaceChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">to</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">from</span><span class="jsdoc-syntax">);
+        }
+
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.nodeType </span><span class="jsdoc-syntax">== 3) {
+            </span><span class="jsdoc-comment">// assume it's text?!
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.data </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">to.data</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+            }
+            </span><span class="jsdoc-var">from.data </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">to.data</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">from.parentNode</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-comment">// not sure why this is happening?
+            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-comment">// assume 'to' doesnt have '1/3 nodetypes!
+        // not sure why, by from, parent node might not exist?
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.nodeType </span><span class="jsdoc-syntax">!=1 || </span><span class="jsdoc-var">from.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">to.tagName</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">&quot;ReplaceChild&quot; </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">from</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to </span><span class="jsdoc-syntax">]);
+
+            </span><span class="jsdoc-var">from.parentNode.replaceChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">to</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">from</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-comment">// compare attributes
+        </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">from.attributes</span><span class="jsdoc-syntax">);
+        </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">++) {
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">to.hasAttribute</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">.name</span><span class="jsdoc-syntax">)) {
+                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+            }
+            </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">.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'id'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// always keep ids?
+               </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+            }
+            </span><span class="jsdoc-comment">//if (ar[i].name == 'style') {
+            //   throw &quot;style removed?&quot;;
+            //}
+            </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;removeAttribute&quot; </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">.name</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">from.removeAttribute</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">.name</span><span class="jsdoc-syntax">);
+        }
+        </span><span class="jsdoc-var">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">to.attributes</span><span class="jsdoc-syntax">;
+        </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">++) {
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.getAttribute</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">.name</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-var">to.getAttribute</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">.name</span><span class="jsdoc-syntax">)) {
+                </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;skipAttribute &quot; </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">.name  </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'=' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">to.getAttribute</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">.name</span><span class="jsdoc-syntax">));
+                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+            }
+            </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;updateAttribute &quot; </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">.name </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'=&gt;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">to.getAttribute</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">.name</span><span class="jsdoc-syntax">));
+            </span><span class="jsdoc-var">from.setAttribute</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">.name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">to.getAttribute</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">.name</span><span class="jsdoc-syntax">));
+        }
+        </span><span class="jsdoc-comment">// children
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">far </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">from.childNodes</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">to.childNodes</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-comment">// if the lengths are different.. then it's probably a editable content change, rather than
+        // a change of the block definition..
+
+        // this did notwork , as our rebuilt nodes did not include ID's so did not match at all.
+         /*if (from.innerHTML == to.innerHTML) {
+            return;
+        }
+        if (far.length != tar.length) {
+            from.innerHTML = to.innerHTML;
+            return;
+        }
+        */
+
+        </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">Math.max</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tar.length</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">far.length</span><span class="jsdoc-syntax">); </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&gt;= </span><span class="jsdoc-var">far.length</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-var">from.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
+                </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">&quot;add&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">tar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]]);
+
+            } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">i  </span><span class="jsdoc-syntax">&gt;= </span><span class="jsdoc-var">tar.length</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-var">from.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
+                </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">&quot;remove&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]]);
+            } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
+
+                </span><span class="jsdoc-var">updateNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">far</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">], </span><span class="jsdoc-var">tar</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
+            }
+        }
+
+
+
+
+    };
+
+
+
     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">{
-    </span><span class="jsdoc-comment">/** True to force the use of DOM instead of html fragments @type Boolean */
-    </span><span class="jsdoc-var">useDom </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+        </span><span class="jsdoc-comment">/** True to force the use of DOM instead of html fragments @type Boolean */
+        </span><span class="jsdoc-var">useDom </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
 
 
-    </span><span class="jsdoc-comment">/**
-     * Returns the markup for the passed Element(s) config
-     * @param {Object} o The Dom object spec (and children)
-     * @return {String}
-     */
-    </span><span class="jsdoc-var">markup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
-    },
+        </span><span class="jsdoc-comment">/**
+         * Returns the markup for the passed Element(s) config
+         * @param {Object} o The Dom object spec (and children)
+         * @return {String}
+         */
+        </span><span class="jsdoc-var">markup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
+        },
 
 
-    </span><span class="jsdoc-comment">/**
-     * Applies a style specification to an element
-     * @param {String/HTMLElement} el The element to apply styles to
-     * @param {String/Object/Function} styles A style specification string eg &quot;width:100px&quot;, or object in the form {width:&quot;100px&quot;}, or
-     * a function which returns such a specification.
-     */
-    </span><span class="jsdoc-var">applyStyles </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
-           </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-           </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;string&quot;</span><span class="jsdoc-syntax">){
-               </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">re </span><span class="jsdoc-syntax">= /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">;
-               </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">matches </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">re.exec</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">)) != </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">){
-                   </span><span class="jsdoc-var">el.setStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">[1], </span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">[2]);
-               }
-           }</span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;object&quot;</span><span class="jsdoc-syntax">){
-               </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">style </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
-                  </span><span class="jsdoc-var">el.setStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">]);
+        </span><span class="jsdoc-comment">/**
+         * Applies a style specification to an element
+         * @param {String/HTMLElement} el The element to apply styles to
+         * @param {String/Object/Function} styles A style specification string eg &quot;width:100px&quot;, or object in the form {width:&quot;100px&quot;}, or
+         * a function which returns such a specification.
+         */
+        </span><span class="jsdoc-var">applyStyles </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
+               </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+               </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;string&quot;</span><span class="jsdoc-syntax">){
+                   </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">re </span><span class="jsdoc-syntax">= /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+                   </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">;
+                   </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">matches </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">re.exec</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">)) != </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">){
+                       </span><span class="jsdoc-var">el.setStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">[1], </span><span class="jsdoc-var">matches</span><span class="jsdoc-syntax">[2]);
+                   }
+               }</span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;object&quot;</span><span class="jsdoc-syntax">){
+                   </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">style </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">){
+                      </span><span class="jsdoc-var">el.setStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">style</span><span class="jsdoc-syntax">]);
+                   }
+               }</span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
+                    </span><span class="jsdoc-var">Roo.DomHelper.applyStyles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles.call</span><span class="jsdoc-syntax">());
                }
                }
-           }</span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
-                </span><span class="jsdoc-var">Roo.DomHelper.applyStyles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">styles.call</span><span class="jsdoc-syntax">());
-           }
-        }
-    },
+            }
+        },
 
 
-    </span><span class="jsdoc-comment">/**
-     * Inserts an HTML fragment into the Dom
-     * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
-     * @param {HTMLElement} el The context element
-     * @param {String} html The HTML fragmenet
-     * @return {HTMLElement} The new node
-     */
-    </span><span class="jsdoc-var">insertHtml </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">where.toLowerCase</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">){
-            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tableRe.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.tagName</span><span class="jsdoc-syntax">)){
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rs</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">insertIntoTable</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.tagName.toLowerCase</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">)){
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">rs</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-comment">/**
+         * Inserts an HTML fragment into the Dom
+         * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
+         * @param {HTMLElement} el The context element
+         * @param {String} html The HTML fragmenet
+         * @return {HTMLElement} The new node
+         */
+        </span><span class="jsdoc-var">insertHtml </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">where.toLowerCase</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">){
+                </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tableRe.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.tagName</span><span class="jsdoc-syntax">)){
+                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rs</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">insertIntoTable</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.tagName.toLowerCase</span><span class="jsdoc-syntax">(), </span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">)){
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">rs</span><span class="jsdoc-syntax">;
+                    }
                 }
                 }
+                </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">){
+                    </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforebegin&quot;</span><span class="jsdoc-syntax">:
+                        </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'BeforeBegin'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.previousSibling</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterbegin&quot;</span><span class="jsdoc-syntax">:
+                        </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'AfterBegin'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforeend&quot;</span><span class="jsdoc-syntax">:
+                        </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'BeforeEnd'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterend&quot;</span><span class="jsdoc-syntax">:
+                        </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'AfterEnd'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">;
+                }
+                </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">'Illegal insertion point -&gt; &quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
             }
             }
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.ownerDocument.createRange</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">;
             </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">){
-                </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforebegin&quot;</span><span class="jsdoc-syntax">:
-                    </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'BeforeBegin'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforebegin&quot;</span><span class="jsdoc-syntax">:
+                    </span><span class="jsdoc-var">range.setStartBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+                    </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                    </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.previousSibling</span><span class="jsdoc-syntax">;
                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.previousSibling</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterbegin&quot;</span><span class="jsdoc-syntax">:
-                    </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'AfterBegin'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
+                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterbegin&quot;</span><span class="jsdoc-syntax">:
+                    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">){
+                        </span><span class="jsdoc-var">range.setStartBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-var">el.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
+                    }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+                        </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
+                    }
                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforeend&quot;</span><span class="jsdoc-syntax">:
                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforeend&quot;</span><span class="jsdoc-syntax">:
-                    </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'BeforeEnd'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">){
+                        </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-var">el.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">);
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
+                    }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+                        </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
+                        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
+                    }
                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterend&quot;</span><span class="jsdoc-syntax">:
                 </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterend&quot;</span><span class="jsdoc-syntax">:
-                    </span><span class="jsdoc-var">el.insertAdjacentHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'AfterEnd'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">'Illegal insertion point -&gt; &quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">el.ownerDocument.createRange</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">where</span><span class="jsdoc-syntax">){
-             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforebegin&quot;</span><span class="jsdoc-syntax">:
-                </span><span class="jsdoc-var">range.setStartBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.previousSibling</span><span class="jsdoc-syntax">;
-             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterbegin&quot;</span><span class="jsdoc-syntax">:
-                </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">){
-                    </span><span class="jsdoc-var">range.setStartBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-var">el.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
-                }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
-                    </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
-                }
-            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;beforeend&quot;</span><span class="jsdoc-syntax">:
-                </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">){
-                    </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">);
+                    </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
                     </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
                     </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-var">el.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
-                }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
-                    </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
-                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.lastChild</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">);
+                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">;
                 }
                 }
-            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;afterend&quot;</span><span class="jsdoc-syntax">:
-                </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">frag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.createContextualFragment</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">frag</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">el.nextSibling</span><span class="jsdoc-syntax">;
+                </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">'Illegal insertion point -&gt; &quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
+        },
+
+        </span><span class="jsdoc-comment">/**
+         * Creates new Dom element(s) and inserts them before el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        </span><span class="jsdoc-var">insertBefore </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;beforeBegin&quot;</span><span class="jsdoc-syntax">);
+        },
+
+        </span><span class="jsdoc-comment">/**
+         * Creates new Dom element(s) and inserts them after el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object} o The Dom object spec (and children)
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        </span><span class="jsdoc-var">insertAfter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;afterEnd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;nextSibling&quot;</span><span class="jsdoc-syntax">);
+        },
+
+        </span><span class="jsdoc-comment">/**
+         * Creates new Dom element(s) and inserts them as the first child of el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        </span><span class="jsdoc-var">insertFirst </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;afterBegin&quot;</span><span class="jsdoc-syntax">);
+        },
+
+        </span><span class="jsdoc-comment">// private
+        </span><span class="jsdoc-var">doInsert </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sibling</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.useDom </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">){
+                </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sibling </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">sibling</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+            }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.insertHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
             }
             }
-            </span><span class="jsdoc-keyword">throw </span><span class="jsdoc-string">'Illegal insertion point -&gt; &quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">where </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
-    },
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
+        },
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates new Dom element(s) and inserts them before el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    </span><span class="jsdoc-var">insertBefore </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;beforeBegin&quot;</span><span class="jsdoc-syntax">);
-    },
+        </span><span class="jsdoc-comment">/**
+         * Creates new Dom element(s) and appends them to el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        </span><span class="jsdoc-var">append </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.useDom </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">){
+                </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">el.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">);
+            }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.insertHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeEnd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+            }
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
+        },
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates new Dom element(s) and inserts them after el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object} o The Dom object spec (and children)
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    </span><span class="jsdoc-var">insertAfter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;afterEnd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;nextSibling&quot;</span><span class="jsdoc-syntax">);
-    },
+        </span><span class="jsdoc-comment">/**
+         * Creates new Dom element(s) and overwrites the contents of el with them
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        </span><span class="jsdoc-var">overwrite </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">)
+        {
+            </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">) {
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates new Dom element(s) and inserts them as the first child of el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    </span><span class="jsdoc-var">insertFirst </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.doInsert</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;afterBegin&quot;</span><span class="jsdoc-syntax">);
-    },
-
-    </span><span class="jsdoc-comment">// private
-    </span><span class="jsdoc-var">doInsert </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sibling</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.useDom </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">){
-            </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">el.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sibling </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">sibling</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-        }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.insertHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-        }
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
-    },
+                </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.childNodes.length</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-var">el.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
+                }
+                </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
+            } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
+                </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
+            }
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates new Dom element(s) and appends them to el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    </span><span class="jsdoc-var">append </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.useDom </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">){
-            </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">el.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">);
-        }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
+            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
+        },
+
+        </span><span class="jsdoc-comment">/**
+         * Creates a new Roo.DomHelper.Template from the Dom object spec
+         * @param {Object} o The Dom object spec (and children)
+         * @return {Roo.DomHelper.Template} The new template
+         */
+        </span><span class="jsdoc-var">createTemplate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">newNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.insertHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeEnd&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-        }
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">newNode</span><span class="jsdoc-syntax">;
-    },
+            </span><span class="jsdoc-keyword">return new </span><span class="jsdoc-var">Roo.Template</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
+        },
+         </span><span class="jsdoc-comment">/**
+         * Updates the first element with the spec from the o (replacing if necessary)
+         * This iterates through the children, and updates attributes / children etc..
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         */
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates new Dom element(s) and overwrites the contents of el with them
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    </span><span class="jsdoc-var">overwrite </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">returnElement</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.ns</span><span class="jsdoc-syntax">) {
+        </span><span class="jsdoc-var">update </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">)
+        {
+            </span><span class="jsdoc-var">updateNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.getDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">));
 
 
-            </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.childNodes.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">el.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-var">createDom</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
-        } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
-            </span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
         }
 
         }
 
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">returnElement </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-var">el.firstChild</span><span class="jsdoc-syntax">;
-    },
 
 
-    </span><span class="jsdoc-comment">/**
-     * Creates a new Roo.DomHelper.Template from the Dom object spec
-     * @param {Object} o The Dom object spec (and children)
-     * @return {Roo.DomHelper.Template} The new template
-     */
-    </span><span class="jsdoc-var">createTemplate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">createHtml</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">return new </span><span class="jsdoc-var">Roo.Template</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">);
-    }
     };
 }();
 </span></code></body></html>
\ No newline at end of file
     };
 }();
 </span></code></body></html>
\ No newline at end of file
index deec458..14d6f98 100644 (file)
@@ -73,6 +73,7 @@
          */
         </span><span class="jsdoc-var">editorevent</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
 
          */
         </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">// at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
     </span><span class="jsdoc-syntax">});
 
     </span><span class="jsdoc-comment">// at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
      * @cfg {Number} width (in pixels)
      */
     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 500,
      * @cfg {Number} width (in pixels)
      */
     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 500,
+     </span><span class="jsdoc-comment">/**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    </span><span class="jsdoc-var">autoClean</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
 
 
+    </span><span class="jsdoc-comment">/**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    </span><span class="jsdoc-var">enableBlocks </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">/**
      * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
      * 
      */
     </span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">/**
      * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
      * 
      */
     </span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+     </span><span class="jsdoc-comment">/**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    </span><span class="jsdoc-var">language</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'en'</span><span class="jsdoc-syntax">,
 
     </span><span class="jsdoc-comment">/**
 
     </span><span class="jsdoc-comment">/**
-     * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
+     * @cfg {boolean} allowComments - default false - allow comments in HTML source
+     *          - by default they are stripped - if you are editing email you may need this.
      */
     </span><span class="jsdoc-var">allowComments</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">// id of frame..
      */
     </span><span class="jsdoc-var">allowComments</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">// id of frame..
 
     </span><span class="jsdoc-var">bodyCls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
 
 
     </span><span class="jsdoc-var">bodyCls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
 
+
+    </span><span class="jsdoc-var">undoManager </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-comment">/**
      * Protected method that will not generally be called directly. It
      * is called when the editor initializes the iframe with HTML contents. Override this method if you
     </span><span class="jsdoc-comment">/**
      * Protected method that will not generally be called directly. It
      * is called when the editor initializes the iframe with HTML contents. Override this method if you
                    </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
             </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">) {
                    </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
             </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">) {
+                </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">) {
+                    </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+                }
                 </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">;
             }
 
                 </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">;
             }
 
             </span><span class="jsdoc-string">'IMG { cursor: pointer } ' </span><span class="jsdoc-syntax">+
         </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
 
             </span><span class="jsdoc-string">'IMG { cursor: pointer } ' </span><span class="jsdoc-syntax">+
         </span><span class="jsdoc-string">'&lt;/style&gt;'</span><span class="jsdoc-syntax">;
 
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'roo-htmleditor-body'</span><span class="jsdoc-syntax">;
+        </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">;
+
+        </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">;
 
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.bodyCls.length</span><span class="jsdoc-syntax">){
             </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">;
         }
 
 
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.bodyCls.length</span><span class="jsdoc-syntax">){
             </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">;
         }
 
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">'&lt;html&gt;&lt;head&gt;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">st  </span><span class="jsdoc-syntax">+
+        </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">+
             </span><span class="jsdoc-comment">//&lt;style type=&quot;text/css&quot;&gt;' +
             //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
             //'&lt;/style&gt;' +
             </span><span class="jsdoc-comment">//&lt;style type=&quot;text/css&quot;&gt;' +
             //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
             //'&lt;/style&gt;' +
 
         </span><span class="jsdoc-var">this.iframe </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">iframe.dom</span><span class="jsdoc-syntax">;
 
 
         </span><span class="jsdoc-var">this.iframe </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">iframe.dom</span><span class="jsdoc-syntax">;
 
-         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
 
         </span><span class="jsdoc-var">this.doc.designMode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'on'</span><span class="jsdoc-syntax">;
 
 
         </span><span class="jsdoc-var">this.doc.designMode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'on'</span><span class="jsdoc-syntax">;
 
                 </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">){
                     </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
                         </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">;
                 </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">){
                     </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
                         </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">;
+
                     } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
                         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                     }
                     } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
                         </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                     }
 
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sourceEditMode</span><span class="jsdoc-syntax">){
 
 
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.sourceEditMode</span><span class="jsdoc-syntax">){
 
-            </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-comment">//FIXME - what's the BS styles for these
+            </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
 
         </span><span class="jsdoc-syntax">}</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
 
         </span><span class="jsdoc-syntax">}</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
-            </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-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">]);
             </span><span class="jsdoc-comment">//this.iframe.className = '';
             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
         }
             </span><span class="jsdoc-comment">//this.iframe.className = '';
             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
         }
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
-    </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">){
+    </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">)
+    {
         </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">);
         </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){
             </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
         </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">);
         </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){
             </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
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
-    </span><span class="jsdoc-var">syncValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+    </span><span class="jsdoc-var">syncValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+    {
+        </span><span class="jsdoc-comment">//Roo.log(&quot;HtmlEditorCore:syncValue (EDITOR-&gt;TEXT)&quot;);
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
+
+            </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
+
+
             </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">);
             </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">);
-            </span><span class="jsdoc-comment">//this.cleanUpPaste(); -- this is done else where and causes havoc..
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">bd.innerHTML</span><span class="jsdoc-syntax">;
+
+
+            </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">();
+
+            </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">);
+            </span><span class="jsdoc-var">div.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">bd.innerHTML</span><span class="jsdoc-syntax">;
+            </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.
+            </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) {
+                </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">;
+                </span><span class="jsdoc-var">rm.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rm</span><span class="jsdoc-syntax">);
+            }
+
+
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
+                </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">});
+            }
+            </span><span class="jsdoc-comment">//?? tidy?
+            </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">({
+                </span><span class="jsdoc-var">inner</span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">true
+            </span><span class="jsdoc-syntax">});
+            </span><span class="jsdoc-keyword">var </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">);
+
+
             </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-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!
                 </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">;
             </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-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!
                 </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">;
     },
 
     </span><span class="jsdoc-comment">/**
     },
 
     </span><span class="jsdoc-comment">/**
+     * TEXTAREA -&gt; EDITABLE
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
-    </span><span class="jsdoc-var">pushValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+    </span><span class="jsdoc-var">pushValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+    {
+        </span><span class="jsdoc-comment">//Roo.log(&quot;HtmlEditorCore:pushValue (TEXT-&gt;EDITOR)&quot;);
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
             </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">();
 
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.initialized</span><span class="jsdoc-syntax">){
             </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">();
 
-</span><span class="jsdoc-comment">//            if(v.length &lt; 1){
-//                v = '&amp;#160;';
-//            }
 
             </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">){
                 </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">);
                 </span><span class="jsdoc-var">d.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
 
             </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">){
                 </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">);
                 </span><span class="jsdoc-var">d.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-var">this.cleanUpPaste</span><span class="jsdoc-syntax">();
+
                 </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">;
                 </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">);
             }
                 </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">;
                 </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">);
             }
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
+                </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
+                </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
+            </span><span class="jsdoc-syntax">}
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
+                </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">);
+            }
+
+            </span><span class="jsdoc-var">this.updateLanguage</span><span class="jsdoc-syntax">();
+
+            </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">;
+            </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">) {
+                </span><span class="jsdoc-comment">// add an extra line at the end.
+                </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">));
+            }
+
+
         }
     },
 
         }
     },
 
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         </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
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         </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
-        //Roo.DomHelper.applyStyles(dbody, ss);
+        </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">);
+
+        </span><span class="jsdoc-comment">//Roo.DomHelper.applyStyles(dbody, ss);
         </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-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-comment">//'mousedown': this.onEditorEvent,
+
             </span><span class="jsdoc-string">'mouseup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'dblclick'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'click'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'keyup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'mouseup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'dblclick'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'click'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-string">'keyup'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onEditorEvent</span><span class="jsdoc-syntax">,
+
             </span><span class="jsdoc-var">buffer</span><span class="jsdoc-syntax">:100,
             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
         </span><span class="jsdoc-syntax">});
             </span><span class="jsdoc-var">buffer</span><span class="jsdoc-syntax">:100,
             </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
         </span><span class="jsdoc-syntax">});
+        </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">'paste'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.onPasteEvent</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this
+        </span><span class="jsdoc-syntax">});
         </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.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">);
         }
         </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.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">);
         }
+        </span><span class="jsdoc-comment">//??? needed???
         </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">){
             </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">);
         }
         </span><span class="jsdoc-var">this.initialized </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
 
         </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">){
             </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">);
         }
         </span><span class="jsdoc-var">this.initialized </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
 
+
+        </span><span class="jsdoc-comment">// initialize special key events - enter
+        </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">});
+
+
+
         </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">);
         </span><span class="jsdoc-var">this.pushValue</span><span class="jsdoc-syntax">();
     },
         </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">);
         </span><span class="jsdoc-var">this.pushValue</span><span class="jsdoc-syntax">();
     },
+    </span><span class="jsdoc-comment">// this is to prevent a href clicks resulting in a redirect?
+
+    </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">)
+    {
+        </span><span class="jsdoc-comment">// I think we better assume paste is going to be a dirty load of rubish from word..
+
+        // even pasting into a 'email version' of this widget will have to clean up that mess.
+        </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">);
+
+        </span><span class="jsdoc-comment">// check what type of paste - if it's an image, then handle it differently.
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cd.files.length </span><span class="jsdoc-syntax">&gt; 0) {
+            </span><span class="jsdoc-comment">// pasting images?
+            </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">) ||
+                (</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">) ||
+                (</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">);
+
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">urlAPI.createObjectURL</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">cd.files</span><span class="jsdoc-syntax">[0]);
+            </span><span class="jsdoc-var">this.insertAtCursor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'&lt;img src=&quot; + url + &quot;&gt;'</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        }
+
+        </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
+        </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">));
+        </span><span class="jsdoc-keyword">var </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">) : [];
+        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">images</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-comment">//Roo.log(imgs);
+        // fixme..
+        </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)/); }) </span><span class="jsdoc-comment">// ignore headers
+                       </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">(); })
+                       </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">; });
+
+
+        </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">);
+
+        </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">;
+
+
+        </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">();
+        </span><span class="jsdoc-comment">// check if d contains a table, and prevent nesting??
+        //Roo.log(d.getElementsByTagName('table'));
+        //Roo.log(sn);
+        //Roo.log(sn.closest('table'));
+        </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">)) {
+            </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
+            </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">);
+            </span><span class="jsdoc-comment">//Roo.log(&quot;prevent?&quot;); // fixme - 
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        }
+
+        </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) {
+            </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">) {
+                </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">]);
+            });
+        }
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.autoClean</span><span class="jsdoc-syntax">) {
+            </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">});
+            </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</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">attrib_white </span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">],
+                </span><span class="jsdoc-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">]
+            });
+            </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">});
+            </span><span class="jsdoc-comment">// should be fonts..
+            </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">'O:P' </span><span class="jsdoc-syntax">]} );
+            </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">});
+            </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">});
+            </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">});
+        }
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</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">'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">) {
+                </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
+                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+                }
+                </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">({
+                    </span><span class="jsdoc-var">image_src  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">img.src
+                </span><span class="jsdoc-syntax">});
+                </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..
+
+            </span><span class="jsdoc-syntax">});
+        }
+
+
+        </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">));
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.enableBlocks</span><span class="jsdoc-syntax">) {
+            </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">);
+        }
+
+
+        </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-comment">// default behaveiour should be our local cleanup paste? (optional?)
+        // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
+        //this.owner.fireEvent('paste', e, v);
+    </span><span class="jsdoc-syntax">},
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">onDestroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
 
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">onDestroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
 
     </span><span class="jsdoc-var">onFirstFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
 
         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
     </span><span class="jsdoc-var">onFirstFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
 
         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
-
+        </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">));
 
         </span><span class="jsdoc-var">this.activated </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
 
 
         </span><span class="jsdoc-var">this.activated </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
 
 
     </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">)
     {
 
     </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">)
     {
-        </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">);
+
+
+        </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) {
+            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// we do not handle this.. (undo manager does..)
+        </span><span class="jsdoc-syntax">}
+        </span><span class="jsdoc-comment">// in theory this detects if the last element is not a br, then we try and do that.
+        // its so clicking in space at bottom triggers adding a br and moving the cursor.
+        </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.target.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">&amp;&amp;
+            </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;
+            </span><span class="jsdoc-var">this.doc.body.lastChild
+           </span><span class="jsdoc-syntax">) {
+            </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">;
+            </span><span class="jsdoc-comment">// gtx-trans is google translate plugin adding crap.
+            </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">) {
+                </span><span class="jsdoc-var">lc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lc.previousSibling</span><span class="jsdoc-syntax">;
+            }
+            </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">) {
+            </span><span class="jsdoc-comment">// if last element is &lt;BR&gt; - then dont do anything.
+
+                </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">);
+                </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">);
+                </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc.createRange</span><span class="jsdoc-syntax">();
+                </span><span class="jsdoc-var">range.setStartAfter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ns</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
+                </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">();
+                </span><span class="jsdoc-var">sel.removeAllRanges</span><span class="jsdoc-syntax">();
+                </span><span class="jsdoc-var">sel.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">range</span><span class="jsdoc-syntax">);
+            }
+        }
+
+
+
+        </span><span class="jsdoc-var">this.fireEditorEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
       </span><span class="jsdoc-comment">//  this.updateToolbar();
         </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
     </span><span class="jsdoc-syntax">},
 
       </span><span class="jsdoc-comment">//  this.updateToolbar();
         </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
     </span><span class="jsdoc-syntax">},
 
+    </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">)
+    {
+        </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">);
+    },
+
     </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">)
     {
         </span><span class="jsdoc-comment">// could be a bit smarter... -&gt; wrap the current selected tRoo..
     </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">)
     {
         </span><span class="jsdoc-comment">// could be a bit smarter... -&gt; wrap the current selected tRoo..
 
         }
         </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">);
 
         }
         </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">);
-
+        </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
     },
 
     </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">)
     },
 
     </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">)
                </span><span class="jsdoc-comment">//alert(Sender.getAttribute('label'));
 
         </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">));
                </span><span class="jsdoc-comment">//alert(Sender.getAttribute('label'));
 
         </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">));
+        </span><span class="jsdoc-var">this.undoManager.addEvent</span><span class="jsdoc-syntax">();
     } ,
 
 
     } ,
 
 
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
-    </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">){
+    </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">)
+    {
+
+        </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyleft'</span><span class="jsdoc-syntax">:
+            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifyright'</span><span class="jsdoc-syntax">:
+            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'justifycenter'</span><span class="jsdoc-syntax">:
+                </span><span class="jsdoc-comment">// if we are in a cell, then we will adjust the
+                </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">();
+                </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">);
+                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">td</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">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">td</span><span class="jsdoc-syntax">);
+                    </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">);
+                    </span><span class="jsdoc-var">bl.updateElement</span><span class="jsdoc-syntax">();
+                    </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-keyword">return</span><span class="jsdoc-syntax">;
+                }
+                </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">// 
+                </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'bold'</span><span class="jsdoc-syntax">:
+            </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'italic'</span><span class="jsdoc-syntax">:
+                </span><span class="jsdoc-comment">// if there is no selection, then we insert, and set the curson inside it..
+                </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">);
+                </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
+
+
+            </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
+                </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
+        }
+
+
         </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
         </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">);
         </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">this.win.focus</span><span class="jsdoc-syntax">();
         </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">);
         </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-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.activated</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.activated</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
-        </span><span class="jsdoc-comment">/*
-        if(Roo.isIE){
-            this.win.focus();
-            var r = this.doc.selection.createRange();
-            if(r){
-                r.collapse(true);
-                r.pasteHTML(text);
-                this.syncValue();
-                this.deferFocus();
-            
-            }
-            return;
-        }
-        */
+
         </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">){
             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
 
         </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">){
             </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
 
             </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">;
 
             </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">) {
             </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">;
 
             </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">) {
+
+                </span><span class="jsdoc-comment">// delete the existing?
+
+                </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">();
                 </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);
                 </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">;
                 </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
                 </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);
                 </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">;
                 </span><span class="jsdoc-var">range.insertNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">range.cloneRange</span><span class="jsdoc-syntax">();
+                </span><span class="jsdoc-var">range.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+
+                </span><span class="jsdoc-var">win.getSelection</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.removeAllRanges</span><span class="jsdoc-syntax">();
+                </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">);
+
+
+
             } </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">) {
                 </span><span class="jsdoc-comment">// no firefox support
                 </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">;
                 </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">);
             } </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">) {
                 </span><span class="jsdoc-comment">// no firefox support
                 </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">;
                 </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">);
+
             } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
                 </span><span class="jsdoc-comment">// no firefox support
                 </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">;
                 </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">);
             }
             } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
                 </span><span class="jsdoc-comment">// no firefox support
                 </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">;
                 </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">);
             }
-
             </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
 
             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
             </span><span class="jsdoc-var">this.syncValue</span><span class="jsdoc-syntax">();
 
             </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">;
                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
 
                         </span><span class="jsdoc-var">cmd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'underline'</span><span class="jsdoc-syntax">;
                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
 
-                    </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">'v'</span><span class="jsdoc-syntax">:
-                        </span><span class="jsdoc-var">this.cleanUpPaste.defer</span><span class="jsdoc-syntax">(100, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-                        </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+                    </span><span class="jsdoc-comment">//case 'v':
+                      //  this.cleanUpPaste.defer(100, this);
+                      //  return;
 
 
-                }
+                </span><span class="jsdoc-syntax">}
                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">){
                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">){
-                    </span><span class="jsdoc-var">this.win.focus</span><span class="jsdoc-syntax">();
-                    </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">this.deferFocus</span><span class="jsdoc-syntax">();
+
+                    </span><span class="jsdoc-var">this.relayCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">);
+                    </span><span class="jsdoc-comment">//this.win.focus();
+                    //this.execCmd(cmd);
+                    //this.deferFocus();
                     </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
                 }
 
                     </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
                 }
 
 
     </span><span class="jsdoc-comment">// private
     </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
 
     </span><span class="jsdoc-comment">// private
     </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
+
+
         </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-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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">;
         </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-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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">;
                     }
                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                 }
                     }
                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                 }
-
-                </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.ENTER</span><span class="jsdoc-syntax">){
-                    </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">();
-                    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">){
-                        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">target </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">r.parentElement</span><span class="jsdoc-syntax">();
-                        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">target </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">target.tagName.toLowerCase</span><span class="jsdoc-syntax">() != </span><span class="jsdoc-string">'li'</span><span class="jsdoc-syntax">){
-                            </span><span class="jsdoc-var">e.stopEvent</span><span class="jsdoc-syntax">();
-                            </span><span class="jsdoc-var">r.pasteHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'&lt;br /&gt;'</span><span class="jsdoc-syntax">);
-                            </span><span class="jsdoc-var">r.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
-                            </span><span class="jsdoc-var">r.select</span><span class="jsdoc-syntax">();
+                </span><span class="jsdoc-comment">/// this is handled by Roo.htmleditor.KeyEnter
+                 /*
+                if(k == e.ENTER){
+                    r = this.doc.selection.createRange();
+                    if(r){
+                        var target = r.parentElement();
+                        if(!target || target.tagName.toLowerCase() != 'li'){
+                            e.stopEvent();
+                            r.pasteHTML('&lt;br/&gt;');
+                            r.collapse(false);
+                            r.select();
                         }
                     }
                 }
                         }
                     }
                 }
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">String.fromCharCode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'v'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// paste
-                    </span><span class="jsdoc-var">this.cleanUpPaste.defer</span><span class="jsdoc-syntax">(100, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
+                */
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                //    return;
+                //}
 
 
 
 
-            };
+            </span><span class="jsdoc-syntax">};
         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isOpera</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isOpera</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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">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">);
                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
                 }
                     </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">);
                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
                 }
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">String.fromCharCode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'v'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// paste
-                    </span><span class="jsdoc-var">this.cleanUpPaste.defer</span><span class="jsdoc-syntax">(100, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
 
 
-            };
+                </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                 //   return;
+                //}
+
+            </span><span class="jsdoc-syntax">};
         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isSafari</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
                 </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">this.deferFocus</span><span class="jsdoc-syntax">();
                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                 }
                     </span><span class="jsdoc-var">this.deferFocus</span><span class="jsdoc-syntax">();
                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                 }
-               </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">String.fromCharCode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">k</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.toLowerCase</span><span class="jsdoc-syntax">() == </span><span class="jsdoc-string">'v'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// paste
-                    </span><span class="jsdoc-var">this.cleanUpPaste.defer</span><span class="jsdoc-syntax">(100, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
+                 </span><span class="jsdoc-var">this.mozKeyPress</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
 
 
-             };
+               </span><span class="jsdoc-comment">//if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                 //   this.cleanUpPaste.defer(100, this);
+                 //   return;
+               // }
+
+             </span><span class="jsdoc-syntax">};
         }
     }(),
 
         }
     }(),
 
     </span><span class="jsdoc-var">getSelection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
     </span><span class="jsdoc-var">getSelection </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </span><span class="jsdoc-var">this.assignDocWin</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-keyword">return </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-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">);
+    },
+    </span><span class="jsdoc-comment">/**
+     * Select a dom node
+     * @param {DomElement} node the node to select
+     */
+    </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">)
+    {
+        </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">();
+        </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
+            </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+        } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+        }
+        </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">) {
+            </span><span class="jsdoc-var">nodeRange.collapse</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
+        }
+        </span><span class="jsdoc-comment">//
+        </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">();
+        </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
     },
 
     </span><span class="jsdoc-var">getSelectedNode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     },
 
     </span><span class="jsdoc-var">getSelectedNode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
 
 
 
 
 
 
-
         </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">();
 
         </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-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">();
 
         </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-keyword">return </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">[0];
     },
 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nodes</span><span class="jsdoc-syntax">[0];
     },
+
+
     </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">)
     {
         </span><span class="jsdoc-comment">// this has strange effects when using with 
     </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">)
     {
         </span><span class="jsdoc-comment">// this has strange effects when using with 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">3;
     },
 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">3;
     },
 
-    </span><span class="jsdoc-comment">// private? - in a new class?
-    </span><span class="jsdoc-var">cleanUpPaste </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
-    {
-        </span><span class="jsdoc-comment">// cleans up the whole document..
-        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'cleanuppaste'</span><span class="jsdoc-syntax">);
-
-        </span><span class="jsdoc-var">this.cleanUpChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">clean </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cleanWordChars</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body.innerHTML</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">clean </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.doc.body.innerHTML</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">this.doc.body.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">clean</span><span class="jsdoc-syntax">;
-        }
-
-    },
-
     </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
     </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
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">he </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.HtmlEditorCore</span><span class="jsdoc-syntax">;
 
 
+       </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">swapCodes  </span><span class="jsdoc-syntax">= [
+            [    8211, </span><span class="jsdoc-string">&quot;&amp;#8211;&quot; </span><span class="jsdoc-syntax">],
+            [    8212, </span><span class="jsdoc-string">&quot;&amp;#8212;&quot; </span><span class="jsdoc-syntax">],
+            [    8216,  </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
+            [    8217, </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
+            [    8220, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
+            [    8221, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
+            [    8226, </span><span class="jsdoc-string">&quot;*&quot; </span><span class="jsdoc-syntax">],
+            [    8230, </span><span class="jsdoc-string">&quot;...&quot; </span><span class="jsdoc-syntax">]
+        ];
         </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">;
         </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">;
-        </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">he.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">) {
+        </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">) {
             </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
 
             </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]);
             </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
 
             </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]);
     },
 
 
     },
 
 
-    </span><span class="jsdoc-var">cleanUpChildren </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">)
-    {
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">n.childNodes.length</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </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">= </span><span class="jsdoc-var">n.childNodes.length</span><span class="jsdoc-syntax">-1; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&gt; -1 ; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--) {
-           </span><span class="jsdoc-var">this.cleanUpChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n.childNodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
-        }
-    },
-
 
 
 
     </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">)
     {
 
 
 
     </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">)
     {
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ed </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-comment">//console.log(node);
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#text&quot;</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">// clean up silly Windows -- stuff?
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#comment&quot;</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.allowComments</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-comment">// clean up silly Windows -- stuff?
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lcname </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.tagName.toLowerCase</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-comment">// we ignore whitelists... ?? = not really the way to go, but we probably have not got a full
-        // whitelist of tags..
-
-        </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">lcname</span><span class="jsdoc-syntax">) &gt; -1 &amp;&amp; </span><span class="jsdoc-var">this.clearUp </span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">// remove node.
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</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">remove_keep_children</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.HtmlEditorCore.remove.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName.toLowerCase</span><span class="jsdoc-syntax">()) &gt; -1;
-
-        </span><span class="jsdoc-comment">// spans with no attributes - just remove them..
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((!</span><span class="jsdoc-var">node.attributes </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">node.attributes.length</span><span class="jsdoc-syntax">) &amp;&amp; </span><span class="jsdoc-var">lcname </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'span'</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">remove_keep_children </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-comment">// remove &lt;a name=....&gt; as rendering on yahoo mailer is borked with this.
-        // this will have to be flaged elsewhere - perhaps ablack=name... on the mailer..
-
-        //if (node.tagName.toLowerCase() == 'a' &amp;&amp; !node.hasAttribute('href')) {
-        //    remove_keep_children = true;
-        //}
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">remove_keep_children</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">this.cleanUpChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-comment">// inserts everything just before this node...
-            </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childNodes.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">[0];
-                </span><span class="jsdoc-var">node.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node.attributes </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">node.attributes.length</span><span class="jsdoc-syntax">) {
 
 
-
-
-
-            </span><span class="jsdoc-var">this.cleanUpChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">cleanAttr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">)
-        {
-
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^\./) || </span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^\//)) {
-                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^(http|https):\/\//) || </span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^mailto:/) || </span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^ftp:/)) {
-                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^#/)) {
-                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/^\{/)) { </span><span class="jsdoc-comment">// allow template editing.
-                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-            }
-</span><span class="jsdoc-comment">//            Roo.log(&quot;(REMOVE TAG)&quot;+ node.tagName +'.' + n + '=' + v);
-            </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
-
-        }
-
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cwhite </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cwhite</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cblack </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cblack</span><span class="jsdoc-syntax">;
-
-        </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">cleanStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">)
-        {
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v.match</span><span class="jsdoc-syntax">(/expression/)) { </span><span class="jsdoc-comment">//XSS?? should we even bother..
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</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">parts </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">v.split</span><span class="jsdoc-syntax">(/;/);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">clean </span><span class="jsdoc-syntax">= [];
-
-            </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">parts</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.replace</span><span class="jsdoc-syntax">(/^\s+/g,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/\s+$/g,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">p.length</span><span class="jsdoc-syntax">) {
-                    </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
-                }
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">l </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">p.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">':'</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.shift</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/\s+/g,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">l </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">l.replace</span><span class="jsdoc-syntax">(/^\s+/g,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.replace</span><span class="jsdoc-syntax">(/\s+$/g,</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
-
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">cwhite.length </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">cblack.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">) &gt; -1) {
-</span><span class="jsdoc-comment">//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
-                }
-                </span><span class="jsdoc-comment">//Roo.log()
-                // only allow 'c whitelisted system attributes'
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">cwhite.length </span><span class="jsdoc-syntax">&amp;&amp;  </span><span class="jsdoc-var">cwhite.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">) &lt; 0 &amp;&amp; </span><span class="jsdoc-var">cwhite.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">l.toLowerCase</span><span class="jsdoc-syntax">()) &lt; 0 ) {
-</span><span class="jsdoc-comment">//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
-                }
-
-
-
-
-                </span><span class="jsdoc-var">clean.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">p</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">return true</span><span class="jsdoc-syntax">;
-            });
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">clean.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">node.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">clean.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">';'</span><span class="jsdoc-syntax">));
-            } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">);
-            }
-
-        }
-
-
-        </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">= </span><span class="jsdoc-var">node.attributes.length</span><span class="jsdoc-syntax">-1; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&gt; -1 ; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--) {
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.attributes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
-            </span><span class="jsdoc-comment">//console.log(a);
-
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name.toLowerCase</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.substr</span><span class="jsdoc-syntax">(0,2)==</span><span class="jsdoc-string">'on'</span><span class="jsdoc-syntax">)  {
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.ablack.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name.toLowerCase</span><span class="jsdoc-syntax">()) &gt; -1) {
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.HtmlEditorCore.aclean.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name.toLowerCase</span><span class="jsdoc-syntax">()) &gt; -1) {
-                </span><span class="jsdoc-var">cleanAttr</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">a.value</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// fixme..
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">cleanStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">a.value</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-comment">/// clean up MS crap..
-            // tecnically this should be a list of valid class'es..
-
-
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'class'</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.value.match</span><span class="jsdoc-syntax">(/^Mso/)) {
-                    </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'class'</span><span class="jsdoc-syntax">);
-                }
-
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.value.match</span><span class="jsdoc-syntax">(/^body$/)) {
-                    </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'class'</span><span class="jsdoc-syntax">);
-                }
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-
-            </span><span class="jsdoc-comment">// style cleanup!?
-            // class cleanup?
-
-        </span><span class="jsdoc-syntax">}
-
-
-        </span><span class="jsdoc-var">this.cleanUpChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
+        </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">});
+        </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterAttributes</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">attrib_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.ablack</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">attrib_clean </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.aclean</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">style_white </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cwhite</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">style_black </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cblack
+        </span><span class="jsdoc-syntax">});
+        </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">});
+        </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">} );
 
 
     },
 
     </span><span class="jsdoc-comment">/**
      * Clean up MS wordisms...
 
 
     },
 
     </span><span class="jsdoc-comment">/**
      * Clean up MS wordisms...
+     * @deprecated - use filter directly
      */
     </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">)
     {
      */
     </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">)
     {
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">this.cleanWord</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(
-                </span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'SPAN' </span><span class="jsdoc-syntax">&amp;&amp;
-                !</span><span class="jsdoc-var">node.hasAttributes</span><span class="jsdoc-syntax">() &amp;&amp;
-                </span><span class="jsdoc-var">node.childNodes.length </span><span class="jsdoc-syntax">== 1 &amp;&amp;
-                </span><span class="jsdoc-var">node.firstChild.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#text&quot;
-        </span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">textNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.firstChild</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-var">node.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">textNode</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'lang'</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'zh-CN'</span><span class="jsdoc-syntax">) {   </span><span class="jsdoc-comment">// do not space pad on chinese characters..
-                </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.ownerDocument.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot; &quot;</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">textNode</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'lang'</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'zh-CN'</span><span class="jsdoc-syntax">) {   </span><span class="jsdoc-comment">// do not space pad on chinese characters..
-                </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.ownerDocument.createTextNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot; &quot;</span><span class="jsdoc-syntax">) , </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-        }
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#text&quot;</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">// clean up silly Windows -- stuff?
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#comment&quot;</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-comment">// clean up silly Windows -- stuff?
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName.toLowerCase</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.match</span><span class="jsdoc-syntax">(/^(style|script|applet|embed|noframes|noscript)$/)) {
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-comment">//Roo.log(node.tagName);
-        // remove - but keep children..
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName.toLowerCase</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.match</span><span class="jsdoc-syntax">(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
-            </span><span class="jsdoc-comment">//Roo.log('-- removed');
-            </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.childNodes.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">[0];
-                </span><span class="jsdoc-var">node.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">node.parentNode.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-comment">// move node to parent - and clean it..
-                </span><span class="jsdoc-var">this.cleanWord</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-var">node.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-comment">/// no need to iterate chidlren = it's got none..
-            //this.iterateChildren(node, this.cleanWord);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-comment">// clean styles
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.className.length</span><span class="jsdoc-syntax">) {
-
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.className.split</span><span class="jsdoc-syntax">(/\W+/);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cna </span><span class="jsdoc-syntax">= [];
-            </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cls.match</span><span class="jsdoc-syntax">(/Mso[a-zA-Z]+/)) {
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
-                </span><span class="jsdoc-var">cna.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">);
-            });
-            </span><span class="jsdoc-var">node.className </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cna.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">cna.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">cna.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;class&quot;</span><span class="jsdoc-syntax">);
-            }
-        }
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;lang&quot;</span><span class="jsdoc-syntax">)) {
-            </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;lang&quot;</span><span class="jsdoc-syntax">);
-        }
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">)) {
-
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;;&quot;</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nstyle </span><span class="jsdoc-syntax">= [];
-            </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</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">) {
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.match</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">kv </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;:&quot;</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">kv</span><span class="jsdoc-syntax">[0]</span><span class="jsdoc-var">.match</span><span class="jsdoc-syntax">(/^(mso-|line|font|background|margin|padding|color)/)) {
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
-                </span><span class="jsdoc-comment">// what ever is left... we allow.
-                </span><span class="jsdoc-var">nstyle.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">);
-            });
-            </span><span class="jsdoc-var">node.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nstyle.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">nstyle.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">';'</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">nstyle.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">);
-            }
-        }
-        </span><span class="jsdoc-var">this.iterateChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.cleanWord</span><span class="jsdoc-syntax">);
-
-
+        </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">});
 
 
-    },
-    </span><span class="jsdoc-comment">/**
-     * iterateChildren of a Node, calling fn each time, using this as the scole..
-     * @param {DomNode} node node to iterate children of.
-     * @param {Function} fn method of this class to call on each item.
-     */
-    </span><span class="jsdoc-var">iterateChildren </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">fn</span><span class="jsdoc-syntax">)
-    {
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node.childNodes.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </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">= </span><span class="jsdoc-var">node.childNodes.length</span><span class="jsdoc-syntax">-1; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&gt; -1 ; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--) {
-           </span><span class="jsdoc-var">fn.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">node.childNodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">])
-        }
     },
 
 
     </span><span class="jsdoc-comment">/**
     },
 
 
     </span><span class="jsdoc-comment">/**
-     * cleanTableWidths.
-     *
-     * Quite often pasting from word etc.. results in tables with column and widths.
-     * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
-     *
+
+     * @deprecated - use filters
      */
     </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">)
     {
      */
     </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">)
     {
-
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">this.cleanTableWidths</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-
-        </span><span class="jsdoc-comment">// ignore list...
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#text&quot; </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">node.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;#comment&quot;</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.tagName</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">node.tagName.toLowerCase</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.match</span><span class="jsdoc-syntax">(/^(table|td|tr)$/)) {
-            </span><span class="jsdoc-var">this.iterateChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.cleanTableWidths</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">)) {
-            </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">);
-        }
-
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">)) {
-            </span><span class="jsdoc-comment">// pretty basic...
-
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">node.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;;&quot;</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nstyle </span><span class="jsdoc-syntax">= [];
-            </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles</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">) {
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.match</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">kv </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">s.split</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;:&quot;</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">kv</span><span class="jsdoc-syntax">[0]</span><span class="jsdoc-var">.match</span><span class="jsdoc-syntax">(/^\s*(width|min-width)\s*$/)) {
-                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                }
-                </span><span class="jsdoc-comment">// what ever is left... we allow.
-                </span><span class="jsdoc-var">nstyle.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">);
-            });
-            </span><span class="jsdoc-var">node.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;style&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nstyle.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">nstyle.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">';'</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">nstyle.length</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">node.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'style'</span><span class="jsdoc-syntax">);
-            }
-        }
-
-        </span><span class="jsdoc-var">this.iterateChildren</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.cleanTableWidths</span><span class="jsdoc-syntax">);
+        </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">});
 
 
     },
 
 
 
 
 
     },
 
 
 
-
-    </span><span class="jsdoc-var">domToHTML </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depth</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nopadtext</span><span class="jsdoc-syntax">) {
-
-        </span><span class="jsdoc-var">depth </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">depth </span><span class="jsdoc-syntax">|| 0;
-        </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">currentElement</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.domToHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc.body</span><span class="jsdoc-syntax">);
-        }
-
-        </span><span class="jsdoc-comment">//Roo.log(currentElement);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">j</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">allText </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">nodeName </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">currentElement.nodeName</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tagName </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.util.Format.htmlEncode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElement.tagName</span><span class="jsdoc-syntax">);
-
-        </span><span class="jsdoc-keyword">if  </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'#text'</span><span class="jsdoc-syntax">) {
-
-            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">currentElement.nodeValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">currentElement.nodeValue.trim</span><span class="jsdoc-syntax">();
-        }
-
-
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY'</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-comment">// Prints the node tagName, such as &lt;A&gt;, &lt;IMG&gt;, etc
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tagName</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">attr </span><span class="jsdoc-syntax">= [];
-                </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</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">currentElement.attributes.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
-                    </span><span class="jsdoc-comment">// quoting?
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">aname </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">currentElement.attributes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">;
-                    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">currentElement.attributes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.value.length</span><span class="jsdoc-syntax">) {
-                        </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-                    }
-                    </span><span class="jsdoc-var">attr.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">aname </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'=&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">Roo.util.Format.htmlEncode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElement.attributes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.value</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">);
-                }
-
-                </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;&lt;&quot;</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">currentElement.tagName</span><span class="jsdoc-syntax">+ ( </span><span class="jsdoc-var">attr.length </span><span class="jsdoc-syntax">? (</span><span class="jsdoc-string">' ' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">attr.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">) ) : </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-string">&quot;&gt;&quot;</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
-
-                </span><span class="jsdoc-comment">// eack
-            </span><span class="jsdoc-syntax">}
-        } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
-            </span><span class="jsdoc-var">tagName </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'IMG'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'BR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'HR'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'INPUT'</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tagName</span><span class="jsdoc-syntax">) &gt; -1) {
-            </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">([</span><span class="jsdoc-string">'PRE'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TEXTAREA'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TD'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'A'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'SPAN'</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tagName</span><span class="jsdoc-syntax">) &gt; -1) { </span><span class="jsdoc-comment">// or code?
-            </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-        }
-
-
-        </span><span class="jsdoc-comment">// Traverse the tree
-        </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">currentElementChild </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">currentElement.childNodes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">allText </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">innerHTML  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-var">lastnode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElementChild</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">// Formatting code (indent the tree so it looks nice on the screen)
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nopad </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nopadtext</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lastnode </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'SPAN'</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">nopad  </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-comment">// text
-            </span><span class="jsdoc-keyword">if  </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElementChild.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'#text'</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">toadd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.util.Format.htmlEncode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElementChild.nodeValue</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">toadd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">toadd </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">toadd.trim</span><span class="jsdoc-syntax">();
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">nopad </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">toadd.length </span><span class="jsdoc-syntax">&gt; 80) {
-                    </span><span class="jsdoc-var">innerHTML  </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">&quot;\n&quot; </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">depth </span><span class="jsdoc-syntax">+ 1 ))</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">( </span><span class="jsdoc-string">&quot;  &quot;  </span><span class="jsdoc-syntax">);
-                }
-                </span><span class="jsdoc-var">innerHTML  </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">toadd</span><span class="jsdoc-syntax">;
-
-                </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++;
-                </span><span class="jsdoc-var">currentElementChild </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">currentElement.childNodes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">lastNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
-            </span><span class="jsdoc-var">allText </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-
-            </span><span class="jsdoc-var">innerHTML  </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">nopad </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;\n&quot; </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">depth </span><span class="jsdoc-syntax">+ 1 ))</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">( </span><span class="jsdoc-string">&quot;  &quot;  </span><span class="jsdoc-syntax">);
-
-            </span><span class="jsdoc-comment">// Recursively traverse the tree structure of the child node
-            </span><span class="jsdoc-var">innerHTML   </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">this.domToHTML</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">currentElementChild</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">depth</span><span class="jsdoc-syntax">+1, </span><span class="jsdoc-var">nopadtext</span><span class="jsdoc-syntax">);
-            </span><span class="jsdoc-var">lastnode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">currentElementChild.nodeName</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++;
-            </span><span class="jsdoc-var">currentElementChild</span><span class="jsdoc-syntax">=</span><span class="jsdoc-var">currentElement.childNodes.item</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
-        }
-
-        </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">innerHTML</span><span class="jsdoc-syntax">;
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">allText</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-comment">// The remaining code is mostly for formatting the tree
-            </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">nopadtext </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;\n&quot; </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">depth  </span><span class="jsdoc-syntax">))</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">( </span><span class="jsdoc-string">&quot;  &quot;  </span><span class="jsdoc-syntax">);
-        }
-
-
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tagName</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">&quot;&lt;/&quot;</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">tagName</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">&quot;&gt;&quot;</span><span class="jsdoc-syntax">;
-        }
-        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">ret</span><span class="jsdoc-syntax">;
-
-    },
-
     </span><span class="jsdoc-var">applyBlacklists </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </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">: [];
         </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">:  [];
 
     </span><span class="jsdoc-var">applyBlacklists </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </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">: [];
         </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">:  [];
 
+        </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">;
+        </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">;
+        </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">;
+
         </span><span class="jsdoc-var">this.white </span><span class="jsdoc-syntax">= [];
         </span><span class="jsdoc-var">this.black </span><span class="jsdoc-syntax">= [];
         </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">) {
         </span><span class="jsdoc-var">this.white </span><span class="jsdoc-syntax">= [];
         </span><span class="jsdoc-var">this.black </span><span class="jsdoc-syntax">= [];
         </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">) {
 
     },
 
 
     },
 
+
+    </span><span class="jsdoc-var">updateLanguage </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+    {
+        </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">) {
+            </span><span class="jsdoc-keyword">return</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.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">);
+    },
+
+
     </span><span class="jsdoc-var">removeStylesheets </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </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">;
     </span><span class="jsdoc-var">removeStylesheets </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
     {
         </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">;
 </span><span class="jsdoc-syntax">});
 
 </span><span class="jsdoc-var">Roo.HtmlEditorCore.white </span><span class="jsdoc-syntax">= [
 </span><span class="jsdoc-syntax">});
 
 </span><span class="jsdoc-var">Roo.HtmlEditorCore.white </span><span class="jsdoc-syntax">= [
-        </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">,
+        </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">,
 
 
-       </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">,
-       </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">,
-       </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">,
-       </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">,
-       </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">,
+       </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">,
+       </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">,
+       </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">,
+       </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">,
+       </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">,
 
 
-       </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">,
-      </span><span class="jsdoc-string">'thead'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'tr'</span><span class="jsdoc-syntax">,
+       </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">,
+      </span><span class="jsdoc-string">'THEAD'</span><span class="jsdoc-syntax">,   </span><span class="jsdoc-string">'TR'</span><span class="jsdoc-syntax">,
 
 
-      </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">,
+      </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">,
 
 
-      </span><span class="jsdoc-string">'embed'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'object'
+      </span><span class="jsdoc-string">'EMBED'</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-string">'OBJECT'
 </span><span class="jsdoc-syntax">];
 
 
 </span><span class="jsdoc-var">Roo.HtmlEditorCore.black </span><span class="jsdoc-syntax">= [
     </span><span class="jsdoc-comment">//    'embed',  'object', // enable - backend responsiblity to clean thiese
 </span><span class="jsdoc-syntax">];
 
 
 </span><span class="jsdoc-var">Roo.HtmlEditorCore.black </span><span class="jsdoc-syntax">= [
     </span><span class="jsdoc-comment">//    'embed',  'object', // enable - backend responsiblity to clean thiese
-        </span><span class="jsdoc-string">'applet'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// 
-        </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">,
-        </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">,
-        </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">,
-        </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-comment">// clean later..
+        </span><span class="jsdoc-string">'APPLET'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// 
+        </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">,
+        </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">,
+        </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">,
+        </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">,
+        </span><span class="jsdoc-comment">//'FONT' // CLEAN LATER..
+        </span><span class="jsdoc-string">'COLGROUP'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'COL'   </span><span class="jsdoc-comment">// messy tables.
+
+
 </span><span class="jsdoc-syntax">];
 </span><span class="jsdoc-syntax">];
-</span><span class="jsdoc-var">Roo.HtmlEditorCore.clean </span><span class="jsdoc-syntax">= [
-    </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-var">Roo.HtmlEditorCore.clean </span><span class="jsdoc-syntax">= [ </span><span class="jsdoc-comment">// ?? needed???
+     </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">];
 </span><span class="jsdoc-syntax">];
-</span><span class="jsdoc-var">Roo.HtmlEditorCore.remove </span><span class="jsdoc-syntax">= [
-    </span><span class="jsdoc-string">'font'
+</span><span class="jsdoc-var">Roo.HtmlEditorCore.tag_remove </span><span class="jsdoc-syntax">= [
+    </span><span class="jsdoc-string">'FONT'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'TBODY'
 </span><span class="jsdoc-syntax">];
 </span><span class="jsdoc-comment">// attributes..
 
 </span><span class="jsdoc-syntax">];
 </span><span class="jsdoc-comment">// attributes..
 
 </span><span class="jsdoc-syntax">];
 
 
 </span><span class="jsdoc-syntax">];
 
 
-</span><span class="jsdoc-var">Roo.HtmlEditorCore.swapCodes   </span><span class="jsdoc-syntax">=[
-    [    8211, </span><span class="jsdoc-string">&quot;&amp;#8211;&quot; </span><span class="jsdoc-syntax">],
-    [    8212, </span><span class="jsdoc-string">&quot;&amp;#8212;&quot; </span><span class="jsdoc-syntax">],
-    [    8216,  </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
-    [    8217, </span><span class="jsdoc-string">&quot;'&quot; </span><span class="jsdoc-syntax">],
-    [    8220, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
-    [    8221, </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">],
-    [    8226, </span><span class="jsdoc-string">&quot;*&quot; </span><span class="jsdoc-syntax">],
-    [    8230, </span><span class="jsdoc-string">&quot;...&quot; </span><span class="jsdoc-syntax">]
-];
+
 
     </span></code></body></html>
\ No newline at end of file
 
     </span></code></body></html>
\ No newline at end of file
index 96d5087..38cf67e 100644 (file)
@@ -11,6 +11,7 @@
 
 /**
  * @class Roo.MessageBox
 
 /**
  * @class Roo.MessageBox
+ * @static
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *&lt;pre&gt;&lt;code&gt;
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *&lt;pre&gt;&lt;code&gt;
@@ -120,6 +121,7 @@ Roo.Msg.show({
                         }
                     }
                 });
                         }
                     }
                 });
+
                 </span><span class="jsdoc-var">dlg.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;hide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">handleHide</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">mask </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">dlg.mask</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-var">dlg.addKeyListener</span><span class="jsdoc-syntax">(27, </span><span class="jsdoc-var">handleEsc</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">dlg.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;hide&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">handleHide</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">mask </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">dlg.mask</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-var">dlg.addKeyListener</span><span class="jsdoc-syntax">(27, </span><span class="jsdoc-var">handleEsc</span><span class="jsdoc-syntax">);
@@ -363,6 +365,7 @@ Roo.Msg.show({
                 </span><span class="jsdoc-var">d.animateTarget </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-var">d.show</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.animEl</span><span class="jsdoc-syntax">);
             }
                 </span><span class="jsdoc-var">d.animateTarget </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
                 </span><span class="jsdoc-var">d.show</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">options.animEl</span><span class="jsdoc-syntax">);
             }
+            </span><span class="jsdoc-var">dlg.toFront</span><span class="jsdoc-syntax">();
             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
         },
 
             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
         },
 
index 18e5c2c..b9a7354 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
             </span><span class="jsdoc-var">this.loading.disable</span><span class="jsdoc-syntax">();
         }
     },
             </span><span class="jsdoc-var">this.loading.disable</span><span class="jsdoc-syntax">();
         }
     },
-
-    </span><span class="jsdoc-comment">// private
+    </span><span class="jsdoc-comment">/**
+     * event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.
+     * @param {String} which (first|prev|next|last|refresh)  which button to press.
+     *
+     */
+    // private
     </span><span class="jsdoc-var">onClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">which</span><span class="jsdoc-syntax">){
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ds </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.ds</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">which</span><span class="jsdoc-syntax">){
     </span><span class="jsdoc-var">onClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">which</span><span class="jsdoc-syntax">){
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ds </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.ds</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">which</span><span class="jsdoc-syntax">){
index e6be5f1..5910f09 100644 (file)
@@ -11,7 +11,7 @@
 
 /**
  * @class Roo.Toolbar
 
 /**
  * @class Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field 
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
 
     </span><span class="jsdoc-var">enable</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-var">disable</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
 
     </span><span class="jsdoc-var">enable</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
     </span><span class="jsdoc-var">disable</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
-    </span><span class="jsdoc-var">focus</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn
-</span><span class="jsdoc-syntax">});
+    </span><span class="jsdoc-var">focus</span><span class="jsdoc-syntax">:</span><span class="jsdoc-var">Roo.emptyFn</span><span class="jsdoc-syntax">,
+     </span><span class="jsdoc-comment">/**
+     * Shows this button
+     */
+    </span><span class="jsdoc-var">show</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">this.hidden </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.el.style.display </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">;
+    },
+
+    </span><span class="jsdoc-comment">/**
+     * Hides this button
+     */
+    </span><span class="jsdoc-var">hide</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+        </span><span class="jsdoc-var">this.hidden </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.el.style.display </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;none&quot;</span><span class="jsdoc-syntax">;
+    }
+
+});
 
 </span><span class="jsdoc-comment">/**
  * @class Roo.Toolbar.Button
 
 </span><span class="jsdoc-comment">/**
  * @class Roo.Toolbar.Button
index 462fc0c..b4b3846 100644 (file)
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.IsLongEnough</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pwd</span><span class="jsdoc-syntax">, 6) || !</span><span class="jsdoc-var">this.IsLongEnough</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pwd</span><span class="jsdoc-syntax">, 0);
     }
 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.IsLongEnough</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pwd</span><span class="jsdoc-syntax">, 6) || !</span><span class="jsdoc-var">this.IsLongEnough</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">pwd</span><span class="jsdoc-syntax">, 0);
     }
 
-})</span></code></body></html>
\ No newline at end of file
+});</span></code></body></html>
\ No newline at end of file
index 1a6c657..cb914e5 100644 (file)
      * &lt;p&gt;
      * @param {Object} options An object containing properties which control loading options:&lt;ul&gt;
      * &lt;li&gt;params {Object} An object containing properties to pass as HTTP parameters to a remote data source.&lt;/li&gt;
      * &lt;p&gt;
      * @param {Object} options An object containing properties which control loading options:&lt;ul&gt;
      * &lt;li&gt;params {Object} An object containing properties to pass as HTTP parameters to a remote data source.&lt;/li&gt;
+     * &lt;li&gt;params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
+     * &lt;pre&gt;
+                {
+                    data : data,  // array of key=&gt;value data like JsonReader
+                    total : data.length,
+                    success : true
+                    
+                }
+        &lt;/pre&gt;
+            }.&lt;/li&gt;
      * &lt;li&gt;callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:&lt;ul&gt;
      * &lt;li&gt;r : Roo.data.Record[]&lt;/li&gt;
      * &lt;li&gt;callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:&lt;ul&gt;
      * &lt;li&gt;r : Roo.data.Record[]&lt;/li&gt;
index a79bdfd..1210410 100644 (file)
@@ -549,12 +549,13 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
      * @param {Boolean} asString
      * @return {Object}
      */
      * @param {Boolean} asString
      * @return {Object}
      */
-    </span><span class="jsdoc-var">getValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">asString</span><span class="jsdoc-syntax">){
+    </span><span class="jsdoc-var">getValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">asString</span><span class="jsdoc-syntax">)
+    {
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-comment">// copy values from the child forms
             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">) {
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-comment">// copy values from the child forms
             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">this.setValues</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.getValues</span><span class="jsdoc-syntax">());
-            }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">this.setValues</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.getFieldValues</span><span class="jsdoc-syntax">()); </span><span class="jsdoc-comment">// get the full set of data, as we might be copying comboboxes from external into this one.
+            </span><span class="jsdoc-syntax">}, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
         }
 
         </span><span class="jsdoc-comment">// use formdata
         }
 
         </span><span class="jsdoc-comment">// use formdata
@@ -586,21 +587,31 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
     </span><span class="jsdoc-comment">/**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
     </span><span class="jsdoc-comment">/**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
+     * Normally this will not return readOnly data 
+     * @param {Boolean} with_readonly return readonly field data.
      * @return {Object}
      */
      * @return {Object}
      */
-    </span><span class="jsdoc-var">getFieldValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">with_hidden</span><span class="jsdoc-syntax">)
+    </span><span class="jsdoc-var">getFieldValues </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">with_readonly</span><span class="jsdoc-syntax">)
     {
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-comment">// copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">) {
     {
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-comment">// copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.childForms</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">this.setValues</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.getValues</span><span class="jsdoc-syntax">());
+                </span><span class="jsdoc-var">this.setValues</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.getFieldValues</span><span class="jsdoc-syntax">());
             }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
         }
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= {};
         </span><span class="jsdoc-var">this.items.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">){
             }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
         }
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ret </span><span class="jsdoc-syntax">= {};
         </span><span class="jsdoc-var">this.items.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">){
+
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.readOnly </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">with_readonly </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">// skip read only values. - this is in theory to stop 'old' values being copied over new ones
+                        // if a subform contains a copy of them.
+                        // if you have subforms with the same editable data, you will need to copy the data back
+                        // and forth.
+            </span><span class="jsdoc-syntax">}
+
             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">f.getName</span><span class="jsdoc-syntax">()) {
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">f.getName</span><span class="jsdoc-syntax">()) {
                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
             }
index 21968c6..7fe3e90 100644 (file)
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     </span><span class="jsdoc-var">disabledDatesText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Disabled&quot;</span><span class="jsdoc-syntax">,
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     </span><span class="jsdoc-var">disabledDatesText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Disabled&quot;</span><span class="jsdoc-syntax">,
+
+
+       </span><span class="jsdoc-comment">/**
+     * @cfg {Date/String} zeroValue
+     * if the date is less that this number, then the field is rendered as empty
+     * default is 1800
+     */
+       </span><span class="jsdoc-var">zeroValue </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'1800-01-01'</span><span class="jsdoc-syntax">,
+
+
     </span><span class="jsdoc-comment">/**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
     </span><span class="jsdoc-comment">/**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
@@ -273,6 +283,15 @@ dateField.setValue('2006-5-4');
 
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">parseDate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">){
 
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">parseDate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">){
+
+               </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">) {
+                       </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">Date.parseDate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.zeroValue</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'Y-m-d'</span><span class="jsdoc-syntax">) ) {
+                               </span><span class="jsdoc-keyword">return  </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+                       }
+                       </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">;
+               }
+
+
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">value </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">;
         }
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">value </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">){
             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">;
         }
@@ -288,6 +307,9 @@ dateField.setValue('2006-5-4');
                 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Date.parseDate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.altFormatsArray</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
             }
         }
                 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Date.parseDate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.altFormatsArray</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
             }
         }
+               </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">Date.parseDate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.zeroValue</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'Y-m-d'</span><span class="jsdoc-syntax">) ) {
+                       </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+               }
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
     },
 
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
     },
 
index 8d6ff55..98dc47c 100644 (file)
@@ -59,7 +59,7 @@
     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 500,
 
     </span><span class="jsdoc-comment">/**
     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 500,
 
     </span><span class="jsdoc-comment">/**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .
      * 
      */
     </span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
      * 
      */
     </span><span class="jsdoc-var">stylesheets</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     </span><span class="jsdoc-var">allowComments</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     </span><span class="jsdoc-var">allowComments</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+    </span><span class="jsdoc-comment">/**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    </span><span class="jsdoc-var">enableBlocks </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+
+    </span><span class="jsdoc-comment">/**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    </span><span class="jsdoc-var">autoClean</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+    </span><span class="jsdoc-comment">/**
+     * @cfg {string} bodyCls default '' default classes to add to body of editable area - usually undoreset is a good start..
+     */
+    </span><span class="jsdoc-var">bodyCls </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
+    </span><span class="jsdoc-comment">/**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    </span><span class="jsdoc-var">language</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'en'</span><span class="jsdoc-syntax">,
+
 
     </span><span class="jsdoc-comment">// id of frame..
     </span><span class="jsdoc-var">frameId</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
 
     </span><span class="jsdoc-comment">// id of frame..
     </span><span class="jsdoc-var">frameId</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
             * 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-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-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-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-comment">/**
+     * get the Context selected node
+     * @returns {DomElement|boolean} selected node if active or false if none
+     * 
+     */
+    </span><span class="jsdoc-var">getSelectedNode </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
+    {
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.toolbars.length </span><span class="jsdoc-syntax">&lt; 2 || !</span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[1]</span><span class="jsdoc-var">.tb</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">return false</span><span class="jsdoc-syntax">;
+        }
+        </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[1]</span><span class="jsdoc-var">.tb.selectedNode</span><span class="jsdoc-syntax">;
 
 
-
+    },
     </span><span class="jsdoc-comment">// private
     </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">)
     {
     </span><span class="jsdoc-comment">// private
     </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">)
     {
             </span><span class="jsdoc-var">this.el.removeClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-hidden'</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-var">this.el.dom.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'tabIndex'</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-var">this.el.focus</span><span class="jsdoc-syntax">();
             </span><span class="jsdoc-var">this.el.removeClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-hidden'</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-var">this.el.dom.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'tabIndex'</span><span class="jsdoc-syntax">);
             </span><span class="jsdoc-var">this.el.focus</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-var">this.el.dom.scrollTop </span><span class="jsdoc-syntax">= 0;
+
 
             </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">this.toolbars.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</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">i</span><span class="jsdoc-syntax">] </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext</span><span class="jsdoc-syntax">){
 
             </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">this.toolbars.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</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">i</span><span class="jsdoc-syntax">] </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext</span><span class="jsdoc-syntax">){
         </span><span class="jsdoc-var">this.editorcore.pushValue</span><span class="jsdoc-syntax">();
     },
 
         </span><span class="jsdoc-var">this.editorcore.pushValue</span><span class="jsdoc-syntax">();
     },
 
+    </span><span class="jsdoc-comment">/**
+     * update the language in the body - really done by core
+     * @param {String} language - eg. en / ar / zh-CN etc..
+     */
+    </span><span class="jsdoc-var">updateLanguage </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lang</span><span class="jsdoc-syntax">)
+    {
+        </span><span class="jsdoc-var">this.language </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lang</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.editorcore.language </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">lang</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.editorcore.updateLanguage</span><span class="jsdoc-syntax">();
 
 
+    },
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">deferFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
         </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">);
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">deferFocus </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
         </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">);
index 5a474b5..f12c515 100644 (file)
 
 
 </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types </span><span class="jsdoc-syntax">= {
 
 
 </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types </span><span class="jsdoc-syntax">= {
-    </span><span class="jsdoc-string">'IMG' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: {
+    </span><span class="jsdoc-string">'IMG' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
-        </span><span class="jsdoc-var">height</span><span class="jsdoc-syntax">:  {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'height'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Height&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Height&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
-        </span><span class="jsdoc-var">align</span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Align&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [ [</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;left&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;right&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;center&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;top&quot;</span><span class="jsdoc-syntax">]],
             </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: 80
 
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Align&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [ [</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;left&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;right&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;center&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;top&quot;</span><span class="jsdoc-syntax">]],
             </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: 80
 
         },
-        </span><span class="jsdoc-var">border</span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'border'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Border&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Border&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         },
-        </span><span class="jsdoc-var">alt</span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'alt'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Alt&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Alt&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">src </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'src'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Src&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 220
         }
 
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Src&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 220
         }
 
-    },
-    </span><span class="jsdoc-string">'A' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: {
+    ],
+
+    </span><span class="jsdoc-string">'FIGURE' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'align'</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Align&quot;</span><span class="jsdoc-syntax">,
+            </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [ [</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;left&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;right&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;center&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;top&quot;</span><span class="jsdoc-syntax">]],
+            </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: 80
+        }
+    ],
+    </span><span class="jsdoc-string">'A' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 50
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 50
         },
-        </span><span class="jsdoc-var">target</span><span class="jsdoc-syntax">:  {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'target'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Target&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Target&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">href</span><span class="jsdoc-syntax">:  {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Href&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 220
         } </span><span class="jsdoc-comment">// border?
 
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Href&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 220
         } </span><span class="jsdoc-comment">// border?
 
-    </span><span class="jsdoc-syntax">},
-    </span><span class="jsdoc-string">'TABLE' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">rows </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Rows&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
-        },
-        </span><span class="jsdoc-var">cols </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Cols&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
-        },
-        </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
-        },
-        </span><span class="jsdoc-var">height </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Height&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
-        },
-        </span><span class="jsdoc-var">border </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Border&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
-        }
-    },
-    </span><span class="jsdoc-string">'TD' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
-        },
-        </span><span class="jsdoc-var">height </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Height&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
-        },
-        </span><span class="jsdoc-var">align</span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Align&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [[</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;left&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;center&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;right&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;justify&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;char&quot;</span><span class="jsdoc-syntax">]],
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 80
-        },
-        </span><span class="jsdoc-var">valign</span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Valign&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">: [[</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;top&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;middle&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;bottom&quot;</span><span class="jsdoc-syntax">],[ </span><span class="jsdoc-string">&quot;baseline&quot;</span><span class="jsdoc-syntax">]],
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 80
-        },
-        </span><span class="jsdoc-var">colspan</span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Colspan&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
+    </span><span class="jsdoc-syntax">],
 
 
-        },
-         </span><span class="jsdoc-string">'font-family'  </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Font&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'fontFamily'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">optname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'font-family'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 140
-        }
-    },
-    </span><span class="jsdoc-string">'INPUT' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: {
+    </span><span class="jsdoc-string">'INPUT' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'value'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Value&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Value&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">width </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'width'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         }
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Width&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 40
         }
-    },
-    </span><span class="jsdoc-string">'LABEL' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-string">'for' </span><span class="jsdoc-syntax">: {
+    ],
+    </span><span class="jsdoc-string">'LABEL' </span><span class="jsdoc-syntax">: [
+         {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'for'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;For&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         }
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;For&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         }
-    },
-    </span><span class="jsdoc-string">'TEXTAREA' </span><span class="jsdoc-syntax">: {
-          </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: {
+    ],
+    </span><span class="jsdoc-string">'TEXTAREA' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">rows </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'rows'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Rows&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Rows&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
         },
-        </span><span class="jsdoc-var">cols </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'cols'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Cols&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
         }
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Cols&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 20
         }
-    },
-    </span><span class="jsdoc-string">'SELECT' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: {
+    ],
+    </span><span class="jsdoc-string">'SELECT' </span><span class="jsdoc-syntax">: [
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'name'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;name&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 120
         },
-        </span><span class="jsdoc-var">selectoptions </span><span class="jsdoc-syntax">: {
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'selectoptions'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Options&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 200
         }
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Options&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 200
         }
-    },
+    ],
 
     </span><span class="jsdoc-comment">// should we really allow this??
     // should this just be 
 
     </span><span class="jsdoc-comment">// should we really allow this??
     // should this just be 
-    </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: {
+    </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">: [
+
+        {
+            </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'title'</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Title&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 200,
             </span><span class="jsdoc-var">disabled </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
         </span><span class="jsdoc-syntax">}
             </span><span class="jsdoc-var">title</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Title&quot;</span><span class="jsdoc-syntax">,
             </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 200,
             </span><span class="jsdoc-var">disabled </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
         </span><span class="jsdoc-syntax">}
-    },
-    </span><span class="jsdoc-string">'SPAN' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-string">'font-family'  </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Font&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'fontFamily'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">optname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'font-family'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 140
-        }
-    },
-    </span><span class="jsdoc-string">'DIV' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-string">'font-family'  </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Font&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'fontFamily'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">optname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'font-family'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 140
-        }
-    },
-     </span><span class="jsdoc-string">'P' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-string">'font-family'  </span><span class="jsdoc-syntax">: {
-            </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Font&quot;</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'fontFamily'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">optname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'font-family'</span><span class="jsdoc-syntax">,
-            </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 140
-        }
-    },
+    ],
 
 
-    </span><span class="jsdoc-string">'*' </span><span class="jsdoc-syntax">: {
-        </span><span class="jsdoc-comment">// empty..
-    </span><span class="jsdoc-syntax">}
+    </span><span class="jsdoc-string">'*' </span><span class="jsdoc-syntax">: [
+        </span><span class="jsdoc-comment">// empty.
+    </span><span class="jsdoc-syntax">]
 
 };
 
 
 };
 
         // disable everything...
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-var">this.toolbars </span><span class="jsdoc-syntax">= {};
         // disable everything...
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-var">this.toolbars </span><span class="jsdoc-syntax">= {};
-
+        </span><span class="jsdoc-comment">// block toolbars are built in updateToolbar when needed.
         </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">ty</span><span class="jsdoc-syntax">) {
 
             </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.buildToolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">],</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
         </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">ty</span><span class="jsdoc-syntax">) {
 
             </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.buildToolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">],</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
-    </span><span class="jsdoc-var">updateToolbar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">editor</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ev</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">){
+    </span><span class="jsdoc-var">updateToolbar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">editor </span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">ev</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">)
+    {
+
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">ev.stopEvent</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// se if we can stop this looping with mutiple events.
+        </span><span class="jsdoc-syntax">}
 
         </span><span class="jsdoc-comment">//Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
 
         </span><span class="jsdoc-comment">//Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
              </span><span class="jsdoc-var">this.editor.onFirstFocus</span><span class="jsdoc-syntax">();
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
              </span><span class="jsdoc-var">this.editor.onFirstFocus</span><span class="jsdoc-syntax">();
             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
         }
+        </span><span class="jsdoc-comment">//Roo.log(ev ? ev.target : 'NOTARGET');
 
 
 
 
-
-        </span><span class="jsdoc-comment">// http://developer.yahoo.com/yui/docs/simple-editor.js.html
+        // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
         // selectNode - might want to handle IE?
+
+
+
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev </span><span class="jsdoc-syntax">&amp;&amp;
             (</span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'mouseup' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'click' </span><span class="jsdoc-syntax">) &amp;&amp;
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev </span><span class="jsdoc-syntax">&amp;&amp;
             (</span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'mouseup' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">ev.type </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'click' </span><span class="jsdoc-syntax">) &amp;&amp;
-            </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">ev.target.tagName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'IMG'</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">// they have click on an image...
+            </span><span class="jsdoc-var">ev.target </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">ev.target.tagName </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY' </span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// &amp;&amp; ev.target.tagName == 'IMG') {
+            // they have click on an image...
             // let's see if we can change the selection...
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ev.target</span><span class="jsdoc-syntax">;
 
             // let's see if we can change the selection...
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ev.target</span><span class="jsdoc-syntax">;
 
-              </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">nodeRange </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.ownerDocument.createRange</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-keyword">try </span><span class="jsdoc-syntax">{
-                </span><span class="jsdoc-var">nodeRange.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
-            } </span><span class="jsdoc-keyword">catch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">nodeRange.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-comment">//nodeRange.collapse(true);
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.win.getSelection</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-var">s.removeAllRanges</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-var">s.addRange</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nodeRange</span><span class="jsdoc-syntax">);
-        }
+            </span><span class="jsdoc-comment">// this triggers looping?
+            //this.editorcore.selectNode(sel);
 
 
+        </span><span class="jsdoc-syntax">}
+
+        </span><span class="jsdoc-comment">// this forces an id..
+        </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.editorcore.doc.body.querySelectorAll</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'.roo-ed-selection'</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">e</span><span class="jsdoc-syntax">) {
+             </span><span class="jsdoc-var">e.classList.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'roo-ed-selection'</span><span class="jsdoc-syntax">);
+        });
+        </span><span class="jsdoc-comment">//Roo.select('.roo-ed-selection', false, this.editorcore.doc).removeClass('roo-ed-selection');
+        //Roo.get(node).addClass('roo-ed-selection');
 
 
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">updateFooter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
+        //var updateFooter = sel ? false : true; 
 
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getAllAncestors</span><span class="jsdoc-syntax">();
 
         </span><span class="jsdoc-comment">// pick
 
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getAllAncestors</span><span class="jsdoc-syntax">();
 
         </span><span class="jsdoc-comment">// pick
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ty </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.types</span><span class="jsdoc-syntax">;
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans.length </span><span class="jsdoc-syntax">? (</span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[0] ?  </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[0]  : </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[1]) : </span><span class="jsdoc-var">this.editorcore.doc.body</span><span class="jsdoc-syntax">;
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">) {
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans.length </span><span class="jsdoc-syntax">? (</span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[0] ?  </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[0]  : </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[1]) : </span><span class="jsdoc-var">this.editorcore.doc.body</span><span class="jsdoc-syntax">;
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.tagName.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.editorcore.doc.body</span><span class="jsdoc-syntax">;
 
         }
             </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.tagName.length </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.editorcore.doc.body</span><span class="jsdoc-syntax">;
 
         }
-        </span><span class="jsdoc-comment">// pick a menu that exists..
+
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.tagName.toUpperCase</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.tagName.toUpperCase</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-comment">//sel = typeof(ty[tn]) != 'undefined' ? sel : this.editor.doc.body;
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tb.selectedNode</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.tb.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">left_label </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">;
 
 
-        </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.tagName.toUpperCase</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-comment">// ok see if we are editing a block?
 
 
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tb.selectedNode</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-comment">// you are not actually selecting the block.
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">sel.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">)) {
+            </span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">;
+        } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">sel.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'[data-block]'</span><span class="jsdoc-syntax">)) {
 
 
-        </span><span class="jsdoc-var">this.tb.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-var">db </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.closest</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'[data-block]'</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-comment">//var cepar = sel.closest('[contenteditable=true]');
+            //if (db &amp;&amp; cepar &amp;&amp; cepar.tagName != 'BODY') {
+            //   db = false; // we are inside an editable block.. = not sure how we are going to handle nested blocks!?
+            //}   
+        </span><span class="jsdoc-syntax">}
 
 
-        </span><span class="jsdoc-comment">// if current menu does not match..
 
 
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">this.tb.name </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">) || (</span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.tb.selectedNode</span><span class="jsdoc-syntax">) || </span><span class="jsdoc-var">ev </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">block </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-comment">//if (db &amp;&amp; !sel.hasAttribute('contenteditable') &amp;&amp; sel.getAttribute('contenteditable') != 'true' ) {
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">db </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">block </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">db</span><span class="jsdoc-syntax">);
 
 
-            </span><span class="jsdoc-var">this.tb.el.hide</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-comment">///console.log(&quot;show: &quot; + tn);
-            </span><span class="jsdoc-var">this.tb </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ty</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">];
-            </span><span class="jsdoc-var">this.tb.el.show</span><span class="jsdoc-syntax">();
-            </span><span class="jsdoc-comment">// update name
-            </span><span class="jsdoc-var">this.tb.items.first</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">':&amp;nbsp;'</span><span class="jsdoc-syntax">;
 
 
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
+                 </span><span class="jsdoc-var">db.className </span><span class="jsdoc-syntax">= (
+                        </span><span class="jsdoc-var">db.classList.length </span><span class="jsdoc-syntax">&gt; 0  ? </span><span class="jsdoc-var">db.className </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">' ' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''
+                    </span><span class="jsdoc-syntax">)  + </span><span class="jsdoc-string">'roo-ed-selection'</span><span class="jsdoc-syntax">;
 
 
-            </span><span class="jsdoc-comment">// update attributes
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.fields</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">this.tb.fields.each</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-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.stylename</span><span class="jsdoc-syntax">) {
-                        </span><span class="jsdoc-var">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e.stylename</span><span class="jsdoc-syntax">]);
-                        </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
-                    }
-                   </span><span class="jsdoc-var">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.attrname</span><span class="jsdoc-syntax">));
-                });
-            }
+                 </span><span class="jsdoc-comment">// since we removed it earlier... its not there..
+                </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'BLOCK.' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">db.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">);
 
 
-            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-            </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.styles</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
-                </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
+                </span><span class="jsdoc-comment">//this.editorcore.selectNode(db);
+                </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.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
+                   </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">] = </span><span class="jsdoc-var">this.buildToolbar</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">false  </span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">block.friendly_name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">);
+                }
+                </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">db</span><span class="jsdoc-syntax">;
+                </span><span class="jsdoc-var">left_label </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">block.friendly_name</span><span class="jsdoc-syntax">;
+                </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getAllAncestors</span><span class="jsdoc-syntax">();
             }
 
             }
 
-            </span><span class="jsdoc-comment">// update styles
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">hasStyles</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tb.fields.item</span><span class="jsdoc-syntax">(0);
 
 
-                </span><span class="jsdoc-var">st.store.removeAll</span><span class="jsdoc-syntax">();
+
+        }
 
 
 
 
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.className.split</span><span class="jsdoc-syntax">(/\s+/);
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.name </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">tn </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">lastSel </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">this.tb.selectedNode </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">ev </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-comment">// no change?
+        </span><span class="jsdoc-syntax">}
 
 
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">avs </span><span class="jsdoc-syntax">= [];
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">]) {
 
 
-                    </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
-                        </span><span class="jsdoc-var">avs.push</span><span class="jsdoc-syntax">( [ </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cn.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) &gt; -1 ? 1 : 0 ] );
-                    });
-                }
-                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]) {
-                    </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
-                        </span><span class="jsdoc-var">avs.push</span><span class="jsdoc-syntax">( [ </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cn.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) &gt; -1 ? 1 : 0 ] );
-                    });
-                }
 
 
-                </span><span class="jsdoc-var">st.store.loadData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">avs</span><span class="jsdoc-syntax">);
-                </span><span class="jsdoc-var">st.collapse</span><span class="jsdoc-syntax">();
-                </span><span class="jsdoc-var">st.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">);
-            }
-            </span><span class="jsdoc-comment">// flag our selected Node.
-            </span><span class="jsdoc-var">this.tb.selectedNode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">this.tb.el.hide</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-comment">///console.log(&quot;show: &quot; + tn);
+        </span><span class="jsdoc-var">this.tb </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">] : </span><span class="jsdoc-var">this.toolbars</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">];
 
 
+        </span><span class="jsdoc-var">this.tb.el.show</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-comment">// update name
+        </span><span class="jsdoc-var">this.tb.items.first</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.el.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">left_label </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">':&amp;nbsp;'</span><span class="jsdoc-syntax">;
 
 
-            </span><span class="jsdoc-var">Roo.menu.MenuMgr.hideAll</span><span class="jsdoc-syntax">();
 
 
-        }
+        </span><span class="jsdoc-comment">// update attributes
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.tb.fields</span><span class="jsdoc-syntax">) {
 
 
-        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">updateFooter</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-comment">//this.footDisp.dom.innerHTML = ''; 
-            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-var">this.tb.fields.each</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">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e.name</span><span class="jsdoc-syntax">]);
+            });
+
+
+        } </span><span class="jsdoc-keyword">else  if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.fields </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.tb.selectedNode</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">this.tb.fields.each</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-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.stylename</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-var">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.selectedNode.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">e.stylename</span><span class="jsdoc-syntax">]);
+                    </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+                }
+                </span><span class="jsdoc-var">e.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.selectedNode.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.attrname</span><span class="jsdoc-syntax">));
+            }, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">this.updateToolbarStyles</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.tb.selectedNode</span><span class="jsdoc-syntax">);
         }
         }
+
+
+
+        </span><span class="jsdoc-var">Roo.menu.MenuMgr.hideAll</span><span class="jsdoc-syntax">();
+
+
+
+
         </span><span class="jsdoc-comment">// update the footer
         //
         </span><span class="jsdoc-comment">// update the footer
         //
+        </span><span class="jsdoc-var">this.updateFooter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">);
+
+    },
+
+    </span><span class="jsdoc-var">updateToolbarStyles </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">)
+    {
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </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.styles</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
+        }
+
+        </span><span class="jsdoc-comment">// update styles
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">hasStyles </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.tb.hasStyles</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">st </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.tb.fields.item</span><span class="jsdoc-syntax">(0);
+
+            </span><span class="jsdoc-var">st.store.removeAll</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sel.className.split</span><span class="jsdoc-syntax">(/\s+/);
+
+            </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">avs </span><span class="jsdoc-syntax">= [];
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">]) {
+
+                </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-var">avs.push</span><span class="jsdoc-syntax">( [ </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cn.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) &gt; -1 ? 1 : 0 ] );
+                });
+            }
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">]) {
+                </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tn</span><span class="jsdoc-syntax">], </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-var">avs.push</span><span class="jsdoc-syntax">( [ </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">cn.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) &gt; -1 ? 1 : 0 ] );
+                });
+            }
+
+            </span><span class="jsdoc-var">st.store.loadData</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">avs</span><span class="jsdoc-syntax">);
+            </span><span class="jsdoc-var">st.collapse</span><span class="jsdoc-syntax">();
+            </span><span class="jsdoc-var">st.setValue</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cn</span><span class="jsdoc-syntax">);
+        }
+    },
+
+
+    </span><span class="jsdoc-var">updateFooter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">)
+    {
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">this.footDisp.dom.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+            </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+        }
 
         </span><span class="jsdoc-var">this.footerEls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans.reverse</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.footerEls</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
 
         </span><span class="jsdoc-var">this.footerEls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans.reverse</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">Roo.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.footerEls</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
 
         </span><span class="jsdoc-var">this.footDisp.dom.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
 
 
         </span><span class="jsdoc-var">this.footDisp.dom.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">;
 
-        </span><span class="jsdoc-comment">//this.editorsyncValue();
-    </span><span class="jsdoc-syntax">},
-
 
 
+    },
 
 
     </span><span class="jsdoc-comment">// private
 
 
     </span><span class="jsdoc-comment">// private
            </span><span class="jsdoc-var">item.enable</span><span class="jsdoc-syntax">();
         });
     },
            </span><span class="jsdoc-var">item.enable</span><span class="jsdoc-syntax">();
         });
     },
-    </span><span class="jsdoc-var">buildToolbar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nm</span><span class="jsdoc-syntax">)
+    </span><span class="jsdoc-var">buildToolbar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nm</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">friendly_name</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">block</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.editor</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">editorcore </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">editor </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editor</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">editorcore </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">tb </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.Toolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">wdiv</span><span class="jsdoc-syntax">);
 
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tb </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.Toolbar</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">wdiv</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-comment">// add the name..
+        </span><span class="jsdoc-comment">///this.tb = tb; // &lt;&lt; this sets the active toolbar..
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">tlist </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">block.contextMenu</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+        }
 
 
-        </span><span class="jsdoc-var">tb.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nm</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;:&amp;nbsp;&quot;</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-var">tb.hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-var">tb.name </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nm</span><span class="jsdoc-syntax">;
+
+        </span><span class="jsdoc-var">tb.add</span><span class="jsdoc-syntax">((</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">friendly_name</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">nm </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">friendly_name</span><span class="jsdoc-syntax">) + </span><span class="jsdoc-string">&quot;:&amp;nbsp;&quot;</span><span class="jsdoc-syntax">);
+
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.from</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.styles</span><span class="jsdoc-syntax">);
 
 
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">= [];
-        </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.styles</span><span class="jsdoc-syntax">) {
-            </span><span class="jsdoc-var">styles.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">);
-        }
 
         </span><span class="jsdoc-comment">// styles...
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">styles.length</span><span class="jsdoc-syntax">) {
 
         </span><span class="jsdoc-comment">// styles...
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">styles </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">styles.length</span><span class="jsdoc-syntax">) {
-
+            </span><span class="jsdoc-var">tb.hasStyles </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
             </span><span class="jsdoc-comment">// this needs a multi-select checkbox...
             </span><span class="jsdoc-var">tb.addField</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.form.ComboBox</span><span class="jsdoc-syntax">({
                 </span><span class="jsdoc-var">store</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.data.SimpleStore</span><span class="jsdoc-syntax">({
             </span><span class="jsdoc-comment">// this needs a multi-select checkbox...
             </span><span class="jsdoc-var">tb.addField</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.form.ComboBox</span><span class="jsdoc-syntax">({
                 </span><span class="jsdoc-var">store</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.data.SimpleStore</span><span class="jsdoc-syntax">({
         }
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tbc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext</span><span class="jsdoc-syntax">;
         }
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tbc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext</span><span class="jsdoc-syntax">;
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tbops </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tbc.options</span><span class="jsdoc-syntax">;
 
 
-        </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">tlist</span><span class="jsdoc-syntax">) {
+
+        </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">tlist.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
+
+            </span><span class="jsdoc-comment">// newer versions will use xtype cfg to create menus.
+            </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">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.xtype</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
+
+                </span><span class="jsdoc-var">tb</span><span class="jsdoc-syntax">[</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">)== </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'add' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'addField'</span><span class="jsdoc-syntax">](</span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]));
+
+
+                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
+            }
 
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
             </span><span class="jsdoc-var">tb.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item.title </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;:&amp;nbsp;&quot;</span><span class="jsdoc-syntax">);
 
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
             </span><span class="jsdoc-var">tb.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item.title </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;:&amp;nbsp;&quot;</span><span class="jsdoc-syntax">);
 
             </span><span class="jsdoc-comment">//optname == used so you can configure the options available..
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">item.opts </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.opts </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
 
             </span><span class="jsdoc-comment">//optname == used so you can configure the options available..
             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">item.opts </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.opts </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
-            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item.optname</span><span class="jsdoc-syntax">) {
-                </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tbops</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">item.optname</span><span class="jsdoc-syntax">];
+            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item.optname</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// use the b
+                </span><span class="jsdoc-var">opts </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.form.HtmlEditor.ToolbarContext.options</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">item.optname</span><span class="jsdoc-syntax">];
 
             }
 
 
             }
 
                         </span><span class="jsdoc-var">fields</span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">],
                         </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">opts
                     </span><span class="jsdoc-syntax">}),
                         </span><span class="jsdoc-var">fields</span><span class="jsdoc-syntax">: [</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'display'</span><span class="jsdoc-syntax">],
                         </span><span class="jsdoc-var">data </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">opts
                     </span><span class="jsdoc-syntax">}),
-                    </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'-roo-edit-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">,
-                    </span><span class="jsdoc-var">attrname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">,
+                    </span><span class="jsdoc-var">name </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'-roo-edit-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">,
+
+                    </span><span class="jsdoc-var">attrname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">stylename </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.style </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">stylename </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.style </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.style </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+
                     </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.displayField </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.displayField </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">valueField </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">typeAhead</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">displayField</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.displayField </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.displayField </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">valueField </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">typeAhead</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
-                    </span><span class="jsdoc-var">mode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tbc.stores</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'undefined'  </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'remote' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'local'</span><span class="jsdoc-syntax">,
+                    </span><span class="jsdoc-var">mode</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tbc.stores</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">]) != </span><span class="jsdoc-string">'undefined'  </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">'remote' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'local'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">editable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">triggerAction</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'all'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">emptyText</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">'Select'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">editable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">triggerAction</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'all'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">emptyText</span><span class="jsdoc-syntax">:</span><span class="jsdoc-string">'Select'</span><span class="jsdoc-syntax">,
                     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.width </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.width  </span><span class="jsdoc-syntax">: 130,
                     </span><span class="jsdoc-var">listeners </span><span class="jsdoc-syntax">: {
                         </span><span class="jsdoc-string">'select'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
                     </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.width </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">item.width  </span><span class="jsdoc-syntax">: 130,
                     </span><span class="jsdoc-var">listeners </span><span class="jsdoc-syntax">: {
                         </span><span class="jsdoc-string">'select'</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">) {
+
+
                             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c.stylename</span><span class="jsdoc-syntax">) {
                                 </span><span class="jsdoc-var">tb.selectedNode.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">c.stylename</span><span class="jsdoc-syntax">] =  </span><span class="jsdoc-var">r.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">);
                             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c.stylename</span><span class="jsdoc-syntax">) {
                                 </span><span class="jsdoc-var">tb.selectedNode.style</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">c.stylename</span><span class="jsdoc-syntax">] =  </span><span class="jsdoc-var">r.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">);
+                                </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
+                                </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+                            }
+                            </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">r </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
+                                </span><span class="jsdoc-var">tb.selectedNode.removeAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c.attrname</span><span class="jsdoc-syntax">);
+                                </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                             }
                             </span><span class="jsdoc-var">tb.selectedNode.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c.attrname</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">));
                                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
                             }
                             </span><span class="jsdoc-var">tb.selectedNode.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c.attrname</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">r.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'val'</span><span class="jsdoc-syntax">));
+                            </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                         }
                     }
 
                         }
                     }
 
                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
 
 
                 </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
 
 
-
-                </span><span class="jsdoc-var">tb.addField</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.form.TextField</span><span class="jsdoc-syntax">({
-                    </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">,
-                    </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: 100,
-                    </span><span class="jsdoc-comment">//allowBlank:false,
-                    </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''
-                </span><span class="jsdoc-syntax">}));
-                </span><span class="jsdoc-keyword">continue</span><span class="jsdoc-syntax">;
-            }
+                </span><span class="jsdoc-comment">/*
+                tb.addField( new Roo.form.TextField({
+                    name: i,
+                    width: 100,
+                    //allowBlank:false,
+                    value: ''
+                }));
+                continue;
+                */
+            </span><span class="jsdoc-syntax">}
             </span><span class="jsdoc-var">tb.addField</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.form.TextField</span><span class="jsdoc-syntax">({
             </span><span class="jsdoc-var">tb.addField</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.form.TextField</span><span class="jsdoc-syntax">({
-                </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'-roo-edit-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">,
-                </span><span class="jsdoc-var">attrname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">name</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'-roo-edit-' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">attrname </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">tlist</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.name</span><span class="jsdoc-syntax">,
 
                 </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.width</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-comment">//allowBlank:true,
                 </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">listeners</span><span class="jsdoc-syntax">: {
                     </span><span class="jsdoc-string">'change' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nv</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ov</span><span class="jsdoc-syntax">) {
 
                 </span><span class="jsdoc-var">width</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">item.width</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-comment">//allowBlank:true,
                 </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">listeners</span><span class="jsdoc-syntax">: {
                     </span><span class="jsdoc-string">'change' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nv</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">ov</span><span class="jsdoc-syntax">) {
+
+
                         </span><span class="jsdoc-var">tb.selectedNode.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.attrname</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nv</span><span class="jsdoc-syntax">);
                         </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                     }
                         </span><span class="jsdoc-var">tb.selectedNode.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">f.attrname</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">nv</span><span class="jsdoc-syntax">);
                         </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                     }
         }
 
         </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">;
         }
 
         </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">;
-
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">show_delete </span><span class="jsdoc-syntax">= !</span><span class="jsdoc-var">block </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">block.deleteTitle </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nm </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">){
         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">nm </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">){
+            </span><span class="jsdoc-var">show_delete </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
             </span><span class="jsdoc-var">tb.addSeparator</span><span class="jsdoc-syntax">();
 
             </span><span class="jsdoc-var">tb.addButton</span><span class="jsdoc-syntax">( {
             </span><span class="jsdoc-var">tb.addSeparator</span><span class="jsdoc-syntax">();
 
             </span><span class="jsdoc-var">tb.addButton</span><span class="jsdoc-syntax">( {
         }
 
         </span><span class="jsdoc-var">tb.addFill</span><span class="jsdoc-syntax">();
         }
 
         </span><span class="jsdoc-var">tb.addFill</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-var">tb.addButton</span><span class="jsdoc-syntax">( {
-            </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove Tag'</span><span class="jsdoc-syntax">,
-
-            </span><span class="jsdoc-var">listeners </span><span class="jsdoc-syntax">: {
-                </span><span class="jsdoc-var">click </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
-                {
-                    </span><span class="jsdoc-comment">// remove
-                    // undo does not work.
-
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">;
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">show_delete</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">tb.addButton</span><span class="jsdoc-syntax">({
+                </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">block </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">block.deleteTitle </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">block.deleteTitle  </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove Block or Formating'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// remove the tag, and puts the children outside...
 
 
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">pn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.parentNode</span><span class="jsdoc-syntax">;
-
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">stn </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">sn.childNodes</span><span class="jsdoc-syntax">[0];
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">en </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.childNodes</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">sn.childNodes.length </span><span class="jsdoc-syntax">- 1 ];
-                    </span><span class="jsdoc-keyword">while </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.childNodes.length</span><span class="jsdoc-syntax">) {
-                        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">node </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">sn.childNodes</span><span class="jsdoc-syntax">[0];
-                        </span><span class="jsdoc-var">sn.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">);
-                        </span><span class="jsdoc-comment">//Roo.log(node);
-                        </span><span class="jsdoc-var">pn.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">node</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-var">listeners </span><span class="jsdoc-syntax">: {
+                    </span><span class="jsdoc-var">click </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
+                    {
+                        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">;
+                        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">block</span><span class="jsdoc-syntax">) {
+                            </span><span class="jsdoc-var">sn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tb.selectedNode</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.removeNode</span><span class="jsdoc-syntax">();
 
 
-                    }
-                    </span><span class="jsdoc-var">pn.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">editorcore.createRange</span><span class="jsdoc-syntax">();
+                        }
+                        </span><span class="jsdoc-keyword">if </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-keyword">var </span><span class="jsdoc-var">stn </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">sn.childNodes</span><span class="jsdoc-syntax">[0] || </span><span class="jsdoc-var">sn.nextSibling </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">sn.previousSibling </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">sn.parentNode</span><span class="jsdoc-syntax">;
+                        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn.hasAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'data-block'</span><span class="jsdoc-syntax">)) {
+                            </span><span class="jsdoc-var">stn </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-var">sn.nextSibling </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">sn.previousSibling </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">sn.parentNode</span><span class="jsdoc-syntax">;
+                            </span><span class="jsdoc-var">sn.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
+
+                        } </span><span class="jsdoc-keyword">else 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 </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'BODY'</span><span class="jsdoc-syntax">) {
+                            </span><span class="jsdoc-comment">// remove and keep parents.
+                            </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.FilterKeepChildren</span><span class="jsdoc-syntax">({</span><span class="jsdoc-var">tag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">});
+                            </span><span class="jsdoc-var">a.replaceTag</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sn</span><span class="jsdoc-syntax">);
+                        }
 
 
-                    </span><span class="jsdoc-var">range.setStart</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stn</span><span class="jsdoc-syntax">,0);
-                    </span><span class="jsdoc-var">range.setEnd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">en</span><span class="jsdoc-syntax">,0); </span><span class="jsdoc-comment">//????
-                    //range.selectNode(sel);
 
 
+                        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">editorcore.createRange</span><span class="jsdoc-syntax">();
 
 
-                    </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">selection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">editorcore.getSelection</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">range.setStart</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stn</span><span class="jsdoc-syntax">,0);
+                        </span><span class="jsdoc-var">range.setEnd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">stn</span><span class="jsdoc-syntax">,0);
+                        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">selection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">editorcore.getSelection</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-comment">//_this.updateToolbar(null, null, pn);
+                        </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-var">_this.updateFooter</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
 
 
-                    </span><span class="jsdoc-comment">//_this.updateToolbar(null, null, pn);
-                    </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-var">_this.footDisp.dom.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
+                    }
                 }
                 }
-            }
 
 
 
 
 
 
 
 
-        });
-
+            });
+        }
 
         </span><span class="jsdoc-var">tb.el.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'click'</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">e.preventDefault</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// what does this do?
         </span><span class="jsdoc-syntax">});
         </span><span class="jsdoc-var">tb.el.setVisibilityMode</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">Roo.Element.DISPLAY</span><span class="jsdoc-syntax">);
         </span><span class="jsdoc-var">tb.el.hide</span><span class="jsdoc-syntax">();
 
         </span><span class="jsdoc-var">tb.el.on</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'click'</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">e.preventDefault</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// what does this do?
         </span><span class="jsdoc-syntax">});
         </span><span class="jsdoc-var">tb.el.setVisibilityMode</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">Roo.Element.DISPLAY</span><span class="jsdoc-syntax">);
         </span><span class="jsdoc-var">tb.el.hide</span><span class="jsdoc-syntax">();
-        </span><span class="jsdoc-var">tb.name </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">nm</span><span class="jsdoc-syntax">;
+
         </span><span class="jsdoc-comment">// dont need to disable them... as they will get hidden
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">tb</span><span class="jsdoc-syntax">;
 
         </span><span class="jsdoc-comment">// dont need to disable them... as they will get hidden
         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">tb</span><span class="jsdoc-syntax">;
 
 
 
     },
 
 
     },
+    </span><span class="jsdoc-comment">// when the footer contect changes
     </span><span class="jsdoc-var">onContextClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">dom</span><span class="jsdoc-syntax">)
     {
         </span><span class="jsdoc-var">ev.preventDefault</span><span class="jsdoc-syntax">();
     </span><span class="jsdoc-var">onContextClick </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">ev</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">dom</span><span class="jsdoc-syntax">)
     {
         </span><span class="jsdoc-var">ev.preventDefault</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.footerEls</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">];
 
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ans </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.footerEls</span><span class="jsdoc-syntax">;
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">sel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ans</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">];
 
-         </span><span class="jsdoc-comment">// pick
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">range </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.createRange</span><span class="jsdoc-syntax">();
-
-        </span><span class="jsdoc-var">range.selectNodeContents</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-comment">//range.selectNode(sel);
-
-
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">selection </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.editorcore.getSelection</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.editorcore.selectNode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">sel</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-var">sel</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-var">sel</span><span class="jsdoc-syntax">);
index e10bd2f..1b19c1f 100644 (file)
                     </span><span class="jsdoc-var">tabIndex</span><span class="jsdoc-syntax">:-1
                 });
             }
                     </span><span class="jsdoc-var">tabIndex</span><span class="jsdoc-syntax">:-1
                 });
             }
-             </span><span class="jsdoc-var">cmenu.menu.items.push</span><span class="jsdoc-syntax">({
+            </span><span class="jsdoc-var">cmenu.menu.items.push</span><span class="jsdoc-syntax">({
                 </span><span class="jsdoc-var">actiontype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'tablewidths'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove Table Widths'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
                 </span><span class="jsdoc-var">actiontype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'tablewidths'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Remove Table Widths'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
                 </span><span class="jsdoc-var">actiontype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'tidy'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Tidy HTML Source'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
                 </span><span class="jsdoc-var">actiontype </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'tidy'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'Tidy HTML Source'</span><span class="jsdoc-syntax">,
                 </span><span class="jsdoc-var">handler</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
-                    </span><span class="jsdoc-var">editorcore.doc.body.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">editorcore.domToHTML</span><span class="jsdoc-syntax">();
+                    </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.htmleditor.Tidy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">editorcore.doc.body</span><span class="jsdoc-syntax">);
                     </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                 },
                 </span><span class="jsdoc-var">tabIndex</span><span class="jsdoc-syntax">:-1
                     </span><span class="jsdoc-var">editorcore.syncValue</span><span class="jsdoc-syntax">();
                 },
                 </span><span class="jsdoc-var">tabIndex</span><span class="jsdoc-syntax">:-1
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">) {
             </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">this.btns.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
 
         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">) {
             </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">this.btns.length</span><span class="jsdoc-syntax">;</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
-                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">],</span><span class="jsdoc-var">Roo.form</span><span class="jsdoc-syntax">);
+                </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">],</span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.xns </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.form</span><span class="jsdoc-syntax">);
                 </span><span class="jsdoc-var">b.cls </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-string">'x-edit-none'</span><span class="jsdoc-syntax">;
 
                 </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.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.cls</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.cls.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-init-enable'</span><span class="jsdoc-syntax">) !== -1){
                 </span><span class="jsdoc-var">b.cls </span><span class="jsdoc-syntax">=  </span><span class="jsdoc-string">'x-edit-none'</span><span class="jsdoc-syntax">;
 
                 </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.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.cls</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">this.btns</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.cls.indexOf</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'x-init-enable'</span><span class="jsdoc-syntax">) !== -1){
     },
     </span><span class="jsdoc-comment">// private used internally
     </span><span class="jsdoc-var">createLink </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
     },
     </span><span class="jsdoc-comment">// private used internally
     </span><span class="jsdoc-var">createLink </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
-        </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;create link?&quot;</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">prompt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.createLinkText</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.defaultLinkValue</span><span class="jsdoc-syntax">);
-        </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'http:/'</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'/'</span><span class="jsdoc-syntax">){
-            </span><span class="jsdoc-var">this.editorcore.relayCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'createlink'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">url</span><span class="jsdoc-syntax">);
+        </span><span class="jsdoc-comment">//Roo.log(&quot;create link?&quot;);
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ec </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">ar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">ec.getAllAncestors</span><span class="jsdoc-syntax">();
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
+        </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">++) {
+            </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">] &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">.nodeName </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">'A'</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-var">n </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-keyword">break</span><span class="jsdoc-syntax">;
+            }
         }
         }
-    },
+
+        (</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+
+            </span><span class="jsdoc-var">Roo.MessageBox.show</span><span class="jsdoc-syntax">({
+                </span><span class="jsdoc-var">title </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Add / Edit Link URL&quot;</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">msg </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;Enter the url for the link&quot;</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">buttons</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.MessageBox.OKCANCEL</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">fn</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">, </span><span class="jsdoc-var">url</span><span class="jsdoc-syntax">){
+                    </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">btn </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'ok'</span><span class="jsdoc-syntax">) {
+                        </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+                    }
+                    </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">url </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'http:/'</span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'/'</span><span class="jsdoc-syntax">){
+                        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">) {
+                            </span><span class="jsdoc-var">n.setAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">url</span><span class="jsdoc-syntax">);
+                        } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
+                            </span><span class="jsdoc-var">ec.relayCmd</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'createlink'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">url</span><span class="jsdoc-syntax">);
+                        }
+                    }
+                },
+                </span><span class="jsdoc-var">minWidth</span><span class="jsdoc-syntax">:250,
+                </span><span class="jsdoc-var">prompt</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-comment">//multiline: multiline,
+                </span><span class="jsdoc-var">modal </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+                </span><span class="jsdoc-var">value </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-var">n  </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">n.getAttribute</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'href'</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">''
+            </span><span class="jsdoc-syntax">});
+
+
+        })</span><span class="jsdoc-var">.defer</span><span class="jsdoc-syntax">(100, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// we have to defer this , otherwise the mouse click gives focus to the main window.
+
+    </span><span class="jsdoc-syntax">},
 
 
     </span><span class="jsdoc-comment">/**
 
 
     </span><span class="jsdoc-comment">/**
                 </span><span class="jsdoc-var">this.tb.items.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">){
                     </span><span class="jsdoc-var">item.enable</span><span class="jsdoc-syntax">();
                 });
                 </span><span class="jsdoc-var">this.tb.items.each</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">item</span><span class="jsdoc-syntax">){
                     </span><span class="jsdoc-var">item.enable</span><span class="jsdoc-syntax">();
                 });
+                </span><span class="jsdoc-comment">// initialize 'blocks'
+                </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.editorcore.doc.body</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.query</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'*[data-block]'</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">Roo.htmleditor.Block.factory</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.updateElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
+                },</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+
             }
 
         }
             }
 
         }
index bbff9f4..1dec91c 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
 </span><span class="jsdoc-comment">/**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
 </span><span class="jsdoc-comment">/**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
+ * @children Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
 </span><span class="jsdoc-comment">/**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
 </span><span class="jsdoc-comment">/**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
index 91c5891..fa07f37 100644 (file)
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     </span><span class="jsdoc-var">dropTarget</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     </span><span class="jsdoc-var">dropTarget</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
-
-
+     </span><span class="jsdoc-comment">/**
+    * @cfg {boolean} sortColMenu Sort the column order menu when it shows (usefull for long lists..) default false
+    */
+    </span><span class="jsdoc-var">sortColMenu </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
 
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">rendered </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
 
     </span><span class="jsdoc-comment">// private
     </span><span class="jsdoc-var">rendered </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
index dbc0949..e8021b8 100644 (file)
     </span><span class="jsdoc-var">beforeColMenuShow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cm</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">colCount </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cm.getColumnCount</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">this.colMenu.removeAll</span><span class="jsdoc-syntax">();
     </span><span class="jsdoc-var">beforeColMenuShow </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cm </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.cm</span><span class="jsdoc-syntax">,  </span><span class="jsdoc-var">colCount </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cm.getColumnCount</span><span class="jsdoc-syntax">();
         </span><span class="jsdoc-var">this.colMenu.removeAll</span><span class="jsdoc-syntax">();
+
+        </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">items </span><span class="jsdoc-syntax">= [];
         </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">colCount</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
         </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">colCount</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
-            </span><span class="jsdoc-var">this.colMenu.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.menu.CheckItem</span><span class="jsdoc-syntax">({
+            </span><span class="jsdoc-var">items.push</span><span class="jsdoc-syntax">({
                 </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;col-&quot;</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">cm.getColumnId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">cm.getColumnHeader</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">checked</span><span class="jsdoc-syntax">: !</span><span class="jsdoc-var">cm.isHidden</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">hideOnClick</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">false
                 </span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;col-&quot;</span><span class="jsdoc-syntax">+</span><span class="jsdoc-var">cm.getColumnId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">cm.getColumnHeader</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">checked</span><span class="jsdoc-syntax">: !</span><span class="jsdoc-var">cm.isHidden</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">),
                 </span><span class="jsdoc-var">hideOnClick</span><span class="jsdoc-syntax">:</span><span class="jsdoc-keyword">false
-            </span><span class="jsdoc-syntax">}));
+            </span><span class="jsdoc-syntax">});
+        }
+
+        </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.grid.sortColMenu</span><span class="jsdoc-syntax">) {
+            </span><span class="jsdoc-var">items.sort</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">,</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
+                </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a.text </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">b.text</span><span class="jsdoc-syntax">) {
+                    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
+                }
+                </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">a.text.toUpperCase</span><span class="jsdoc-syntax">() &gt; </span><span class="jsdoc-var">b.text.toUpperCase</span><span class="jsdoc-syntax">() ? 1 : -1;
+            });
+        }
+
+        </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">colCount</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
+            </span><span class="jsdoc-var">this.colMenu.add</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.menu.CheckItem</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">items</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]));
         }
     },
 
         }
     },
 
index e461294..6e2d01e 100644 (file)
@@ -35,7 +35,7 @@
      */
     </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
      </span><span class="jsdoc-comment">/**
      */
     </span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
      </span><span class="jsdoc-comment">/**
-     * @cfg {String} HTML to render in menu
+     * @cfg {String} html to render in menu
      * The text to show on the menu item (HTML version).
      */
     </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
      * The text to show on the menu item (HTML version).
      */
     </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
index 0804539..2299aaf 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
- * @children Roo.menu.BaseItem
+ * @children Roo.menu.Item Roo.menu.Separator Roo.menu.TextItem
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
index 565b067..60bc24a 100644 (file)
@@ -114,4 +114,14 @@ sort = (sort == 'ASC' ? 'DESC' : 'ASC');
     );
 };
 
     );
 };
 
+
+</span><span class="jsdoc-comment">/**
+  * Make the first letter of a string uppercase
+  *
+  * @return {String} The new string.
+  */
+</span><span class="jsdoc-var">String.prototype.toUpperCaseFirst </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
+    </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.charAt</span><span class="jsdoc-syntax">(0)</span><span class="jsdoc-var">.toUpperCase</span><span class="jsdoc-syntax">() + </span><span class="jsdoc-var">this.slice</span><span class="jsdoc-syntax">(1);
+};
+
 </span></code></body></html>
\ No newline at end of file
 </span></code></body></html>
\ No newline at end of file
index 5136c81..4fbfd03 100644 (file)
         }
       ]
     },
         }
       ]
     },
+    {
+      "name" : "from",
+      "type" : "function",
+      "desc" : "from",
+      "sig" : "(o)",
+      "static" : true,
+      "memberOf" : "",
+      "isStatic" : true,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "o",
+          "type" : "Array",
+          "desc" : "Or Array like object (eg. nodelist)",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "map",
       "type" : "function",
     {
       "name" : "map",
       "type" : "function",
index d89dab3..04c1fe5 100644 (file)
@@ -9,7 +9,10 @@
     ]
   },
   "tree_children" : [],
     ]
   },
   "tree_children" : [],
-  "tree_parent" : [],
+  "tree_parent" : [
+    "none",
+    "builder"
+  ],
   "desc" : "Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:\n<pre><code>\nvar dlg = new Roo.BasicDialog(\"my-dlg\", {\n    height: 200,\n    width: 300,\n    minHeight: 100,\n    minWidth: 150,\n    modal: true,\n    proxyDrag: true,\n    shadow: true\n});\ndlg.addKeyListener(27, dlg.hide, dlg); // ESC can also close the dialog\ndlg.addButton('OK', dlg.hide, dlg);    // Could call a save function instead of hiding\ndlg.addButton('Cancel', dlg.hide, dlg);\ndlg.show();\n</code></pre>\n  <b>A Dialog should always be a direct child of the body element.</b>",
   "isSingleton" : false,
   "isStatic" : false,
   "desc" : "Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:\n<pre><code>\nvar dlg = new Roo.BasicDialog(\"my-dlg\", {\n    height: 200,\n    width: 300,\n    minHeight: 100,\n    minWidth: 150,\n    modal: true,\n    proxyDrag: true,\n    shadow: true\n});\ndlg.addKeyListener(27, dlg.hide, dlg); // ESC can also close the dialog\ndlg.addButton('OK', dlg.hide, dlg);    // Could call a save function instead of hiding\ndlg.addButton('Cancel', dlg.hide, dlg);\ndlg.show();\n</code></pre>\n  <b>A Dialog should always be a direct child of the body element.</b>",
   "isSingleton" : false,
   "isStatic" : false,
index bba7138..0c95420 100644 (file)
@@ -19,7 +19,7 @@
   "tree_parent" : [
     "Roo.BorderLayout",
     "Roo.LayoutDialog",
   "tree_parent" : [
     "Roo.BorderLayout",
     "Roo.LayoutDialog",
-    "builder-top"
+    "builder"
   ],
   "desc" : "A basic ContentPanel element.",
   "isSingleton" : false,
   ],
   "desc" : "A basic ContentPanel element.",
   "isSingleton" : false,
     {
       "name" : "region",
       "type" : "String",
     {
       "name" : "region",
       "type" : "String",
-      "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+      "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
index d04e85d..f5312a9 100644 (file)
       ],
       "returns" : []
     },
       ],
       "returns" : []
     },
+    {
+      "name" : "update",
+      "type" : "function",
+      "desc" : "Updates the first element with the spec from the o (replacing if necessary)\nThis iterates through the children, and updates attributes / children etc..",
+      "sig" : "(el, o)",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "el",
+          "type" : "String/HTMLElement/Element",
+          "desc" : "The context element",
+          "isOptional" : false
+        },
+        {
+          "name" : "o",
+          "type" : "Object/String",
+          "desc" : "The Dom object spec (and children) or raw HTML blob",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "markup",
       "type" : "function",
     {
       "name" : "markup",
       "type" : "function",
index 49ad872..9f7a9e2 100644 (file)
@@ -6,7 +6,11 @@
   ],
   "childClasses" : {  },
   "tree_children" : [],
   ],
   "childClasses" : {  },
   "tree_children" : [],
-  "tree_parent" : [],
+  "tree_parent" : [
+    "Roo.BorderLayout",
+    "Roo.LayoutDialog",
+    "builder"
+  ],
   "desc" : "Create a new GridPanel.",
   "isSingleton" : false,
   "isStatic" : false,
   "desc" : "Create a new GridPanel.",
   "isSingleton" : false,
   "isStatic" : false,
   "deprecated" : "",
   "since" : "",
   "see" : "",
   "deprecated" : "",
   "since" : "",
   "see" : "",
-  "params" : [
-    {
-      "name" : "grid",
-      "type" : "Roo.grid.Grid",
-      "desc" : "The grid for this panel",
-      "isOptional" : false
-    },
-    {
-      "name" : "config",
-      "type" : "String/Object",
-      "desc" : "A string to set only the panel's title, or a config object",
-      "isOptional" : false
-    }
-  ],
+  "params" : [],
   "returns" : [],
   "throws" : "",
   "requires" : "",
   "returns" : [],
   "throws" : "",
   "requires" : "",
@@ -75,7 +66,7 @@
     {
       "name" : "region",
       "type" : "String",
     {
       "name" : "region",
       "type" : "String",
-      "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+      "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
       "memberOf" : "Roo.ContentPanel"
     },
     {
       "memberOf" : "Roo.ContentPanel"
     },
     {
       "desc" : "When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)",
       "memberOf" : "Roo.ContentPanel"
     },
       "desc" : "When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)",
       "memberOf" : "Roo.ContentPanel"
     },
+    {
+      "name" : "grid",
+      "type" : "Roo.grid.Grid",
+      "desc" : "The grid for this panel",
+      "memberOf" : "Roo"
+    },
     {
       "name" : "closable",
       "type" : "Boolean",
     {
       "name" : "closable",
       "type" : "Boolean",
index 01d5628..03fb501 100644 (file)
     {
       "name" : "allowComments",
       "type" : "boolean",
     {
       "name" : "allowComments",
       "type" : "boolean",
-      "desc" : "- default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.",
+      "desc" : "- default false - allow comments in HTML source\n         - by default they are stripped - if you are editing email you may need this.",
+      "memberOf" : ""
+    },
+    {
+      "name" : "autoClean",
+      "type" : "boolean",
+      "desc" : "- default true - loading and saving will remove quite a bit of formating,\n        if you are doing an email editor, this probably needs disabling, it's designed",
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
       "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
       "memberOf" : "Roo.Component"
     },
       "desc" : "Whether the component can move the Dom node when rendering (defaults to true).",
       "memberOf" : "Roo.Component"
     },
+    {
+      "name" : "language",
+      "type" : "String",
+      "desc" : "default en - language of text (usefull for rtl languages)",
+      "memberOf" : ""
+    },
+    {
+      "name" : "enableBlocks",
+      "type" : "boolean",
+      "desc" : "- default true - if the block editor (table and figure should be enabled)",
+      "memberOf" : ""
+    },
     {
       "name" : "actionMode",
       "type" : "String",
     {
       "name" : "actionMode",
       "type" : "String",
       ],
       "returns" : []
     },
       ],
       "returns" : []
     },
+    {
+      "name" : "selectNode",
+      "type" : "function",
+      "desc" : "Select a dom node",
+      "sig" : "(node)",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "node",
+          "type" : "DomElement",
+          "desc" : "the node to select",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "execCmd",
       "type" : "function",
     {
       "name" : "execCmd",
       "type" : "function",
       "isConstructor" : false,
       "isPrivate" : false,
       "example" : "",
       "isConstructor" : false,
       "isPrivate" : false,
       "example" : "",
-      "deprecated" : "",
+      "deprecated" : "This has been deprecated: - use filter directly",
       "since" : "",
       "see" : "",
       "exceptions" : "",
       "since" : "",
       "see" : "",
       "exceptions" : "",
     {
       "name" : "cleanTableWidths",
       "type" : "function",
     {
       "name" : "cleanTableWidths",
       "type" : "function",
-      "desc" : "cleanTableWidths.\n\nQuite often pasting from word etc.. results in tables with column and widths.\nThis does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..",
+      "desc" : "",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "",
       "isConstructor" : false,
       "isPrivate" : false,
       "example" : "",
       "isConstructor" : false,
       "isPrivate" : false,
       "example" : "",
-      "deprecated" : "",
+      "deprecated" : "This has been deprecated: - use filters",
       "since" : "",
       "see" : "",
       "exceptions" : "",
       "since" : "",
       "see" : "",
       "exceptions" : "",
       "params" : [],
       "returns" : []
     },
       "params" : [],
       "returns" : []
     },
-    {
-      "name" : "iterateChildren",
-      "type" : "function",
-      "desc" : "iterateChildren of a Node, calling fn each time, using this as the scole..",
-      "sig" : "(node, fn)",
-      "static" : false,
-      "memberOf" : "",
-      "isStatic" : false,
-      "isConstructor" : false,
-      "isPrivate" : false,
-      "example" : "",
-      "deprecated" : "",
-      "since" : "",
-      "see" : "",
-      "exceptions" : "",
-      "requires" : "",
-      "params" : [
-        {
-          "name" : "node",
-          "type" : "DomNode",
-          "desc" : "node to iterate children of.",
-          "isOptional" : false
-        },
-        {
-          "name" : "fn",
-          "type" : "Function",
-          "desc" : "method of this class to call on each item.",
-          "isOptional" : false
-        }
-      ],
-      "returns" : []
-    },
     {
       "name" : "pushValue",
       "type" : "function",
     {
       "name" : "pushValue",
       "type" : "function",
-      "desc" : "Protected method that will not generally be called directly. Pushes the value of the textarea\ninto the iframe editor.",
+      "desc" : "TEXTAREA -> EDITABLE\nProtected method that will not generally be called directly. Pushes the value of the textarea\ninto the iframe editor.",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "",
index 6b69a3a..3b37e53 100644 (file)
@@ -6,8 +6,12 @@
   ],
   "childClasses" : {  },
   "tree_children" : [],
   ],
   "childClasses" : {  },
   "tree_children" : [],
-  "tree_parent" : [],
-  "desc" : "Create a new NestedLayoutPanel.",
+  "tree_parent" : [
+    "Roo.BorderLayout",
+    "Roo.LayoutDialog",
+    "builder"
+  ],
+  "desc" : "",
   "isSingleton" : false,
   "isStatic" : false,
   "isBuiltin" : false,
   "isSingleton" : false,
   "isStatic" : false,
   "isBuiltin" : false,
@@ -75,7 +79,7 @@
     {
       "name" : "region",
       "type" : "String",
     {
       "name" : "region",
       "type" : "String",
-      "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+      "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
       "memberOf" : "Roo.ContentPanel"
     },
     {
       "memberOf" : "Roo.ContentPanel"
     },
     {
       "desc" : "When used with {@link #url}, calls {@link #setUrl} with this value",
       "memberOf" : "Roo.ContentPanel"
     },
       "desc" : "When used with {@link #url}, calls {@link #setUrl} with this value",
       "memberOf" : "Roo.ContentPanel"
     },
+    {
+      "name" : "layout",
+      "type" : "Roo.BorderLayout",
+      "desc" : "[required] The layout for this panel",
+      "memberOf" : "Roo"
+    },
     {
       "name" : "adjustments",
       "type" : "Array",
     {
       "name" : "adjustments",
       "type" : "Array",
index 3fedff0..32b2e60 100644 (file)
@@ -10,6 +10,8 @@
     "Roo.Toolbar.Separator",
     "Roo.Toolbar.Spacer",
     "Roo.Toolbar.TextItem",
     "Roo.Toolbar.Separator",
     "Roo.Toolbar.Spacer",
     "Roo.Toolbar.TextItem",
+    "Roo.Toolbar.Button",
+    "Roo.Toolbar.SplitButton",
     "Roo.form.Field",
     "Roo.form.Checkbox",
     "Roo.form.ComboBox",
     "Roo.form.Field",
     "Roo.form.Checkbox",
     "Roo.form.ComboBox",
       ],
       "returns" : []
     },
       ],
       "returns" : []
     },
+    {
+      "name" : "onClick",
+      "type" : "function",
+      "desc" : "event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.",
+      "sig" : "(which)",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "which",
+          "type" : "String",
+          "desc" : "(first|prev|next|last|refresh)  which button to press.",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "unbind",
       "type" : "function",
     {
       "name" : "unbind",
       "type" : "function",
index b548f3f..12e1da1 100644 (file)
   ],
   "methods" : [
     {
   ],
   "methods" : [
     {
-      "name" : "disable",
+      "name" : "hide",
       "type" : "function",
       "type" : "function",
-      "desc" : "Disables this item.",
+      "desc" : "Hides this button",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "sig" : "()\n{\n\n}",
       "static" : false,
-      "memberOf" : "Roo.Toolbar.Item",
+      "memberOf" : "",
       "isStatic" : false,
       "isConstructor" : false,
       "isPrivate" : false,
       "isStatic" : false,
       "isConstructor" : false,
       "isPrivate" : false,
       "returns" : []
     },
     {
       "returns" : []
     },
     {
-      "name" : "hide",
+      "name" : "show",
       "type" : "function",
       "type" : "function",
-      "desc" : "Hides this item.",
+      "desc" : "Shows this button",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "sig" : "()\n{\n\n}",
       "static" : false,
-      "memberOf" : "Roo.Toolbar.Item",
+      "memberOf" : "",
       "isStatic" : false,
       "isConstructor" : false,
       "isPrivate" : false,
       "isStatic" : false,
       "isConstructor" : false,
       "isPrivate" : false,
@@ -69,9 +69,9 @@
       "returns" : []
     },
     {
       "returns" : []
     },
     {
-      "name" : "focus",
+      "name" : "disable",
       "type" : "function",
       "type" : "function",
-      "desc" : "Try to focus this item.",
+      "desc" : "Disables this item.",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "Roo.Toolbar.Item",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "Roo.Toolbar.Item",
@@ -88,9 +88,9 @@
       "returns" : []
     },
     {
       "returns" : []
     },
     {
-      "name" : "show",
+      "name" : "focus",
       "type" : "function",
       "type" : "function",
-      "desc" : "Shows this item.",
+      "desc" : "Try to focus this item.",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "Roo.Toolbar.Item",
       "sig" : "()\n{\n\n}",
       "static" : false,
       "memberOf" : "Roo.Toolbar.Item",
index 9c2734e..b14276f 100644 (file)
@@ -12,6 +12,8 @@
     "Roo.Toolbar.Separator",
     "Roo.Toolbar.Spacer",
     "Roo.Toolbar.TextItem",
     "Roo.Toolbar.Separator",
     "Roo.Toolbar.Spacer",
     "Roo.Toolbar.TextItem",
+    "Roo.Toolbar.Button",
+    "Roo.Toolbar.SplitButton",
     "Roo.form.Field",
     "Roo.form.Checkbox",
     "Roo.form.ComboBox",
     "Roo.form.Field",
     "Roo.form.Checkbox",
     "Roo.form.ComboBox",
index 422144c..2325a9d 100644 (file)
@@ -6,7 +6,11 @@
   ],
   "childClasses" : {  },
   "tree_children" : [],
   ],
   "childClasses" : {  },
   "tree_children" : [],
-  "tree_parent" : [],
+  "tree_parent" : [
+    "Roo.BorderLayout",
+    "Roo.LayoutDialog",
+    "builder"
+  ],
   "desc" : "Treepanel component",
   "isSingleton" : false,
   "isStatic" : false,
   "desc" : "Treepanel component",
   "isSingleton" : false,
   "isStatic" : false,
@@ -69,7 +73,7 @@
     {
       "name" : "region",
       "type" : "String",
     {
       "name" : "region",
       "type" : "String",
-      "desc" : "[required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)",
+      "desc" : "t) [required] which region to put this panel on (when used with xtype constructors)",
       "memberOf" : "Roo.ContentPanel"
     },
     {
       "memberOf" : "Roo.ContentPanel"
     },
     {
index c6e74ce..6657677 100644 (file)
         {
           "name" : "options",
           "type" : "Object",
         {
           "name" : "options",
           "type" : "Object",
-          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
           "isOptional" : false
         }
       ],
           "isOptional" : false
         }
       ],
index 3f904ad..0af2188 100644 (file)
         {
           "name" : "options",
           "type" : "Object",
         {
           "name" : "options",
           "type" : "Object",
-          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
           "isOptional" : false
         }
       ],
           "isOptional" : false
         }
       ],
index 35e8841..e4d5b68 100644 (file)
         {
           "name" : "options",
           "type" : "Object",
         {
           "name" : "options",
           "type" : "Object",
-          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
+          "desc" : "An object containing properties which control loading options:<ul>\n<li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>\n<li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..\n<pre>\n                {\n                    data : data,  // array of key=>value data like JsonReader\n                    total : data.length,\n                    success : true\n                    \n                }\n        </pre>\n            }.</li>\n<li>callback {Function} A function to be called after the Records have been loaded. The callback is\npassed the following arguments:<ul>\n<li>r : Roo.data.Record[]</li>\n<li>options: Options object from the load call</li>\n<li>success: Boolean success indicator</li></ul></li>\n<li>scope {Object} Scope with which to call the callback (defaults to the Store object)</li>\n<li>add {Boolean} indicator to append loaded records rather than replace the current cache.</li>\n</ul>",
           "isOptional" : false
         }
       ],
           "isOptional" : false
         }
       ],
index 67e71e5..cd9294f 100644 (file)
     {
       "name" : "getFieldValues",
       "type" : "function",
     {
       "name" : "getFieldValues",
       "type" : "function",
-      "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
-      "sig" : "()\n{\n\n}",
+      "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+      "sig" : "(with_readonly)",
       "static" : false,
       "memberOf" : "",
       "isStatic" : false,
       "static" : false,
       "memberOf" : "",
       "isStatic" : false,
       "see" : "",
       "exceptions" : "",
       "requires" : "",
       "see" : "",
       "exceptions" : "",
       "requires" : "",
-      "params" : [],
+      "params" : [
+        {
+          "name" : "with_readonly",
+          "type" : "Boolean",
+          "desc" : "return readonly field data.",
+          "isOptional" : false
+        }
+      ],
       "returns" : [
         {
           "name" : "",
       "returns" : [
         {
           "name" : "",
index 2c0a45c..893e383 100644 (file)
@@ -6,7 +6,36 @@
     "Roo.util.Observable"
   ],
   "childClasses" : {  },
     "Roo.util.Observable"
   ],
   "childClasses" : {  },
-  "tree_children" : [],
+  "tree_children" : [
+    "Roo.form.Row",
+    "Roo.form.Field",
+    "Roo.form.Checkbox",
+    "Roo.form.ComboBox",
+    "Roo.form.ComboBoxArray",
+    "Roo.form.ComboCheck",
+    "Roo.form.ComboNested",
+    "Roo.form.DateField",
+    "Roo.form.DayPicker",
+    "Roo.form.DisplayField",
+    "Roo.form.FCKeditor",
+    "Roo.form.GridField",
+    "Roo.form.Hidden",
+    "Roo.form.HtmlEditor",
+    "Roo.form.MonthField",
+    "Roo.form.NumberField",
+    "Roo.form.Radio",
+    "Roo.form.Select",
+    "Roo.form.Signature",
+    "Roo.form.TextArea",
+    "Roo.form.TextField",
+    "Roo.form.TriggerField",
+    "Roo.Button",
+    "Roo.SplitButton",
+    "Roo.Toolbar.Button",
+    "Roo.Toolbar.SplitButton",
+    "Roo.form.TextItem",
+    "Roo.form.FieldSet"
+  ],
   "tree_parent" : [],
   "desc" : "Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.",
   "isSingleton" : false,
   "tree_parent" : [],
   "desc" : "Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.",
   "isSingleton" : false,
index 60c1ca9..4ec16c4 100644 (file)
       "desc" : "True to disable the field (defaults to false).",
       "memberOf" : "Roo.form.Field"
     },
       "desc" : "True to disable the field (defaults to false).",
       "memberOf" : "Roo.form.Field"
     },
+    {
+      "name" : "zeroValue",
+      "type" : "Date/String",
+      "desc" : "if the date is less that this number, then the field is rendered as empty\ndefault is 1800",
+      "memberOf" : ""
+    },
     {
       "name" : "name",
       "type" : "String",
     {
       "name" : "name",
       "type" : "String",
index c771b57..74f0da3 100644 (file)
     {
       "name" : "getFieldValues",
       "type" : "function",
     {
       "name" : "getFieldValues",
       "type" : "function",
-      "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.",
-      "sig" : "()\n{\n\n}",
+      "desc" : "Returns the fields in this form as an object with key/value pairs. \nThis differs from getValues as it calls getValue on each child item, rather than using dom data.\nNormally this will not return readOnly data",
+      "sig" : "(with_readonly)",
       "static" : false,
       "memberOf" : "Roo.form.BasicForm",
       "isStatic" : false,
       "static" : false,
       "memberOf" : "Roo.form.BasicForm",
       "isStatic" : false,
       "see" : "",
       "exceptions" : "",
       "requires" : "",
       "see" : "",
       "exceptions" : "",
       "requires" : "",
-      "params" : [],
+      "params" : [
+        {
+          "name" : "with_readonly",
+          "type" : "Boolean",
+          "desc" : "return readonly field data.",
+          "isOptional" : false
+        }
+      ],
       "returns" : [
         {
           "name" : "",
       "returns" : [
         {
           "name" : "",
index 7c5a7b3..21b363d 100644 (file)
       "desc" : "True to disable the field (defaults to false).",
       "memberOf" : "Roo.form.Field"
     },
       "desc" : "True to disable the field (defaults to false).",
       "memberOf" : "Roo.form.Field"
     },
-    {
-      "name" : "name",
-      "type" : "String",
-      "desc" : "The field's HTML name attribute.",
-      "memberOf" : "Roo.form.Field"
-    },
     {
       "name" : "resizable",
       "type" : "String",
     {
       "name" : "resizable",
       "type" : "String",
       "desc" : "Array of toolbars. - defaults to just the Standard one",
       "memberOf" : ""
     },
       "desc" : "Array of toolbars. - defaults to just the Standard one",
       "memberOf" : ""
     },
+    {
+      "name" : "name",
+      "type" : "String",
+      "desc" : "The field's HTML name attribute.",
+      "memberOf" : "Roo.form.Field"
+    },
     {
       "name" : "width",
       "type" : "Number",
     {
       "name" : "width",
       "type" : "Number",
       "desc" : "list of events and functions to call for this object, \nFor example :\n<pre><code>\n    listeners :  { \n       'click' : function(e) {\n           ..... \n        } ,\n        .... \n    } \n  </code></pre>",
       "memberOf" : "Roo.util.Observable"
     },
       "desc" : "list of events and functions to call for this object, \nFor example :\n<pre><code>\n    listeners :  { \n       'click' : function(e) {\n           ..... \n        } ,\n        .... \n    } \n  </code></pre>",
       "memberOf" : "Roo.util.Observable"
     },
+    {
+      "name" : "bodyCls",
+      "type" : "string",
+      "desc" : "default '' default classes to add to body of editable area - usually undoreset is a good start..",
+      "memberOf" : ""
+    },
     {
       "name" : "readOnly",
       "type" : "Boolean",
       "desc" : "True to mark the field as readOnly in HTML (defaults to false) -- Note: this only sets the element's readOnly DOM attribute.",
       "memberOf" : "Roo.form.Field"
     },
     {
       "name" : "readOnly",
       "type" : "Boolean",
       "desc" : "True to mark the field as readOnly in HTML (defaults to false) -- Note: this only sets the element's readOnly DOM attribute.",
       "memberOf" : "Roo.form.Field"
     },
+    {
+      "name" : "enableBlocks",
+      "type" : "boolean",
+      "desc" : "- default true - if the block editor (table and figure should be enabled)",
+      "memberOf" : ""
+    },
+    {
+      "name" : "language",
+      "type" : "String",
+      "desc" : "default en - language of text (usefull for rtl languages)",
+      "memberOf" : ""
+    },
     {
       "name" : "cls",
       "type" : "String",
     {
       "name" : "cls",
       "type" : "String",
       "desc" : "Label to use when rendering a form.",
       "memberOf" : "Roo.form.Field"
     },
       "desc" : "Label to use when rendering a form.",
       "memberOf" : "Roo.form.Field"
     },
-    {
-      "name" : "disableClass",
-      "type" : "String",
-      "desc" : "CSS class added to the component when it is disabled (defaults to \"x-item-disabled\").",
-      "memberOf" : "Roo.Component"
-    },
     {
       "name" : "validationDelay",
       "type" : "Number",
       "desc" : "The length of time in milliseconds after user input begins until validation is initiated (defaults to 250)",
       "memberOf" : "Roo.form.Field"
     },
     {
       "name" : "validationDelay",
       "type" : "Number",
       "desc" : "The length of time in milliseconds after user input begins until validation is initiated (defaults to 250)",
       "memberOf" : "Roo.form.Field"
     },
+    {
+      "name" : "disableClass",
+      "type" : "String",
+      "desc" : "CSS class added to the component when it is disabled (defaults to \"x-item-disabled\").",
+      "memberOf" : "Roo.Component"
+    },
     {
       "name" : "stylesheets",
       "type" : "Array",
     {
       "name" : "stylesheets",
       "type" : "Array",
-      "desc" : "url of stylesheets. set to [] to disable stylesheets.",
+      "desc" : "url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .",
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
       "type" : "String",
       "desc" : "Mouse over tip",
       "memberOf" : "Roo.form.Field"
       "type" : "String",
       "desc" : "Mouse over tip",
       "memberOf" : "Roo.form.Field"
+    },
+    {
+      "name" : "autoClean",
+      "type" : "boolean",
+      "desc" : "- default true - loading and saving will remove quite a bit of formating,\n        if you are doing an email editor, this probably needs disabling, it's designed",
+      "memberOf" : ""
     }
   ],
   "methods" : [
     }
   ],
   "methods" : [
       ],
       "returns" : []
     },
       ],
       "returns" : []
     },
+    {
+      "name" : "updateLanguage",
+      "type" : "function",
+      "desc" : "update the language in the body - really done by core",
+      "sig" : "(language)",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "language",
+          "type" : "String",
+          "desc" : "- eg. en / ar / zh-CN etc..",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "markInvalid",
       "type" : "function",
     {
       "name" : "markInvalid",
       "type" : "function",
       "params" : [],
       "returns" : []
     },
       "params" : [],
       "returns" : []
     },
+    {
+      "name" : "getSelectedNode",
+      "type" : "function",
+      "desc" : "get the Context selected node",
+      "sig" : "()\n{\n\n}",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [],
+      "returns" : []
+    },
     {
       "name" : "validate",
       "type" : "function",
     {
       "name" : "validate",
       "type" : "function",
       "params" : [],
       "returns" : []
     },
       "params" : [],
       "returns" : []
     },
+    {
+      "name" : "paste",
+      "type" : "function",
+      "desc" : "Fires when press user pastes into the editor",
+      "sig" : "function (_self)\n{\n\n}",
+      "memberOf" : "",
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "params" : [
+        {
+          "name" : "this",
+          "type" : "Roo.HtmlEditorCore",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "editmodechange",
       "type" : "function",
     {
       "name" : "editmodechange",
       "type" : "function",
index fea1d46..94e8142 100644 (file)
@@ -39,7 +39,8 @@
     "Roo.SplitButton",
     "Roo.Toolbar.Button",
     "Roo.Toolbar.SplitButton",
     "Roo.SplitButton",
     "Roo.Toolbar.Button",
     "Roo.Toolbar.SplitButton",
-    "Roo.form.TextItem"
+    "Roo.form.TextItem",
+    "Roo.form.FieldSet"
   ],
   "tree_parent" : [],
   "desc" : "Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.",
   ],
   "tree_parent" : [],
   "desc" : "Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.",
index 962ab56..4b86383 100644 (file)
@@ -34,7 +34,8 @@
     "Roo.SplitButton",
     "Roo.Toolbar.Button",
     "Roo.Toolbar.SplitButton",
     "Roo.SplitButton",
     "Roo.Toolbar.Button",
     "Roo.Toolbar.SplitButton",
-    "Roo.form.TextItem"
+    "Roo.form.TextItem",
+    "Roo.form.FieldSet"
   ],
   "tree_parent" : [],
   "desc" : "Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.",
   ],
   "tree_parent" : [],
   "desc" : "Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.",
index b21e1f2..3faf8cc 100644 (file)
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : "Roo.grid.Grid"
     },
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : "Roo.grid.Grid"
     },
+    {
+      "name" : "sortColMenu",
+      "type" : "boolean",
+      "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+      "memberOf" : "Roo.grid.Grid"
+    },
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
index 9809c97..7b98a30 100644 (file)
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : "Roo.grid.Grid"
     },
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : "Roo.grid.Grid"
     },
+    {
+      "name" : "sortColMenu",
+      "type" : "boolean",
+      "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+      "memberOf" : "Roo.grid.Grid"
+    },
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
index 3ffc45e..0f587ee 100644 (file)
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : ""
     },
       "desc" : "True to measure headers with column data when auto sizing columns. Default is true.",
       "memberOf" : ""
     },
+    {
+      "name" : "sortColMenu",
+      "type" : "boolean",
+      "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+      "memberOf" : ""
+    },
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
     {
       "name" : "enableDragDrop",
       "type" : "Boolean",
index c0242bf..b4589db 100644 (file)
       "desc" : "True to enable drop of elements. Default is false. (double check if this is needed?)",
       "memberOf" : "Roo.grid.Grid"
     },
       "desc" : "True to enable drop of elements. Default is false. (double check if this is needed?)",
       "memberOf" : "Roo.grid.Grid"
     },
+    {
+      "name" : "sortColMenu",
+      "type" : "boolean",
+      "desc" : "Sort the column order menu when it shows (usefull for long lists..) default false",
+      "memberOf" : "Roo.grid.Grid"
+    },
     {
       "name" : "clicksToEdit",
       "type" : "Number",
     {
       "name" : "clicksToEdit",
       "type" : "Number",
index cf2c27c..d5f6e34 100644 (file)
   "returns" : [],
   "throws" : "",
   "requires" : "",
   "returns" : [],
   "throws" : "",
   "requires" : "",
-  "config" : [],
+  "config" : [
+    {
+      "name" : "grid",
+      "type" : "Roo.grid.Grid",
+      "desc" : "The grid for this panel",
+      "memberOf" : ""
+    },
+    {
+      "name" : "layout",
+      "type" : "Roo.BorderLayout",
+      "desc" : "[required] The layout for this panel",
+      "memberOf" : ""
+    }
+  ],
   "methods" : [
     {
       "name" : "each",
   "methods" : [
     {
       "name" : "each",
         }
       ]
     },
         }
       ]
     },
+    {
+      "name" : "log",
+      "type" : "function",
+      "desc" : "Logs to console if it can.",
+      "sig" : "(string)",
+      "static" : true,
+      "memberOf" : "",
+      "isStatic" : true,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "string",
+          "type" : "String|Object",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "addBehaviors",
       "type" : "function",
     {
       "name" : "addBehaviors",
       "type" : "function",
       ],
       "returns" : []
     },
       ],
       "returns" : []
     },
+    {
+      "name" : "namespace",
+      "type" : "function",
+      "desc" : "Creates namespaces to be used for scoping variables and classes so that they are not global.  Usage:\n<pre><code>\nRoo.namespace('Company', 'Company.data');\nCompany.Widget = function() { ... }\nCompany.data.CustomStore = function(config) { ... }\n</code></pre>",
+      "sig" : "(namespace1, namespace2, etc)",
+      "static" : true,
+      "memberOf" : "",
+      "isStatic" : true,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [
+        {
+          "name" : "namespace1",
+          "type" : "String",
+          "desc" : "",
+          "isOptional" : false
+        },
+        {
+          "name" : "namespace2",
+          "type" : "String",
+          "desc" : "",
+          "isOptional" : false
+        },
+        {
+          "name" : "etc",
+          "type" : "String",
+          "desc" : "",
+          "isOptional" : false
+        }
+      ],
+      "returns" : []
+    },
     {
       "name" : "override",
       "type" : "function",
     {
       "name" : "override",
       "type" : "function",
index 2061dd7..e65833e 100644 (file)
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
-      "name" : "HTML",
+      "name" : "html",
       "type" : "String",
       "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
       "memberOf" : "Roo.menu.Item"
       "type" : "String",
       "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
       "memberOf" : "Roo.menu.Item"
index da72ae3..69cf39b 100644 (file)
       "memberOf" : "Roo.Component"
     },
     {
       "memberOf" : "Roo.Component"
     },
     {
-      "name" : "itemCls",
+      "name" : "html",
       "type" : "String",
       "type" : "String",
-      "desc" : "The default CSS class to use for menu items (defaults to \"x-menu-item\")",
+      "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
-      "name" : "HTML",
+      "name" : "itemCls",
       "type" : "String",
       "type" : "String",
-      "desc" : "to render in menu\nThe text to show on the menu item (HTML version).",
+      "desc" : "The default CSS class to use for menu items (defaults to \"x-menu-item\")",
       "memberOf" : ""
     },
     {
       "memberOf" : ""
     },
     {
index 82e05db..c87fd1f 100644 (file)
     ]
   },
   "tree_children" : [
     ]
   },
   "tree_children" : [
-    "Roo.menu.CheckItem",
-    "Roo.menu.ColorItem",
-    "Roo.menu.DateItem",
     "Roo.menu.Item",
     "Roo.menu.Item",
+    "Roo.menu.CheckItem",
     "Roo.menu.Separator",
     "Roo.menu.TextItem"
   ],
     "Roo.menu.Separator",
     "Roo.menu.TextItem"
   ],
index 9c96da0..5047028 100644 (file)
         }
       ]
     },
         }
       ]
     },
+    {
+      "name" : "toUpperCaseFirst",
+      "type" : "function",
+      "desc" : "Make the first letter of a string uppercase",
+      "sig" : "()\n{\n\n}",
+      "static" : false,
+      "memberOf" : "",
+      "isStatic" : false,
+      "isConstructor" : false,
+      "isPrivate" : false,
+      "example" : "",
+      "deprecated" : "",
+      "since" : "",
+      "see" : "",
+      "exceptions" : "",
+      "requires" : "",
+      "params" : [],
+      "returns" : [
+        {
+          "name" : "",
+          "type" : "String",
+          "desc" : "The new string."
+        }
+      ]
+    },
     {
       "name" : "leftPad",
       "type" : "function",
     {
       "name" : "leftPad",
       "type" : "function",
index 3de9774..ee49378 100644 (file)
         "cn" : [],
         "is_class" : true
       },
         "cn" : [],
         "is_class" : true
       },
+      {
+        "name" : "Roo.MessageBox",
+        "cn" : [],
+        "is_class" : true
+      },
       {
         "name" : "Roo.NestedLayoutPanel",
         "cn" : [],
       {
         "name" : "Roo.NestedLayoutPanel",
         "cn" : [],
             "cn" : [],
             "is_class" : true
           },
             "cn" : [],
             "is_class" : true
           },
-          {
-            "name" : "Roo.dd.DragDropMgr",
-            "cn" : [],
-            "is_class" : true
-          },
           {
             "name" : "Roo.dd.DragSource",
             "cn" : [],
           {
             "name" : "Roo.dd.DragSource",
             "cn" : [],
         ],
         "is_class" : false
       },
         ],
         "is_class" : false
       },
+      {
+        "name" : "Roo.htmleditor",
+        "cn" : [
+          {
+            "name" : "Roo.htmleditor.Block",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.BlockFigure",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.BlockTable",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.BlockTd",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.Filter",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterAttributes",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterBlack",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterBlock",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterComment",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterKeepChildren",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterLongBr",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterParagraph",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterSpan",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterStyleToTag",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterTableWidth",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.FilterWord",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.KeyEnter",
+            "cn" : [],
+            "is_class" : false
+          },
+          {
+            "name" : "Roo.htmleditor.TidyEntities",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.TidySerializer",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.htmleditor.TidyWriter",
+            "cn" : [],
+            "is_class" : true
+          }
+        ],
+        "is_class" : false
+      },
       {
         "name" : "Roo.lib",
         "cn" : [
       {
         "name" : "Roo.lib",
         "cn" : [
             "name" : "Roo.lib.RGBColor",
             "cn" : [],
             "is_class" : true
             "name" : "Roo.lib.RGBColor",
             "cn" : [],
             "is_class" : true
+          },
+          {
+            "name" : "Roo.lib.Range",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.lib.Selection",
+            "cn" : [],
+            "is_class" : true
+          },
+          {
+            "name" : "Roo.lib.UndoManager",
+            "cn" : [],
+            "is_class" : true
           }
         ],
         "is_class" : false
           }
         ],
         "is_class" : false
         ],
         "is_class" : false
       },
         ],
         "is_class" : false
       },
+      {
+        "name" : "Roo.rtf",
+        "cn" : [],
+        "is_class" : false
+      },
       {
         "name" : "Roo.state",
         "cn" : [
       {
         "name" : "Roo.state",
         "cn" : [
index 88e6362..23ebd7d 100644 (file)
         <div class="x-form-clear"></div>
 
 
         <div class="x-form-clear"></div>
 
 
-        <script type="text/javascript" src="../../roojs-all.js"></script>   
+        <script type="text/javascript" src="../../roojs-debug.js"></script>   
         <!-- testing new code.. -->
         <!-- testing new code.. -->
+        <script type="text/javascript" src="../../Roo/DomHelper.js"></script>
+        <script type="text/javascript" src="../../Roo/lib/UndoManager.js"></script>
+        <script type="text/javascript" src="../../Roo/lib/Range.js"></script>
+        <script type="text/javascript" src="../../Roo/lib/Selection.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/KeyEnter.js"></script>        
           <script type="text/javascript" src="../../Roo/HtmlEditorCore.js"></script>        
         <script type="text/javascript" src="../../Roo/form/HtmlEditor.js"></script>        
         <script type="text/javascript" src="../../Roo/form/HtmlEditor/ToolbarStandard.js"></script>
           <script type="text/javascript" src="../../Roo/HtmlEditorCore.js"></script>        
         <script type="text/javascript" src="../../Roo/form/HtmlEditor.js"></script>        
         <script type="text/javascript" src="../../Roo/form/HtmlEditor/ToolbarStandard.js"></script>
-          <script type="text/javascript" src="../../Roo/form/HtmlEditor/ToolbarContext.js"></script>        
+        <script type="text/javascript" src="../../Roo/htmleditor/Block.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/BlockTable.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/BlockFigure.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/BlockTd.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/FilterBlock.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/Tidy.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/TidyEntities.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/TidySerializer.js"></script>
+        <script type="text/javascript" src="../../Roo/htmleditor/TidyWriter.js"></script>
+
+        <script type="text/javascript" src="../../Roo/form/HtmlEditor/ToolbarContext.js"></script>
         <script type="text/javascript" src="../../Roo/menu/Item.js"></script>        
         
         <script type="text/javascript" src="../examples.js"></script>        
         <script type="text/javascript" src="../../Roo/menu/Item.js"></script>        
         
         <script type="text/javascript" src="../examples.js"></script>        
index 6b7a5ab..c9cbdec 100644 (file)
@@ -26,10 +26,121 @@ Roo.onReady(function(){
                 xtype : 'HtmlEditor',
                 xns: Roo.form,
                 white : [ 'iframe' ],
                 xtype : 'HtmlEditor',
                 xns: Roo.form,
                 white : [ 'iframe' ],
+                autoClean : true,
+                bodyCls : 'undoreset undoreset mo-pr-body-content',
+                stylesheets : [ 
+                    '../../css/undoreset.css',
+                    '/web.MediaOutreach/Pman/PressRelease/templates/images/css/editor.css'
+                    
+                    
+                ],
                 toolbars : [    
                     {
                         xtype : 'ToolbarStandard',
                 toolbars : [    
                     {
                         xtype : 'ToolbarStandard',
-                        xns : Roo.form.HtmlEditor
+                        xns : Roo.form.HtmlEditor,
+                        btns : [
+                            {
+                                xtype : 'Button',
+                                text : "Add Table",
+                                cls : 'x-init-enable',
+                                listeners : {
+                                    click : function (_self, e)
+                                    {
+                                        
+                                        var rr = new Roo.htmleditor.BlockTable({
+                                            no_row : 4,
+                                            no_col : 4
+                                        });
+                                        editor.editorcore.insertAtCursor(rr.toHTML());
+                                    
+                                 
+                                    }
+                                },
+                                xns : Roo,
+                               
+                            },
+                            {
+                                xtype : 'Button',
+                                text : "Add Image (BIG)",
+                                cls : 'x-init-enable',
+                                listeners : {
+                                    click : function (_self, e)
+                                    {
+                                        
+                                        var rr = new Roo.htmleditor.BlockFigure({
+                                            image_src: 'https://picsum.photos/1000/500',
+    
+                                            align: 'left',
+                                            caption : 'test',
+                                            text_align: 'left',
+                                            
+                                            width : '100%',
+                                            margin: '2%',
+                                        });
+                                        editor.editorcore.insertAtCursor(rr.toHTML());
+                                    
+                                 
+                                    }
+                                },
+                                xns : Roo,
+                               
+                            },
+                            {
+                                xtype : 'Button',
+                                text : "Add Image (SMALL)",
+                                cls : 'x-init-enable',
+                                listeners : {
+                                    click : function (_self, e)
+                                    {
+                                        
+                                        var rr = new Roo.htmleditor.BlockFigure({
+                                            image_src: 'https://picsum.photos/400/300',
+    
+                                            align: 'left',
+                                            caption : 'test',
+                                            text_align: 'left',
+                                            
+                                            width : '100%',
+                                            margin: '2%',
+                                        });
+                                        editor.editorcore.insertAtCursor(rr.toHTML());
+                                    
+                                 
+                                    }
+                                },
+                                xns : Roo,
+                               
+                            },
+                            {
+                                xtype : 'Button',
+                                text : "Add Youtube",
+                                cls : 'x-init-enable',
+                                listeners : {
+                                    click : function (_self, e)
+                                    {
+                                        
+                                        var rr = new Roo.htmleditor.BlockFigure({
+                                            image_src: 'https://picsum.photos/500/400',
+    
+                                            align: 'center',
+                                            caption : 'test',
+                                            text_align: 'left',
+                                            video_url : 'https://www.youtube.com/embed/Gbr-UrxxeoA',
+                                            href : 'https://youtu.be/Gbr-UrxxeoA',
+                                            cls : 'youtube',
+                                            width : '100%',
+                                            margin: '2%',
+                                        });
+                                        editor.editorcore.insertAtCursor(rr.toHTML());
+                                    
+                                 
+                                    }
+                                },
+                                xns : Roo,
+                               
+                            }
+                   
+                        ]
                     },
                       {
                         xtype : 'ToolbarContext',
                     },
                       {
                         xtype : 'ToolbarContext',
@@ -38,15 +149,15 @@ Roo.onReady(function(){
                             '*' : [ 'headline' ] ,
                             'TD' : [ 'underline', 'double-underline' ]
                         }
                             '*' : [ 'headline' ] ,
                             'TD' : [ 'underline', 'double-underline' ]
                         }
-                    },
-                    
+                    }
+                     
                     
                 ],
                 id:'bio',
                 name : 'bio',
                 fieldLabel:'Biography',
                     
                 ],
                 id:'bio',
                 name : 'bio',
                 fieldLabel:'Biography',
-                width:800,
-                height:400,
+                width:1100,
+                height:600,
                 resizable: 's' /// where the handles should got..
 
             },
                 resizable: 's' /// where the handles should got..
 
             },
index 036d8f8..fbcb5e0 100644 (file)
@@ -18,7 +18,7 @@ i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==un
 },destroy:function(){for(var i=0,a=arguments,S=a.length;i<S;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;
 }if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';
 case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,S){return v===null||v===undefined||(!S?v==='':false);},isOpera:C,isSafari:D,isFirefox:E,isIE:F,isIE7:G,isIE11:H,isEdge:I,isGecko:J,isBorderBox:K,isWindows:L,isLinux:N,isMac:M,isIOS:P,isAndroid:Q,isTouch:R,useShims:((F&&!G)||(J&&M)),selectNode:function(S,T){var U=Roo.DomQuery.selectNode(S,T);
 },destroy:function(){for(var i=0,a=arguments,S=a.length;i<S;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;
 }if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';
 case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,S){return v===null||v===undefined||(!S?v==='':false);},isOpera:C,isSafari:D,isFirefox:E,isIE:F,isIE7:G,isIE11:H,isEdge:I,isGecko:J,isBorderBox:K,isWindows:L,isLinux:N,isMac:M,isIOS:P,isAndroid:Q,isTouch:R,useShims:((F&&!G)||(J&&M)),selectNode:function(S,T){var U=Roo.DomQuery.selectNode(S,T);
-return U?Roo.get(U):new Roo.Element(false);},getGridSize:function(){var w=Roo.lib.Dom.getViewWidth();switch(true){case w>1200:return 'xl';case w>992:return 'lg';case w>768:return 'md';case w>576:return 'sm';default:return 'xs'}}});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux","Roo.bootstrap","Roo.bootstrap.dash");
+return U?Roo.get(U):new Roo.Element(false);},getGridSize:function(){var w=Roo.lib.Dom.getViewWidth();switch(true){case w>1200:return 'xl';case w>992:return 'lg';case w>768:return 'md';case w>576:return 'sm';default:return 'xs'}}});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux");
 
 // Function.js
 (function(){if(Roo.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);}window.attachEvent("onunload",fnCleanUp);
 
 // Function.js
 (function(){if(Roo.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);}window.attachEvent("onunload",fnCleanUp);
@@ -29,13 +29,13 @@ E=E.concat(B);}else if(typeof C=="number"){E=Array.prototype.slice.call(argument
 // String.js
 Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(A,B,ch){var C=new String(A);if(ch===null||ch===undefined||ch===''){ch=" ";}while(C.length<B){C=ch+C;}return C;},format:function(A){var B=Array.prototype.slice.call(arguments,1);
 return A.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(B[i]);});}});String.prototype.toggle=function(A,B){return this==A?B:A;};String.prototype.unicodeClean=function(){return this.replace(/[\s\S]/g,function(A){if(A.charCodeAt()<256){return A;
 // String.js
 Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(A,B,ch){var C=new String(A);if(ch===null||ch===undefined||ch===''){ch=" ";}while(C.length<B){C=ch+C;}return C;},format:function(A){var B=Array.prototype.slice.call(arguments,1);
 return A.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(B[i]);});}});String.prototype.toggle=function(A,B){return this==A?B:A;};String.prototype.unicodeClean=function(){return this.replace(/[\s\S]/g,function(A){if(A.charCodeAt()<256){return A;
-}try{encodeURIComponent(A);}catch(e){return '';}return A;});};
+}try{encodeURIComponent(A);}catch(e){return '';}return A;});};String.prototype.toUpperCaseFirst=function(){return this.charAt(0).toUpperCase()+this.slice(1);};
 // Number.js
 Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
 // Array.js
 Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,A=this.length;i<A;i++){if(this[i]==o){return i;}}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(A){var B=this.length>>>0;if(typeof A!="function"){throw new TypeError();
 }var C=new Array(B);var D=arguments[1];for(var i=0;i<B;i++){if(i in this){C[i]=A.call(D,this[i],i,this);}}return C;},equals:function(b){if(this===b){return true;}if(b==null){return false;}if(this.length!==b.length){return false;}for(var i=0;i<this.length;
 // Number.js
 Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
 // Array.js
 Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,A=this.length;i<A;i++){if(this[i]==o){return i;}}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(A){var B=this.length>>>0;if(typeof A!="function"){throw new TypeError();
 }var C=new Array(B);var D=arguments[1];for(var i=0;i<B;i++){if(i in this){C[i]=A.call(D,this[i],i,this);}}return C;},equals:function(b){if(this===b){return true;}if(b==null){return false;}if(this.length!==b.length){return false;}for(var i=0;i<this.length;
-++i){if(this[i]!==b[i]){return false;}}return true;}});
+++i){if(this[i]!==b[i]){return false;}}return true;}});Roo.applyIf(Array,{from:function(o){var A=[];for(var i=0;i<o.length;i++){A[i]=o[i];}return A;}});
 // Date.js
 Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(A){if(Date.formatFunctions[A]==null){Date.createNewFormat(A);
 }var B=Date.formatFunctions[A];return this[B]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(A){var B="format"+Date.formatFunctions.count++;Date.formatFunctions[A]=B;var C="Date.prototype."+B+" = function(){return ";var D=false;
 // Date.js
 Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(A){if(Date.formatFunctions[A]==null){Date.createNewFormat(A);
 }var B=Date.formatFunctions[A];return this[B]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(A){var B="format"+Date.formatFunctions.count++;Date.formatFunctions[A]=B;var C="Date.prototype."+B+" = function(){return ";var D=false;
@@ -47,10 +47,10 @@ case "g":return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";case "
 case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "P":return "this.getGMTColonOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";
 default:return "'"+String.escape(A)+"' + ";}};Date.parseDate=function(A,B){if(Date.parseFunctions[B]==null){Date.createParser(B);}var C=Date.parseFunctions[B];return Date[C](A);};Date.createParser=function(A){var B="parse"+Date.parseFunctions.count++;var C=Date.parseRegexes.length;
 var D=1;Date.parseFunctions[A]=B;var E="Date."+B+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"if (typeof(input) !== 'string') { input = input.toString(); }\n"+"var results = input.match(Date.parseRegexes["+C+"]);\n"+"if (results && results.length > 0) {";
 case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "P":return "this.getGMTColonOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";
 default:return "'"+String.escape(A)+"' + ";}};Date.parseDate=function(A,B){if(Date.parseFunctions[B]==null){Date.createParser(B);}var C=Date.parseFunctions[B];return Date[C](A);};Date.createParser=function(A){var B="parse"+Date.parseFunctions.count++;var C=Date.parseRegexes.length;
 var D=1;Date.parseFunctions[A]=B;var E="Date."+B+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"if (typeof(input) !== 'string') { input = input.toString(); }\n"+"var results = input.match(Date.parseRegexes["+C+"]);\n"+"if (results && results.length > 0) {";
-var F="";var G=false;var ch='';for(var i=0;i<A.length;++i){ch=A.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+=String.escape(ch);}else{var H=Date.formatCodeToRegex(ch,D);D+=H.g;F+=H.s;if(H.g&&H.c){E+=H.c;}}}E+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m);}\n"+"else if (y >= 0)\n"+"{v = new Date(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";
+var F="";var G=false;var ch='';for(var i=0;i<A.length;++i){ch=A.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+=String.escape(ch);}else{var H=Date.formatCodeToRegex(ch,D);D+=H.g;F+=H.s;if(H.g&&H.c){E+=H.c;}}}E+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m); v.setFullYear(y);}\n"+"else if (y >= 0)\n"+"{v = new Date(y); v.setFullYear(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";
 Date.parseRegexes[C]=new RegExp("^"+F+"$");eval(E);};Date.formatCodeToRegex=function(A,B){switch(A){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"}
 Date.parseRegexes[C]=new RegExp("^"+F+"$");eval(E);};Date.formatCodeToRegex=function(A,B){switch(A){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"}
-;case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{2})"}
+;case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = Math.max(0,parseInt(results["+B+"], 10) - 1);\n",s:"(\\d{2})"}
 ;case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+B+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+B+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"}
 ;case "a":return {g:1,c:"if (results["+B+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+B+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"}
 ;case "g":case "G":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+B+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+B+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"}
 ;case "a":return {g:1,c:"if (results["+B+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+B+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"}
 ;case "g":case "G":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
@@ -209,28 +209,52 @@ i<J;++i){H[i]=[G[0]+H[i][0],G[1]+H[i][1]];}}this.runtimeAttributes[E]=[G];if(H.l
 var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else{F=A.doMethod.call(this,C,D,E);
 }return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else{D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];
 }else{A.setAttribute.call(this,C,D,E);}};})();
 var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else{F=A.doMethod.call(this,C,D,E);
 }return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else{D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];
 }else{A.setAttribute.call(this,C,D,E);}};})();
+// Roo/lib/UndoManager.js
+Roo.lib.UndoManager=function(A,B){this.stack=[];this.limit=A;this.scope=B;this.fireEvent=typeof CustomEvent!='undefined'&&B&&B.dispatchEvent;if(this.fireEvent){this.bindEvents();}this.reset();};Roo.lib.UndoManager.prototype={limit:false,stack:false,scope:false,fireEvent:false,position:0,length:0,transact:function(A,B){if(arguments.length<2){throw new TypeError('Not enough arguments to UndoManager.transact.');
+}A.execute();this.stack.splice(0,this.position);if(B&&this.length){this.stack[0].push(A);}else{this.stack.unshift([A]);}this.position=0;if(this.limit&&this.stack.length>this.limit){this.length=this.stack.length=this.limit;}else{this.length=this.stack.length;
+}if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('DOMTransaction',{detail:{transactions:this.stack[0].slice()},bubbles:true,cancelable:false}));}},undo:function(){if(this.position<this.length){for(var i=this.stack[this.position].length-1;i>=0;
+i--){this.stack[this.position][i].undo();}this.position++;if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('undo',{detail:{transactions:this.stack[this.position-1].slice()},bubbles:true,cancelable:false}));}}},redo:function(){if(this.position>0){for(var i=0,n=this.stack[this.position-1].length;
+i<n;i++){this.stack[this.position-1][i].redo();}this.position--;if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('redo',{detail:{transactions:this.stack[this.position].slice()},bubbles:true,cancelable:false}));}}},item:function(A){if(A>=0&&A<this.length){return this.stack[A].slice();
+}return null;},clearUndo:function(){this.stack.length=this.length=this.position;},clearRedo:function(){this.stack.splice(0,this.position);this.position=0;this.length=this.stack.length;},reset:function(){this.stack=[];this.position=0;this.length=0;this.current_html=this.scope.innerHTML;
+if(this.timer!==false){clearTimeout(this.timer);}this.timer=false;this.merge=false;this.addEvent();},current_html:'',timer:false,merge:false,bindEvents:function(){var el=this.scope;el.undoManager=this;this.scope.addEventListener('keydown',function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode===90){if(e.shiftKey){el.undoManager.redo();
+}else{el.undoManager.undo();}e.preventDefault();}});this.scope.addEventListener('keyup',function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode===90){e.preventDefault();}});var t=this;el.addEventListener('input',function(e){if(el.innerHTML==t.current_html){return;
+}if(t.timer!==false){clearTimeout(t.timer);t.timer=false;}t.timer=setTimeout(function(){t.merge=false;},1000);t.addEvent(t.merge);t.merge=true;});},addEvent:function(A){A=typeof(A)=='undefined'?false:A;this.scope.undoManager.transact({scope:this.scope,oldHTML:this.current_html,newHTML:this.scope.innerHTML,execute:function(){}
+,undo:function(){this.scope.innerHTML=this.current_html=this.oldHTML;},redo:function(){this.scope.innerHTML=this.current_html=this.newHTML;}},false);this.merge=A;this.current_html=this.scope.innerHTML;}};
+// Roo/lib/Range.js
+Roo.lib.Range=function(){};Roo.lib.Range.wrap=function(r){return Roo.apply(r,Roo.lib.Range.prototype);};Roo.apply(Roo.lib.Range.prototype,{closest:function(A){if(typeof(A)!='string'){for(var i=0;i<A.length;i++){var r=this.closest(A[i]);if(r!==false){return r;
+}}return false;}A=A.toLowerCase();var n=this.commonAncestorContainer;while(n.nodeType!=1){n=n.parentNode;}if(n.nodeName.toLowerCase()==A){return n;}if(n.nodeName.toLowerCase()=='body'){return false;}return n.closest(A)||false;},cloneRange:function(){return Roo.lib.Range.wrap(Range.prototype.cloneRange.call(this));
+}});
+// Roo/lib/Selection.js
+Roo.lib.Selection=function(){};Roo.lib.Selection.wrap=function(r,A){Roo.apply(r,Roo.lib.Selection.prototype);r.ownerDocument=A;return r;};Roo.apply(Roo.lib.Selection.prototype,{ownerDocument:false,getRangeAt:function(n){return Roo.lib.Range.wrap(Selection.prototype.getRangeAt.call(this,n));
+},insertNode:function(A,B){if(typeof(A)=='string'){A=this.ownerDocument.createElement(A);if(B=='in'){A.innerHTML='&nbsp;';}}var C=this.getRangeAt(0);if(this.type!='Caret'){C.deleteContents();}var sn=A.childNodes[0];C.insertNode(A);if(B=='after'){A.insertAdjacentHTML('afterend','&nbsp;');
+sn=A.nextSibling;}if(B=='none'){return;}this.cursorText(sn);},cursorText:function(n){range=Roo.lib.Range.wrap(new Range());var ix=Array.from(n.parentNode.childNodes).indexOf(n);range.setStart(n.parentNode,ix);range.setEnd(n.parentNode,ix+1);this.removeAllRanges();
+this.addRange(range);Roo.log([n,range,this,this.baseOffset,this.extentOffset,this.type]);},cursorAfter:function(n){if(!n.nextSibling||n.nextSibling.nodeValue!='&nbsp;'){n.insertAdjacentHTML('afterend','&nbsp;');}this.cursorText(n.nextSibling);}});
 // Roo/DomHelper.js
 if(typeof Range!="undefined"&&typeof Range.prototype.createContextualFragment=="undefined"){Range.prototype.createContextualFragment=function(A){var B=window.document;var C=B.createElement("div");C.innerHTML=A;var D=B.createDocumentFragment(),n;while((n=C.firstChild)){D.appendChild(n);
 }return D;};}Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}b+="<"+o.tag;
 // Roo/DomHelper.js
 if(typeof Range!="undefined"&&typeof Range.prototype.createContextualFragment=="undefined"){Range.prototype.createContextualFragment=function(A){var B=window.document;var C=B.createElement("div");C.innerHTML=A;var D=B.createDocumentFragment(),n;while((n=C.firstChild)){D.appendChild(n);
 }return D;};}Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}b+="<"+o.tag;
-for(var M in o){if(M=="tag"||M=="children"||M=="cn"||M=="html"||typeof o[M]=="function"){continue;}if(M=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var N in s){if(typeof s[N]!="function"){b+=N+":"+s[N]+";";
-}}b+='"';}}else{if(M=="cls"){b+=' class="'+o["cls"]+'"';}else if(M=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+M+'="'+o[M]+'"';}}}if(B.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,O=cn.length;
-i<O;i++){b+=E(cn[i],b);}}else{b+=E(cn,b);}}if(o.html){b+=o.html;}b+="</"+o.tag+">";}return b;};var F=function(o,M){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");
-}ns=D[o.ns];}if(typeof(o)=='string'){return M.appendChild(document.createTextNode(o));}o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var N=el.setAttribute?true:false;
-for(var O in o){if(O=="tag"||O=="ns"||O=="xmlns"||O=="children"||O=="cn"||O=="html"||O=="style"||typeof o[O]=="function"){continue;}if(O=="cls"&&Roo.isIE){el.className=o["cls"];}else{if(N){el.setAttribute(O=="cls"?'class':O,o[O]);}else{el[O]=o[O];}}}Roo.DomHelper.applyStyles(el,o.style);
-var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,P=cn.length;i<P;i++){F(cn[i],el);}}else{F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(M){M.appendChild(el);}return el;};var G=function(M,s,h,e){A.innerHTML=[s,h,e].join('');
-var i=-1,el=A;while(++i<M&&el.firstChild){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(M,N,el,O){if(!A){A=document.createElement('div');}var P;var Q=null;if(M=='td'){if(N=='afterbegin'||N=='beforeend'){return;
-}if(N=='beforebegin'){Q=el;el=el.parentNode;}else{Q=el.nextSibling;el=el.parentNode;}P=G(4,J,O,K);}else if(M=='tr'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(3,H,O,I);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(3,H,O,I);}else{if(N=='afterbegin'){Q=el.firstChild;
-}P=G(4,J,O,K);}}else if(M=='tbody'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(2,ts,O,te);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(2,ts,O,te);}else{if(N=='afterbegin'){Q=el.firstChild;}P=G(3,H,O,I);}}else{if(N=='beforebegin'||N=='afterend'){return;
-}if(N=='afterbegin'){Q=el.firstChild;}P=G(2,ts,O,te);}el.insertBefore(P,Q);return P;};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,M){if(M){el=Roo.fly(el);if(typeof M=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var N;
-while((N=re.exec(M))!=null){el.setStyle(N[1],N[2]);}}else if(typeof M=="object"){for(var O in M){el.setStyle(O,M[O]);}}else if(typeof M=="function"){Roo.DomHelper.applyStyles(el,M.call());}}},insertHtml:function(M,el,N){M=M.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;
-if(rs=L(el.tagName.toLowerCase(),M,el,N)){return rs;}}switch(M){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',N);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',N);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',N);
-return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',N);return el.nextSibling;}throw 'Illegal insertion point -> "'+M+'"';}var O=el.ownerDocument.createRange();var P;switch(M){case "beforebegin":O.setStartBefore(el);P=O.createContextualFragment(N);
-el.parentNode.insertBefore(P,el);return el.previousSibling;case "afterbegin":if(el.firstChild){O.setStartBefore(el.firstChild);P=O.createContextualFragment(N);el.insertBefore(P,el.firstChild);return el.firstChild;}else{el.innerHTML=N;return el.firstChild;
-}case "beforeend":if(el.lastChild){O.setStartAfter(el.lastChild);P=O.createContextualFragment(N);el.appendChild(P);return el.lastChild;}else{el.innerHTML=N;return el.lastChild;}case "afterend":O.setStartAfter(el);P=O.createContextualFragment(N);el.parentNode.insertBefore(P,el.nextSibling);
-return el.nextSibling;}throw 'Illegal insertion point -> "'+M+'"';},insertBefore:function(el,o,M){return this.doInsert(el,o,M,"beforeBegin");},insertAfter:function(el,o,M){return this.doInsert(el,o,M,"afterEnd","nextSibling");},insertFirst:function(el,o,M){return this.doInsert(el,o,M,"afterBegin");
-},doInsert:function(el,o,M,N,O){el=Roo.getDom(el);var P;if(this.useDom||o.ns){P=F(o,null);el.parentNode.insertBefore(P,O?el[O]:el);}else{var Q=E(o);P=this.insertHtml(N,el,Q);}return M?Roo.get(P,true):P;},append:function(el,o,M){el=Roo.getDom(el);var N;if(this.useDom||o.ns){N=F(o,null);
-el.appendChild(N);}else{var O=E(o);N=this.insertHtml("beforeEnd",el,O);}return M?Roo.get(N,true):N;},overwrite:function(el,o,M){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}F(o,el);}else{el.innerHTML=E(o);}return M?Roo.get(el.firstChild,true):el.firstChild;
-},createTemplate:function(o){var M=E(o);return new Roo.Template(M);}};}();
+for(var N in o){if(N=="tag"||N=="children"||N=="cn"||N=="html"||typeof o[N]=="function"){continue;}if(N=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var O in s){if(typeof s[O]!="function"){b+=O+":"+s[O]+";";
+}}b+='"';}}else{if(N=="cls"){b+=' class="'+o["cls"]+'"';}else if(N=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+N+'="'+o[N]+'"';}}}if(B.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,P=cn.length;
+i<P;i++){b+=E(cn[i],b);}}else{b+=E(cn,b);}}if(o.html){b+=o.html;}b+="</"+o.tag+">";}return b;};var F=function(o,N){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");
+}ns=D[o.ns];}if(typeof(o)=='string'){return N.appendChild(document.createTextNode(o));}o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var O=el.setAttribute?true:false;
+for(var P in o){if(P=="tag"||P=="ns"||P=="xmlns"||P=="children"||P=="cn"||P=="html"||P=="style"||typeof o[P]=="function"){continue;}if(P=="cls"&&Roo.isIE){el.className=o["cls"];}else{if(O){el.setAttribute(P=="cls"?'class':P,o[P]);}else{el[P]=o[P];}}}Roo.DomHelper.applyStyles(el,o.style);
+var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,Q=cn.length;i<Q;i++){F(cn[i],el);}}else{F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(N){N.appendChild(el);}return el;};var G=function(N,s,h,e){A.innerHTML=[s,h,e].join('');
+var i=-1,el=A;while(++i<N&&el.firstChild){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(N,O,el,P){if(!A){A=document.createElement('div');}var Q;var R=null;if(N=='td'){if(O=='afterbegin'||O=='beforeend'){return;
+}if(O=='beforebegin'){R=el;el=el.parentNode;}else{R=el.nextSibling;el=el.parentNode;}Q=G(4,J,P,K);}else if(N=='tr'){if(O=='beforebegin'){R=el;el=el.parentNode;Q=G(3,H,P,I);}else if(O=='afterend'){R=el.nextSibling;el=el.parentNode;Q=G(3,H,P,I);}else{if(O=='afterbegin'){R=el.firstChild;
+}Q=G(4,J,P,K);}}else if(N=='tbody'){if(O=='beforebegin'){R=el;el=el.parentNode;Q=G(2,ts,P,te);}else if(O=='afterend'){R=el.nextSibling;el=el.parentNode;Q=G(2,ts,P,te);}else{if(O=='afterbegin'){R=el.firstChild;}Q=G(3,H,P,I);}}else{if(O=='beforebegin'||O=='afterend'){return;
+}if(O=='afterbegin'){R=el.firstChild;}Q=G(2,ts,P,te);}el.insertBefore(Q,R);return Q;};var M=function(N,to){Roo.log(["UpdateNode",N,to]);if(N.nodeType!=to.nodeType){Roo.log(["ReplaceChild - mismatch notType",to,N]);N.parentNode.replaceChild(to,N);}if(N.nodeType==3){if(N.data==to.data){return;
+}N.data=to.data;return;}if(!N.parentNode){return;}if(N.nodeType!=1||N.tagName!=to.tagName){Roo.log(["ReplaceChild",N,to]);N.parentNode.replaceChild(to,N);return;}var ar=Array.from(N.attributes);for(var i=0;i<ar.length;i++){if(to.hasAttribute(ar[i].name)){continue;
+}if(ar[i].name=='id'){continue;}Roo.log("removeAttribute"+ar[i].name);N.removeAttribute(ar[i].name);}ar=to.attributes;for(var i=0;i<ar.length;i++){if(N.getAttribute(ar[i].name)==to.getAttribute(ar[i].name)){Roo.log("skipAttribute "+ar[i].name+'='+to.getAttribute(ar[i].name));
+continue;}Roo.log("updateAttribute "+ar[i].name+'=>'+to.getAttribute(ar[i].name));N.setAttribute(ar[i].name,to.getAttribute(ar[i].name));}var O=Array.from(N.childNodes);var P=Array.from(to.childNodes);for(var i=0;i<Math.max(P.length,O.length);i++){if(i>=O.length){N.appendChild(P[i]);
+Roo.log(["add",P[i]]);}else if(i>=P.length){N.removeChild(O[i]);Roo.log(["remove",O[i]]);}else{M(O[i],P[i]);}}};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,N){if(N){el=Roo.fly(el);if(typeof N=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+var O;while((O=re.exec(N))!=null){el.setStyle(O[1],O[2]);}}else if(typeof N=="object"){for(var P in N){el.setStyle(P,N[P]);}}else if(typeof N=="function"){Roo.DomHelper.applyStyles(el,N.call());}}},insertHtml:function(N,el,O){N=N.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;
+if(rs=L(el.tagName.toLowerCase(),N,el,O)){return rs;}}switch(N){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',O);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',O);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',O);
+return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',O);return el.nextSibling;}throw 'Illegal insertion point -> "'+N+'"';}var P=el.ownerDocument.createRange();var Q;switch(N){case "beforebegin":P.setStartBefore(el);Q=P.createContextualFragment(O);
+el.parentNode.insertBefore(Q,el);return el.previousSibling;case "afterbegin":if(el.firstChild){P.setStartBefore(el.firstChild);Q=P.createContextualFragment(O);el.insertBefore(Q,el.firstChild);return el.firstChild;}else{el.innerHTML=O;return el.firstChild;
+}case "beforeend":if(el.lastChild){P.setStartAfter(el.lastChild);Q=P.createContextualFragment(O);el.appendChild(Q);return el.lastChild;}else{el.innerHTML=O;return el.lastChild;}case "afterend":P.setStartAfter(el);Q=P.createContextualFragment(O);el.parentNode.insertBefore(Q,el.nextSibling);
+return el.nextSibling;}throw 'Illegal insertion point -> "'+N+'"';},insertBefore:function(el,o,N){return this.doInsert(el,o,N,"beforeBegin");},insertAfter:function(el,o,N){return this.doInsert(el,o,N,"afterEnd","nextSibling");},insertFirst:function(el,o,N){return this.doInsert(el,o,N,"afterBegin");
+},doInsert:function(el,o,N,O,P){el=Roo.getDom(el);var Q;if(this.useDom||o.ns){Q=F(o,null);el.parentNode.insertBefore(Q,P?el[P]:el);}else{var R=E(o);Q=this.insertHtml(O,el,R);}return N?Roo.get(Q,true):Q;},append:function(el,o,N){el=Roo.getDom(el);var O;if(this.useDom||o.ns){O=F(o,null);
+el.appendChild(O);}else{var P=E(o);O=this.insertHtml("beforeEnd",el,P);}return N?Roo.get(O,true):O;},overwrite:function(el,o,N){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}F(o,el);}else{el.innerHTML=E(o);}return N?Roo.get(el.firstChild,true):el.firstChild;
+},createTemplate:function(o){var N=E(o);return new Roo.Template(N);},update:function(el,o){M(Roo.getDom(el),F(o));}};}();
 // Roo/Template.js
 Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}if(typeof(A)=='object'){Roo.apply(this,A)}else{this.html=A;}if(this.url){this.load();}};Roo.Template.prototype={onLoad:false,url:false,html:'',compiled:false,loaded:false,applyTemplate:function(A){try{if(this.compiled){return this.compiled(A);
 }var B=this.disableFormats!==true;var fm=Roo.util.Format,C=this;var fn=function(m,D,E,F){if(E&&B){if(E.substr(0,5)=="this."){return C.call(E.substr(5),A[D],A);}else{if(F){var re=/^\s*['"](.*)["']\s*$/;F=F.split(',');for(var i=0,G=F.length;i<G;i++){F[i]=F[i].replace(re,"$1");
 // Roo/Template.js
 Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}if(typeof(A)=='object'){Roo.apply(this,A)}else{this.html=A;}if(this.url){this.load();}};Roo.Template.prototype={onLoad:false,url:false,html:'',compiled:false,loaded:false,applyTemplate:function(A){try{if(this.compiled){return this.compiled(A);
 }var B=this.disableFormats!==true;var fm=Roo.util.Format,C=this;var fn=function(m,D,E,F){if(E&&B){if(E.substr(0,5)=="this."){return C.call(E.substr(5),A[D],A);}else{if(F){var re=/^\s*['"](.*)["']\s*$/;F=F.split(',');for(var i=0,G=F.length;i<G;i++){F[i]=F[i].replace(re,"$1");
@@ -1226,12 +1250,12 @@ A.render(td);var ti=new Roo.Toolbar.Item(td.firstChild);ti.render(td);this.items
 this.disabled=false;this.el.disabled=false;}});Roo.Toolbar.Separator=function(A){var s=document.createElement("span");s.className="ytb-sep";if(A){A.el=s;}Roo.Toolbar.Separator.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Separator,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Spacer=function(A){var s=document.createElement("div");s.className="ytb-spacer";if(A){A.el=s;}Roo.Toolbar.Spacer.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Spacer,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Fill=Roo.extend(Roo.Toolbar.Spacer,{render:function(td){td.style.width='100%';Roo.Toolbar.Fill.superclass.render.call(this,td);}});Roo.Toolbar.TextItem=function(A){var B=A||"";if(typeof(A)=='object'){B=A.text||"";}else{A=null;}var s=document.createElement("span");
 this.disabled=false;this.el.disabled=false;}});Roo.Toolbar.Separator=function(A){var s=document.createElement("span");s.className="ytb-sep";if(A){A.el=s;}Roo.Toolbar.Separator.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Separator,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Spacer=function(A){var s=document.createElement("div");s.className="ytb-spacer";if(A){A.el=s;}Roo.Toolbar.Spacer.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Spacer,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Fill=Roo.extend(Roo.Toolbar.Spacer,{render:function(td){td.style.width='100%';Roo.Toolbar.Fill.superclass.render.call(this,td);}});Roo.Toolbar.TextItem=function(A){var B=A||"";if(typeof(A)=='object'){B=A.text||"";}else{A=null;}var s=document.createElement("span");
-s.className="ytb-text";s.innerHTML=B;if(A){A.el=s;}Roo.Toolbar.TextItem.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.TextItem,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn});Roo.Toolbar.Button=function(A){Roo.Toolbar.Button.superclass.constructor.call(this,null,A);
-};Roo.extend(Roo.Toolbar.Button,Roo.Button,{render:function(td){this.td=td;Roo.Toolbar.Button.superclass.render.call(this,td);},destroy:function(){Roo.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;
-this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Roo.fly(this.td).addClass("x-item-disabled");this.disabled=true;},enable:function(){Roo.fly(this.td).removeClass("x-item-disabled");this.disabled=false;
-}});Roo.ToolbarButton=Roo.Toolbar.Button;Roo.Toolbar.SplitButton=function(A){Roo.Toolbar.SplitButton.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.SplitButton,Roo.SplitButton,{render:function(td){this.td=td;Roo.Toolbar.SplitButton.superclass.render.call(this,td);
-},destroy:function(){Roo.Toolbar.SplitButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";}});Roo.Toolbar.MenuButton=Roo.Toolbar.SplitButton;
-
+s.className="ytb-text";s.innerHTML=B;if(A){A.el=s;}Roo.Toolbar.TextItem.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.TextItem,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn,show:function(){this.hidden=false;this.el.style.display="";
+},hide:function(){this.hidden=true;this.el.style.display="none";}});Roo.Toolbar.Button=function(A){Roo.Toolbar.Button.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.Button,Roo.Button,{render:function(td){this.td=td;Roo.Toolbar.Button.superclass.render.call(this,td);
+},destroy:function(){Roo.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Roo.fly(this.td).addClass("x-item-disabled");
+this.disabled=true;},enable:function(){Roo.fly(this.td).removeClass("x-item-disabled");this.disabled=false;}});Roo.ToolbarButton=Roo.Toolbar.Button;Roo.Toolbar.SplitButton=function(A){Roo.Toolbar.SplitButton.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.SplitButton,Roo.SplitButton,{render:function(td){this.td=td;
+Roo.Toolbar.SplitButton.superclass.render.call(this,td);},destroy:function(){Roo.Toolbar.SplitButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;
+this.td.style.display="none";}});Roo.Toolbar.MenuButton=Roo.Toolbar.SplitButton;
 // Roo/PagingToolbar.js
 Roo.PagingToolbar=function(el,ds,A){if(typeof(el)=='object'&&el.xtype){A=el;ds=el.dataSource;el=A.container;}var B=[];if(A.items){B=A.items;A.items=[];}Roo.PagingToolbar.superclass.constructor.call(this,el,null,A);this.ds=ds;this.cursor=0;this.renderButtons(this.el);
 this.bind(ds);Roo.each(B,function(e){this.add(Roo.factory(e));},this);};Roo.extend(Roo.PagingToolbar,Roo.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Roo.PagingToolbar.superclass.render.call(this,el);
 // Roo/PagingToolbar.js
 Roo.PagingToolbar=function(el,ds,A){if(typeof(el)=='object'&&el.xtype){A=el;ds=el.dataSource;el=A.container;}var B=[];if(A.items){B=A.items;A.items=[];}Roo.PagingToolbar.superclass.constructor.call(this,el,null,A);this.ds=ds;this.cursor=0;this.renderButtons(this.el);
 this.bind(ds);Roo.each(B,function(e){this.add(Roo.factory(e));},this);};Roo.extend(Roo.PagingToolbar,Roo.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Roo.PagingToolbar.superclass.render.call(this,el);
@@ -1368,7 +1392,7 @@ E.dom.style.overflowY='auto'+(Roo.isIE?'':' !important');}else{E.dom.style.heigh
 Roo.log("[Roo.Messagebox] Show called while message displayed:");Roo.log("Old Dialog Message:"+F.innerHTML);Roo.log("New Dialog Message:"+Q.msg)}var d=this.getDialog();B=Q;d.setTitle(B.title||"&#160;");d.close.setDisplayed(B.closable!==false);K=G;B.prompt=B.prompt||(B.multiline?true:false);
 if(B.prompt){if(B.multiline){G.hide();H.show();H.setHeight(typeof B.multiline=="number"?B.multiline:this.defaultTextHeight);K=H;}else{G.show();H.hide();}}else{G.hide();H.hide();}I.setDisplayed(B.progress===true);this.updateProgress(0);K.dom.value=B.value||"";
 if(B.prompt){A.setDefaultButton(K);}else{var bs=B.buttons;var db=null;if(bs&&bs.ok){db=J["ok"];}else if(bs&&bs.yes){db=J["yes"];}A.setDefaultButton(db);}L=O(B.buttons);this.updateText(B.msg);if(B.cls){d.el.addClass(B.cls);}d.proxyDrag=B.proxyDrag===true;d.modal=B.modal!==false;
 Roo.log("[Roo.Messagebox] Show called while message displayed:");Roo.log("Old Dialog Message:"+F.innerHTML);Roo.log("New Dialog Message:"+Q.msg)}var d=this.getDialog();B=Q;d.setTitle(B.title||"&#160;");d.close.setDisplayed(B.closable!==false);K=G;B.prompt=B.prompt||(B.multiline?true:false);
 if(B.prompt){if(B.multiline){G.hide();H.show();H.setHeight(typeof B.multiline=="number"?B.multiline:this.defaultTextHeight);K=H;}else{G.show();H.hide();}}else{G.hide();H.hide();}I.setDisplayed(B.progress===true);this.updateProgress(0);K.dom.value=B.value||"";
 if(B.prompt){A.setDefaultButton(K);}else{var bs=B.buttons;var db=null;if(bs&&bs.ok){db=J["ok"];}else if(bs&&bs.yes){db=J["yes"];}A.setDefaultButton(db);}L=O(B.buttons);this.updateText(B.msg);if(B.cls){d.el.addClass(B.cls);}d.proxyDrag=B.proxyDrag===true;d.modal=B.modal!==false;
-d.mask=B.modal!==false?C:false;if(!d.isVisible()){document.body.appendChild(A.el.dom);d.animateTarget=null;d.show(Q.animEl);}return this;},progress:function(Q,R){this.show({title:Q,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,modal:true}
+d.mask=B.modal!==false?C:false;if(!d.isVisible()){document.body.appendChild(A.el.dom);d.animateTarget=null;d.show(Q.animEl);}A.toFront();return this;},progress:function(Q,R){this.show({title:Q,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,modal:true}
 );return this;},alert:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.OK,fn:fn,scope:S,modal:true});return this;},wait:function(Q,R){this.show({title:R,msg:Q,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});D=Roo.TaskMgr.start({run:function(i){Roo.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
 },interval:1000});return this;},confirm:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.YESNO,fn:fn,scope:S,modal:true});return this;},prompt:function(Q,R,fn,S,T){this.show({title:Q,msg:R,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:S,prompt:true,multiline:T,modal:true}
 );return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();
 );return this;},alert:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.OK,fn:fn,scope:S,modal:true});return this;},wait:function(Q,R){this.show({title:R,msg:Q,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});D=Roo.TaskMgr.start({run:function(i){Roo.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
 },interval:1000});return this;},confirm:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.YESNO,fn:fn,scope:S,modal:true});return this;},prompt:function(Q,R,fn,S,T){this.show({title:Q,msg:R,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:S,prompt:true,multiline:T,modal:true}
 );return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();
@@ -1688,17 +1712,18 @@ return false;}if(B<this.minValue){this.markInvalid(String.format(this.minText,th
 if(v){this.setValue(v);}}});
 // Roo/form/DateField.js
 Roo.form.DateField=function(A){Roo.form.DateField.superclass.constructor.call(this,A);this.addEvents({'select':true});if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);
 if(v){this.setValue(v);}}});
 // Roo/form/DateField.js
 Roo.form.DateField=function(A){Roo.form.DateField.superclass.constructor.call(this,A);this.addEvents({'select':true});if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);
-}this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1){re+="|";}}this.ddMatch=new RegExp(re+")");}};Roo.extend(Roo.form.DateField,Roo.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",minValue:null,maxValue:null,minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',useIso:false,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"}
+}this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1){re+="|";}}this.ddMatch=new RegExp(re+")");}};Roo.extend(Roo.form.DateField,Roo.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",zeroValue:'1800-01-01',minValue:null,maxValue:null,minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',useIso:false,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"}
 ,hiddenField:false,onRender:function(ct,A){Roo.form.DateField.superclass.onRender.call(this,ct,A);if(this.useIso){Roo.log("Changing name?");this.el.dom.setAttribute('name',this.name+'____hidden___');this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.name}
 ,'before',true);this.hiddenField.value=this.value?this.formatDate(this.value,'Y-m-d'):'';this.hiddenName=this.name;}},validateValue:function(A){A=this.formatDate(A);if(!Roo.form.DateField.superclass.validateValue.call(this,A)){Roo.log('super failed');return false;
 }if(A.length<1){return true;}var B=A;A=this.parseDate(A);if(!A){Roo.log('parse date failed'+B);this.markInvalid(String.format(this.invalidText,B,this.format));return false;}var C=A.getTime();if(this.minValue&&C<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));
 return false;}if(this.maxValue&&C>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}if(this.disabledDays){var D=A.getDay();for(var i=0;i<this.disabledDays.length;i++){if(D===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);
 return false;}}}var E=this.formatDate(A);if(this.ddMatch&&this.ddMatch.test(E)){this.markInvalid(String.format(this.disabledDatesText,E));return false;}return true;},validateBlur:function(){return !this.menu||!this.menu.isVisible();},getName:function(){if(!this.rendered){return ''}
 ;return !this.hiddenName&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},getValue:function(){return this.hiddenField?this.hiddenField.value:this.parseDate(Roo.form.DateField.superclass.getValue.call(this))||"";},setValue:function(A){if(this.hiddenField){this.hiddenField.value=this.formatDate(this.parseDate(A),'Y-m-d');
 ,hiddenField:false,onRender:function(ct,A){Roo.form.DateField.superclass.onRender.call(this,ct,A);if(this.useIso){Roo.log("Changing name?");this.el.dom.setAttribute('name',this.name+'____hidden___');this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.name}
 ,'before',true);this.hiddenField.value=this.value?this.formatDate(this.value,'Y-m-d'):'';this.hiddenName=this.name;}},validateValue:function(A){A=this.formatDate(A);if(!Roo.form.DateField.superclass.validateValue.call(this,A)){Roo.log('super failed');return false;
 }if(A.length<1){return true;}var B=A;A=this.parseDate(A);if(!A){Roo.log('parse date failed'+B);this.markInvalid(String.format(this.invalidText,B,this.format));return false;}var C=A.getTime();if(this.minValue&&C<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));
 return false;}if(this.maxValue&&C>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}if(this.disabledDays){var D=A.getDay();for(var i=0;i<this.disabledDays.length;i++){if(D===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);
 return false;}}}var E=this.formatDate(A);if(this.ddMatch&&this.ddMatch.test(E)){this.markInvalid(String.format(this.disabledDatesText,E));return false;}return true;},validateBlur:function(){return !this.menu||!this.menu.isVisible();},getName:function(){if(!this.rendered){return ''}
 ;return !this.hiddenName&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},getValue:function(){return this.hiddenField?this.hiddenField.value:this.parseDate(Roo.form.DateField.superclass.getValue.call(this))||"";},setValue:function(A){if(this.hiddenField){this.hiddenField.value=this.formatDate(this.parseDate(A),'Y-m-d');
-}Roo.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(A)));this.value=this.parseDate(A);},parseDate:function(A){if(!A||A instanceof Date){return A;}var v=Date.parseDate(A,this.format);if(!v&&this.useIso){v=Date.parseDate(A,'Y-m-d');
-}if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}for(var i=0,B=this.altFormatsArray.length;i<B&&!v;i++){v=Date.parseDate(A,this.altFormatsArray[i]);}}return v;},formatDate:function(A,B){return (!A||!(A instanceof Date))?A:A.dateFormat(B||this.format);
-},menuListeners:{select:function(m,d){this.setValue(d);this.fireEvent('select',this,d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);
-this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}if(this.menu==null){this.menu=new Roo.menu.DateMenu();}Roo.apply(this.menu.picker,{showClear:this.allowBlank,minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.useIso?'Y-m-d':this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))}
+}Roo.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(A)));this.value=this.parseDate(A);},parseDate:function(A){if(A instanceof Date){if(A<Date.parseDate(this.zeroValue,'Y-m-d')){return '';}return A;}if(!A||A instanceof Date){return A;
+}var v=Date.parseDate(A,this.format);if(!v&&this.useIso){v=Date.parseDate(A,'Y-m-d');}if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}for(var i=0,B=this.altFormatsArray.length;i<B&&!v;i++){v=Date.parseDate(A,this.altFormatsArray[i]);
+}}if(v<Date.parseDate(this.zeroValue,'Y-m-d')){v='';}return v;},formatDate:function(A,B){return (!A||!(A instanceof Date))?A:A.dateFormat(B||this.format);},menuListeners:{select:function(m,d){this.setValue(d);this.fireEvent('select',this,d);},show:function(){this.onFocus();
+},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}if(this.menu==null){this.menu=new Roo.menu.DateMenu();
+}Roo.apply(this.menu.picker,{showClear:this.allowBlank,minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.useIso?'Y-m-d':this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))}
 );this.menu.on(Roo.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}},isDirty:function(){if(this.disabled){return false;
 }if(typeof(this.startValue)==='undefined'){return false;}return String(this.getValue())!==String(this.startValue);},cleanLeadingSpace:function(e){return;}});
 // Roo/form/MonthField.js
 );this.menu.on(Roo.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}},isDirty:function(){if(this.disabled){return false;
 }if(typeof(this.startValue)==='undefined'){return false;}return String(this.getValue())!==String(this.startValue);},cleanLeadingSpace:function(e){return;}});
 // Roo/form/MonthField.js
@@ -1825,98 +1850,295 @@ this.el.on('DOMAttrModified',this.setFromHidden,this);this.el.on('propertychange
 Roo.form.Radio=function(){Roo.form.Radio.superclass.constructor.apply(this,arguments);};Roo.extend(Roo.form.Radio,Roo.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;
 },onRender:function(ct,A){Roo.form.Checkbox.superclass.onRender.call(this,ct,A);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel}
 );}if(this.checked){this.el.dom.checked='checked';}}});
 Roo.form.Radio=function(){Roo.form.Radio.superclass.constructor.apply(this,arguments);};Roo.extend(Roo.form.Radio,Roo.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;
 },onRender:function(ct,A){Roo.form.Checkbox.superclass.onRender.call(this,ct,A);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel}
 );}if(this.checked){this.el.dom.checked='checked';}}});
+// Roo/rtf/namespace.js
+Roo.rtf={};
+// Roo/rtf/Hex.js
+Roo.rtf.Hex=function(A){this.hexstr=A;};
+// Roo/rtf/Paragraph.js
+Roo.rtf.Paragraph=function(A){this.content=[];};
+// Roo/rtf/Span.js
+Roo.rtf.Span=function(A){this.value=A.value;};
+// Roo/rtf/Group.js
+Roo.rtf.Group=function(A){this.content=[];this.cn=[];};Roo.rtf.Group.prototype={ignorable:false,content:false,cn:false,addContent:function(A){this.content.push(A);},addChild:function(cn){this.cn.push(cn);},toDataURL:function(){var A=false;switch(true){case this.content.filter(function(a){return a.value=='pngblip'}
+).length>0:A="image/png";break;case this.content.filter(function(a){return a.value=='jpegblip'}).length>0:A="image/jpeg";break;default:return 'about:blank';}var B=this.content[this.content.length-1].value;return 'data:'+A+';base64,'+btoa(B.match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a,16));
+}).join(""));}};
+// Roo/rtf/Document.js
+Roo.rtf.Document=function(){this.rtlch=[];this.content=[];this.cn=[];};Roo.extend(Roo.rtf.Document,Roo.rtf.Group,{addChild:function(cn){this.cn.push(cn);switch(cn.type){case 'rtlch':case 'listtext':case 'shpinst':this.rtlch.push(cn);return;default:this[cn.type]=cn;
+}},getElementsByType:function(A){var B=[];this._getElementsByType(A,B,this.cn,'rtf');return B;},_getElementsByType:function(A,B,C,D){C.forEach(function(n,i){if(n.type==A){n.path=D+'/'+n.type+':'+i;B.push(n);}if(n.cn.length>0){this._getElementsByType(A,B,n.cn,D+'/'+n.type+':'+i);
+}},this);}});
+// Roo/rtf/Ctrl.js
+Roo.rtf.Ctrl=function(A){this.value=A.value;this.param=A.param;};
+// Roo/rtf/Parser.js
+Roo.rtf.Parser=function(A){this.text='';this.parserState=this.parseText;this.doc={};this.groupStack=[];this.hexStore=[];this.doc=false;this.groups=[];for(var ii=0;ii<A.length;++ii){++this.cpos;if(A[ii]==='\n'){++this.row;this.col=1;}else{++this.col;}this.parserState(A[ii]);
+}};Roo.rtf.Parser.prototype={text:'',controlWord:'',controlWordParam:'',hexChar:'',doc:false,group:false,groupStack:false,hexStore:false,cpos:0,row:1,col:1,push:function(el){var m='cmd'+el.type;if(typeof(this[m])=='undefined'){Roo.log('invalid cmd:'+el.type);
+return;}this[m](el);},flushHexStore:function(){if(this.hexStore.length<1){return;}var A=this.hexStore.map(function(B){return B.value;}).join('');this.group.addContent(new Roo.rtf.Hex(A));this.hexStore.splice(0)},cmdgroupstart:function(){this.flushHexStore();
+if(this.group){this.groupStack.push(this.group);}if(this.doc===false){this.group=this.doc=new Roo.rtf.Document();return;}this.group=new Roo.rtf.Group(this.group);},cmdignorable:function(){this.flushHexStore();this.group.ignorable=true;},cmdendparagraph:function(){this.flushHexStore();
+this.group.addContent(new Roo.rtf.Paragraph());},cmdgroupend:function(){this.flushHexStore();var A=this.group;this.group=this.groupStack.pop();if(this.group){this.group.addChild(A);}var B=this.group||this.doc;if(A.ignorable===false){this.groups.push(A);}}
+,cmdtext:function(A){this.flushHexStore();if(!this.group){}this.group.addContent(new Roo.rtf.Span(A));},cmdcontrolword:function(A){this.flushHexStore();if(!this.group.type){this.group.type=A.value;return;}this.group.addContent(new Roo.rtf.Ctrl(A));return;
+},cmdhexchar:function(A){this.hexStore.push(A);},cmderror:function(A){throw new Exception(A.value);},parseText:function(c){if(c==='\\'){this.parserState=this.parseEscapes;}else if(c==='{'){this.emitStartGroup();}else if(c==='}'){this.emitEndGroup();}else if(c==='\x0A'||c==='\x0D'){}
+else{this.text+=c;}},parseEscapes:function(c){if(c==='\\'||c==='{'||c==='}'){this.text+=c;this.parserState=this.parseText;}else{this.parserState=this.parseControlSymbol;this.parseControlSymbol(c);}},parseControlSymbol:function(c){if(c==='~'){this.text+='\u00a0';
+this.parserState=this.parseText}else if(c==='-'){this.text+='\u00ad';}else if(c==='_'){this.text+='\u2011';}else if(c==='*'){this.emitIgnorable();this.parserState=this.parseText;}else if(c==="'"){this.parserState=this.parseHexChar;}else if(c==='|'){this.emitFormula();
+this.parserState=this.parseText;}else if(c===':'){this.emitIndexSubEntry();this.parserState=this.parseText;}else if(c==='\x0a'){this.emitEndParagraph();this.parserState=this.parseText;}else if(c==='\x0d'){this.emitEndParagraph();this.parserState=this.parseText;
+}else{this.parserState=this.parseControlWord;this.parseControlWord(c);}},parseHexChar:function(c){if(/^[A-Fa-f0-9]$/.test(c)){this.hexChar+=c;if(this.hexChar.length>=2){this.emitHexChar();this.parserState=this.parseText;}return;}this.emitError("Invalid character \""+c+"\" in hex literal.");
+this.parserState=this.parseText;},parseControlWord:function(c){if(c===' '){this.emitControlWord();this.parserState=this.parseText;}else if(/^[-\d]$/.test(c)){this.parserState=this.parseControlWordParam;this.controlWordParam+=c;}else if(/^[A-Za-z]$/.test(c)){this.controlWord+=c;
+}else{this.emitControlWord();this.parserState=this.parseText;this.parseText(c);}},parseControlWordParam:function(c){if(/^\d$/.test(c)){this.controlWordParam+=c;}else if(c===' '){this.emitControlWord();this.parserState=this.parseText;}else{this.emitControlWord();
+this.parserState=this.parseText;this.parseText(c);}},emitText:function(){if(this.text===''){return;}this.push({type:'text',value:this.text,pos:this.cpos,row:this.row,col:this.col});this.text=''},emitControlWord:function(){this.emitText();if(this.controlWord===''){this.emitError('empty control word');
+}else{this.push({type:'controlword',value:this.controlWord,param:this.controlWordParam!==''&&Number(this.controlWordParam),pos:this.cpos,row:this.row,col:this.col});}this.controlWord='';this.controlWordParam='';},emitStartGroup:function(){this.emitText();
+this.push({type:'groupstart',pos:this.cpos,row:this.row,col:this.col});},emitEndGroup:function(){this.emitText();this.push({type:'groupend',pos:this.cpos,row:this.row,col:this.col});},emitIgnorable:function(){this.emitText();this.push({type:'ignorable',pos:this.cpos,row:this.row,col:this.col}
+);},emitHexChar:function(){this.emitText();this.push({type:'hexchar',value:this.hexChar,pos:this.cpos,row:this.row,col:this.col});this.hexChar=''},emitError:function(A){this.emitText();this.push({type:'error',value:A,row:this.row,col:this.col,char:this.cpos}
+);},emitEndParagraph:function(){this.emitText();this.push({type:'endparagraph',pos:this.cpos,row:this.row,col:this.col});}};
+// Roo/htmleditor/namespace.js
+Roo.htmleditor={};
+// Roo/htmleditor/Filter.js
+Roo.htmleditor.Filter=function(A){Roo.apply(this.cfg);};Roo.htmleditor.Filter.prototype={node:false,tag:false,replaceComment:false,replaceTag:false,walk:function(A){Roo.each(Array.from(A.childNodes),function(e){switch(true){case e.nodeType==8&&this.replaceComment!==false:this.replaceComment(e);
+return;case e.nodeType!=1:return;case this.tag===true:case typeof(this.tag)=='object'&&this.tag.indexOf(e.tagName)>-1:case typeof(this.tag)=='string'&&this.tag==e.tagName:if(this.replaceTag&&false===this.replaceTag(e)){return;}if(e.hasChildNodes()){this.walk(e);
+}return;default:if(e.hasChildNodes()){this.walk(e);}}},this);}};
+// Roo/htmleditor/FilterAttributes.js
+Roo.htmleditor.FilterAttributes=function(A){Roo.apply(this,A);this.attrib_black=this.attrib_black||[];this.attrib_white=this.attrib_white||[];this.attrib_clean=this.attrib_clean||[];this.style_white=this.style_white||[];this.style_black=this.style_black||[];
+this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterAttributes,Roo.htmleditor.Filter,{tag:true,attrib_black:false,attrib_clean:false,attrib_white:false,style_white:false,style_black:false,replaceTag:function(A){if(!A.attributes||!A.attributes.length){return true;
+}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(this.attrib_white.length&&this.attrib_white.indexOf(a.name.toLowerCase())<0){A.removeAttribute(a.name);continue;}if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;
+}if(this.attrib_black.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);continue;}if(this.attrib_clean.indexOf(a.name.toLowerCase())>-1){this.cleanAttr(A,a.name,a.value);continue;}if(a.name=='style'){this.cleanStyle(A,a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');
+}if(a.value.match(/^body$/)){A.removeAttribute('class');}continue;}}return true;},cleanAttr:function(A,n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)||v.match(/^data:/)){return;}if(v.match(/^#/)){return;
+}if(v.match(/^\{/)){return;}A.removeAttribute(n);},cleanStyle:function(A,n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var B=v.split(/;/);var C=[];Roo.each(B,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');if(!p.length){return true;}
+var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(this.style_black.length&&(this.style_black.indexOf(l)>-1||this.style_black.indexOf(l.toLowerCase())>-1)){return true;}if(this.style_white.length&&style_white.indexOf(l)<0&&style_white.indexOf(l.toLowerCase())<0){return true;
+}C.push(p);return true;},this);if(C.length){A.setAttribute(n,C.join(';'));}else{A.removeAttribute(n);}}});
+// Roo/htmleditor/FilterBlack.js
+Roo.htmleditor.FilterBlack=function(A){Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterBlack,Roo.htmleditor.Filter,{tag:true,replaceTag:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterComment.js
+Roo.htmleditor.FilterComment=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterComment,Roo.htmleditor.Filter,{replaceComment:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterKeepChildren.js
+Roo.htmleditor.FilterKeepChildren=function(A){Roo.apply(this,A);if(this.tag===false){return;}this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterKeepChildren,Roo.htmleditor.FilterBlack,{replaceTag:function(A){var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;
+i++){if(ar[i].nodeType==1){if((typeof(this.tag)=='object'&&this.tag.indexOf(ar[i].tagName)>-1)||(typeof(this.tag)=='string'&&this.tag==ar[i].tagName)){this.replaceTag(ar[i]);continue;}}}ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);
+A.parentNode.insertBefore(ar[i],A);if(this.tag!==false){this.walk(ar[i]);}}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterParagraph.js
+Roo.htmleditor.FilterParagraph=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterParagraph,Roo.htmleditor.Filter,{tag:'P',replaceTag:function(A){if(A.childNodes.length==1&&A.childNodes[0].nodeType==3&&A.childNodes[0].textContent.trim().length<1){A.parentNode.replaceChild(A.ownerDocument.createElement('BR'),A);
+return false;}var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);A.parentNode.insertBefore(ar[i],A);}A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);
+A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterSpan.js
+Roo.htmleditor.FilterSpan=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterSpan,Roo.htmleditor.FilterKeepChildren,{tag:'SPAN',replaceTag:function(A){if(A.attributes&&A.attributes.length>0){return true;}Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this,A);
+return false;}});
+// Roo/htmleditor/FilterTableWidth.js
+Roo.htmleditor.FilterTableWidth=function(A){this.tag=['TABLE','TD','TR','TH','THEAD','TBODY'];this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterTableWidth,Roo.htmleditor.Filter,{replaceTag:function(A){if(A.hasAttribute('width')){A.removeAttribute('width');
+}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');
+if(!C.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterWord.js
+Roo.htmleditor.FilterWord=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterWord,Roo.htmleditor.Filter,{tag:true,replaceTag:function(A){if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;
+A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);
+return false;}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return false;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];
+A.removeChild(cn);A.parentNode.insertBefore(cn,A);this.replaceTag(cn);}A.parentNode.removeChild(A);return false;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
+if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
+}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterStyleToTag.js
+Roo.htmleditor.FilterStyleToTag=function(A){this.tags={B:['fontWeight','bold'],I:['fontStyle','italic'],SUP:['verticalAlign','super'],SUB:['verticalAlign','sub']};Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterStyleToTag,Roo.htmleditor.Filter,{tag:true,tags:false,replaceTag:function(A){if(A.getAttribute("style")===null){return true;
+}var B=[];for(var k in this.tags){if(A.style[this.tags[k][0]]==this.tags[k][1]){B.push(k);A.style.removeProperty(this.tags[k][0]);}}if(!B.length){return true;}var cn=Array.from(A.childNodes);var nn=A;Roo.each(B,function(t){var nc=A.ownerDocument.createElement(t);
+nn.appendChild(nc);nn=nc;});for(var i=0;i<cn.length;cn++){A.removeChild(cn[i]);nn.appendChild(cn[i]);}return true}})
+// Roo/htmleditor/FilterLongBr.js
+Roo.htmleditor.FilterLongBr=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterLongBr,Roo.htmleditor.Filter,{tag:'BR',replaceTag:function(A){var ps=A.nextSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.nextSibling;}if(!ps&&['TD','TH','LI','H1','H2','H3','H4','H5','H6'].indexOf(A.parentNode.tagName)>-1){A.parentNode.removeChild(A);
+return false;}if(!ps||ps.nodeType!=1){return false;}if(!ps||ps.tagName!='BR'){return false;}if(!A.previousSibling){return false;}var ps=A.previousSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.previousSibling;}if(!ps||ps.nodeType!=1){return false;
+}if(!ps||['BR','H1','H2','H3','H4','H5','H6'].indexOf(ps.tagName)<0){return false;}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterBlock.js
+Roo.htmleditor.FilterBlock=function(A){Roo.apply(this,A);var qa=A.node.querySelectorAll;this.removeAttributes('data-block');this.removeAttributes('contenteditable');this.removeAttributes('id');};Roo.apply(Roo.htmleditor.FilterBlock.prototype,{node:true,removeAttributes:function(A){var ar=this.node.querySelectorAll('*['+A+']');
+for(var i=0;i<ar.length;i++){ar[i].removeAttribute(A);}}});
+// Roo/htmleditor/TidySerializer.js
+Roo.htmleditor.TidySerializer=function(A){Roo.apply(this,A);this.writer=new Roo.htmleditor.TidyWriter(A);};Roo.htmleditor.TidySerializer.prototype={inner:false,writer:false,serialize:function(A){var B=this.writer;var C=this;this.handlers={3:function(D){B.text(D.nodeValue,D);
+},8:function(D){B.comment(D.nodeValue);},7:function(D){B.pi(D.name,D.nodeValue);},10:function(D){B.doctype(D.nodeValue);},4:function(D){B.cdata(D.nodeValue);},11:function(D){D=D.firstChild;if(!D){return;}while(D){C.walk(D);D=D.nextSibling}}};B.reset();1!=A.nodeType||this.inner?this.handlers[11](A):this.walk(A);
+return B.getContent();},walk:function(A){var B,C,D,i,l,E,F=this.handlers[A.nodeType];if(F){F(A);return;}var G=A.nodeName;var H=A.childNodes.length<1;var I=this.writer;var J=A.attributes;I.start(A.nodeName,J,H,A);if(H){return;}A=A.firstChild;if(!A){I.end(G);
+return;}while(A){this.walk(A);A=A.nextSibling;}I.end(G);}};
+// Roo/htmleditor/TidyWriter.js
+Roo.htmleditor.TidyWriter=function(A){Roo.apply(this,A);this.html=[];this.state=[];this.encode=Roo.htmleditor.TidyEntities.getEncodeFunc(A.entity_encoding||'raw',A.entities);};Roo.htmleditor.TidyWriter.prototype={state:false,indent:'  ',indentstr:'',in_pre:false,in_inline:false,last_inline:false,encode:false,start:function(A,B,C,D){var i,l,E,F;
+var G=this.in_inline||Roo.htmleditor.TidyWriter.inline_elements.indexOf(A)>-1;var H=this.in_pre||Roo.htmleditor.TidyWriter.whitespace_elements.indexOf(A)>-1;var I=C?Roo.htmleditor.TidyWriter.shortend_elements.indexOf(A)>-1:false;var J=A=='BR'?false:G;if(!J&&!this.in_pre&&this.lastElementEndsWS()){i_inline=false;
+}var K=this.indentstr;if(!this.in_pre){if(G){if(A=='BR'){this.addLine();}else if(this.lastElementEndsWS()){this.addLine();}else{K='';}}else{this.addLine();}}else{K='';}this.html.push(K+'<',A.toLowerCase());if(B){for(i=0,l=B.length;i<l;i++){E=B[i];this.html.push(' ',E.name,'="',this.encode(E.value,true),'"');
+}}if(C){if(I){this.html[this.html.length]='/>';}else{this.html[this.html.length]='></'+A.toLowerCase()+'>';}var L=A=='BR'?false:this.in_inline;if(!L&&!this.in_pre){this.addLine();}return;}this.html[this.html.length]='>';this.pushState({indentstr:H?'':(this.indentstr+this.indent),in_pre:H,in_inline:G}
+);if(!G&&!H){this.addLine();}},lastElementEndsWS:function(){var A=this.html.length>0?this.html[this.html.length-1]:false;if(A===false){return true;}return A.match(/\s+$/);},end:function(A){var B;this.popState();var C='';var D=this.in_inline||Roo.htmleditor.TidyWriter.inline_elements.indexOf(A)>-1;
+if(!this.in_pre&&!D){this.addLine();C=this.indentstr;}this.html.push(C+'</',A.toLowerCase(),'>');this.last_inline=D;},text:function(A,B){if(A.length<1){return;}if(this.in_pre){this.html[this.html.length]=A;return;}if(this.in_inline){A=A.replace(/\s+/g,' ');
+if(A!=' '){A=A.replace(/\s+/,' ');if(B.nextSibling&&B.nextSibling.nodeType==1&&B.nextSibling.nodeName=='BR'){A=A.replace(/\s+$/g,'');}if(B.previousSibling&&B.previousSibling.nodeType==1&&B.previousSibling.nodeName=='BR'){A=this.indentstr+A.replace(/^\s+/g,'');
+}if(A.match(/\n/)){A=A.replace(/(?![^\n]{1,64}$)([^\n]{1,64})\s/g,'$1\n'+this.indentstr);A=A.replace(/\n\s+$/,'');}}this.html[this.html.length]=A;return;}var C=this.indentstr;A=A.replace(/\s+/g," ");if(B.previousSibling&&B.previousSibling.nodeType==1&&Roo.htmleditor.TidyWriter.inline_elements.indexOf(B.previousSibling.nodeName)>-1){C='';
+}else{this.addLine();A=A.replace(/^\s+/,'');}if(B.nextSibling&&B.nextSibling.nodeType==1&&Roo.htmleditor.TidyWriter.inline_elements.indexOf(B.nextSibling.nodeName)>-1){}else{A=A.replace(/\s+$/,'');}if(A.length<1){return;}if(!A.match(/\n/)){this.html.push(C+A);
+return;}A=this.indentstr+A.replace(/(?![^\n]{1,64}$)([^\n]{1,64})\s/g,'$1\n'+this.indentstr);A=A.replace(/\s+$/,'');this.html.push(A);},cdata:function(A){this.html.push('<![CDATA[',A,']]>');},comment:function(A){this.html.push('<!--',A,'-->');},pi:function(A,B){B?this.html.push('<?',A,' ',this.encode(B),'?>'):this.html.push('<?',A,'?>');
+this.indent!=''&&this.html.push('\n');},doctype:function(A){this.html.push('<!DOCTYPE',A,'>',this.indent!=''?'\n':'');},reset:function(){this.html.length=0;this.state=[];this.pushState({indentstr:'',in_pre:false,in_inline:false})},getContent:function(){return this.html.join('').replace(/\n$/,'');
+},pushState:function(A){this.state.push(A);Roo.apply(this,A);},popState:function(){if(this.state.length<1){return;}var A={in_pre:false,indentstr:''};this.state.pop();if(this.state.length>0){A=this.state[this.state.length-1];}Roo.apply(this,A);},addLine:function(){if(this.html.length<1){return;
+}var A=this.html[this.html.length-1];if(A.length>0&&'\n'!==A){this.html.push('\n');}}};Roo.htmleditor.TidyWriter.inline_elements=['SPAN','STRONG','B','EM','I','FONT','STRIKE','U','VAR','CITE','DFN','CODE','MARK','Q','SUP','SUB','SAMP','A'];Roo.htmleditor.TidyWriter.shortend_elements=['AREA','BASE','BASEFONT','BR','COL','FRAME','HR','IMG','INPUT','ISINDEX','LINK','','META','PARAM','EMBED','SOURCE','WBR','TRACK'];
+Roo.htmleditor.TidyWriter.whitespace_elements=['PRE','SCRIPT','NOSCRIPT','STYLE','TEXTAREA','VIDEO','AUDIO','IFRAME','OBJECT','CODE'];
+// Roo/htmleditor/TidyEntities.js
+Roo.htmleditor.TidyEntities={init:function(){this.namedEntities=this.buildEntitiesLookup(this.namedEntitiesData,32);},buildEntitiesLookup:function(A,B){var i,C,D,E={};if(!A){return {};}A=typeof(A)=='string'?A.split(','):A;B=B||10;for(i=0;i<A.length;i+=2){C=String.fromCharCode(parseInt(A[i],B));
+if(!this.baseEntities[C]){D='&'+A[i+1]+';';E[C]=D;E[D]=C;}}return E;},asciiMap:{128:'€',130:'‚',131:'ƒ',132:'„',133:'…',134:'†',135:'‡',136:'ˆ',137:'‰',138:'Š',139:'‹',140:'Œ',142:'Ž',145:'‘',146:'’',147:'“',148:'”',149:'•',150:'–',151:'—',152:'˜',153:'™',154:'š',155:'›',156:'œ',158:'ž',159:'Ÿ'}
+,baseEntities:{'"':'&quot;','\'':'&#39;','<':'&lt;','>':'&gt;','&':'&amp;','`':'&#96;'},reverseEntities:{'&lt;':'<','&gt;':'>','&amp;':'&','&quot;':'"','&apos;':'\''},attrsCharsRegExp:/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,textCharsRegExp:/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,rawCharsRegExp:/[<>&\"\']/g,entityRegExp:/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,namedEntities:false,namedEntitiesData:['50','nbsp','51','iexcl','52','cent','53','pound','54','curren','55','yen','56','brvbar','57','sect','58','uml','59','copy','5a','ordf','5b','laquo','5c','not','5d','shy','5e','reg','5f','macr','5g','deg','5h','plusmn','5i','sup2','5j','sup3','5k','acute','5l','micro','5m','para','5n','middot','5o','cedil','5p','sup1','5q','ordm','5r','raquo','5s','frac14','5t','frac12','5u','frac34','5v','iquest','60','Agrave','61','Aacute','62','Acirc','63','Atilde','64','Auml','65','Aring','66','AElig','67','Ccedil','68','Egrave','69','Eacute','6a','Ecirc','6b','Euml','6c','Igrave','6d','Iacute','6e','Icirc','6f','Iuml','6g','ETH','6h','Ntilde','6i','Ograve','6j','Oacute','6k','Ocirc','6l','Otilde','6m','Ouml','6n','times','6o','Oslash','6p','Ugrave','6q','Uacute','6r','Ucirc','6s','Uuml','6t','Yacute','6u','THORN','6v','szlig','70','agrave','71','aacute','72','acirc','73','atilde','74','auml','75','aring','76','aelig','77','ccedil','78','egrave','79','eacute','7a','ecirc','7b','euml','7c','igrave','7d','iacute','7e','icirc','7f','iuml','7g','eth','7h','ntilde','7i','ograve','7j','oacute','7k','ocirc','7l','otilde','7m','ouml','7n','divide','7o','oslash','7p','ugrave','7q','uacute','7r','ucirc','7s','uuml','7t','yacute','7u','thorn','7v','yuml','ci','fnof','sh','Alpha','si','Beta','sj','Gamma','sk','Delta','sl','Epsilon','sm','Zeta','sn','Eta','so','Theta','sp','Iota','sq','Kappa','sr','Lambda','ss','Mu','st','Nu','su','Xi','sv','Omicron','t0','Pi','t1','Rho','t3','Sigma','t4','Tau','t5','Upsilon','t6','Phi','t7','Chi','t8','Psi','t9','Omega','th','alpha','ti','beta','tj','gamma','tk','delta','tl','epsilon','tm','zeta','tn','eta','to','theta','tp','iota','tq','kappa','tr','lambda','ts','mu','tt','nu','tu','xi','tv','omicron','u0','pi','u1','rho','u2','sigmaf','u3','sigma','u4','tau','u5','upsilon','u6','phi','u7','chi','u8','psi','u9','omega','uh','thetasym','ui','upsih','um','piv','812','bull','816','hellip','81i','prime','81j','Prime','81u','oline','824','frasl','88o','weierp','88h','image','88s','real','892','trade','89l','alefsym','8cg','larr','8ch','uarr','8ci','rarr','8cj','darr','8ck','harr','8dl','crarr','8eg','lArr','8eh','uArr','8ei','rArr','8ej','dArr','8ek','hArr','8g0','forall','8g2','part','8g3','exist','8g5','empty','8g7','nabla','8g8','isin','8g9','notin','8gb','ni','8gf','prod','8gh','sum','8gi','minus','8gn','lowast','8gq','radic','8gt','prop','8gu','infin','8h0','ang','8h7','and','8h8','or','8h9','cap','8ha','cup','8hb','int','8hk','there4','8hs','sim','8i5','cong','8i8','asymp','8j0','ne','8j1','equiv','8j4','le','8j5','ge','8k2','sub','8k3','sup','8k4','nsub','8k6','sube','8k7','supe','8kl','oplus','8kn','otimes','8l5','perp','8m5','sdot','8o8','lceil','8o9','rceil','8oa','lfloor','8ob','rfloor','8p9','lang','8pa','rang','9ea','loz','9j0','spades','9j3','clubs','9j5','hearts','9j6','diams','ai','OElig','aj','oelig','b0','Scaron','b1','scaron','bo','Yuml','m6','circ','ms','tilde','802','ensp','803','emsp','809','thinsp','80c','zwnj','80d','zwj','80e','lrm','80f','rlm','80j','ndash','80k','mdash','80o','lsquo','80p','rsquo','80q','sbquo','80s','ldquo','80t','rdquo','80u','bdquo','810','dagger','811','Dagger','81g','permil','81p','lsaquo','81q','rsaquo','85c','euro'],encodeRaw:function(A,B){var t=this;
+return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(C){return t.baseEntities[C]||C;});},encodeAllRaw:function(A){var t=this;return (''+A).replace(this.rawCharsRegExp,function(B){return t.baseEntities[B]||B;});},encodeNumeric:function(A,B){var t=this;
+return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(C){if(C.length>1){return '&#'+(1024*(C.charCodeAt(0)-55296)+(C.charCodeAt(1)-56320)+65536)+';';}return t.baseEntities[C]||'&#'+C.charCodeAt(0)+';';});},encodeNamed:function(A,B,C){var t=this;
+C=C||this.namedEntities;return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(D){return t.baseEntities[D]||C[D]||D;});},getEncodeFunc:function(A,B){B=this.buildEntitiesLookup(B)||this.namedEntities;var t=this;function encodeNamedAndNumeric(C,D){return C.replace(D?t.attrsCharsRegExp:t.textCharsRegExp,function(E){return t.baseEntities[E]||B[E]||'&#'+E.charCodeAt(0)+';'||E;
+});}function encodeCustomNamed(C,D){return t.encodeNamed(C,D,B);}A=this.makeMap(A.replace(/\+/g,','));if(A.named&&A.numeric){return this.encodeNamedAndNumeric;}if(A.named){if(B){return encodeCustomNamed;}return this.encodeNamed;}if(A.numeric){return this.encodeNumeric;
+}return this.encodeRaw;},decode:function(A){var t=this;return A.replace(this.entityRegExp,function(B,C){if(C){C='x'===C.charAt(0).toLowerCase()?parseInt(C.substr(1),16):parseInt(C,10);if(C>65535){C-=65536;return String.fromCharCode(55296+(C>>10),56320+(1023&C));
+}return t.asciiMap[C]||String.fromCharCode(C);}return t.reverseEntities[B]||t.namedEntities[B]||t.nativeDecode(B);});},nativeDecode:function(A){return A;},makeMap:function(A,B,C){var i;A=A||[];B=B||',';if(typeof A=="string"){A=A.split(B);}C=C||{};i=A.length;
+while(i--){C[A[i]]={};}return C;}};Roo.htmleditor.TidyEntities.init();
+// Roo/htmleditor/KeyEnter.js
+Roo.htmleditor.KeyEnter=function(A){Roo.apply(this,A);Roo.get(this.core.doc.body).on('keypress',this.keypress,this);};Roo.htmleditor.KeyEnter.prototype={core:false,keypress:function(e){if(e.charCode!=13&&e.charCode!=10){Roo.log([e.charCode,e]);return true;
+}e.preventDefault();var A=this.core.doc;var B=this.core.getSelection();var C=B.getRangeAt(0);var n=C.commonAncestorContainer;var pc=C.closest(['ol','ul']);var D=C.closest('li');if(!pc||e.ctrlKey){B.insertNode('br','after');this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}if(D.innerText.trim()==''&&D.previousSibling&&D.previousSibling.nodeName=='LI'&&D.previousSibling.innerText.trim()==''){D.parentNode.removeChild(D.previousSibling);B.cursorAfter(pc);this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}var li=A.createElement('LI');li.innerHTML='&nbsp;';if(!D||!D.firstSibling){pc.appendChild(li);}else{D.parentNode.insertBefore(li,D.firstSibling);}B.cursorText(li.firstChild);this.core.undoManager.addEvent();this.core.fireEditorEvent(e);
+return false;}};
+// Roo/htmleditor/Block.js
+Roo.htmleditor.Block=function(A){};Roo.htmleditor.Block.factory=function(A){var cc=Roo.htmleditor.Block.cache;var id=Roo.get(A).id;if(typeof(cc[id])!='undefined'&&(!cc[id].node||cc[id].node.closest('body'))){Roo.htmleditor.Block.cache[id].readElement(A);return Roo.htmleditor.Block.cache[id];
+}var db=A.getAttribute('data-block');if(!db){db=A.nodeName.toLowerCase().toUpperCaseFirst();}var B=Roo.htmleditor['Block'+db];if(typeof(B)=='undefined'){Roo.log("OOps missing block : "+'Block'+db);return false;}Roo.htmleditor.Block.cache[id]=new B({node:A}
+);return Roo.htmleditor.Block.cache[id];};Roo.htmleditor.Block.initAll=function(A,B){if(typeof(B)=='undefined'){var ia=Roo.htmleditor.Block.initAll;ia(A,'table');ia(A,'td');ia(A,'figure');return;}Roo.each(Roo.get(A).query(B),function(e){Roo.htmleditor.Block.factory(e);
+},this);};Roo.htmleditor.Block.cache={};Roo.htmleditor.Block.prototype={node:false,friendly_name:'Based Block',deleteTitle:false,context:false,updateElement:function(A){Roo.DomHelper.update(A===undefined?this.node:A,this.toObject());},toHTML:function(){return Roo.DomHelper.markup(this.toObject());
+},getVal:function(A,B,C,D){var n=A;if(B!==true&&n.tagName!=B.toUpperCase()){n=A.getElementsByTagName(B).item(0);}if(!n){return '';}if(C=='html'){return n.innerHTML;}if(C=='style'){return n.style[D];}return n.hasAttribute(C)?n.getAttribute(C):'';},toObject:function(){return {}
+;},readElement:function(A){}};
+// Roo/htmleditor/BlockFigure.js
+Roo.htmleditor.BlockFigure=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockFigure,Roo.htmleditor.Block,{image_src:'',align:'center',caption:'',caption_display:'block',width:'100%',cls:'',href:'',video_url:'',text_align:'left',friendly_name:'Image with caption',deleteTitle:"Delete Image and Caption",contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Source: ",xns:C.Toolbar},{xtype:'Button',text:'Change Image URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Image Source URL",msg:"Enter the url for the image",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.image_src=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.image_src});}},xns:C.Toolbar},{xtype:'Button',text:'Change Link URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Link URL",msg:"Enter the url for the link - leave blank to have no link",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.href=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.href});}},xns:C.Toolbar},{xtype:'Button',text:'Show Video URL',listeners:{click:function(F,G){Roo.MessageBox.alert("Video URL",B().video_url==''?'This image is not linked ot a video':'The image is linked to: <a target="_new" href="'+B().video_url+'">'+B().video_url+'</a>');
+}},xns:C.Toolbar},{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['auto'],['50%'],['100%']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Align: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'align',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.align=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['left'],['right'],['center']],fields:['val'],xns:Roo.data}},{xtype:'Button',text:'Hide Caption',name:'caption_display',pressed:false,enableToggle:true,setValue:function(v){this.toggle(v=='block'?false:true);
+},listeners:{toggle:function(F,G){var b=B();b.caption_display=b.caption_display=='block'?'none':'block';this.setText(b.caption_display=='block'?"Hide Caption":"Show Caption");b.updateElement();D();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();
+}},xns:C.Toolbar}];},toObject:function(){var d=document.createElement('div');d.innerHTML=this.caption;var m=this.width=='50%'&&this.align=='center'?'0 auto':0;var A={tag:'img',contenteditable:'false',src:this.image_src,alt:d.innerText.replace(/\n/g," ").replace(/\s+/g,' ').trim(),style:{width:'auto','max-width':'100%',margin:'0px'}
+};if(this.href.length>0){A={tag:'a',href:this.href,contenteditable:'true',cn:[A]};}if(this.video_url.length>0){A={tag:'div',cls:this.cls,frameborder:0,allowfullscreen:true,width:420,height:315,src:this.video_url,cn:[A]};}var B=this.caption_display=='hidden'?this.caption:(this.caption.length?this.caption:"Caption");
+return {tag:'figure','data-block':'Figure',contenteditable:'false',style:{display:'block',float:this.align,'max-width':this.width,width:'auto',margin:m,padding:'10px'},align:this.align,cn:[A,{tag:'figcaption',style:{'text-align':'left','margin-top':'16px','font-size':'16px','line-height':'24px',display:this.caption_display}
+,cls:this.cls.length>0?(this.cls+'-thumbnail'):'',cn:[{tag:'i',contenteditable:true,html:B}]}]};},readElement:function(A){this.video_url=this.getVal(A,'div','src');this.cls=this.getVal(A,'div','class');this.href=this.getVal(A,'a','href');this.image_src=this.getVal(A,'img','src');
+this.align=this.getVal(A,'figure','align');this.caption=this.getVal(A,'figcaption','html');if(this.caption.trim().match(/^<i[^>]*>/i)){this.caption=this.caption.trim().replace(/^<i[^>]*>/i,'').replace(/^<\/i>$/i,'');}this.width=this.getVal(A,'figure','style','max-width');
+},removeNode:function(){return this.node;}})
+// Roo/htmleditor/BlockTable.js
+Roo.htmleditor.BlockTable=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);if(!A.node){this.rows=[];for(var r=0;r<this.no_row;r++){this.rows[r]=[];for(var c=0;c<this.no_col;c++){this.rows[r][c]=this.emptyCell();
+}}}};Roo.extend(Roo.htmleditor.BlockTable,Roo.htmleditor.Block,{rows:false,no_col:1,no_row:1,width:'100%',friendly_name:'Table',deleteTitle:'Delete Table',contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;
+var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['100%'],['auto']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Columns: ",xns:C.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().removeColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().addColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'TextItem',text:"Rows: ",xns:C.Toolbar}
+,{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().removeRow();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){B().addRow();D();A.editorcore.onEditorEvent();
+}},xns:C.Toolbar},{xtype:'Button',text:'Reset Column Widths',listeners:{click:function(F,e){B().resetWidths();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar}];},toObject:function(){var A={tag:'table',contenteditable:'false','data-block':'Table',style:{width:this.width,border:'solid 1px #000','border-collapse':'collapse'}
+,cn:[{tag:'tbody',cn:[]}]};var B=0;Roo.each(this.rows,function(C){var tr={tag:'tr',style:{margin:'6px',border:'solid 1px #000',textAlign:'left'},cn:[]};A.cn[0].cn.push(tr);var nc=0;Roo.each(C,function(D){var td={tag:'td',contenteditable:'true','data-block':'Td',html:D.html,style:D.style}
+;if(D.colspan>1){td.colspan=D.colspan;nc+=D.colspan;}else{nc++;}if(D.rowspan>1){td.rowspan=D.rowspan;}tr.cn.push(td);},this);B=Math.max(nc,B);},this);B++;return A;},readElement:function(A){A=A?A:this.node;this.width=this.getVal(A,true,'style','width')||'100%';
+this.rows=[];this.no_row=0;var B=Array.from(A.rows);B.forEach(function(tr){var C=[];this.rows.push(C);this.no_row++;var D=0;Array.from(tr.cells).forEach(function(td){var E={colspan:td.hasAttribute('colspan')?td.getAttribute('colspan')*1:1,rowspan:td.hasAttribute('rowspan')?td.getAttribute('rowspan')*1:1,style:td.hasAttribute('style')?td.getAttribute('style'):'',html:td.innerHTML}
+;D+=E.colspan;C.push(E);},this);this.no_col=Math.max(this.no_col,D);},this);},normalizeRows:function(){var A=[];var B=-1;this.rows.forEach(function(C){B++;A[B]=[];C=this.normalizeRow(C);var D=0;C.forEach(function(c){while(typeof(A[B][D])!='undefined'){D++;
+}if(typeof(A[B])=='undefined'){A[B]=[];}A[B][D]=c;c.row=B;c.col=D;if(c.rowspan<2){return;}for(var i=1;i<c.rowspan;i++){if(typeof(A[B+i])=='undefined'){A[B+i]=[];}A[B+i][D]=c;}});},this);return A;},normalizeRow:function(A){var B=[];A.forEach(function(c){if(c.colspan<2){B.push(c);
+return;}for(var i=0;i<c.colspan;i++){B.push(c);}});return B;},deleteColumn:function(A){if(!A||A.type!='col'){return;}if(this.no_col<2){return;}this.rows.forEach(function(B){var C=this.normalizeRow(B);var D=C[A.col];if(D.colspan>1){D.colspan--;}else{B.remove(D);
+}},this);this.no_col--;},removeColumn:function(){this.deleteColumn({type:'col',col:this.no_col-1});this.updateElement();},addColumn:function(){this.rows.forEach(function(A){A.push(this.emptyCell());},this);this.updateElement();},deleteRow:function(A){if(!A||A.type!='row'){return;
+}if(this.no_row<2){return;}var B=this.normalizeRows();B[A.row].forEach(function(D){if(D.rowspan>1){D.rowspan--;}else{D.remove=1;}},this);var C=[];this.rows.forEach(function(D){newrow=[];D.forEach(function(c){if(typeof(c.remove)=='undefined'){newrow.push(c);
+}});if(newrow.length>0){C.push(D);}});this.rows=C;this.no_row--;this.updateElement();},removeRow:function(){this.deleteRow({type:'row',row:this.no_row-1});},addRow:function(){var A=[];for(var i=0;i<this.no_col;i++){A.push(this.emptyCell());}this.rows.push(A);
+this.updateElement();},emptyCell:function(){return (new Roo.htmleditor.BlockTd({})).toObject();},removeNode:function(){return this.node;},resetWidths:function(){Array.from(this.node.getElementsByTagName('td')).forEach(function(n){var nn=Roo.htmleditor.Block.factory(n);
+nn.width='';nn.updateElement(n);});}})
+// Roo/htmleditor/BlockTd.js
+Roo.htmleditor.BlockTd=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockTd,Roo.htmleditor.Block,{node:false,width:'',textAlign:'left',valign:'top',colspan:1,rowspan:1,friendly_name:'Table Cell',deleteTitle:false,contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode.closest('table'));};var lr=false;var D=function(){lr=A.editorcore.getSelection().getRangeAt(0);};var restoreSel=function(){if(lr){(function(){A.editorcore.focus();var cr=A.editorcore.getSelection();
+cr.removeAllRanges();cr.addRange(lr);A.editorcore.onEditorEvent();}).defer(10,this);}};var rooui=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var E=A.editorcore.syncValue;var F={};return [{xtype:'Button',text:'Edit Table',listeners:{click:function(){var t=A.tb.selectedNode.closest('table');
+A.editorcore.selectNode(t);A.editorcore.onEditorEvent();}}},{xtype:'TextItem',text:"Column Width: ",xns:rooui.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().shrinkColumn();E();A.editorcore.onEditorEvent();
+}},xns:rooui.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().growColumn();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"Vertical Align: ",xns:rooui.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'valign',listeners:{select:function(G,r,H){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.valign=r.get('val');b.updateElement();E();A.editorcore.onEditorEvent();}},xns:rooui.form,store:{xtype:'SimpleStore',data:[['top'],['middle'],['bottom']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Merge Cells: ",xns:rooui.Toolbar},{xtype:'Button',text:'Right',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().mergeRight();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Button',text:'Below',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().mergeBelow();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"| ",xns:rooui.Toolbar}
+,{xtype:'Button',text:'Split',listeners:{click:function(G,e){B().split();E();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Fill',xns:rooui.Toolbar},{xtype:'Button',text:'Delete',xns:rooui.Toolbar,menu:{xtype:'Menu',xns:rooui.menu,items:[{xtype:'Item',html:'Column',listeners:{click:function(G,e){var t=C();
+B().deleteColumn();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu},{xtype:'Item',html:'Row',listeners:{click:function(G,e){var t=C();B().deleteRow();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu}
+,{xtype:'Separator',xns:rooui.menu},{xtype:'Item',html:'Table',listeners:{click:function(G,e){var t=C();var nn=t.node.nextSibling||t.node.previousSibling;t.node.parentNode.removeChild(t.node);if(nn){A.editorcore.selectNode(nn,true);}A.editorcore.onEditorEvent();
+}},xns:rooui.menu}]}}];},toObject:function(){var A={tag:'td',contenteditable:'true','data-block':'Td',valign:this.valign,style:{'text-align':this.textAlign,border:'solid 1px rgb(0, 0, 0)','border-collapse':'collapse',padding:'6px','vertical-align':this.valign}
+,html:this.html};if(this.width!=''){A.width=this.width;A.style.width=this.width;}if(this.colspan>1){A.colspan=this.colspan;}if(this.rowspan>1){A.rowspan=this.rowspan;}return A;},readElement:function(A){A=A?A:this.node;this.width=A.style.width;this.colspan=Math.max(1,1*A.getAttribute('colspan'));
+this.rowspan=Math.max(1,1*A.getAttribute('rowspan'));this.html=A.innerHTML;},emptyCell:function(){return {colspan:1,rowspan:1,textAlign:'left',html:"&nbsp;"};},removeNode:function(){return this.node.closest('table');},cellData:false,colWidths:false,toTableArray:function(){var A=[];
+var B=this.node.closest('tr').closest('table');Array.from(B.rows).forEach(function(r,ri){A[ri]=[];});var rn=0;this.colWidths=[];var C=true;Array.from(B.rows).forEach(function(r,ri){var cn=0;Array.from(r.cells).forEach(function(ce,ci){var c={cell:ce,row:rn,col:cn,colspan:ce.colSpan,rowspan:ce.rowSpan}
+;if(ce.isEqualNode(this.node)){this.cellData=c;}if(typeof(A[rn][cn])!='undefined'){while(typeof(A[rn][cn])!='undefined'){cn++;}c.col=cn;}if(typeof(this.colWidths[cn])=='undefined'){this.colWidths[cn]=ce.style.width;if(this.colWidths[cn]!=''){C=false;}}if(c.colspan<2&&c.rowspan<2){A[rn][cn]=c;
+cn++;return;}for(var j=0;j<c.rowspan;j++){if(typeof(A[rn+j])=='undefined'){continue;}A[rn+j][cn]=c;for(var i=0;i<c.colspan;i++){A[rn+j][cn+i]=c;}}cn+=c.colspan;},this);rn++;},this);if(C){this.colWidths[0]=false;}return A;},mergeRight:function(){var tr=this.node.closest('tr');
+var i=Array.prototype.indexOf.call(tr.childNodes,this.node);if(i>=tr.childNodes.length-1){return;}var A=this.toTableArray();if(typeof(A[this.cellData.row][this.cellData.col+this.cellData.colspan])=='undefined'){return;}var rc=A[this.cellData.row][this.cellData.col+this.cellData.colspan];
+if(rc.rowspan!=this.cellData.rowspan||rc.row!=this.cellData.row){return;}this.node.innerHTML+=' '+rc.cell.innerHTML;tr.removeChild(rc.cell);this.colspan+=rc.colspan;this.node.setAttribute('colspan',this.colspan);},mergeBelow:function(){var A=this.toTableArray();
+if(typeof(A[this.cellData.row+this.cellData.rowspan])=='undefined'){return;}if(typeof(A[this.cellData.row+this.cellData.rowspan][this.cellData.col])=='undefined'){return;}var rc=A[this.cellData.row+this.cellData.rowspan][this.cellData.col];if(rc.colspan!=this.cellData.colspan||rc.col!=this.cellData.col){return;
+}this.node.innerHTML=this.node.innerHTML+rc.cell.innerHTML;rc.cell.parentNode.removeChild(rc.cell);this.rowspan+=rc.rowspan;this.node.setAttribute('rowspan',this.rowspan);},split:function(){if(this.node.rowSpan<2&&this.node.colSpan<2){return;}var A=this.toTableArray();
+var cd=this.cellData;this.rowspan=1;this.colspan=1;for(var r=cd.row;r<cd.row+cd.rowspan;r++){for(var c=cd.col;c<cd.col+cd.colspan;c++){if(r==cd.row&&c==cd.col){this.node.removeAttribute('rowspan');this.node.removeAttribute('colspan');continue;}var B=this.node.cloneNode();
+B.removeAttribute('id');B.innerHTML='';A[r][c]={cell:B,col:c,row:r,colspan:1,rowspan:1};}}this.redrawAllCells(A);},redrawAllCells:function(A){var B=this.node.closest('tr').closest('table');var C=B.rows[0].parentNode;Array.from(B.rows).forEach(function(r,ri){Array.from(r.cells).forEach(function(ce,ci){ce.parentNode.removeChild(ce);
+});r.parentNode.removeChild(r);});for(var r=0;r<A.length;r++){var re=B.rows[r];var re=B.ownerDocument.createElement('tr');C.appendChild(re);for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}re.appendChild(A[r][c].cell);A[r][c].cell=false;}
+}},updateWidths:function(A){for(var r=0;r<A.length;r++){for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}if(this.colWidths[0]!=false&&A[r][c].colspan<2){var el=Roo.htmleditor.Block.factory(A[r][c].cell);el.width=Math.floor(this.colWidths[c])+'%';
+el.updateElement(el.node);}A[r][c].cell=false;}}},normalizeWidths:function(A){if(this.colWidths[0]===false){var nw=100.0/this.colWidths.length;this.colWidths.forEach(function(w,i){this.colWidths[i]=nw;},this);return;}var t=0,B=[];this.colWidths.forEach(function(w,i){this.colWidths[i]=this.colWidths[i]==''?0:(this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+var D=this.colWidths[i];if(D>0){t+=D;return;}B.push(i);},this);var nc=this.colWidths.length;if(B.length){var C=(nc-B.length)/(1.0*nc);var t=C*t;var ew=(100-t)/(1.0*B.length);this.colWidths.forEach(function(w,i){if(w>0){this.colWidths[i]=w*C;return;}this.colWidths[i]=ew;
+},this);}},shrinkColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*0.8;if(nw<5){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;
+return;}this.colWidths[i]+=C},this);this.updateWidths(A);},growColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*1.2;if(nw>90){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);
+this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;return;}this.colWidths[i]-=C},this);this.updateWidths(A);},deleteRow:function(){var A=this.toTableArray();for(var i=0;i<A[this.cellData.row].length;i++){var c=A[this.cellData.row][i];if(c.row!=this.cellData.row){c.rowspan--;
+c.cell.setAttribute('rowspan',c.rowspan);continue;}if(c.rowspan>1){c.rowspan--;c.cell.setAttribute('rowspan',c.rowspan);}}A.splice(this.cellData.row,1);this.redrawAllCells(A);},deleteColumn:function(){var A=this.toTableArray();for(var i=0;i<A.length;i++){var c=A[i][this.cellData.col];
+if(c.col!=this.cellData.col){A[i][this.cellData.col].colspan--;}else if(c.colspan>1){c.colspan--;c.cell.setAttribute('colspan',c.colspan);}A[i].splice(this.cellData.col,1);}this.redrawAllCells(A);}})
 // Roo/HtmlEditorCore.js
 // Roo/HtmlEditorCore.js
-Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,stylesheets:false,allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',getDocMarkup:function(){var st='';
+Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,autoClean:true,enableBlocks:true,stylesheets:false,language:'en',allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',undoManager:false,getDocMarkup:function(){var st='';
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
-});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';}
-}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';var A='roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
+});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){if(typeof(this.stylesheets[i])!='string'){continue;}st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';
+}}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';st+='<meta name="google" content="notranslate">';var A='notranslate roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html  class="notranslate" translate="no"><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
-}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide']);this.deferFocus();}},cleanHtml:function(A){A=String(A);if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');
-}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){var bd=(this.doc.body||this.doc.documentElement);var A=bd.innerHTML;if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){A='<div style="'+m[0]+'">'+A+'</div>';
-}}A=this.cleanHtml(A);A=A.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(B){var cc=B.charCodeAt();if(B.length==2){var C=B.charCodeAt(0)-0xD800;var D=B.charCodeAt(1)-0xDC00;cc=(C*0x400)+D+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return B;
-}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,A)!==false){this.el.dom.value=A;this.owner.fireEvent('sync',this,A);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);
-d.innerHTML=v;this.cleanUpPaste();this.el.dom.value=d.innerHTML;this.owner.fireEvent('push',this,v);}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;
-if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);
-}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);A.bgProperties='fixed';Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this}
-);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;this.owner.fireEvent('initialize',this);this.pushValue();
-},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));
-r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);
-if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);this.syncValue();
+}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide','d-none']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide','d-none']);this.deferFocus();}},cleanHtml:function(A){A=String(A);
+if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){this.undoManager.addEvent();var bd=(this.doc.body||this.doc.documentElement);
+var A=this.win.getSelection();var B=document.createElement('div');B.innerHTML=bd.innerHTML;var C=B.getElementsByClassName('gtx-trans-icon');if(C.length>0){var rm=C.item(0).parentNode;rm.parentNode.removeChild(rm);}if(this.enableBlocks){new Roo.htmleditor.FilterBlock({node:B}
+);}var D=new Roo.htmleditor.TidySerializer({inner:true});var E=D.serialize(B);if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){E='<div style="'+m[0]+'">'+E+'</div>';}}E=this.cleanHtml(E);E=E.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(F){var cc=F.charCodeAt();
+if(F.length==2){var G=F.charCodeAt(0)-0xD800;var H=F.charCodeAt(1)-0xDC00;cc=(G*0x400)+H+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return F;}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,E)!==false){this.el.dom.value=E;
+this.owner.fireEvent('sync',this,E);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);d.innerHTML=v;this.el.dom.value=d.innerHTML;
+this.owner.fireEvent('push',this,v);}if(this.autoClean){new Roo.htmleditor.FilterParagraph({node:this.doc.body});new Roo.htmleditor.FilterSpan({node:this.doc.body});}if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}this.updateLanguage();
+var lc=this.doc.body.lastChild;if(lc&&lc.nodeType==1&&lc.getAttribute("contenteditable")=="false"){this.doc.body.appendChild(this.doc.createElement('br'));}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();
+}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);
+this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);
+A.bgProperties='fixed';A.setAttribute("translate","no");Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this});Roo.EventManager.on(this.doc,{'paste':this.onPasteEvent,scope:this}
+);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;new Roo.htmleditor.KeyEnter({core:this});this.owner.fireEvent('initialize',this);
+this.pushValue();},onPasteEvent:function(e,v){var cd=(e.browserEvent.clipboardData||window.clipboardData);if(cd.files.length>0){var A=(window.createObjectURL&&window)||(window.URL&&URL.revokeObjectURL&&URL)||(window.webkitURL&&webkitURL);var B=A.createObjectURL(cd.files[0]);
+this.insertAtCursor('<img src=" + url + ">');return false;}var C=cd.getData('text/html');var D=new Roo.rtf.Parser(cd.getData('text/rtf'));var E=D.doc?D.doc.getElementsByType('pict'):[];Roo.log(E);E=E.filter(function(g){return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/);
+}).map(function(g){return g.toDataURL();}).filter(function(g){return g!='about:blank';});C=this.cleanWordChars(C);var d=(new DOMParser().parseFromString(C,'text/html')).body;var sn=this.getParentElement();if(d.getElementsByTagName('table').length&&sn&&sn.closest('table')){e.preventDefault();
+this.insertAtCursor("You can not nest tables");return false;}if(E.length>0){Roo.each(d.getElementsByTagName('img'),function(F,i){F.setAttribute('src',E[i]);});}if(this.autoClean){new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name','align'],attrib_clean:['href','src']}
+);new Roo.htmleditor.FilterBlack({node:d,tag:this.black});new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT','O:P']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});}if(this.enableBlocks){Array.from(d.getElementsByTagName('img')).forEach(function(F){if(F.closest('figure')){return;
+}var G=new Roo.htmleditor.BlockFigure({image_src:F.src});G.updateElement(F);});}this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}e.preventDefault();return false;},onDestroy:function(){if(this.rendered){}
+},onFirstFocus:function(){this.assignDocWin();this.undoManager=new Roo.lib.UndoManager(100,(this.doc.body||this.doc.documentElement));this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);
+r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;
+var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){if(e&&(e.ctrlKey||e.metaKey)&&e.keyCode===90){return;
+}if(e&&e.target.nodeName=='BODY'&&e.type=="mouseup"&&this.doc.body.lastChild){var lc=this.doc.body.lastChild;while((lc.nodeType==3&&lc.nodeValue=='')||lc.id=='gtx-trans'){lc=lc.previousSibling;}if(lc.nodeType==1&&lc.nodeName!='BR'){var ns=this.doc.createElement('br');
+this.doc.body.appendChild(ns);range=this.doc.createRange();range.setStartAfter(ns);range.collapse(true);var A=this.win.getSelection();A.removeAllRanges();A.addRange(range);}}this.fireEditorEvent(e);this.syncValue();},fireEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
-range.insertNode(A);return;}this.execCmd("formatblock",tg);},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));},relayCmd:function(A,B){this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);
-this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;
-if(D.getSelection&&D.getSelection().getRangeAt){B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;B.insertNode(C);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;
-D.document.selection.createRange().pasteHTML(E);}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();
-switch(c){case 'b':A='bold';break;case 'i':A='italic';break;case 'u':A='underline';break;case 'v':this.cleanUpPaste.defer(100,this);return;}if(A){this.win.focus();this.execCmd(A);this.deferFocus();e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;
-if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}if(k==e.ENTER){r=this.doc.selection.createRange();if(r){var A=r.parentElement();if(!A||A.tagName.toLowerCase()!='li'){e.stopEvent();
-r.pasteHTML('<br />');r.collapse(false);r.select();}}}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
-this.deferFocus();}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isSafari){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);
-return;}};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();
-return Roo.isIE?this.doc.selection:this.win.getSelection();},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;
-}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;
-}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;
-}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();
-}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();
-try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;
-},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);
-var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;}return 3;},cleanUpPaste:function(){Roo.log('cleanuppaste');this.cleanUpChildren(this.doc.body);var A=this.cleanWordChars(this.doc.body.innerHTML);if(A!=this.doc.body.innerHTML){this.doc.body.innerHTML=A;
-}},cleanWordChars:function(A){var he=Roo.HtmlEditorCore;var B=A;Roo.each(he.swapCodes,function(sw){var C=new RegExp("\\u"+sw[0].toString(16),"g");B=B.replace(C,sw[1]);});return B;},cleanUpChildren:function(n){if(!n.childNodes.length){return;}for(var i=n.childNodes.length-1;
-i>-1;i--){this.cleanUpChild(n.childNodes[i]);}},cleanUpChild:function(A){var ed=this;if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){if(!this.allowComments){A.parentNode.removeChild(A);}return;}var B=A.tagName.toLowerCase();if(this.black.indexOf(B)>-1&&this.clearUp){A.parentNode.removeChild(A);
-return;}var C=Roo.HtmlEditorCore.remove.indexOf(A.tagName.toLowerCase())>-1;if((!A.attributes||!A.attributes.length)&&B=='span'){C=true;}if(C){this.cleanUpChildren(A);while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);A.parentNode.insertBefore(cn,A);
-}A.parentNode.removeChild(A);return;}if(!A.attributes||!A.attributes.length){this.cleanUpChildren(A);return;}function cleanAttr(n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)){return;
-}if(v.match(/^#/)){return;}if(v.match(/^\{/)){return;}A.removeAttribute(n);}var D=this.cwhite;var E=this.cblack;function cleanStyle(n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var F=v.split(/;/);var G=[];Roo.each(F,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-if(!p.length){return true;}var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(D.length&&E.indexOf(l)>-1){return true;}if(D.length&&D.indexOf(l)<0&&D.indexOf(l.toLowerCase())<0){return true;}G.push(p);return true;}
-);if(G.length){A.setAttribute(n,G.join(';'));}else{A.removeAttribute(n);}}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;}if(Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);
-continue;}if(Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase())>-1){cleanAttr(a.name,a.value);continue;}if(a.name=='style'){cleanStyle(a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');}if(a.value.match(/^body$/)){A.removeAttribute('class');
-}continue;}}this.cleanUpChildren(A);},cleanWord:function(A){if(!A){this.cleanWord(this.doc.body);return;}if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);
-}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);}if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){A.parentNode.removeChild(A);return;
-}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);
-A.parentNode.insertBefore(cn,A);this.cleanWord(cn);}A.parentNode.removeChild(A);return;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
-if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
-}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanWord);},iterateChildren:function(A,fn){if(!A.childNodes.length){return;}for(var i=A.childNodes.length-1;i>-1;i--){fn.call(this,A.childNodes[i])}
-},cleanTableWidths:function(A){if(!A){this.cleanTableWidths(this.doc.body);return;}if(A.nodeName=="#text"||A.nodeName=="#comment"){return;}Roo.log(A.tagName);if(!A.tagName.toLowerCase().match(/^(table|td|tr)$/)){this.iterateChildren(A,this.cleanTableWidths);
-return;}if(A.hasAttribute('width')){A.removeAttribute('width');}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;
-}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');if(!C.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanTableWidths);},domToHTML:function(A,B,C){B=B||0;C=C||false;if(!A){return this.domToHTML(this.doc.body);}var j;var D=false;
-var E=A.nodeName;var F=Roo.util.Format.htmlEncode(A.tagName);if(E=='#text'){return C?A.nodeValue:A.nodeValue.trim();}var G='';if(E!='BODY'){var i=0;if(F){var H=[];for(i=0;i<A.attributes.length;i++){var I=A.attributes.item(i).name;if(!A.attributes.item(i).value.length){continue;
-}H.push(I+'="'+Roo.util.Format.htmlEncode(A.attributes.item(i).value)+'"');}G="<"+A.tagName+(H.length?(' '+H.join(' ')):'')+">";}else{}}else{F=false;}if(['IMG','BR','HR','INPUT'].indexOf(F)>-1){return G;}if(['PRE','TEXTAREA','TD','A','SPAN'].indexOf(F)>-1){C=true;
-}i=0;var J=A.childNodes.item(i);var D=true;var K='';lastnode='';while(J){var L=C;if(lastnode=='SPAN'){L=true;}if(J.nodeName=='#text'){var M=Roo.util.Format.htmlEncode(J.nodeValue);M=C?M:M.trim();if(!L&&M.length>80){K+="\n"+(new Array(B+1)).join("  ");}K+=M;
-i++;J=A.childNodes.item(i);lastNode='';continue;}D=false;K+=L?'':"\n"+(new Array(B+1)).join("  ");K+=this.domToHTML(J,B+1,C);lastnode=J.nodeName;i++;J=A.childNodes.item(i);}G+=K;if(!D){G+=C?'':"\n"+(new Array(B)).join("  ");}if(F){G+="</"+F+">";}return G;
-},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;
-}this.white.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
+range.insertNode(A);return;}this.execCmd("formatblock",tg);this.undoManager.addEvent();},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));this.undoManager.addEvent();},relayCmd:function(A,B){switch(A){case 'justifyleft':case 'justifyright':case 'justifycenter':var n=this.getParentElement();
+var td=n.closest('td');if(td){var bl=Roo.htmleditor.Block.factory(td);bl.textAlign=A.replace('justify','');bl.updateElement();this.owner.fireEvent('editorevent',this);return;}this.execCmd('styleWithCSS',true);break;case 'bold':case 'italic':this.execCmd('styleWithCSS',false);
+break;default:break;}this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;
+}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;if(D.getSelection&&D.getSelection().getRangeAt){this.createRange(this.getSelection()).deleteContents();B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;
+B.insertNode(C);B=B.cloneRange();B.collapse(false);D.getSelection().removeAllRanges();D.getSelection().addRange(B);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;D.document.selection.createRange().pasteHTML(E);
+}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();switch(c){case 'b':A='bold';break;
+case 'i':A='italic';break;case 'u':A='underline';break;}if(A){this.relayCmd(A);e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);
+r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');this.deferFocus();}};}else if(Roo.isSafari){return function(e){var k=e.getKey();
+if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}this.mozKeyPress(e);};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);
+p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();return Roo.lib.Selection.wrap(Roo.isIE?this.doc.selection:this.win.getSelection(),this.doc);},selectNode:function(A,B){var C=A.ownerDocument.createRange();
+try{C.selectNode(A);}catch(e){C.selectNodeContents(A);}if(B===true){C.collapse(true);}var s=this.win.getSelection();s.removeAllRanges();s.addRange(C);},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();
+while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;
+var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);
+continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();
+}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;
+}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();
+F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);
+}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;
+}return 3;},cleanWordChars:function(A){var B=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];var C=A;Roo.each(B,function(sw){var D=new RegExp("\\u"+sw[0].toString(16),"g");C=C.replace(D,sw[1]);});return C;
+},cleanUpChild:function(A){new Roo.htmleditor.FilterComment({node:A});new Roo.htmleditor.FilterAttributes({node:A,attrib_black:this.ablack,attrib_clean:this.aclean,style_white:this.cwhite,style_black:this.cblack});new Roo.htmleditor.FilterBlack({node:A,tag:this.black}
+);new Roo.htmleditor.FilterKeepChildren({node:A,tag:this.tag_remove});},cleanWord:function(A){new Roo.htmleditor.FilterWord({node:A?A:this.doc.body});},cleanTableWidths:function(A){new Roo.htmleditor.FilterTableWidth({node:A?A:this.doc.body});},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];
+var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.aclean=typeof(this.owner.aclean)!='undefined'&&this.owner.aclean?this.owner.aclean:Roo.HtmlEditorCore.aclean;this.ablack=typeof(this.owner.ablack)!='undefined'&&this.owner.ablack?this.owner.ablack:Roo.HtmlEditorCore.ablack;
+this.tag_remove=typeof(this.owner.tag_remove)!='undefined'&&this.owner.tag_remove?this.owner.tag_remove:Roo.HtmlEditorCore.tag_remove;this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;}this.white.push(A);
+},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
-);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();
-});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A});return;}});Roo.HtmlEditorCore.white=['area','br','img','input','hr','wbr','address','blockquote','center','dd','dir','div','dl','dt','h1','h2','h3','h4','h5','h6','hr','isindex','listing','marquee','menu','multicol','ol','p','plaintext','pre','table','ul','xmp','caption','col','colgroup','tbody','td','tfoot','th','thead','tr','dir','menu','ol','ul','dl','embed','object'];
-Roo.HtmlEditorCore.black=['applet','base','basefont','bgsound','blink','body','frame','frameset','head','html','ilayer','iframe','layer','link','meta','object','script','style','title','xml'];Roo.HtmlEditorCore.clean=['script','style','title','xml'];Roo.HtmlEditorCore.remove=['font'];
-Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];Roo.HtmlEditorCore.swapCodes=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];
+);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},updateLanguage:function(){if(!this.iframe||!this.iframe.contentDocument){return;
+}Roo.get(this.iframe.contentDocument.body).attr("lang",this.language);},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A}
+);return;}});Roo.HtmlEditorCore.white=['AREA','BR','IMG','INPUT','HR','WBR','ADDRESS','BLOCKQUOTE','CENTER','DD','DIR','DIV','DL','DT','H1','H2','H3','H4','H5','H6','HR','ISINDEX','LISTING','MARQUEE','MENU','MULTICOL','OL','P','PLAINTEXT','PRE','TABLE','UL','XMP','CAPTION','COL','COLGROUP','TBODY','TD','TFOOT','TH','THEAD','TR','DIR','MENU','OL','UL','DL','EMBED','OBJECT'];
+Roo.HtmlEditorCore.black=['APPLET','BASE','BASEFONT','BGSOUND','BLINK','BODY','FRAME','FRAMESET','HEAD','HTML','ILAYER','IFRAME','LAYER','LINK','META','OBJECT','SCRIPT','STYLE','TITLE','XML','COLGROUP','COL'];Roo.HtmlEditorCore.clean=['SCRIPT','STYLE','TITLE','XML'];
+Roo.HtmlEditorCore.tag_remove=['FONT','TBODY'];Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];
 
 // Roo/form/HtmlEditor.js
 
 // 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,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});this.defaultAutoCreate={tag:"textarea",style:'width: '+this.width+'px;height: '+this.height+'px;',autocomplete:"new-password"}
+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]}
 ;},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);}},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;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;
-}D-=C[i].length;break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=D;this.el.dom.selectionEnd=B;},"end":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(this.getValue().length,this.getValue().length);return;}var D=0;for(var i=0;i<C.length;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=B;
-this.el.dom.selectionEnd=D;},scope:this,doRelay:function(B,C,D){return Roo.KeyNav.prototype.doRelay.apply(this,arguments);},forceKeyDown:true});},onResize:function(w,h){Roo.form.HtmlEditor.superclass.onResize.apply(this,arguments);var ew=false;var eh=false;
-if(this.el){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));ew=aw;}if(typeof h=='number'){var A=0;for(var i=0;i<this.toolbars.length;i++){A+=this.toolbars[i].tb.el.getHeight();if(this.toolbars[i].footer){A+=this.toolbars[i].footer.el.getHeight();
-}}var ah=h-this.wrap.getFrameWidth('tb')-A;ah-=5;this.el.setHeight(this.adjustWidth('textarea',ah));var eh=ah;}}Roo.log('onResize:'+[w,h,ew,eh].join(','));this.editorcore.onResize(ew,eh);},toggleSourceEdit:function(A){this.editorcore.toggleSourceEdit(A);if(this.editorcore.sourceEditMode){Roo.log('editor - showing textarea');
-this.editorcore.syncValue();this.el.removeClass('x-hidden');this.el.dom.removeAttribute('tabIndex');this.el.focus();for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.hide();this.toolbars[i].footer.hide();
-}}}else{Roo.log('editor - hiding textarea');this.editorcore.pushValue();this.el.addClass('x-hidden');this.el.dom.setAttribute('tabIndex',-1);for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.show();
-this.toolbars[i].footer.show();}}}this.setSize(this.wrap.getSize());this.onResize(this.wrap.getSize().width,this.wrap.getSize().height);this.fireEvent('editmodechange',this,this.editorcore.sourceEditMode);},adjustSize:Roo.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;
-},getPositionEl:function(){return this.wrap;},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Roo.emptyFn,clearInvalid:Roo.emptyFn,setValue:function(v){Roo.form.HtmlEditor.superclass.setValue.call(this,v);this.editorcore.pushValue();
-},deferFocus:function(){this.focus.defer(10,this);},focus:function(){this.editorcore.focus();},onDestroy:function(){if(this.rendered){for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onDestroy();}this.wrap.dom.innerHTML='';this.wrap.remove();}},onFirstFocus:function(){this.editorcore.onFirstFocus();
-for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onFirstFocus();}},syncValue:function(){this.editorcore.syncValue();},pushValue:function(){this.editorcore.pushValue();},setStylesheets:function(A){this.editorcore.setStylesheets(A);},removeStylesheets:function(){this.editorcore.removeStylesheets();
-}});
+: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;
+i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}D-=C[i].length;break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=D;this.el.dom.selectionEnd=B;},"end":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(this.getValue().length,this.getValue().length);return;}var D=0;for(var i=0;i<C.length;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);
+return;}this.el.dom.selectionStart=B;this.el.dom.selectionEnd=D;},scope:this,doRelay:function(B,C,D){return Roo.KeyNav.prototype.doRelay.apply(this,arguments);},forceKeyDown:true});},onResize:function(w,h){Roo.form.HtmlEditor.superclass.onResize.apply(this,arguments);
+var ew=false;var eh=false;if(this.el){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));ew=aw;}if(typeof h=='number'){var A=0;for(var i=0;i<this.toolbars.length;i++){A+=this.toolbars[i].tb.el.getHeight();
+if(this.toolbars[i].footer){A+=this.toolbars[i].footer.el.getHeight();}}var ah=h-this.wrap.getFrameWidth('tb')-A;ah-=5;this.el.setHeight(this.adjustWidth('textarea',ah));var eh=ah;}}Roo.log('onResize:'+[w,h,ew,eh].join(','));this.editorcore.onResize(ew,eh);
+},toggleSourceEdit:function(A){this.editorcore.toggleSourceEdit(A);if(this.editorcore.sourceEditMode){Roo.log('editor - showing textarea');this.editorcore.syncValue();this.el.removeClass('x-hidden');this.el.dom.removeAttribute('tabIndex');this.el.focus();
+this.el.dom.scrollTop=0;for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.hide();this.toolbars[i].footer.hide();}}}else{Roo.log('editor - hiding textarea');this.editorcore.pushValue();
+this.el.addClass('x-hidden');this.el.dom.setAttribute('tabIndex',-1);for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.show();this.toolbars[i].footer.show();}}}this.setSize(this.wrap.getSize());
+this.onResize(this.wrap.getSize().width,this.wrap.getSize().height);this.fireEvent('editmodechange',this,this.editorcore.sourceEditMode);},adjustSize:Roo.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;
+},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Roo.emptyFn,clearInvalid:Roo.emptyFn,setValue:function(v){Roo.form.HtmlEditor.superclass.setValue.call(this,v);this.editorcore.pushValue();},updateLanguage:function(A){this.language=A;
+this.editorcore.language=A;this.editorcore.updateLanguage();},deferFocus:function(){this.focus.defer(10,this);},focus:function(){this.editorcore.focus();},onDestroy:function(){if(this.rendered){for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onDestroy();
+}this.wrap.dom.innerHTML='';this.wrap.remove();}},onFirstFocus:function(){this.editorcore.onFirstFocus();for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onFirstFocus();}},syncValue:function(){this.editorcore.syncValue();},pushValue:function(){this.editorcore.pushValue();
+},setStylesheets:function(A){this.editorcore.setStylesheets(A);},removeStylesheets:function(){this.editorcore.removeStylesheets();}});
 // Roo/form/HtmlEditor/ToolbarStandard.js
 // Roo/form/HtmlEditor/ToolbarStandard.js
-Roo.form.HtmlEditor.ToolbarStandard=function(A){Roo.apply(this,A);this.disable=this.disable||{};Roo.applyIf(this.disable,{fontSize:true,colors:true,specialElements:true});};Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,createLinkText:'Please enter the URL for the link:',defaultLinkValue:'http:/'+'/',fontFamilies:['Arial','Courier New','Tahoma','Times New Roman','Verdana'],specialChars:["&#169;","&#174;","&#8482;","&#163;","&#8230;","&#247;","&#8364;","&#176;"],specialElements:[{text:"Insert Table",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<table><tr><td>Cell</td></tr></table>'}
+Roo.form.HtmlEditor.ToolbarStandard=function(A){Roo.apply(this,A);this.disable=this.disable||{};Roo.applyIf(this.disable,{fontSize:true,colors:true,specialElements:true});};Roo.form.HtmlEditor.ToolbarStandard.prototype={tb:false,rendered:false,editor:false,editorcore:false,disable:false,createLinkText:'Please enter the URL for the link:',defaultLinkValue:'http:/'+'/',fontFamilies:['Arial','Courier New','Tahoma','Times New Roman','Verdana'],specialChars:["&#169;","&#174;","&#8482;","&#163;","&#8230;","&#247;","&#8364;","&#176;"],specialElements:[{text:"Insert Table",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<table><tr><td>Cell</td></tr></table>'}
 ,{text:"Insert Image",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<img src="about:blank"/>'}],inputElements:["form","input:text","input:hidden","input:checkbox","input:radio","input:password","input:submit","input:button","select","textarea","label"],formats:[["p"],["h1"],["h2"],["h3"],["h4"],["h5"],["h6"],["pre"],["code"],["abbr"],["acronym"],["address"],["cite"],["samp"],["var"],['div'],['span'],['sup'],['sub']],cleanStyles:["font-size"],defaultFont:'tahoma',fontSelect:false,formatCombo:false,init:function(A){this.editor=A;
 this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var _t=this;var C=B.frameId;var D=this;function btn(id,H,I){var J=C+'-'+id;return {id:J,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:H!==false,scope:_t,handler:I||_t.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
 ;}var tb=new Roo.Toolbar(A.wrap.dom.firstChild);this.tb=tb;tb.el.on('click',function(e){e.preventDefault();});if(!this.disable.font){};if(!this.disable.formats){this.formatCombo=new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'tag',fields:['tag'],data:this.formats}
 ,{text:"Insert Image",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<img src="about:blank"/>'}],inputElements:["form","input:text","input:hidden","input:checkbox","input:radio","input:password","input:submit","input:button","select","textarea","label"],formats:[["p"],["h1"],["h2"],["h3"],["h4"],["h5"],["h6"],["pre"],["code"],["abbr"],["acronym"],["address"],["cite"],["samp"],["var"],['div'],['span'],['sup'],['sub']],cleanStyles:["font-size"],defaultFont:'tahoma',fontSelect:false,formatCombo:false,init:function(A){this.editor=A;
 this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var _t=this;var C=B.frameId;var D=this;function btn(id,H,I){var J=C+'-'+id;return {id:J,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:H!==false,scope:_t,handler:I||_t.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
 ;}var tb=new Roo.Toolbar(A.wrap.dom.firstChild);this.tb=tb;tb.el.on('click',function(e){e.preventDefault();});if(!this.disable.font){};if(!this.disable.formats){this.formatCombo=new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'tag',fields:['tag'],data:this.formats}
@@ -1930,54 +2152,56 @@ B.execCmd('hilitecolor',H);B.execCmd('useCSS',true);A.deferFocus();}else{B.execC
 c.select('[style]').each(function(s){s.dom.style.removeProperty(a.actiontype);});B.syncValue();},tabIndex:-1});}F.menu.items.push({actiontype:'tablewidths',html:'Remove Table Widths',handler:function(a,b){B.cleanTableWidths();B.syncValue();},tabIndex:-1});
 F.menu.items.push({actiontype:'word',html:'Remove MS Word Formating',handler:function(a,b){B.cleanWord();B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All Styles',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[style]').each(function(s){s.dom.removeAttribute('style');
 });B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All CSS Classes',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[class]').each(function(s){s.dom.removeAttribute('class');});B.cleanWord();B.syncValue();},tabIndex:-1}
 c.select('[style]').each(function(s){s.dom.style.removeProperty(a.actiontype);});B.syncValue();},tabIndex:-1});}F.menu.items.push({actiontype:'tablewidths',html:'Remove Table Widths',handler:function(a,b){B.cleanTableWidths();B.syncValue();},tabIndex:-1});
 F.menu.items.push({actiontype:'word',html:'Remove MS Word Formating',handler:function(a,b){B.cleanWord();B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All Styles',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[style]').each(function(s){s.dom.removeAttribute('style');
 });B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All CSS Classes',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[class]').each(function(s){s.dom.removeAttribute('class');});B.cleanWord();B.syncValue();},tabIndex:-1}
-);F.menu.items.push({actiontype:'tidy',html:'Tidy HTML Source',handler:function(a,b){B.doc.body.innerHTML=B.domToHTML();B.syncValue();},tabIndex:-1});tb.add(F);}if(!this.disable.specialElements){var G={text:"Other;",cls:'x-edit-none',menu:{items:[]}};for(var i=0;
-i<this.specialElements.length;i++){G.menu.items.push(Roo.apply({handler:function(a,b){A.insertAtCursor(this.ihtml);}},this.specialElements[i]));}tb.add(G);}if(this.btns){for(var i=0;i<this.btns.length;i++){var b=Roo.factory(this.btns[i],Roo.form);b.cls='x-edit-none';
-if(typeof(this.btns[i].cls)!='undefined'&&this.btns[i].cls.indexOf('x-init-enable')!==-1){b.cls+=' x-init-enable';}b.scope=B;tb.add(b);}}this.tb.items.each(function(H){if(H.id!=B.frameId+'-sourceedit'&&(typeof(H.cls)!='undefined'&&H.cls.indexOf('x-init-enable')===-1)){H.disable();
-}});this.rendered=true;A.on('editorevent',this.updateToolbar,this);},relayBtnCmd:function(A){this.editorcore.relayCmd(A.cmd);},createLink:function(){Roo.log("create link?");var A=prompt(this.createLinkText,this.defaultLinkValue);if(A&&A!='http:/'+'/'){this.editorcore.relayCmd('createlink',A);
-}},updateToolbar:function(){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}var A=this.tb.items.map,B=this.editorcore.doc,C=this.editorcore.frameId;if(!this.disable.font&&!Roo.isSafari){}if(!this.disable.format){A[C+'-bold'].toggle(B.queryCommandState('bold'));
-A[C+'-italic'].toggle(B.queryCommandState('italic'));A[C+'-underline'].toggle(B.queryCommandState('underline'));A[C+'-strikethrough'].toggle(B.queryCommandState('strikethrough'));}if(!this.disable.alignments){A[C+'-justifyleft'].toggle(B.queryCommandState('justifyleft'));
-A[C+'-justifycenter'].toggle(B.queryCommandState('justifycenter'));A[C+'-justifyright'].toggle(B.queryCommandState('justifyright'));}if(!Roo.isSafari&&!this.disable.lists){A[C+'-insertorderedlist'].toggle(B.queryCommandState('insertorderedlist'));A[C+'-insertunorderedlist'].toggle(B.queryCommandState('insertunorderedlist'));
-}var D=this.editorcore.getAllAncestors();if(this.formatCombo){var E=this.formatCombo.store;this.formatCombo.setValue("");for(var i=0;i<D.length;i++){if(D[i]&&E.query('tag',D[i].tagName.toLowerCase(),false).length){this.formatCombo.setValue(D[i].tagName.toLowerCase());
+);F.menu.items.push({actiontype:'tidy',html:'Tidy HTML Source',handler:function(a,b){new Roo.htmleditor.Tidy(B.doc.body);B.syncValue();},tabIndex:-1});tb.add(F);}if(!this.disable.specialElements){var G={text:"Other;",cls:'x-edit-none',menu:{items:[]}};for(var i=0;
+i<this.specialElements.length;i++){G.menu.items.push(Roo.apply({handler:function(a,b){A.insertAtCursor(this.ihtml);}},this.specialElements[i]));}tb.add(G);}if(this.btns){for(var i=0;i<this.btns.length;i++){var b=Roo.factory(this.btns[i],this.btns[i].xns||Roo.form);
+b.cls='x-edit-none';if(typeof(this.btns[i].cls)!='undefined'&&this.btns[i].cls.indexOf('x-init-enable')!==-1){b.cls+=' x-init-enable';}b.scope=B;tb.add(b);}}this.tb.items.each(function(H){if(H.id!=B.frameId+'-sourceedit'&&(typeof(H.cls)!='undefined'&&H.cls.indexOf('x-init-enable')===-1)){H.disable();
+}});this.rendered=true;A.on('editorevent',this.updateToolbar,this);},relayBtnCmd:function(A){this.editorcore.relayCmd(A.cmd);},createLink:function(){var ec=this.editorcore;var ar=ec.getAllAncestors();var n=false;for(var i=0;i<ar.length;i++){if(ar[i]&&ar[i].nodeName=='A'){n=ar[i];
+break;}}(function(){Roo.MessageBox.show({title:"Add / Edit Link URL",msg:"Enter the url for the link",buttons:Roo.MessageBox.OKCANCEL,fn:function(A,B){if(A!='ok'){return;}if(B&&B!='http:/'+'/'){if(n){n.setAttribute('href',B);}else{ec.relayCmd('createlink',B);
+}}},minWidth:250,prompt:true,modal:true,value:n?n.getAttribute('href'):''});}).defer(100,this);},updateToolbar:function(){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}var A=this.tb.items.map,B=this.editorcore.doc,C=this.editorcore.frameId;
+if(!this.disable.font&&!Roo.isSafari){}if(!this.disable.format){A[C+'-bold'].toggle(B.queryCommandState('bold'));A[C+'-italic'].toggle(B.queryCommandState('italic'));A[C+'-underline'].toggle(B.queryCommandState('underline'));A[C+'-strikethrough'].toggle(B.queryCommandState('strikethrough'));
+}if(!this.disable.alignments){A[C+'-justifyleft'].toggle(B.queryCommandState('justifyleft'));A[C+'-justifycenter'].toggle(B.queryCommandState('justifycenter'));A[C+'-justifyright'].toggle(B.queryCommandState('justifyright'));}if(!Roo.isSafari&&!this.disable.lists){A[C+'-insertorderedlist'].toggle(B.queryCommandState('insertorderedlist'));
+A[C+'-insertunorderedlist'].toggle(B.queryCommandState('insertunorderedlist'));}var D=this.editorcore.getAllAncestors();if(this.formatCombo){var E=this.formatCombo.store;this.formatCombo.setValue("");for(var i=0;i<D.length;i++){if(D[i]&&E.query('tag',D[i].tagName.toLowerCase(),false).length){this.formatCombo.setValue(D[i].tagName.toLowerCase());
 break;}}}Roo.menu.MenuMgr.hideAll();},createFontOptions:function(){var A=[],fs=this.fontFamilies,ff,lc;for(var i=0,B=fs.length;i<B;i++){ff=fs[i];lc=ff.toLowerCase();A.push('<option value="',lc,'" style="font-family:',ff,';"',(this.defaultFont==lc?' selected="true">':'>'),ff,'</option>');
 }return A.join('');},toggleSourceEdit:function(A){Roo.log("toolbar toogle");if(A===undefined){A=!this.sourceEditMode;}this.sourceEditMode=A===true;var B=this.tb.items.get(this.editorcore.frameId+'-sourceedit');if(B.pressed!==this.sourceEditMode){B.toggle(this.sourceEditMode);
 return;}if(A){Roo.log("disabling buttons");this.tb.items.each(function(C){if(C.cmd!='sourceedit'&&(typeof(C.cls)!='undefined'&&C.cls.indexOf('x-init-enable')===-1)){C.disable();}});}else{Roo.log("enabling buttons");if(this.editorcore.initialized){this.tb.items.each(function(C){C.enable();
 break;}}}Roo.menu.MenuMgr.hideAll();},createFontOptions:function(){var A=[],fs=this.fontFamilies,ff,lc;for(var i=0,B=fs.length;i<B;i++){ff=fs[i];lc=ff.toLowerCase();A.push('<option value="',lc,'" style="font-family:',ff,';"',(this.defaultFont==lc?' selected="true">':'>'),ff,'</option>');
 }return A.join('');},toggleSourceEdit:function(A){Roo.log("toolbar toogle");if(A===undefined){A=!this.sourceEditMode;}this.sourceEditMode=A===true;var B=this.tb.items.get(this.editorcore.frameId+'-sourceedit');if(B.pressed!==this.sourceEditMode){B.toggle(this.sourceEditMode);
 return;}if(A){Roo.log("disabling buttons");this.tb.items.each(function(C){if(C.cmd!='sourceedit'&&(typeof(C.cls)!='undefined'&&C.cls.indexOf('x-init-enable')===-1)){C.disable();}});}else{Roo.log("enabling buttons");if(this.editorcore.initialized){this.tb.items.each(function(C){C.enable();
-});}}Roo.log("calling toggole on editor");this.editor.toggleSourceEdit(A);},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'},italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'}
-,underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},strikethrough:{title:'Strikethrough',text:'Strikethrough the selected text.',cls:'x-html-editor-tip'},increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'}
-,decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'},forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'}
-,justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'},justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'}
-,insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'},createlink:{title:'Hyperlink',text:'Make the selected text a hyperlink.',cls:'x-html-editor-tip'}
-,sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();
-});}});
+});Roo.each(Roo.get(this.editorcore.doc.body).query('*[data-block]'),function(e){Roo.htmleditor.Block.factory(e).updateElement(e);},this);}}Roo.log("calling toggole on editor");this.editor.toggleSourceEdit(A);},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'}
+,italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'},underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},strikethrough:{title:'Strikethrough',text:'Strikethrough the selected text.',cls:'x-html-editor-tip'}
+,increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'}
+,forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'},justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'}
+,justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'}
+,createlink:{title:'Hyperlink',text:'Make the selected text a hyperlink.',cls:'x-html-editor-tip'},sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
+if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});}};
 // Roo/form/HtmlEditor/ToolbarContext.js
 // Roo/form/HtmlEditor/ToolbarContext.js
-Roo.form.HtmlEditor.ToolbarContext=function(A){Roo.apply(this,A);this.styles=this.styles||{};};Roo.form.HtmlEditor.ToolbarContext.types={'IMG':{width:{title:"Width",width:40},height:{title:"Height",width:40},align:{title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}
-,border:{title:"Border",width:40},alt:{title:"Alt",width:120},src:{title:"Src",width:220}},'A':{name:{title:"Name",width:50},target:{title:"Target",width:120},href:{title:"Href",width:220}},'TABLE':{rows:{title:"Rows",width:20},cols:{title:"Cols",width:20}
-,width:{title:"Width",width:40},height:{title:"Height",width:40},border:{title:"Border",width:20}},'TD':{width:{title:"Width",width:40},height:{title:"Height",width:40},align:{title:"Align",opts:[[""],["left"],["center"],["right"],["justify"],["char"]],width:80}
-,valign:{title:"Valign",opts:[[""],["top"],["middle"],["bottom"],["baseline"]],width:80},colspan:{title:"Colspan",width:20},'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'INPUT':{name:{title:"name",width:120}
-,value:{title:"Value",width:120},width:{title:"Width",width:40}},'LABEL':{'for':{title:"For",width:120}},'TEXTAREA':{name:{title:"name",width:120},rows:{title:"Rows",width:20},cols:{title:"Cols",width:20}},'SELECT':{name:{title:"name",width:120},selectoptions:{title:"Options",width:200}
-},'BODY':{title:{title:"Title",width:200,disabled:true}},'SPAN':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'DIV':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}
-},'P':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'*':{}};Roo.form.HtmlEditor.ToolbarContext.stores=false;Roo.form.HtmlEditor.ToolbarContext.options={'font-family':[['Helvetica,Arial,sans-serif','Helvetica'],['Courier New','Courier New'],['Tahoma','Tahoma'],['Times New Roman,serif','Times'],['Verdana','Verdana']]}
-;Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,styles:false,options:false,toolbars:false,init:function(A){this.editor=A;this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;
-var C=B.frameId;var D=this;function btn(id,F,G){var H=C+'-'+id;return {id:H,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:F!==false,scope:B,handler:G||B.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1};}var E=A.wrap.createChild({tag:'div'}
-,A.wrap.dom.firstChild.nextSibling,true);var ty=Roo.form.HtmlEditor.ToolbarContext.types;this.toolbars={};for(var i in ty){this.toolbars[i]=this.buildToolbar(ty[i],i);}this.tb=this.toolbars.BODY;this.tb.el.show();this.buildFooter();this.footer.show();A.on('hide',function(){this.footer.hide()}
-,this);A.on('show',function(){this.footer.show()},this);this.rendered=true;A.on('editorevent',this.updateToolbar,this);},updateToolbar:function(A,ev,B){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}if(ev&&(ev.type=='mouseup'||ev.type=='click')&&ev.target&&ev.target.tagName=='IMG'){B=ev.target;
-var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var s=this.editorcore.win.getSelection();s.removeAllRanges();s.addRange(C);}var D=B?false:true;var E=this.editorcore.getAllAncestors();var ty=Roo.form.HtmlEditor.ToolbarContext.types;
-if(!B){B=E.length?(E[0]?E[0]:E[1]):this.editorcore.doc.body;B=B?B:this.editorcore.doc.body;B=B.tagName.length?B:this.editorcore.doc.body;}var tn=B.tagName.toUpperCase();tn=B.tagName.toUpperCase();var F=this.tb.selectedNode;this.tb.selectedNode=B;if((this.tb.name!=tn)||(F!=this.tb.selectedNode)||ev===false){this.tb.el.hide();
-this.tb=typeof(ty[tn])!='undefined'?this.toolbars[tn]:this.toolbars['*'];this.tb.el.show();this.tb.items.first().el.innerHTML=tn+':&nbsp;';if(this.tb.fields){this.tb.fields.each(function(e){if(e.stylename){e.setValue(B.style[e.stylename]);return;}e.setValue(B.getAttribute(e.attrname));
-});}var G=false;for(var i in this.styles){G=true;break;}if(G){var st=this.tb.fields.item(0);st.store.removeAll();var cn=B.className.split(/\s+/);var H=[];if(this.styles['*']){Roo.each(this.styles['*'],function(v){H.push([v,cn.indexOf(v)>-1?1:0]);});}if(this.styles[tn]){Roo.each(this.styles[tn],function(v){H.push([v,cn.indexOf(v)>-1?1:0]);
-});}st.store.loadData(H);st.collapse();st.setValue(cn);}this.tb.selectedNode=B;Roo.menu.MenuMgr.hideAll();}if(!D){return;}var I='';this.footerEls=E.reverse();Roo.each(this.footerEls,function(a,i){if(!a){return;}I+=I.length?' &gt; ':'';I+='<span class="x-ed-loc-'+i+'">'+a.tagName+'</span>';
-});var sz=this.footDisp.up('td').getSize();this.footDisp.dom.style.width=(sz.width-10)+'px';this.footDisp.dom.style.marginLeft='5px';this.footDisp.dom.style.overflow='hidden';this.footDisp.dom.innerHTML=I;},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
-if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});},buildToolbar:function(A,nm){var B=this.editor;var C=this.editorcore;var D=B.wrap.createChild({tag:'div'},B.wrap.dom.firstChild.nextSibling,true);
-var tb=new Roo.Toolbar(D);tb.add(nm+":&nbsp;");var E=[];for(var i in this.styles){E.push(i);}if(E&&E.length){tb.addField(new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'val',fields:['val','selected'],data:[]}),name:'-roo-edit-className',attrname:'className',displayField:'val',typeAhead:false,mode:'local',editable:false,triggerAction:'all',emptyText:'Select Style',selectOnFocus:true,width:130,listeners:{'select':function(c,r,i){tb.selectedNode.className=r?r.get('val'):'';
-C.syncValue();}}}));}var F=Roo.form.HtmlEditor.ToolbarContext;var G=F.options;for(var i in A){var H=A[i];tb.add(H.title+":&nbsp;");var I=H.opts?H.opts:false;if(H.optname){I=G[H.optname];}if(I){tb.addField(new Roo.form.ComboBox({store:typeof(F.stores[i])!='undefined'?Roo.factory(F.stores[i],Roo.data):new Roo.data.SimpleStore({id:'val',fields:['val','display'],data:I}
-),name:'-roo-edit-'+i,attrname:i,stylename:H.style?H.style:false,displayField:H.displayField?H.displayField:'val',valueField:'val',typeAhead:false,mode:typeof(F.stores[i])!='undefined'?'remote':'local',editable:false,triggerAction:'all',emptyText:'Select',selectOnFocus:true,width:H.width?H.width:130,listeners:{'select':function(c,r,i){if(c.stylename){tb.selectedNode.style[c.stylename]=r.get('val');
-return;}tb.selectedNode.setAttribute(c.attrname,r.get('val'));}}}));continue;tb.addField(new Roo.form.TextField({name:i,width:100,value:''}));continue;}tb.addField(new Roo.form.TextField({name:'-roo-edit-'+i,attrname:i,width:H.width,value:'',listeners:{'change':function(f,nv,ov){tb.selectedNode.setAttribute(f.attrname,nv);
-C.syncValue();}}}));}var J=this;if(nm=='BODY'){tb.addSeparator();tb.addButton({text:'Stylesheets',listeners:{click:function(){J.editor.fireEvent('stylesheetsclick',J.editor);}}});}tb.addFill();tb.addButton({text:'Remove Tag',listeners:{click:function(){var sn=tb.selectedNode;
-var pn=sn.parentNode;var K=sn.childNodes[0];var en=sn.childNodes[sn.childNodes.length-1];while(sn.childNodes.length){var L=sn.childNodes[0];sn.removeChild(L);pn.insertBefore(L,sn);}pn.removeChild(sn);var M=C.createRange();M.setStart(K,0);M.setEnd(en,0);var N=C.getSelection();
-N.removeAllRanges();N.addRange(M);J.updateToolbar(null,null,null);J.footDisp.dom.innerHTML='';}}});tb.el.on('click',function(e){e.preventDefault();});tb.el.setVisibilityMode(Roo.Element.DISPLAY);tb.el.hide();tb.name=nm;return tb;},buildFooter:function(){var A=this.editor.wrap.createChild();
-this.footer=new Roo.Toolbar(A);var B=new Roo.Toolbar.Fill();var _t=this;this.footer.add({text:'&lt;',xtype:'Button',handler:function(){_t.footDisp.scrollTo('left',0,true)}});this.footer.add(B);this.footer.add({text:'&gt;',xtype:'Button',handler:function(){_t.footDisp.select('span').last().scrollIntoView(_t.footDisp,true);
-}});var A=Roo.get(B.el);A.addClass('x-editor-context');this.footDispWrap=A;this.footDispWrap.overflow='hidden';this.footDisp=A.createChild();this.footDispWrap.on('click',this.onContextClick,this)},onContextClick:function(ev,A){ev.preventDefault();var cn=A.className;
-if(!cn.match(/x-ed-loc-/)){return;}var n=cn.split('-').pop();var B=this.footerEls;var C=B[n];var D=this.editorcore.createRange();D.selectNodeContents(C);var E=this.editorcore.getSelection();E.removeAllRanges();E.addRange(D);this.updateToolbar(null,null,C);
-}});
+Roo.form.HtmlEditor.ToolbarContext=function(A){Roo.apply(this,A);this.styles=this.styles||{};};Roo.form.HtmlEditor.ToolbarContext.types={'IMG':[{name:'width',title:"Width",width:40},{name:'height',title:"Height",width:40},{name:'align',title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}
+,{name:'border',title:"Border",width:40},{name:'alt',title:"Alt",width:120},{name:'src',title:"Src",width:220}],'FIGURE':[{name:'align',title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}],'A':[{name:'name',title:"Name",width:50},{name:'target',title:"Target",width:120}
+,{name:'href',title:"Href",width:220}],'INPUT':[{name:'name',title:"name",width:120},{name:'value',title:"Value",width:120},{name:'width',title:"Width",width:40}],'LABEL':[{name:'for',title:"For",width:120}],'TEXTAREA':[{name:'name',title:"name",width:120}
+,{name:'rows',title:"Rows",width:20},{name:'cols',title:"Cols",width:20}],'SELECT':[{name:'name',title:"name",width:120},{name:'selectoptions',title:"Options",width:200}],'BODY':[{name:'title',title:"Title",width:200,disabled:true}],'*':[]};Roo.form.HtmlEditor.ToolbarContext.stores=false;
+Roo.form.HtmlEditor.ToolbarContext.options={'font-family':[['Helvetica,Arial,sans-serif','Helvetica'],['Courier New','Courier New'],['Tahoma','Tahoma'],['Times New Roman,serif','Times'],['Verdana','Verdana']]};Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,styles:false,options:false,toolbars:false,init:function(A){this.editor=A;
+this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var C=B.frameId;var D=this;function btn(id,F,G){var H=C+'-'+id;return {id:H,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:F!==false,scope:B,handler:G||B.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
+;}var E=A.wrap.createChild({tag:'div'},A.wrap.dom.firstChild.nextSibling,true);var ty=Roo.form.HtmlEditor.ToolbarContext.types;this.toolbars={};for(var i in ty){this.toolbars[i]=this.buildToolbar(ty[i],i);}this.tb=this.toolbars.BODY;this.tb.el.show();this.buildFooter();
+this.footer.show();A.on('hide',function(){this.footer.hide()},this);A.on('show',function(){this.footer.show()},this);this.rendered=true;A.on('editorevent',this.updateToolbar,this);},updateToolbar:function(A,ev,B){if(ev){ev.stopEvent();}if(!this.editorcore.activated){this.editor.onFirstFocus();
+return;}if(ev&&(ev.type=='mouseup'||ev.type=='click')&&ev.target&&ev.target.tagName!='BODY'){B=ev.target;}Array.from(this.editorcore.doc.body.querySelectorAll('.roo-ed-selection')).forEach(function(e){e.classList.remove('roo-ed-selection');});var C=this.editorcore.getAllAncestors();
+var ty=Roo.form.HtmlEditor.ToolbarContext.types;if(!B){B=C.length?(C[0]?C[0]:C[1]):this.editorcore.doc.body;B=B?B:this.editorcore.doc.body;B=B.tagName.length?B:this.editorcore.doc.body;}var tn=B.tagName.toUpperCase();var D=this.tb.selectedNode;this.tb.selectedNode=B;
+var E=tn;var db=false;if(B&&B.hasAttribute('data-block')){db=B;}else if(B&&B.closest('[data-block]')){db=B.closest('[data-block]');}var F=false;if(db&&this.editorcore.enableBlocks){F=Roo.htmleditor.Block.factory(db);if(F){db.className=(db.classList.length>0?db.className+' ':'')+'roo-ed-selection';
+tn='BLOCK.'+db.getAttribute('data-block');if(typeof(this.toolbars[tn])=='undefined'){this.toolbars[tn]=this.buildToolbar(false,tn,F.friendly_name,F);}this.toolbars[tn].selectedNode=db;E=F.friendly_name;C=this.editorcore.getAllAncestors();}}if(this.tb.name==tn&&D==this.tb.selectedNode&&ev!==false){return;
+}this.tb.el.hide();this.tb=typeof(this.toolbars[tn])!='undefined'?this.toolbars[tn]:this.toolbars['*'];this.tb.el.show();this.tb.items.first().el.innerHTML=E+':&nbsp;';if(F&&this.tb.fields){this.tb.fields.each(function(e){e.setValue(F[e.name]);});}else if(this.tb.fields&&this.tb.selectedNode){this.tb.fields.each(function(e){if(e.stylename){e.setValue(this.tb.selectedNode.style[e.stylename]);
+return;}e.setValue(this.tb.selectedNode.getAttribute(e.attrname));},this);this.updateToolbarStyles(this.tb.selectedNode);}Roo.menu.MenuMgr.hideAll();this.updateFooter(C);},updateToolbarStyles:function(A){var B=false;for(var i in this.styles){B=true;break;
+}if(B&&this.tb.hasStyles){var st=this.tb.fields.item(0);st.store.removeAll();var cn=A.className.split(/\s+/);var C=[];if(this.styles['*']){Roo.each(this.styles['*'],function(v){C.push([v,cn.indexOf(v)>-1?1:0]);});}if(this.styles[tn]){Roo.each(this.styles[tn],function(v){C.push([v,cn.indexOf(v)>-1?1:0]);
+});}st.store.loadData(C);st.collapse();st.setValue(cn);}},updateFooter:function(A){var B='';if(A===false){this.footDisp.dom.innerHTML='';return;}this.footerEls=A.reverse();Roo.each(this.footerEls,function(a,i){if(!a){return;}B+=B.length?' &gt; ':'';B+='<span class="x-ed-loc-'+i+'">'+a.tagName+'</span>';
+});var sz=this.footDisp.up('td').getSize();this.footDisp.dom.style.width=(sz.width-10)+'px';this.footDisp.dom.style.marginLeft='5px';this.footDisp.dom.style.overflow='hidden';this.footDisp.dom.innerHTML=B;},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
+if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});},buildToolbar:function(A,nm,B,C){var D=this.editor;var E=this.editorcore;var F=D.wrap.createChild({tag:'div'},D.wrap.dom.firstChild.nextSibling,true);
+var tb=new Roo.Toolbar(F);if(A===false&&C){A=C.contextMenu(this);}tb.hasStyles=false;tb.name=nm;tb.add((typeof(B)=='undefined'?nm:B)+":&nbsp;");var G=Array.from(this.styles);if(G&&G.length){tb.hasStyles=true;tb.addField(new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'val',fields:['val','selected'],data:[]}
+),name:'-roo-edit-className',attrname:'className',displayField:'val',typeAhead:false,mode:'local',editable:false,triggerAction:'all',emptyText:'Select Style',selectOnFocus:true,width:130,listeners:{'select':function(c,r,i){tb.selectedNode.className=r?r.get('val'):'';
+E.syncValue();}}}));}var H=Roo.form.HtmlEditor.ToolbarContext;for(var i=0;i<A.length;i++){if(typeof(A[i].xtype)!='undefined'){tb[typeof(A[i].name)=='undefined'?'add':'addField'](Roo.factory(A[i]));continue;}var I=A[i];tb.add(I.title+":&nbsp;");var J=I.opts?I.opts:false;
+if(I.optname){J=Roo.form.HtmlEditor.ToolbarContext.options[I.optname];}if(J){tb.addField(new Roo.form.ComboBox({store:typeof(H.stores[i])!='undefined'?Roo.factory(H.stores[i],Roo.data):new Roo.data.SimpleStore({id:'val',fields:['val','display'],data:J}),name:'-roo-edit-'+A[i].name,attrname:A[i].name,stylename:I.style?I.style:false,displayField:I.displayField?I.displayField:'val',valueField:'val',typeAhead:false,mode:typeof(H.stores[A[i].name])!='undefined'?'remote':'local',editable:false,triggerAction:'all',emptyText:'Select',selectOnFocus:true,width:I.width?I.width:130,listeners:{'select':function(c,r,i){if(c.stylename){tb.selectedNode.style[c.stylename]=r.get('val');
+E.syncValue();return;}if(r===false){tb.selectedNode.removeAttribute(c.attrname);E.syncValue();return;}tb.selectedNode.setAttribute(c.attrname,r.get('val'));E.syncValue();}}}));continue;}tb.addField(new Roo.form.TextField({name:'-roo-edit-'+A[i].name,attrname:A[i].name,width:I.width,value:'',listeners:{'change':function(f,nv,ov){tb.selectedNode.setAttribute(f.attrname,nv);
+E.syncValue();}}}));}var K=this;var L=!C||C.deleteTitle!==false;if(nm=='BODY'){L=false;tb.addSeparator();tb.addButton({text:'Stylesheets',listeners:{click:function(){K.editor.fireEvent('stylesheetsclick',K.editor);}}});}tb.addFill();if(L){tb.addButton({text:C&&C.deleteTitle?C.deleteTitle:'Remove Block or Formating',listeners:{click:function(){var sn=tb.selectedNode;
+if(C){sn=Roo.htmleditor.Block.factory(tb.selectedNode).removeNode();}if(!sn){return;}var M=sn.childNodes[0]||sn.nextSibling||sn.previousSibling||sn.parentNode;if(sn.hasAttribute('data-block')){M=sn.nextSibling||sn.previousSibling||sn.parentNode;sn.parentNode.removeChild(sn);
+}else if(sn&&sn.tagName!='BODY'){a=new Roo.htmleditor.FilterKeepChildren({tag:false});a.replaceTag(sn);}var N=E.createRange();N.setStart(M,0);N.setEnd(M,0);var O=E.getSelection();O.removeAllRanges();O.addRange(N);K.updateToolbar(null,null,null);K.updateFooter(false);
+}}});}tb.el.on('click',function(e){e.preventDefault();});tb.el.setVisibilityMode(Roo.Element.DISPLAY);tb.el.hide();return tb;},buildFooter:function(){var A=this.editor.wrap.createChild();this.footer=new Roo.Toolbar(A);var B=new Roo.Toolbar.Fill();var _t=this;
+this.footer.add({text:'&lt;',xtype:'Button',handler:function(){_t.footDisp.scrollTo('left',0,true)}});this.footer.add(B);this.footer.add({text:'&gt;',xtype:'Button',handler:function(){_t.footDisp.select('span').last().scrollIntoView(_t.footDisp,true);}});
+var A=Roo.get(B.el);A.addClass('x-editor-context');this.footDispWrap=A;this.footDispWrap.overflow='hidden';this.footDisp=A.createChild();this.footDispWrap.on('click',this.onContextClick,this)},onContextClick:function(ev,A){ev.preventDefault();var cn=A.className;
+if(!cn.match(/x-ed-loc-/)){return;}var n=cn.split('-').pop();var B=this.footerEls;var C=B[n];this.editorcore.selectNode(C);this.updateToolbar(null,null,C);}});
 // Roo/form/BasicForm.js
 Roo.form.BasicForm=function(el,A){this.allItems=[];this.childForms=[];Roo.apply(this,A);this.items=new Roo.util.MixedCollection(false,function(o){return o.id||(o.id=Roo.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);
 }Roo.form.BasicForm.superclass.constructor.call(this);Roo.form.BasicForm.popover.apply();};Roo.extend(Roo.form.BasicForm,Roo.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,childForms:false,allItems:false,waitMsgTarget:false,disableMask:false,errorMask:false,maskOffset:100,initEl:function(el){this.el=Roo.get(el);
 // Roo/form/BasicForm.js
 Roo.form.BasicForm=function(el,A){this.allItems=[];this.childForms=[];Roo.apply(this,A);this.items=new Roo.util.MixedCollection(false,function(o){return o.id||(o.id=Roo.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);
 }Roo.form.BasicForm.superclass.constructor.call(this);Roo.form.BasicForm.popover.apply();};Roo.extend(Roo.form.BasicForm,Roo.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,childForms:false,allItems:false,waitMsgTarget:false,disableMask:false,errorMask:false,maskOffset:100,initEl:function(el){this.el=Roo.get(el);
@@ -1995,18 +2219,19 @@ this.fireEvent('actioncomplete',this,A);}else{if((typeof(A.result)!='undefined')
 i<B;i++){var C=A[i];var f=this.findField(C.id);if(f){f.markInvalid(C.msg);}}}else{var D,id;for(id in A){if(typeof A[id]!='function'&&(D=this.findField(id))){D.markInvalid(A[id]);}}}Roo.each(this.childForms||[],function(f){f.markInvalid(A);});return this;}
 ,setValues:function(A){if(A instanceof Array){for(var i=0,B=A.length;i<B;i++){var v=A[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var C,id;for(id in A){if(typeof A[id]!='function'&&(C=this.findField(id))){if(C.setFromData&&C.valueField&&C.displayField&&(C.store&&!C.store.isLocal)){var sd={}
 ;sd[C.valueField]=typeof(A[C.hiddenName])=='undefined'?'':A[C.hiddenName];sd[C.displayField]=typeof(A[C.name])=='undefined'?'':A[C.name];C.setFromData(sd);}else{C.setValue(A[id]);}if(this.trackResetOnLoad){C.originalValue=C.getValue();}}}}this.resetHasChanged();
 i<B;i++){var C=A[i];var f=this.findField(C.id);if(f){f.markInvalid(C.msg);}}}else{var D,id;for(id in A){if(typeof A[id]!='function'&&(D=this.findField(id))){D.markInvalid(A[id]);}}}Roo.each(this.childForms||[],function(f){f.markInvalid(A);});return this;}
 ,setValues:function(A){if(A instanceof Array){for(var i=0,B=A.length;i<B;i++){var v=A[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var C,id;for(id in A){if(typeof A[id]!='function'&&(C=this.findField(id))){if(C.setFromData&&C.valueField&&C.displayField&&(C.store&&!C.store.isLocal)){var sd={}
 ;sd[C.valueField]=typeof(A[C.hiddenName])=='undefined'?'':A[C.hiddenName];sd[C.displayField]=typeof(A[C.name])=='undefined'?'':A[C.name];C.setFromData(sd);}else{C.setValue(A[id]);}if(this.trackResetOnLoad){C.originalValue=C.getValue();}}}}this.resetHasChanged();
-Roo.each(this.childForms||[],function(f){f.setValues(A);f.resetHasChanged();});return this;},getValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getValues());},this);}if(typeof(FormData)!='undefined'&&A!==true){try{var fd=(new FormData(this.el.dom)).entries();
-var B={};var C=fd.next();while(!C.done){B[C.value[0]]=C.value[1];C=fd.next();};return B;}catch(e){}}var fs=Roo.lib.Ajax.serializeForm(this.el.dom);if(A===true){return fs;}return Roo.urlDecode(fs);},getFieldValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getValues());
-},this);}var B={};this.items.each(function(f){if(!f.getName()){return;}var v=f.getValue();if(f.inputType=='radio'){if(typeof(B[f.getName()])=='undefined'){B[f.getName()]='';}if(!f.el.dom.checked){return;}v=f.el.dom.value;}if((typeof(v)=='object')&&f.getRawValue){v=f.getRawValue();
-}if(f.name!=f.getName()){B[f.name]=f.getRawValue();}B[f.getName()]=v;});return B;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});Roo.each(this.childForms||[],function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();
-});Roo.each(this.childForms||[],function(f){f.reset();});this.resetHasChanged();return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(A){this.items.remove(A);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);
-}});return this;},applyToFields:function(o){this.items.each(function(f){Roo.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Roo.applyIf(f,o);});return this;}});Roo.BasicForm=Roo.form.BasicForm;Roo.apply(Roo.form.BasicForm,{popover:{padding:5,isApplied:false,isMasked:false,form:false,target:false,intervalID:false,maskEl:false,apply:function(){if(this.isApplied){return;
-}this.maskEl={top:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-top-mask"},true),left:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-left-mask"},true),bottom:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-bottom-mask"}
-,true),right:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-right-mask"},true)};this.maskEl.top.enableDisplayMode("block");this.maskEl.left.enableDisplayMode("block");this.maskEl.bottom.enableDisplayMode("block");this.maskEl.right.enableDisplayMode("block");
-Roo.get(document.body).on('click',function(){this.unmask();},this);Roo.get(document.body).on('touchstart',function(){this.unmask();},this);this.isApplied=true},mask:function(A,B){this.form=A;this.target=B;if(!this.form.errorMask||!B.el){return;}var C=this.target.el.findScrollableParent()||this.target.el.findParent('div.x-layout-active-content',100,true)||Roo.get(document.body);
-var ot=this.target.el.calcOffsetsTo(C);var D=ot[1]-this.form.maskOffset;D=Math.min(D,C.dom.scrollHeight);C.scrollTo('top',D);var el=this.target.wrap||this.target.el;var E=el.getBox();this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setStyle('z-index',10000);
-this.maskEl.top.setSize(Roo.lib.Dom.getDocumentWidth(),E.y-this.padding);this.maskEl.top.setLeft(0);this.maskEl.top.setTop(0);this.maskEl.top.show();this.maskEl.left.setStyle('position','absolute');this.maskEl.left.setStyle('z-index',10000);this.maskEl.left.setSize(E.x-this.padding,E.height+this.padding*2);
-this.maskEl.left.setLeft(0);this.maskEl.left.setTop(E.y-this.padding);this.maskEl.left.show();this.maskEl.bottom.setStyle('position','absolute');this.maskEl.bottom.setStyle('z-index',10000);this.maskEl.bottom.setSize(Roo.lib.Dom.getDocumentWidth(),Roo.lib.Dom.getDocumentHeight()-E.bottom-this.padding);
+Roo.each(this.childForms||[],function(f){f.setValues(A);f.resetHasChanged();});return this;},getValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getFieldValues());},this);}if(typeof(FormData)!='undefined'&&A!==true){try{var fd=(new FormData(this.el.dom)).entries();
+var B={};var C=fd.next();while(!C.done){B[C.value[0]]=C.value[1];C=fd.next();};return B;}catch(e){}}var fs=Roo.lib.Ajax.serializeForm(this.el.dom);if(A===true){return fs;}return Roo.urlDecode(fs);},getFieldValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getFieldValues());
+},this);}var B={};this.items.each(function(f){if(f.readOnly&&A!==true){return;}if(!f.getName()){return;}var v=f.getValue();if(f.inputType=='radio'){if(typeof(B[f.getName()])=='undefined'){B[f.getName()]='';}if(!f.el.dom.checked){return;}v=f.el.dom.value;}
+if((typeof(v)=='object')&&f.getRawValue){v=f.getRawValue();}if(f.name!=f.getName()){B[f.name]=f.getRawValue();}B[f.getName()]=v;});return B;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});Roo.each(this.childForms||[],function(f){f.clearInvalid();
+});return this;},reset:function(){this.items.each(function(f){f.reset();});Roo.each(this.childForms||[],function(f){f.reset();});this.resetHasChanged();return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(A){this.items.remove(A);
+return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Roo.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Roo.applyIf(f,o);
+});return this;}});Roo.BasicForm=Roo.form.BasicForm;Roo.apply(Roo.form.BasicForm,{popover:{padding:5,isApplied:false,isMasked:false,form:false,target:false,intervalID:false,maskEl:false,apply:function(){if(this.isApplied){return;}this.maskEl={top:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-top-mask"}
+,true),left:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-left-mask"},true),bottom:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-bottom-mask"},true),right:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-right-mask"}
+,true)};this.maskEl.top.enableDisplayMode("block");this.maskEl.left.enableDisplayMode("block");this.maskEl.bottom.enableDisplayMode("block");this.maskEl.right.enableDisplayMode("block");Roo.get(document.body).on('click',function(){this.unmask();},this);Roo.get(document.body).on('touchstart',function(){this.unmask();
+},this);this.isApplied=true},mask:function(A,B){this.form=A;this.target=B;if(!this.form.errorMask||!B.el){return;}var C=this.target.el.findScrollableParent()||this.target.el.findParent('div.x-layout-active-content',100,true)||Roo.get(document.body);var ot=this.target.el.calcOffsetsTo(C);
+var D=ot[1]-this.form.maskOffset;D=Math.min(D,C.dom.scrollHeight);C.scrollTo('top',D);var el=this.target.wrap||this.target.el;var E=el.getBox();this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setStyle('z-index',10000);this.maskEl.top.setSize(Roo.lib.Dom.getDocumentWidth(),E.y-this.padding);
+this.maskEl.top.setLeft(0);this.maskEl.top.setTop(0);this.maskEl.top.show();this.maskEl.left.setStyle('position','absolute');this.maskEl.left.setStyle('z-index',10000);this.maskEl.left.setSize(E.x-this.padding,E.height+this.padding*2);this.maskEl.left.setLeft(0);
+this.maskEl.left.setTop(E.y-this.padding);this.maskEl.left.show();this.maskEl.bottom.setStyle('position','absolute');this.maskEl.bottom.setStyle('z-index',10000);this.maskEl.bottom.setSize(Roo.lib.Dom.getDocumentWidth(),Roo.lib.Dom.getDocumentHeight()-E.bottom-this.padding);
 this.maskEl.bottom.setLeft(0);this.maskEl.bottom.setTop(E.bottom+this.padding);this.maskEl.bottom.show();this.maskEl.right.setStyle('position','absolute');this.maskEl.right.setStyle('z-index',10000);this.maskEl.right.setSize(Roo.lib.Dom.getDocumentWidth()-E.right-this.padding,E.height+this.padding*2);
 this.maskEl.right.setLeft(E.right+this.padding);this.maskEl.right.setTop(E.y-this.padding);this.maskEl.right.show();this.intervalID=window.setInterval(function(){Roo.form.BasicForm.popover.unmask();},10000);window.onwheel=function(){return false;};(function(){this.isMasked=true;
 }).defer(500,this);},unmask:function(){if(!this.isApplied||!this.isMasked||!this.form||!this.target||!this.form.errorMask){return;}this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setSize(0,0).setXY([0,0]);this.maskEl.top.hide();this.maskEl.left.setStyle('position','absolute');
 this.maskEl.bottom.setLeft(0);this.maskEl.bottom.setTop(E.bottom+this.padding);this.maskEl.bottom.show();this.maskEl.right.setStyle('position','absolute');this.maskEl.right.setStyle('z-index',10000);this.maskEl.right.setSize(Roo.lib.Dom.getDocumentWidth()-E.right-this.padding,E.height+this.padding*2);
 this.maskEl.right.setLeft(E.right+this.padding);this.maskEl.right.setTop(E.y-this.padding);this.maskEl.right.show();this.intervalID=window.setInterval(function(){Roo.form.BasicForm.popover.unmask();},10000);window.onwheel=function(){return false;};(function(){this.isMasked=true;
 }).defer(500,this);},unmask:function(){if(!this.isApplied||!this.isMasked||!this.form||!this.target||!this.form.errorMask){return;}this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setSize(0,0).setXY([0,0]);this.maskEl.top.hide();this.maskEl.left.setStyle('position','absolute');
@@ -2305,21 +2530,28 @@ this.resizeEl.setSize(this.autoWidth?"auto":C.width,this.autoHeight?"auto":C.hei
 }},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();
 }},destroy:function(){this.el.removeAllListeners();var A=document.createElement("span");A.appendChild(this.el.dom);A.innerHTML="";this.el.remove();this.el=null;},form:false,view:false,addxtype:function(A){if(A.xtype.match(/^Form$/)){var el;el=this.el.createChild();
 this.form=new Roo.form.Form(A);if(this.form.allItems.length){this.form.render(el.dom);}return this.form;}if(['View','JsonView','DatePicker'].indexOf(A.xtype)>-1){A.el=this.el.appendChild(document.createElement("div"));var B=new Roo.factory(A);B.render&&B.render(false,'');
 }},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();
 }},destroy:function(){this.el.removeAllListeners();var A=document.createElement("span");A.appendChild(this.el.dom);A.innerHTML="";this.el.remove();this.el=null;},form:false,view:false,addxtype:function(A){if(A.xtype.match(/^Form$/)){var el;el=this.el.createChild();
 this.form=new Roo.form.Form(A);if(this.form.allItems.length){this.form.render(el.dom);}return this.form;}if(['View','JsonView','DatePicker'].indexOf(A.xtype)>-1){A.el=this.el.appendChild(document.createElement("div"));var B=new Roo.factory(A);B.render&&B.render(false,'');
-this.view=B;return B;}return false;}});Roo.GridPanel=function(A,B){this.wrapper=Roo.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(A.getGridEl().dom);Roo.GridPanel.superclass.constructor.call(this,this.wrapper,B);
+this.view=B;return B;}return false;}});
+// Roo/GridPanel.js
+Roo.GridPanel=function(A,B){if(typeof(A.grid)!='undefined'){B=A;A=B.grid;}this.wrapper=Roo.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(A.getGridEl().dom);Roo.GridPanel.superclass.constructor.call(this,this.wrapper,B);
 if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}if(this.footer&&!this.footer.el&&this.footer.xtype){this.footer.container=this.grid.getView().getFooterPanel(true);this.footer.dataSource=this.grid.dataSource;this.footer=Roo.factory(this.footer,Roo);
 }A.monitorWindowResize=false;A.autoHeight=false;A.autoWidth=false;this.grid=A;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Roo.extend(Roo.GridPanel,Roo.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;
 },setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.grid;var D=this.adjustForComponents(A,B);C.getGridEl().setSize(D.width,D.height);C.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();
 if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}if(this.footer&&!this.footer.el&&this.footer.xtype){this.footer.container=this.grid.getView().getFooterPanel(true);this.footer.dataSource=this.grid.dataSource;this.footer=Roo.factory(this.footer,Roo);
 }A.monitorWindowResize=false;A.autoHeight=false;A.autoWidth=false;this.grid=A;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Roo.extend(Roo.GridPanel,Roo.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;
 },setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.grid;var D=this.adjustForComponents(A,B);C.getGridEl().setSize(D.width,D.height);C.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();
-},destroy:function(){this.grid.destroy();delete this.grid;Roo.GridPanel.superclass.destroy.call(this);}});Roo.NestedLayoutPanel=function(A,B){Roo.NestedLayoutPanel.superclass.constructor.call(this,A.getEl(),B);A.monitorWindowResize=false;this.layout=A;this.layout.getEl().addClass("x-layout-nested-layout");
-};Roo.extend(Roo.NestedLayoutPanel,Roo.ContentPanel,{setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.adjustForComponents(A,B);var el=this.layout.getEl();el.setSize(C.width,C.height);var D=el.dom.offsetWidth;this.layout.layout();if(Roo.isIE&&!this.initialized){this.initialized=true;
-this.layout.layout();}}},setActiveState:function(A){this.active=A;if(!A){this.fireEvent("deactivate",this);return;}this.fireEvent("activate",this);if(!this.layout){return;}var B=false;for(var r in this.layout.regions){B=this.layout.getRegion(r);if(B.getActivePanel()){B.setActivePanel(B.getActivePanel());
-continue;}if(!B.panels.length){continue;}B.showPanel(B.getPanel(0));}},getLayout:function(){return this.layout;},addxtype:function(A){return this.layout.addxtype(A);}});Roo.ScrollPanel=function(el,A,B){A=A||{};A.fitToFrame=true;Roo.ScrollPanel.superclass.constructor.call(this,el,A,B);
-this.el.dom.style.overflow="hidden";var C=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");this.el.on("mousewheel",this.onWheel,this);var up=C.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);
-var D=C.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();D.unselectable();up.on("click",this.scrollUp,this);D.on("click",this.scrollDown,this);up.addClassOnOver("x-scroller-btn-over");D.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");
-D.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+D.getHeight())];this.resizeEl=this.el;this.el=C;this.up=up;this.down=D;};Roo.extend(Roo.ScrollPanel,Roo.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this}
-);},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this});},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");
-this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Roo.ScrollPanel.superclass.setSize.apply(this,arguments);this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);
-this.afterScroll();e.stopEvent();},setContent:function(A,B){this.resizeEl.update(A,B);}});Roo.TreePanel=function(A){var el=A.el;var B=A.tree;delete A.tree;delete A.el;var C=el.createChild();A.resizeEl=C;Roo.TreePanel.superclass.constructor.call(this,el,A);
-this.tree=new Roo.tree.TreePanel(C,B);this.on('activate',function(){if(this.tree.rendered){return;}this.tree.render();});};Roo.extend(Roo.TreePanel,Roo.ContentPanel,{fitToFrame:true,autoScroll:true,tree:false});
+},destroy:function(){this.grid.destroy();delete this.grid;Roo.GridPanel.superclass.destroy.call(this);}});
+// Roo/NestedLayoutPanel.js
+Roo.NestedLayoutPanel=function(A,B){Roo.NestedLayoutPanel.superclass.constructor.call(this,A.getEl(),B);A.monitorWindowResize=false;this.layout=A;this.layout.getEl().addClass("x-layout-nested-layout");};Roo.extend(Roo.NestedLayoutPanel,Roo.ContentPanel,{layout:false,setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.adjustForComponents(A,B);
+var el=this.layout.getEl();el.setSize(C.width,C.height);var D=el.dom.offsetWidth;this.layout.layout();if(Roo.isIE&&!this.initialized){this.initialized=true;this.layout.layout();}}},setActiveState:function(A){this.active=A;if(!A){this.fireEvent("deactivate",this);
+return;}this.fireEvent("activate",this);if(!this.layout){return;}var B=false;for(var r in this.layout.regions){B=this.layout.getRegion(r);if(B.getActivePanel()){B.setActivePanel(B.getActivePanel());continue;}if(!B.panels.length){continue;}B.showPanel(B.getPanel(0));
+}},getLayout:function(){return this.layout;},addxtype:function(A){return this.layout.addxtype(A);}});
+// Roo/ScrollPanel.js
+Roo.ScrollPanel=function(el,A,B){A=A||{};A.fitToFrame=true;Roo.ScrollPanel.superclass.constructor.call(this,el,A,B);this.el.dom.style.overflow="hidden";var C=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");
+this.el.on("mousewheel",this.onWheel,this);var up=C.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);var D=C.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();D.unselectable();up.on("click",this.scrollUp,this);D.on("click",this.scrollDown,this);
+up.addClassOnOver("x-scroller-btn-over");D.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");D.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+D.getHeight())];this.resizeEl=this.el;this.el=C;this.up=up;
+this.down=D;};Roo.extend(Roo.ScrollPanel,Roo.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this});},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this}
+);},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Roo.ScrollPanel.superclass.setSize.apply(this,arguments);
+this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);this.afterScroll();e.stopEvent();},setContent:function(A,B){this.resizeEl.update(A,B);}});
+// Roo/TreePanel.js
+Roo.TreePanel=function(A){var el=A.el;var B=A.tree;delete A.tree;delete A.el;var C=el.createChild();A.resizeEl=C;Roo.TreePanel.superclass.constructor.call(this,el,A);this.tree=new Roo.tree.TreePanel(C,B);this.on('activate',function(){if(this.tree.rendered){return;
+}this.tree.render();});};Roo.extend(Roo.TreePanel,Roo.ContentPanel,{fitToFrame:true,autoScroll:true,tree:false});
 // Roo/ReaderLayout.js
 Roo.ReaderLayout=function(A,B){var c=A||{size:{}};Roo.ReaderLayout.superclass.constructor.call(this,B||document.body,{north:c.north!==false?Roo.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5}
 ,cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}
 // Roo/ReaderLayout.js
 Roo.ReaderLayout=function(A,B){var c=A||{size:{}};Roo.ReaderLayout.superclass.constructor.call(this,B||document.body,{north:c.north!==false?Roo.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5}
 ,cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}
@@ -2331,7 +2563,7 @@ Roo.grid.Grid=function(A,B){this.container=Roo.get(A);this.container.update("");
 }if(this.cm){this.colModel=this.cm;delete this.cm;}if(this.sm){this.selModel=this.sm;delete this.sm;}if(this.selModel){this.selModel=Roo.factory(this.selModel,Roo.grid);this.sm=this.selModel;this.sm.xmodule=this.xmodule||false;}if(typeof(this.colModel.config)=='undefined'){this.colModel=new Roo.grid.ColumnModel(this.colModel);
 this.cm=this.colModel;this.cm.xmodule=this.xmodule||false;}if(this.dataSource){this.dataSource=Roo.factory(this.dataSource,Roo.data);this.ds=this.dataSource;this.ds.xmodule=this.xmodule||false;}if(this.width){this.container.setWidth(this.width);}if(this.height){this.container.setHeight(this.height);
 }this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,'rowclass':true,'render':true}
 }if(this.cm){this.colModel=this.cm;delete this.cm;}if(this.sm){this.selModel=this.sm;delete this.sm;}if(this.selModel){this.selModel=Roo.factory(this.selModel,Roo.grid);this.sm=this.selModel;this.sm.xmodule=this.xmodule||false;}if(typeof(this.colModel.config)=='undefined'){this.colModel=new Roo.grid.ColumnModel(this.colModel);
 this.cm=this.colModel;this.cm.xmodule=this.xmodule||false;}if(this.dataSource){this.dataSource=Roo.factory(this.dataSource,Roo.data);this.ds=this.dataSource;this.ds.xmodule=this.xmodule||false;}if(this.width){this.container.setWidth(this.width);}if(this.height){this.container.setHeight(this.height);
 }this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,'rowclass':true,'render':true}
-);Roo.grid.Grid.superclass.constructor.call(this);};Roo.extend(Roo.grid.Grid,Roo.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,dropTarget:false,rendered:false,ddText:"{0} selected row{1}",render:function(){var c=this.container;
+);Roo.grid.Grid.superclass.constructor.call(this);};Roo.extend(Roo.grid.Grid,Roo.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,dropTarget:false,sortColMenu:false,rendered:false,ddText:"{0} selected row{1}",render:function(){var c=this.container;
 if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}var A=this.getView();A.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);
 if(Roo.isTouch){c.on("touchstart",this.onTouchStart,this);}this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);A.render();if(this.loadMask){this.loadMask=new Roo.LoadMask(this.container,Roo.apply({store:this.dataSource}
 ,this.loadMask));}if(this.toolbar&&this.toolbar.xtype){this.toolbar.container=this.getView().getHeaderPanel(true);this.toolbar=new Roo.Toolbar(this.toolbar);}if(this.footer&&this.footer.xtype){this.footer.dataSource=this.getDataSource();this.footer.container=this.getView().getFooterPanel(true);
 if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}var A=this.getView();A.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);
 if(Roo.isTouch){c.on("touchstart",this.onTouchStart,this);}this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);A.render();if(this.loadMask){this.loadMask=new Roo.LoadMask(this.container,Roo.apply({store:this.dataSource}
 ,this.loadMask));}if(this.toolbar&&this.toolbar.xtype){this.toolbar.container=this.getView().getHeaderPanel(true);this.toolbar=new Roo.Toolbar(this.toolbar);}if(this.footer&&this.footer.xtype){this.footer.dataSource=this.getDataSource();this.footer.container=this.getView().getFooterPanel(true);
@@ -2452,11 +2684,11 @@ if(A){for(var dd in A){if(!A[dd].config.isTarget&&A[dd].dragElId){var B=A[dd].dr
 case "lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}if(lc!=B){cm.setLocked(B,true,true);cm.moveColumn(B,lc);this.grid.fireEvent("columnmove",B,lc);}else{cm.setLocked(B,true);}break;case "unlock":var lc=cm.getLockedCount();
 if((lc-1)!=B){cm.setLocked(B,false,true);cm.moveColumn(B,lc-1);this.grid.fireEvent("columnmove",B,lc-1);}else{cm.setLocked(B,false);}break;case 'wider':case 'narrow':var cw=cm.getColumnWidth(B);cw+=(A.id=='wider'?1:-1)*50;cw=Math.max(0,cw);cw=Math.min(cw,4000);
 cm.setColumnWidth(B,cw);break;default:B=cm.getIndexById(A.id.substr(4));if(B!=-1){if(A.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}cm.setHidden(B,A.checked);}}return true;},beforeColMenuShow:function(){var cm=this.cm,A=cm.getColumnCount();
 case "lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}if(lc!=B){cm.setLocked(B,true,true);cm.moveColumn(B,lc);this.grid.fireEvent("columnmove",B,lc);}else{cm.setLocked(B,true);}break;case "unlock":var lc=cm.getLockedCount();
 if((lc-1)!=B){cm.setLocked(B,false,true);cm.moveColumn(B,lc-1);this.grid.fireEvent("columnmove",B,lc-1);}else{cm.setLocked(B,false);}break;case 'wider':case 'narrow':var cw=cm.getColumnWidth(B);cw+=(A.id=='wider'?1:-1)*50;cw=Math.max(0,cw);cw=Math.min(cw,4000);
 cm.setColumnWidth(B,cw);break;default:B=cm.getIndexById(A.id.substr(4));if(B!=-1){if(A.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}cm.setHidden(B,A.checked);}}return true;},beforeColMenuShow:function(){var cm=this.cm,A=cm.getColumnCount();
-this.colMenu.removeAll();for(var i=0;i<A;i++){this.colMenu.add(new Roo.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false}));}},handleHdCtx:function(g,A,e){e.stopEvent();var hd=this.getHeaderCell(A);
-this.hdCtxIndex=A;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(A));ms.get("desc").setDisabled(!cm.isSortable(A));if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(A));ms.get("unlock").setDisabled(!cm.isLocked(A));
-}this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());
-if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);this.layout();}},render:function(){var cm=this.cm;
-var A=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Roo.EventManager.onWindowResize(this.onWindowResize,this,true);}var B=this.renderHeaders();var C=this.templates.body.apply({rows:""});var D=this.templates.master.apply({lockedBody:C,body:C,lockedHeader:B[0],header:B[1]}
+this.colMenu.removeAll();var B=[];for(var i=0;i<A;i++){B.push({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false});}if(this.grid.sortColMenu){B.sort(function(a,b){if(a.text==b.text){return 0;}return a.text.toUpperCase()>b.text.toUpperCase()?1:-1;
+});}for(var i=0;i<A;i++){this.colMenu.add(new Roo.menu.CheckItem(B[i]));}},handleHdCtx:function(g,A,e){e.stopEvent();var hd=this.getHeaderCell(A);this.hdCtxIndex=A;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(A));ms.get("desc").setDisabled(!cm.isSortable(A));
+if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(A));ms.get("unlock").setDisabled(!cm.isLocked(A));}this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");
+}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);
+this.layout();}},render:function(){var cm=this.cm;var A=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Roo.EventManager.onWindowResize(this.onWindowResize,this,true);}var B=this.renderHeaders();var C=this.templates.body.apply({rows:""});var D=this.templates.master.apply({lockedBody:C,body:C,lockedHeader:B[0],header:B[1]}
 );this.grid.getGridEl().dom.innerHTML=D;this.initElements();this.el.on("scroll",function(){this.el.dom.scrollTop=0;},this);this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);
 this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);
 this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Roo.grid.SplitDragZone){new Roo.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}this.updateSplitters();if(this.grid.enableColumnMove&&Roo.grid.HeaderDragZone){new Roo.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);
 );this.grid.getGridEl().dom.innerHTML=D;this.initElements();this.el.on("scroll",function(){this.el.dom.scrollTop=0;},this);this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);
 this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);
 this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Roo.grid.SplitDragZone){new Roo.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}this.updateSplitters();if(this.grid.enableColumnMove&&Roo.grid.HeaderDragZone){new Roo.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);
index 9f8bb00..2d53d54 100644 (file)
@@ -1,4 +1,4 @@
-/**
+Roo.bootstrap = {};/**
  * set the version of bootstrap based on the stylesheet...
  *
  */
  * set the version of bootstrap based on the stylesheet...
  *
  */
@@ -15358,6 +15358,16 @@ Roo.extend(Roo.data.Store, Roo.util.Observable, {
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
+     * <li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
+     * <pre>
+                {
+                    data : data,  // array of key=>value data like JsonReader
+                    total : data.length,
+                    success : true
+                    
+                }
+        </pre>
+            }.</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
@@ -25977,1498 +25987,3954 @@ Roo.extend(Roo.bootstrap.form.SecurePass, Roo.bootstrap.form.Input, {
         return this.IsLongEnough(pwd, 6) || !this.IsLongEnough(pwd, 0);
     }
           
         return this.IsLongEnough(pwd, 6) || !this.IsLongEnough(pwd, 0);
     }
           
-})//<script type="text/javascript">
-
-/*
- * Based  Ext JS Library 1.1.1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * LGPL
- *
- */
+});
+Roo.htmleditor = {};
  
 /**
  
 /**
- * @class Roo.HtmlEditorCore
- * @extends Roo.Component
- * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
- *
- * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
+ * @class Roo.htmleditor.Filter
+ * Base Class for filtering htmleditor stuff. - do not use this directly - extend it.
+ * @cfg {DomElement} node The node to iterate and filter
+ * @cfg {boolean|String|Array} tag Tags to replace 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
  */
 
  */
 
-Roo.HtmlEditorCore = function(config){
-    
-    
-    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
-    
-    
-    this.addEvents({
-        /**
-         * @event initialize
-         * Fires when the editor is fully initialized (including the iframe)
-         * @param {Roo.HtmlEditorCore} this
-         */
-        initialize: true,
-        /**
-         * @event activate
-         * Fires when the editor is first receives the focus. Any insertion must wait
-         * until after this event.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        activate: true,
-         /**
-         * @event beforesync
-         * Fires before the textarea is updated with content from the editor iframe. Return false
-         * to cancel the sync.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforesync: true,
-         /**
-         * @event beforepush
-         * Fires before the iframe editor is updated with content from the textarea. Return false
-         * to cancel the push.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforepush: true,
-         /**
-         * @event sync
-         * Fires when the textarea is updated with content from the editor iframe.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        sync: true,
-         /**
-         * @event push
-         * Fires when the iframe editor is updated with content from the textarea.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        push: true,
-        
-        /**
-         * @event editorevent
-         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        editorevent: true
-        
-    });
-    
-    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
-    
-    // defaults : white / black...
-    this.applyBlacklists();
-    
-    
-    
-};
 
 
 
 
-Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
+Roo.htmleditor.Filter = function(cfg) {
+    Roo.apply(this.cfg);
+    // this does not actually call walk as it's really just a abstract class
+}
 
 
 
 
-     /**
-     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
-     */
-    
-    owner : false,
-    
-     /**
-     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
-     *                        Roo.resizable.
-     */
-    resizable : false,
-     /**
-     * @cfg {Number} height (in pixels)
-     */   
-    height: 300,
-   /**
-     * @cfg {Number} width (in pixels)
-     */   
-    width: 500,
+Roo.htmleditor.Filter.prototype = {
     
     
-    /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
-     * 
-     */
-    stylesheets: false,
+    node: false,
     
     
-    /**
-     * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
-     */
-    allowComments: false,
-    // id of frame..
-    frameId: false,
+    tag: false,
+
+    // overrride to do replace comments.
+    replaceComment : false,
     
     
-    // private properties
-    validationEvent : false,
-    deferHeight: true,
-    initialized : false,
-    activated : false,
-    sourceEditMode : false,
-    onFocus : Roo.emptyFn,
-    iframePad:3,
-    hideMode:'offsets',
+    // overrride to do replace or do stuff with tags..
+    replaceTag : false,
     
     
-    clearUp: true,
+    walk : function(dom)
+    {
+        Roo.each( Array.from(dom.childNodes), function( e ) {
+            switch(true) {
+                
+                case e.nodeType == 8 &&  this.replaceComment  !== false: // comment
+                    this.replaceComment(e);
+                    return;
+                
+                case e.nodeType != 1: //not a node.
+                    return;
+                
+                case this.tag === true: // everything
+                case typeof(this.tag) == 'object' && this.tag.indexOf(e.tagName) > -1: // array and it matches.
+                case typeof(this.tag) == 'string' && this.tag == e.tagName: // array and it matches.
+                    if (this.replaceTag && false === this.replaceTag(e)) {
+                        return;
+                    }
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+                    return;
+                
+                default:    // tags .. that do not match.
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+            }
+            
+        }, this);
+        
+    }
+}; 
+
+/**
+ * @class Roo.htmleditor.FilterAttributes
+ * clean attributes and  styles including http:// etc.. in attribute
+ * @constructor
+* Run a new Attribute Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterAttributes = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.attrib_black = this.attrib_black || [];
+    this.attrib_white = this.attrib_white || [];
+
+    this.attrib_clean = this.attrib_clean || [];
+    this.style_white = this.style_white || [];
+    this.style_black = this.style_black || [];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterAttributes, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
     
     
-    // blacklist + whitelisted elements..
-    black: false,
-    white: false,
-     
-    bodyCls : '',
+    attrib_black : false, // array
+    attrib_clean : false,
+    attrib_white : false,
 
 
-    /**
-     * Protected method that will not generally be called directly. It
-     * is called when the editor initializes the iframe with HTML contents. Override this method if you
-     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
-     */
-    getDocMarkup : function(){
-        // body styles..
-        var st = '';
+    style_white : false,
+    style_black : false,
+     
+     
+    replaceTag : function(node)
+    {
+        if (!node.attributes || !node.attributes.length) {
+            return true;
+        }
         
         
-        // inherit styels from page...?? 
-        if (this.stylesheets === false) {
+        for (var i = node.attributes.length-1; i > -1 ; i--) {
+            var a = node.attributes[i];
+            //console.log(a);
+            if (this.attrib_white.length && this.attrib_white.indexOf(a.name.toLowerCase()) < 0) {
+                node.removeAttribute(a.name);
+                continue;
+            }
             
             
-            Roo.get(document.head).select('style').each(function(node) {
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
             
             
-            Roo.get(document.head).select('link').each(function(node) { 
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
             
             
-        } else if (!this.stylesheets.length) {
-                // simple..
-                st = '<style type="text/css">' +
-                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-                   '</style>';
-        } else {
-            for (var i in this.stylesheets) { 
-                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
+            if (a.name.toLowerCase().substr(0,2)=='on')  {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            
+            
+            if (this.attrib_black.indexOf(a.name.toLowerCase()) > -1) {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            if (this.attrib_clean.indexOf(a.name.toLowerCase()) > -1) {
+                this.cleanAttr(node,a.name,a.value); // fixme..
+                continue;
+            }
+            if (a.name == 'style') {
+                this.cleanStyle(node,a.name,a.value);
+                continue;
+            }
+            /// clean up MS crap..
+            // tecnically this should be a list of valid class'es..
+            
+            
+            if (a.name == 'class') {
+                if (a.value.match(/^Mso/)) {
+                    node.removeAttribute('class');
+                }
+                
+                if (a.value.match(/^body$/)) {
+                    node.removeAttribute('class');
+                }
+                continue;
             }
             
             }
             
+            
+            // style cleanup!?
+            // class cleanup?
+            
         }
         }
+        return true; // clean children
+    },
         
         
-        st +=  '<style type="text/css">' +
-            'IMG { cursor: pointer } ' +
-        '</style>';
-
-        var cls = 'roo-htmleditor-body';
+    cleanAttr: function(node, n,v)
+    {
         
         
-        if(this.bodyCls.length){
-            cls += ' ' + this.bodyCls;
+        if (v.match(/^\./) || v.match(/^\//)) {
+            return;
+        }
+        if (v.match(/^(http|https):\/\//)
+            || v.match(/^mailto:/) 
+            || v.match(/^ftp:/)
+            || v.match(/^data:/)
+            ) {
+            return;
+        }
+        if (v.match(/^#/)) {
+            return;
+        }
+        if (v.match(/^\{/)) { // allow template editing.
+            return;
         }
         }
+//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
+        node.removeAttribute(n);
         
         
-        return '<html><head>' + st  +
-            //<style type="text/css">' +
-            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-            //'</style>' +
-            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
     },
     },
-
-    // private
-    onRender : function(ct, position)
+    cleanStyle : function(node,  n,v)
     {
     {
-        var _t = this;
-        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
-        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
-        
-        
-        this.el.dom.style.border = '0 none';
-        this.el.dom.setAttribute('tabIndex', -1);
-        this.el.addClass('x-hidden hide');
-        
-        
-        
-        if(Roo.isIE){ // fix IE 1px bogus margin
-            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        if (v.match(/expression/)) { //XSS?? should we even bother..
+            node.removeAttribute(n);
+            return;
         }
         }
-       
         
         
-        this.frameId = Roo.id();
+        var parts = v.split(/;/);
+        var clean = [];
         
         
-         
+        Roo.each(parts, function(p) {
+            p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            if (!p.length) {
+                return true;
+            }
+            var l = p.split(':').shift().replace(/\s+/g,'');
+            l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            
+            if ( this.style_black.length && (this.style_black.indexOf(l) > -1 || this.style_black.indexOf(l.toLowerCase()) > -1)) {
+                return true;
+            }
+            //Roo.log()
+            // only allow 'c whitelisted system attributes'
+            if ( this.style_white.length &&  style_white.indexOf(l) < 0 && style_white.indexOf(l.toLowerCase()) < 0 ) {
+                return true;
+            }
+            
+            
+            clean.push(p);
+            return true;
+        },this);
+        if (clean.length) { 
+            node.setAttribute(n, clean.join(';'));
+        } else {
+            node.removeAttribute(n);
+        }
         
         
-        var iframe = this.owner.wrap.createChild({
-            tag: 'iframe',
-            cls: 'form-control', // bootstrap..
-            id: this.frameId,
-            name: this.frameId,
-            frameBorder : 'no',
-            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
-        }, this.el
-        );
+    }
         
         
         
         
-        this.iframe = iframe.dom;
-
-         this.assignDocWin();
         
         
-        this.doc.designMode = 'on';
-       
-        this.doc.open();
-        this.doc.write(this.getDocMarkup());
-        this.doc.close();
+    
+});/**
+ * @class Roo.htmleditor.FilterBlack
+ * remove blacklisted elements.
+ * @constructor
+ * Run a new Blacklisted Filter
+ * @param {Object} config Configuration options
+ */
 
 
-        
-        var task = { // must defer to wait for browser to be ready
-            run : function(){
-                //console.log("run task?" + this.doc.readyState);
-                this.assignDocWin();
-                if(this.doc.body || this.doc.readyState == 'complete'){
-                    try {
-                        this.doc.designMode="on";
-                    } catch (e) {
-                        return;
-                    }
-                    Roo.TaskMgr.stop(task);
-                    this.initEditor.defer(10, this);
-                }
-            },
-            interval : 10,
-            duration: 10000,
-            scope: this
-        };
-        Roo.TaskMgr.start(task);
+Roo.htmleditor.FilterBlack = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.walk(cfg.node);
+}
 
 
-    },
+Roo.extend(Roo.htmleditor.FilterBlack, Roo.htmleditor.Filter,
+{
+    tag : true, // all elements.
+   
+    replaceTag : function(n)
+    {
+        n.parentNode.removeChild(n);
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterComment
+ * remove comments.
+ * @constructor
+* Run a new Comments Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterComment = function(cfg)
+{
+    this.walk(cfg.node);
+}
 
 
-    // private
-    onResize : function(w, h)
+Roo.extend(Roo.htmleditor.FilterComment, Roo.htmleditor.Filter,
+{
+  
+    replaceComment : function(n)
     {
     {
-         Roo.log('resize: ' +w + ',' + h );
-        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
-        if(!this.iframe){
-            return;
-        }
-        if(typeof w == 'number'){
-            
-            this.iframe.style.width = w + 'px';
-        }
-        if(typeof h == 'number'){
-            
-            this.iframe.style.height = h + 'px';
-            if(this.doc){
-                (this.doc.body || this.doc.documentElement).style.height = (h - (this.iframePad*2)) + 'px';
-            }
-        }
-        
-    },
+        n.parentNode.removeChild(n);
+    }
+});/**
+ * @class Roo.htmleditor.FilterKeepChildren
+ * remove tags but keep children
+ * @constructor
+ * Run a new Keep Children Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    /**
-     * Toggles the editor between standard and source edit mode.
-     * @param {Boolean} sourceEdit (optional) True for source edit, false for standard
-     */
-    toggleSourceEdit : function(sourceEditMode){
-        
-        this.sourceEditMode = sourceEditMode === true;
-        
-        if(this.sourceEditMode){
-            Roo.get(this.iframe).addClass(['x-hidden','hide']);     //FIXME - what's the BS styles for these
-            
-        }else{
-            Roo.get(this.iframe).removeClass(['x-hidden','hide']);
-            //this.iframe.className = '';
-            this.deferFocus();
-        }
-        //this.setSize(this.owner.wrap.getSize());
-        //this.fireEvent('editmodechange', this, this.sourceEditMode);
-    },
+Roo.htmleditor.FilterKeepChildren = function(cfg)
+{
+    Roo.apply(this, cfg);
+    if (this.tag === false) {
+        return; // dont walk.. (you can use this to use this just to do a child removal on a single tag )
+    }
+    this.walk(cfg.node);
+}
 
 
+Roo.extend(Roo.htmleditor.FilterKeepChildren, Roo.htmleditor.FilterBlack,
+{
     
   
     
   
-
-    /**
-     * Protected method that will not generally be called directly. If you need/want
-     * custom HTML cleanup, this is the method you should override.
-     * @param {String} html The HTML to be cleaned
-     * return {String} The cleaned HTML
-     */
-    cleanHtml : function(html){
-        html = String(html);
-        if(html.length > 5){
-            if(Roo.isSafari){ // strip safari nonsense
-                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
-            }
-        }
-        if(html == '&nbsp;'){
-            html = '';
-        }
-        return html;
-    },
-
-    /**
-     * HTML Editor -> Textarea
-     * Protected method that will not generally be called directly. Syncs the contents
-     * of the editor iframe with the textarea.
-     */
-    syncValue : function(){
-        if(this.initialized){
-            var bd = (this.doc.body || this.doc.documentElement);
-            //this.cleanUpPaste(); -- this is done else where and causes havoc..
-            var html = bd.innerHTML;
-            if(Roo.isSafari){
-                var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
-                var m = bs ? bs.match(/text-align:(.*?);/i) : false;
-                if(m && m[1]){
-                    html = '<div style="'+m[0]+'">' + html + '</div>';
+    replaceTag : function(node)
+    {
+        // walk children...
+        //Roo.log(node);
+        var ar = Array.from(node.childNodes);
+        //remove first..
+        for (var i = 0; i < ar.length; i++) {
+            if (ar[i].nodeType == 1) {
+                if (
+                    (typeof(this.tag) == 'object' && this.tag.indexOf(ar[i].tagName) > -1)
+                    || // array and it matches
+                    (typeof(this.tag) == 'string' && this.tag == ar[i].tagName)
+                ) {
+                    this.replaceTag(ar[i]); // child is blacklisted as well...
+                    continue;
                 }
             }
                 }
             }
-            html = this.cleanHtml(html);
-            // fix up the special chars.. normaly like back quotes in word...
-            // however we do not want to do this with chinese..
-            html = html.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, function(match) {
-                
-                var cc = match.charCodeAt();
-
-                // Get the character value, handling surrogate pairs
-                if (match.length == 2) {
-                    // It's a surrogate pair, calculate the Unicode code point
-                    var high = match.charCodeAt(0) - 0xD800;
-                    var low  = match.charCodeAt(1) - 0xDC00;
-                    cc = (high * 0x400) + low + 0x10000;
-                }  else if (
-                    (cc >= 0x4E00 && cc < 0xA000 ) ||
-                    (cc >= 0x3400 && cc < 0x4E00 ) ||
-                    (cc >= 0xf900 && cc < 0xfb00 )
-                ) {
-                        return match;
-                }  
+        }  
+        ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
          
          
-                // No, use a numeric entity. Here we brazenly (and possibly mistakenly)
-                return "&#" + cc + ";";
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+            if (this.tag !== false) {
+                this.walk(ar[i]);
                 
                 
-                
-            });
-            
-            
-             
-            if(this.owner.fireEvent('beforesync', this, html) !== false){
-                this.el.dom.value = html;
-                this.owner.fireEvent('sync', this, html);
-            }
-        }
-    },
-
-    /**
-     * Protected method that will not generally be called directly. Pushes the value of the textarea
-     * into the iframe editor.
-     */
-    pushValue : function(){
-        if(this.initialized){
-            var v = this.el.dom.value.trim();
-            
-//            if(v.length < 1){
-//                v = '&#160;';
-//            }
-            
-            if(this.owner.fireEvent('beforepush', this, v) !== false){
-                var d = (this.doc.body || this.doc.documentElement);
-                d.innerHTML = v;
-                this.cleanUpPaste();
-                this.el.dom.value = d.innerHTML;
-                this.owner.fireEvent('push', this, v);
             }
         }
             }
         }
-    },
+        node.parentNode.removeChild(node);
+        return false; // don't walk children
+        
+        
+    }
+});/**
+ * @class Roo.htmleditor.FilterParagraph
+ * paragraphs cause a nightmare for shared content - this filter is designed to be called ? at various points when editing
+ * like on 'push' to remove the <p> tags and replace them with line breaks.
+ * @constructor
+ * Run a new Paragraph Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    // private
-    deferFocus : function(){
-        this.focus.defer(10, this);
-    },
+Roo.htmleditor.FilterParagraph = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
 
 
-    // doc'ed in Field
-    focus : function(){
-        if(this.win && !this.sourceEditMode){
-            this.win.focus();
-        }else{
-            this.el.focus();
-        }
-    },
+Roo.extend(Roo.htmleditor.FilterParagraph, Roo.htmleditor.Filter,
+{
     
     
-    assignDocWin: function()
+     
+    tag : 'P',
+    
+     
+    replaceTag : function(node)
     {
     {
-        var iframe = this.iframe;
         
         
-         if(Roo.isIE){
-            this.doc = iframe.contentWindow.document;
-            this.win = iframe.contentWindow;
-        } else {
-//            if (!Roo.get(this.frameId)) {
-//                return;
-//            }
-//            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
-//            this.win = Roo.get(this.frameId).dom.contentWindow;
-            
-            if (!Roo.get(this.frameId) && !iframe.contentDocument) {
-                return;
-            }
-            
-            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
-            this.win = (iframe.contentWindow || Roo.get(this.frameId).dom.contentWindow);
+        if (node.childNodes.length == 1 &&
+            node.childNodes[0].nodeType == 3 &&
+            node.childNodes[0].textContent.trim().length < 1
+            ) {
+            // remove and replace with '<BR>';
+            node.parentNode.replaceChild(node.ownerDocument.createElement('BR'),node);
+            return false; // no need to walk..
         }
         }
-    },
-    
-    // private
-    initEditor : function(){
-        //console.log("INIT EDITOR");
-        this.assignDocWin();
-        
-        
-        
-        this.doc.designMode="on";
-        this.doc.open();
-        this.doc.write(this.getDocMarkup());
-        this.doc.close();
+        var ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+        }
+        // now what about this?
+        // <p> &nbsp; </p>
         
         
-        var dbody = (this.doc.body || this.doc.documentElement);
-        //var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
-        // this copies styles from the containing element into thsi one..
-        // not sure why we need all of this..
-        //var ss = this.el.getStyles('font-size', 'background-image', 'background-repeat');
+        // double BR.
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.removeChild(node);
         
         
-        //var ss = this.el.getStyles( 'background-image', 'background-repeat');
-        //ss['background-attachment'] = 'fixed'; // w3c
-        dbody.bgProperties = 'fixed'; // ie
-        //Roo.DomHelper.applyStyles(dbody, ss);
-        Roo.EventManager.on(this.doc, {
-            //'mousedown': this.onEditorEvent,
-            'mouseup': this.onEditorEvent,
-            'dblclick': this.onEditorEvent,
-            'click': this.onEditorEvent,
-            'keyup': this.onEditorEvent,
-            buffer:100,
-            scope: this
-        });
-        if(Roo.isGecko){
-            Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
-        }
-        if(Roo.isIE || Roo.isSafari || Roo.isOpera){
-            Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
-        }
-        this.initialized = true;
+        return false;
 
 
-        this.owner.fireEvent('initialize', this);
-        this.pushValue();
-    },
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterSpan
+ * filter span's with no attributes out..
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    // private
-    onDestroy : function(){
-        
-        
-        
-        if(this.rendered){
-            
-            //for (var i =0; i < this.toolbars.length;i++) {
-            //    // fixme - ask toolbars for heights?
-            //    this.toolbars[i].onDestroy();
-           // }
-            
-            //this.wrap.dom.innerHTML = '';
-            //this.wrap.remove();
+Roo.htmleditor.FilterSpan = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterSpan, Roo.htmleditor.FilterKeepChildren,
+{
+     
+    tag : 'SPAN',
+     
+    replaceTag : function(node)
+    {
+        if (node.attributes && node.attributes.length > 0) {
+            return true; // walk if there are any.
         }
         }
-    },
+        Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this, node);
+        return false;
+     
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterTableWidth
+  try and remove table width data - as that frequently messes up other stuff.
+ * 
+ *      was cleanTableWidths.
+ *
+ * Quite often pasting from word etc.. results in tables with column and widths.
+ * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
+ *
+ * @constructor
+ * Run a new Table Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    // private
-    onFirstFocus : function(){
+Roo.htmleditor.FilterTableWidth = function(cfg)
+{
+    // no need to apply config.
+    this.tag = ['TABLE', 'TD', 'TR', 'TH', 'THEAD', 'TBODY' ];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterTableWidth, Roo.htmleditor.Filter,
+{
+     
+     
+    
+    replaceTag: function(node) {
         
         
-        this.assignDocWin();
         
         
+      
+        if (node.hasAttribute('width')) {
+            node.removeAttribute('width');
+        }
         
         
-        this.activated = true;
          
          
-    
-        if(Roo.isGecko){ // prevent silly gecko errors
-            this.win.focus();
-            var s = this.win.getSelection();
-            if(!s.focusNode || s.focusNode.nodeType != 3){
-                var r = s.getRangeAt(0);
-                r.selectNodeContents((this.doc.body || this.doc.documentElement));
-                r.collapse(true);
-                this.deferFocus();
-            }
-            try{
-                this.execCmd('useCSS', true);
-                this.execCmd('styleWithCSS', false);
-            }catch(e){}
-        }
-        this.owner.fireEvent('activate', this);
-    },
-
-    // private
-    adjustFont: function(btn){
-        var adjust = btn.cmd == 'increasefontsize' ? 1 : -1;
-        //if(Roo.isSafari){ // safari
-        //    adjust *= 2;
-       // }
-        var v = parseInt(this.doc.queryCommandValue('FontSize')|| 3, 10);
-        if(Roo.isSafari){ // safari
-            var sm = { 10 : 1, 13: 2, 16:3, 18:4, 24: 5, 32:6, 48: 7 };
-            v =  (v < 10) ? 10 : v;
-            v =  (v > 48) ? 48 : v;
-            v = typeof(sm[v]) == 'undefined' ? 1 : sm[v];
+        if (node.hasAttribute("style")) {
+            // pretty basic...
             
             
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
         }
         
         }
         
-        
-        v = Math.max(1, v+adjust);
-        
-        this.execCmd('FontSize', v  );
-    },
+        return true; // continue doing children..
+    }
+});/**
+ * @class Roo.htmleditor.FilterWord
+ * try and clean up all the mess that Word generates.
+ * 
+ * This is the 'nice version' - see 'Heavy' that white lists a very short list of elements, and multi-filters 
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    onEditorEvent : function(e)
-    {
-        this.owner.fireEvent('editorevent', this, e);
-      //  this.updateToolbar();
-        this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
-    },
+Roo.htmleditor.FilterWord = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
 
 
-    insertTag : function(tg)
+Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter,
+{
+    tag: true,
+     
+    
+    /**
+     * Clean up MS wordisms...
+     */
+    replaceTag : function(node)
     {
     {
-        // could be a bit smarter... -> wrap the current selected tRoo..
-        if (tg.toLowerCase() == 'span' ||
-            tg.toLowerCase() == 'code' ||
-            tg.toLowerCase() == 'sup' ||
-            tg.toLowerCase() == 'sub' 
-            ) {
-            
-            range = this.createRange(this.getSelection());
-            var wrappingNode = this.doc.createElement(tg.toLowerCase());
-            wrappingNode.appendChild(range.extractContents());
-            range.insertNode(wrappingNode);
-
-            return;
-            
-            
+         
+        // no idea what this does - span with text, replaceds with just text.
+        if(
+                node.nodeName == 'SPAN' &&
+                !node.hasAttributes() &&
+                node.childNodes.length == 1 &&
+                node.firstChild.nodeName == "#text"  
+        ) {
+            var textNode = node.firstChild;
+            node.removeChild(textNode);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
+            }
+            node.parentNode.insertBefore(textNode, node);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
+            }
             
             
+            node.parentNode.removeChild(node);
+            return false; // dont do chidren - we have remove our node - so no need to do chdhilren?
         }
         }
-        this.execCmd("formatblock",   tg);
         
         
-    },
-    
-    insertText : function(txt)
-    {
+   
         
         
+        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
+            node.parentNode.removeChild(node);
+            return false; // dont do chidlren
+        }
+        //Roo.log(node.tagName);
+        // remove - but keep children..
+        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
+            //Roo.log('-- removed');
+            while (node.childNodes.length) {
+                var cn = node.childNodes[0];
+                node.removeChild(cn);
+                node.parentNode.insertBefore(cn, node);
+                // move node to parent - and clean it..
+                this.replaceTag(cn);
+            }
+            node.parentNode.removeChild(node);
+            /// no need to iterate chidlren = it's got none..
+            //this.iterateChildren(node, this.cleanWord);
+            return false; // no need to iterate children.
+        }
+        // clean styles
+        if (node.className.length) {
+            
+            var cn = node.className.split(/\W+/);
+            var cna = [];
+            Roo.each(cn, function(cls) {
+                if (cls.match(/Mso[a-zA-Z]+/)) {
+                    return;
+                }
+                cna.push(cls);
+            });
+            node.className = cna.length ? cna.join(' ') : '';
+            if (!cna.length) {
+                node.removeAttribute("class");
+            }
+        }
         
         
-        var range = this.createRange();
-        range.deleteContents();
-               //alert(Sender.getAttribute('label'));
-               
-        range.insertNode(this.doc.createTextNode(txt));
-    } ,
-    
+        if (node.hasAttribute("lang")) {
+            node.removeAttribute("lang");
+        }
+        
+        if (node.hasAttribute("style")) {
+            
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
+        }
+        return true; // do children
+        
+        
+        
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterStyleToTag
+ * part of the word stuff... - certain 'styles' should be converted to tags.
+ * eg.
+ *   font-weight: bold -> bold
+ *   ?? super / subscrit etc..
+ * 
+ * @constructor
+* Run a new style to tag filter.
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterStyleToTag = function(cfg)
+{
+    
+    this.tags = {
+        B  : [ 'fontWeight' , 'bold'],
+        I :  [ 'fontStyle' , 'italic'],
+        //pre :  [ 'font-style' , 'italic'],
+        // h1.. h6 ?? font-size?
+        SUP : [ 'verticalAlign' , 'super' ],
+        SUB : [ 'verticalAlign' , 'sub' ]
+        
+        
+    };
+    
+    Roo.apply(this, cfg);
      
      
+    
+    this.walk(cfg.node);
+    
+    
+    
+}
 
 
-    /**
-     * Executes a Midas editor command on the editor document and performs necessary focus and
-     * toolbar updates. <b>This should only be called after the editor is initialized.</b>
-     * @param {String} cmd The Midas command
-     * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
-     */
-    relayCmd : function(cmd, value){
-        this.win.focus();
-        this.execCmd(cmd, value);
-        this.owner.fireEvent('editorevent', this);
-        //this.updateToolbar();
-        this.owner.deferFocus();
-    },
 
 
-    /**
-     * Executes a Midas editor command directly on the editor document.
-     * For visual commands, you should use {@link #relayCmd} instead.
-     * <b>This should only be called after the editor is initialized.</b>
-     * @param {String} cmd The Midas command
-     * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
-     */
-    execCmd : function(cmd, value){
-        this.doc.execCommand(cmd, false, value === undefined ? null : value);
-        this.syncValue();
-    },
-   
-    /**
-     * Inserts the passed text at the current cursor position. Note: the editor must be initialized and activated
-     * to insert tRoo.
-     * @param {String} text | dom node.. 
-     */
-    insertAtCursor : function(text)
+Roo.extend(Roo.htmleditor.FilterStyleToTag, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
+    
+    tags : false,
+    
+    
+    replaceTag : function(node)
     {
         
     {
         
-        if(!this.activated){
-            return;
+        
+        if (node.getAttribute("style") === null) {
+            return true;
         }
         }
-        /*
-        if(Roo.isIE){
-            this.win.focus();
-            var r = this.doc.selection.createRange();
-            if(r){
-                r.collapse(true);
-                r.pasteHTML(text);
-                this.syncValue();
-                this.deferFocus();
-            
+        var inject = [];
+        for (var k in this.tags) {
+            if (node.style[this.tags[k][0]] == this.tags[k][1]) {
+                inject.push(k);
+                node.style.removeProperty(this.tags[k][0]);
             }
             }
-            return;
         }
         }
-        */
-        if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
-            this.win.focus();
-            
-            
-            // from jquery ui (MIT licenced)
-            var range, node;
-            var win = this.win;
-            
-            if (win.getSelection && win.getSelection().getRangeAt) {
-                range = win.getSelection().getRangeAt(0);
-                node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
-                range.insertNode(node);
-            } else if (win.document.selection && win.document.selection.createRange) {
-                // no firefox support
-                var txt = typeof(text) == 'string' ? text : text.outerHTML;
-                win.document.selection.createRange().pasteHTML(txt);
-            } else {
-                // no firefox support
-                var txt = typeof(text) == 'string' ? text : text.outerHTML;
-                this.execCmd('InsertHTML', txt);
-            } 
-            
-            this.syncValue();
-            
-            this.deferFocus();
+        if (!inject.length) {
+            return true; 
         }
         }
-    },
- // private
-    mozKeyPress : function(e){
-        if(e.ctrlKey){
-            var c = e.getCharCode(), cmd;
-          
-            if(c > 0){
-                c = String.fromCharCode(c).toLowerCase();
-                switch(c){
-                    case 'b':
-                        cmd = 'bold';
-                        break;
-                    case 'i':
-                        cmd = 'italic';
-                        break;
-                    
-                    case 'u':
-                        cmd = 'underline';
-                        break;
-                    
-                    case 'v':
-                        this.cleanUpPaste.defer(100, this);
-                        return;
-                        
-                }
-                if(cmd){
-                    this.win.focus();
-                    this.execCmd(cmd);
-                    this.deferFocus();
-                    e.preventDefault();
-                }
-                
-            }
+        var cn = Array.from(node.childNodes);
+        var nn = node;
+        Roo.each(inject, function(t) {
+            var nc = node.ownerDocument.createElement(t);
+            nn.appendChild(nc);
+            nn = nc;
+        });
+        for(var i = 0;i < cn.length;cn++) {
+            node.removeChild(cn[i]);
+            nn.appendChild(cn[i]);
         }
         }
-    },
+        return true /// iterate thru
+    }
+    
+})/**
+ * @class Roo.htmleditor.FilterLongBr
+ * BR/BR/BR - keep a maximum of 2...
+ * @constructor
+ * Run a new Long BR Filter
+ * @param {Object} config Configuration options
+ */
 
 
-    // private
-    fixKeys : function(){ // load time branching for fastest keydown performance
-        if(Roo.isIE){
-            return function(e){
-                var k = e.getKey(), r;
-                if(k == e.TAB){
-                    e.stopEvent();
-                    r = this.doc.selection.createRange();
-                    if(r){
-                        r.collapse(true);
-                        r.pasteHTML('&#160;&#160;&#160;&#160;');
-                        this.deferFocus();
-                    }
-                    return;
-                }
-                
-                if(k == e.ENTER){
-                    r = this.doc.selection.createRange();
-                    if(r){
-                        var target = r.parentElement();
-                        if(!target || target.tagName.toLowerCase() != 'li'){
-                            e.stopEvent();
-                            r.pasteHTML('<br />');
-                            r.collapse(false);
-                            r.select();
-                        }
-                    }
-                }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
-                
-                
-            };
-        }else if(Roo.isOpera){
-            return function(e){
-                var k = e.getKey();
-                if(k == e.TAB){
-                    e.stopEvent();
-                    this.win.focus();
-                    this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
-                    this.deferFocus();
-                }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
-                
-            };
-        }else if(Roo.isSafari){
-            return function(e){
-                var k = e.getKey();
-                
-                if(k == e.TAB){
-                    e.stopEvent();
-                    this.execCmd('InsertText','\t');
-                    this.deferFocus();
-                    return;
-                }
-               if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
-                
-             };
-        }
-    }(),
+Roo.htmleditor.FilterLongBr = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterLongBr, Roo.htmleditor.Filter,
+{
     
     
-    getAllAncestors: function()
+     
+    tag : 'BR',
+    
+     
+    replaceTag : function(node)
     {
     {
-        var p = this.getSelectedNode();
-        var a = [];
-        if (!p) {
-            a.push(p); // push blank onto stack..
-            p = this.getParentElement();
+        
+        var ps = node.nextSibling;
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.nextSibling;
         }
         
         }
         
+        if (!ps &&  [ 'TD', 'TH', 'LI', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(node.parentNode.tagName) > -1) { 
+            node.parentNode.removeChild(node); // remove last BR inside one fo these tags
+            return false;
+        }
         
         
-        while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) {
-            a.push(p);
-            p = p.parentNode;
+        if (!ps || ps.nodeType != 1) {
+            return false;
         }
         }
-        a.push(this.doc.body);
-        return a;
-    },
-    lastSel : false,
-    lastSelNode : false,
-    
-    
-    getSelection : function() 
-    {
-        this.assignDocWin();
-        return Roo.isIE ? this.doc.selection : this.win.getSelection();
-    },
-    
-    getSelectedNode: function() 
-    {
-        // this may only work on Gecko!!!
         
         
-        // should we cache this!!!!
+        if (!ps || ps.tagName != 'BR') {
+           
+            return false;
+        }
         
         
         
         
         
         
+        
+        
+        if (!node.previousSibling) {
+            return false;
+        }
+        var ps = node.previousSibling;
+        
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.previousSibling;
+        }
+        if (!ps || ps.nodeType != 1) {
+            return false;
+        }
+        // if header or BR before.. then it's a candidate for removal.. - as we only want '2' of these..
+        if (!ps || [ 'BR', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(ps.tagName) < 0) {
+            return false;
+        }
+        
+        node.parentNode.removeChild(node); // remove me...
+        
+        return false; // no need to do children
+
+    }
+    
+}); 
+
+/**
+ * @class Roo.htmleditor.FilterBlock
+ * removes id / data-block and contenteditable that are associated with blocks
+ * usage should be done on a cloned copy of the dom
+ * @constructor
+* Run a new Attribute Filter { node : xxxx }}
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterBlock = function(cfg)
+{
+    Roo.apply(this, cfg);
+    var qa = cfg.node.querySelectorAll;
+    this.removeAttributes('data-block');
+    this.removeAttributes('contenteditable');
+    this.removeAttributes('id');
+    
+}
+
+Roo.apply(Roo.htmleditor.FilterBlock.prototype,
+{
+    node: true, // all tags
+     
+     
+    removeAttributes : function(attr)
+    {
+        var ar = this.node.querySelectorAll('*[' + attr + ']');
+        for (var i =0;i<ar.length;i++) {
+            ar[i].removeAttribute(attr);
+        }
+    }
+        
+        
+        
+    
+});
+/**
+ * @class Roo.htmleditor.KeyEnter
+ * Handle Enter press..
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+
+
+Roo.htmleditor.KeyEnter = function(cfg) {
+    Roo.apply(this, cfg);
+    // this does not actually call walk as it's really just a abstract class
+    Roo.get(this.core.doc.body).on('keypress', this.keypress, this);
+}
+
+//Roo.htmleditor.KeyEnter.i = 0;
+
+
+Roo.htmleditor.KeyEnter.prototype = {
+    
+    core : false,
+    
+    keypress : function(e)
+    {
+        if (e.charCode != 13 && e.charCode != 10) {
+            Roo.log([e.charCode,e]);
+            return true;
+        }
+        e.preventDefault();
+        // https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome
+        var doc = this.core.doc;
+          //add a new line
+       
+    
+        var sel = this.core.getSelection();
+        var range = sel.getRangeAt(0);
+        var n = range.commonAncestorContainer;
+        var pc = range.closest([ 'ol', 'ul']);
+        var pli = range.closest('li');
+        if (!pc || e.ctrlKey) {
+            sel.insertNode('br', 'after'); 
+         
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+        
+        // deal with <li> insetion
+        if (pli.innerText.trim() == '' &&
+            pli.previousSibling &&
+            pli.previousSibling.nodeName == 'LI' &&
+            pli.previousSibling.innerText.trim() ==  '') {
+            pli.parentNode.removeChild(pli.previousSibling);
+            sel.cursorAfter(pc);
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+    
+        var li = doc.createElement('LI');
+        li.innerHTML = '&nbsp;';
+        if (!pli || !pli.firstSibling) {
+            pc.appendChild(li);
+        } else {
+            pli.parentNode.insertBefore(li, pli.firstSibling);
+        }
+        sel.cursorText (li.firstChild);
+      
+        this.core.undoManager.addEvent();
+        this.core.fireEditorEvent(e);
+
+        return false;
+        
+    
+        
+        
+         
+    }
+};
+     
+/**
+ * @class Roo.htmleditor.Block
+ * Base class for html editor blocks - do not use it directly .. extend it..
+ * @cfg {DomElement} node The node to apply stuff to.
+ * @cfg {String} friendly_name the name that appears in the context bar about this block
+ * @cfg {Object} Context menu - see Roo.form.HtmlEditor.ToolbarContext
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.Block  = function(cfg)
+{
+    // do nothing .. should not be called really.
+}
+/**
+ * factory method to get the block from an element (using cache if necessary)
+ * @static
+ * @param {HtmlElement} the dom element
+ */
+Roo.htmleditor.Block.factory = function(node)
+{
+    var cc = Roo.htmleditor.Block.cache;
+    var id = Roo.get(node).id;
+    if (typeof(cc[id]) != 'undefined' && (!cc[id].node || cc[id].node.closest('body'))) {
+        Roo.htmleditor.Block.cache[id].readElement(node);
+        return Roo.htmleditor.Block.cache[id];
+    }
+    var db  = node.getAttribute('data-block');
+    if (!db) {
+        db = node.nodeName.toLowerCase().toUpperCaseFirst();
+    }
+    var cls = Roo.htmleditor['Block' + db];
+    if (typeof(cls) == 'undefined') {
+        //Roo.log(node.getAttribute('data-block'));
+        Roo.log("OOps missing block : " + 'Block' + db);
+        return false;
+    }
+    Roo.htmleditor.Block.cache[id] = new cls({ node: node });
+    return Roo.htmleditor.Block.cache[id];  /// should trigger update element
+};
+
+/**
+ * initalize all Elements from content that are 'blockable'
+ * @static
+ * @param the body element
+ */
+Roo.htmleditor.Block.initAll = function(body, type)
+{
+    if (typeof(type) == 'undefined') {
+        var ia = Roo.htmleditor.Block.initAll;
+        ia(body,'table');
+        ia(body,'td');
+        ia(body,'figure');
+        return;
+    }
+    Roo.each(Roo.get(body).query(type), function(e) {
+        Roo.htmleditor.Block.factory(e);    
+    },this);
+};
+// question goes here... do we need to clear out this cache sometimes?
+// or show we make it relivant to the htmleditor.
+Roo.htmleditor.Block.cache = {};
+
+Roo.htmleditor.Block.prototype = {
+    
+    node : false,
+    
+     // used by context menu
+    friendly_name : 'Based Block',
+    
+    // text for button to delete this element
+    deleteTitle : false,
+    
+    context : false,
+    /**
+     * Update a node with values from this object
+     * @param {DomElement} node
+     */
+    updateElement : function(node)
+    {
+        Roo.DomHelper.update(node === undefined ? this.node : node, this.toObject());
+    },
+     /**
+     * convert to plain HTML for calling insertAtCursor..
+     */
+    toHTML : function()
+    {
+        return Roo.DomHelper.markup(this.toObject());
+    },
+    /**
+     * used by readEleemnt to extract data from a node
+     * may need improving as it's pretty basic
+     
+     * @param {DomElement} node
+     * @param {String} tag - tag to find, eg. IMG ?? might be better to use DomQuery ?
+     * @param {String} attribute (use html - for contents, or style for using next param as style)
+     * @param {String} style the style property - eg. text-align
+     */
+    getVal : function(node, tag, attr, style)
+    {
+        var n = node;
+        if (tag !== true && n.tagName != tag.toUpperCase()) {
+            // in theory we could do figure[3] << 3rd figure? or some more complex search..?
+            // but kiss for now.
+            n = node.getElementsByTagName(tag).item(0);
+        }
+        if (!n) {
+            return '';
+        }
+        if (attr == 'html') {
+            return n.innerHTML;
+        }
+        if (attr == 'style') {
+            return n.style[style]; 
+        }
+        
+        return n.hasAttribute(attr) ? n.getAttribute(attr) : '';
+            
+    },
+    /**
+     * create a DomHelper friendly object - for use with 
+     * Roo.DomHelper.markup / overwrite / etc..
+     * (override this)
+     */
+    toObject : function()
+    {
+        return {};
+    },
+      /**
+     * Read a node that has a 'data-block' property - and extract the values from it.
+     * @param {DomElement} node - the node
+     */
+    readElement : function(node)
+    {
+        
+    } 
+    
+    
+};
+
+
+/**
+ * @class Roo.htmleditor.BlockFigure
+ * Block that has an image and a figcaption
+ * @cfg {String} image_src the url for the image
+ * @cfg {String} align (left|right) alignment for the block default left
+ * @cfg {String} caption the text to appear below  (and in the alt tag)
+ * @cfg {String} caption_display (block|none) display or not the caption
+ * @cfg {String|number} image_width the width of the image number or %?
+ * @cfg {String|number} image_height the height of the image number or %?
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockFigure = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+}
+Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, {
+    
+    // setable values.
+    image_src: '',
+    align: 'center',
+    caption : '',
+    caption_display : 'block',
+    width : '100%',
+    cls : '',
+    href: '',
+    video_url : '',
+    
+    // margin: '2%', not used
+    
+    text_align: 'left', //   (left|right) alignment for the text caption default left. - not used at present
+
+    
+    // used by context menu
+    friendly_name : 'Image with caption',
+    deleteTitle : "Delete Image and Caption",
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+             {
+                xtype : 'TextItem',
+                text : "Source: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'Button',
+                text: 'Change Image URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Image Source URL",
+                            msg : "Enter the url for the image",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.image_src = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.image_src
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+         
+            {
+                xtype : 'Button',
+                text: 'Change Link URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Link URL",
+                            msg : "Enter the url for the link - leave blank to have no link",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.href = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.href
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: 'Show Video URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        Roo.MessageBox.alert("Video URL",
+                            block().video_url == '' ? 'This image is not linked ot a video' :
+                                'The image is linked to: <a target="_new" href="' + block().video_url + '">' + block().video_url + '</a>');
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['auto'],
+                        ['50%'],
+                        ['100%']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            {
+                xtype : 'TextItem',
+                text : "Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'align',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.align = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['left'],
+                        ['right'],
+                        ['center']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Hide Caption',
+                name : 'caption_display',
+                pressed : false,
+                enableToggle : true,
+                setValue : function(v) {
+                    this.toggle(v == 'block' ? false : true);
+                },
+                listeners : {
+                    toggle: function (btn, state)
+                    {
+                        var b  = block();
+                        b.caption_display = b.caption_display == 'block' ? 'none' : 'block';
+                        this.setText(b.caption_display == 'block' ? "Hide Caption" : "Show Caption");
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            }
+        ];
+        
+    },
+    /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     */
+    toObject : function()
+    {
+        var d = document.createElement('div');
+        d.innerHTML = this.caption;
+        
+        var m = this.width == '50%' && this.align == 'center' ? '0 auto' : 0; 
+        
+        var img =   {
+            tag : 'img',
+            contenteditable : 'false',
+            src : this.image_src,
+            alt : d.innerText.replace(/\n/g, " ").replace(/\s+/g, ' ').trim(), // removeHTML and reduce spaces..
+            style: {
+                width : 'auto',
+                'max-width': '100%',
+                margin : '0px' 
+                
+                
+            }
+        };
+        /*
+        '<div class="{0}" width="420" height="315" src="{1}" frameborder="0" allowfullscreen>' +
+                    '<a href="{2}">' + 
+                        '<img class="{0}-thumbnail" src="{3}/Images/{4}/{5}#image-{4}" />' + 
+                    '</a>' + 
+                '</div>',
+        */
+                
+        if (this.href.length > 0) {
+            img = {
+                tag : 'a',
+                href: this.href,
+                contenteditable : 'true',
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        
+        if (this.video_url.length > 0) {
+            img = {
+                tag : 'div',
+                cls : this.cls,
+                frameborder : 0,
+                allowfullscreen : true,
+                width : 420,  // these are for video tricks - that we replace the outer
+                height : 315,
+                src : this.video_url,
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        var captionhtml = this.caption_display == 'hidden' ? this.caption : (this.caption.length ? this.caption : "Caption");
+        
+        return  {
+            tag: 'figure',
+            'data-block' : 'Figure',
+            contenteditable : 'false',
+            style : {
+                display: 'block',
+                float :  this.align ,
+                'max-width':  this.width,
+                width : 'auto',
+                margin:  m,
+                padding: '10px'
+                
+            },
+           
+            
+            align : this.align,
+            cn : [
+                img,
+              
+                {
+                    tag: 'figcaption',
+                    
+                    style : {
+                        'text-align': 'left',
+                        'margin-top' : '16px',
+                        'font-size' : '16px',
+                        'line-height' : '24px',
+                         display : this.caption_display
+                    },
+                    cls : this.cls.length > 0 ? (this.cls  + '-thumbnail' ) : '',
+                    cn : [
+                        {
+                            // we can not rely on yahoo syndication to use CSS elements - so have to use  '<i>' to encase stuff.
+                            tag : 'i',
+                            contenteditable : true,
+                            html : captionhtml
+                        }
+                    ]
+                    
+                }
+            ]
+        };
+         
+    },
+    
+    readElement : function(node)
+    {
+        // this should not really come from the link...
+        this.video_url = this.getVal(node, 'div', 'src');
+        this.cls = this.getVal(node, 'div', 'class');
+        this.href = this.getVal(node, 'a', 'href');
+        
+        this.image_src = this.getVal(node, 'img', 'src');
+         
+        this.align = this.getVal(node, 'figure', 'align');
+        this.caption = this.getVal(node, 'figcaption', 'html');
+        // remove '<i>
+        if (this.caption.trim().match(/^<i[^>]*>/i)) {
+            this.caption = this.caption.trim().replace(/^<i[^>]*>/i, '').replace(/^<\/i>$/i, '');
+        }
+        //this.text_align = this.getVal(node, 'figcaption', 'style','text-align');
+        this.width = this.getVal(node, 'figure', 'style', 'max-width');
+        //this.margin = this.getVal(node, 'figure', 'style', 'margin');
+        
+    },
+    removeNode : function()
+    {
+        return this.node;
+    }
+    
+  
+   
+     
+    
+    
+    
+    
+})
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTable = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+    if (!cfg.node) {
+        this.rows = [];
+        for(var r = 0; r < this.no_row; r++) {
+            this.rows[r] = [];
+            for(var c = 0; c < this.no_col; c++) {
+                this.rows[r][c] = this.emptyCell();
+            }
+        }
+    }
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTable, Roo.htmleditor.Block, {
+    rows : false,
+    no_col : 1,
+    no_row : 1,
+    
+    
+    width: '100%',
+    
+    // used by context menu
+    friendly_name : 'Table',
+    deleteTitle : 'Delete Table',
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['100%'],
+                        ['auto']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            // -------- Cols
+            
+            {
+                xtype : 'TextItem',
+                text : "Columns: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().addColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'TextItem',
+                text : "Rows: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        block().addRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'Button',
+                text: 'Reset Column Widths',
+                listeners : {
+                    
+                    click : function (_self, e)
+                    {
+                        block().resetWidths();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            } 
+            
+            
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'table',
+            contenteditable : 'false', // this stops cell selection from picking the table.
+            'data-block' : 'Table',
+            style : {
+                width:  this.width,
+                border : 'solid 1px #000', // ??? hard coded?
+                'border-collapse' : 'collapse' 
+            },
+            cn : [
+                { tag : 'tbody' , cn : [] }
+            ]
+        };
+        
+        // do we have a head = not really 
+        var ncols = 0;
+        Roo.each(this.rows, function( row ) {
+            var tr = {
+                tag: 'tr',
+                style : {
+                    margin: '6px',
+                    border : 'solid 1px #000',
+                    textAlign : 'left' 
+                },
+                cn : [ ]
+            };
+            
+            ret.cn[0].cn.push(tr);
+            // does the row have any properties? ?? height?
+            var nc = 0;
+            Roo.each(row, function( cell ) {
+                
+                var td = {
+                    tag : 'td',
+                    contenteditable :  'true',
+                    'data-block' : 'Td',
+                    html : cell.html,
+                    style : cell.style
+                };
+                if (cell.colspan > 1) {
+                    td.colspan = cell.colspan ;
+                    nc += cell.colspan;
+                } else {
+                    nc++;
+                }
+                if (cell.rowspan > 1) {
+                    td.rowspan = cell.rowspan ;
+                }
+                
+                
+                // widths ?
+                tr.cn.push(td);
+                    
+                
+            }, this);
+            ncols = Math.max(nc, ncols);
+            
+            
+        }, this);
+        // add the header row..
+        
+        ncols++;
+         
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = this.getVal(node, true, 'style', 'width') || '100%';
+        
+        this.rows = [];
+        this.no_row = 0;
+        var trs = Array.from(node.rows);
+        trs.forEach(function(tr) {
+            var row =  [];
+            this.rows.push(row);
+            
+            this.no_row++;
+            var no_column = 0;
+            Array.from(tr.cells).forEach(function(td) {
+                
+                var add = {
+                    colspan : td.hasAttribute('colspan') ? td.getAttribute('colspan')*1 : 1,
+                    rowspan : td.hasAttribute('rowspan') ? td.getAttribute('rowspan')*1 : 1,
+                    style : td.hasAttribute('style') ? td.getAttribute('style') : '',
+                    html : td.innerHTML
+                };
+                no_column += add.colspan;
+                     
+                
+                row.push(add);
+                
+                
+            },this);
+            this.no_col = Math.max(this.no_col, no_column);
+            
+            
+        },this);
+        
+        
+    },
+    normalizeRows: function()
+    {
+        var ret= [];
+        var rid = -1;
+        this.rows.forEach(function(row) {
+            rid++;
+            ret[rid] = [];
+            row = this.normalizeRow(row);
+            var cid = 0;
+            row.forEach(function(c) {
+                while (typeof(ret[rid][cid]) != 'undefined') {
+                    cid++;
+                }
+                if (typeof(ret[rid]) == 'undefined') {
+                    ret[rid] = [];
+                }
+                ret[rid][cid] = c;
+                c.row = rid;
+                c.col = cid;
+                if (c.rowspan < 2) {
+                    return;
+                }
+                
+                for(var i = 1 ;i < c.rowspan; i++) {
+                    if (typeof(ret[rid+i]) == 'undefined') {
+                        ret[rid+i] = [];
+                    }
+                    ret[rid+i][cid] = c;
+                }
+            });
+        }, this);
+        return ret;
+    
+    },
+    
+    normalizeRow: function(row)
+    {
+        var ret= [];
+        row.forEach(function(c) {
+            if (c.colspan < 2) {
+                ret.push(c);
+                return;
+            }
+            for(var i =0 ;i < c.colspan; i++) {
+                ret.push(c);
+            }
+        });
+        return ret;
+    
+    },
+    
+    deleteColumn : function(sel)
+    {
+        if (!sel || sel.type != 'col') {
+            return;
+        }
+        if (this.no_col < 2) {
+            return;
+        }
+        
+        this.rows.forEach(function(row) {
+            var cols = this.normalizeRow(row);
+            var col = cols[sel.col];
+            if (col.colspan > 1) {
+                col.colspan --;
+            } else {
+                row.remove(col);
+            }
+            
+        }, this);
+        this.no_col--;
+        
+    },
+    removeColumn : function()
+    {
+        this.deleteColumn({
+            type: 'col',
+            col : this.no_col-1
+        });
+        this.updateElement();
+    },
+    
+     
+    addColumn : function()
+    {
+        
+        this.rows.forEach(function(row) {
+            row.push(this.emptyCell());
+           
+        }, this);
+        this.updateElement();
+    },
+    
+    deleteRow : function(sel)
+    {
+        if (!sel || sel.type != 'row') {
+            return;
+        }
+        
+        if (this.no_row < 2) {
+            return;
+        }
+        
+        var rows = this.normalizeRows();
+        
+        
+        rows[sel.row].forEach(function(col) {
+            if (col.rowspan > 1) {
+                col.rowspan--;
+            } else {
+                col.remove = 1; // flage it as removed.
+            }
+            
+        }, this);
+        var newrows = [];
+        this.rows.forEach(function(row) {
+            newrow = [];
+            row.forEach(function(c) {
+                if (typeof(c.remove) == 'undefined') {
+                    newrow.push(c);
+                }
+                
+            });
+            if (newrow.length > 0) {
+                newrows.push(row);
+            }
+        });
+        this.rows =  newrows;
+        
+        
+        
+        this.no_row--;
+        this.updateElement();
+        
+    },
+    removeRow : function()
+    {
+        this.deleteRow({
+            type: 'row',
+            row : this.no_row-1
+        });
+        
+    },
+    
+     
+    addRow : function()
+    {
+        
+        var row = [];
+        for (var i = 0; i < this.no_col; i++ ) {
+            
+            row.push(this.emptyCell());
+           
+        }
+        this.rows.push(row);
+        this.updateElement();
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return (new Roo.htmleditor.BlockTd({})).toObject();
+        
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node;
+    },
+    
+    
+    
+    resetWidths : function()
+    {
+        Array.from(this.node.getElementsByTagName('td')).forEach(function(n) {
+            var nn = Roo.htmleditor.Block.factory(n);
+            nn.width = '';
+            nn.updateElement(n);
+        });
+    }
+    
+    
+    
+    
+})
+
+/**
+ *
+ * editing a TD?
+ *
+ * since selections really work on the table cell, then editing really should work from there
+ *
+ * The original plan was to support merging etc... - but that may not be needed yet..
+ *
+ * So this simple version will support:
+ *   add/remove cols
+ *   adjust the width +/-
+ *   reset the width...
+ *   
+ *
+ */
+
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTd = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+     
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTd, Roo.htmleditor.Block, {
+    node : false,
+    
+    width: '',
+    textAlign : 'left',
+    valign : 'top',
+    
+    colspan : 1,
+    rowspan : 1,
+    
+    
+    // used by context menu
+    friendly_name : 'Table Cell',
+    deleteTitle : false, // use our customer delete
+    
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var cell = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        var table = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode.closest('table'));
+        };
+        
+        var lr = false;
+        var saveSel = function()
+        {
+            lr = toolbar.editorcore.getSelection().getRangeAt(0);
+        }
+        var restoreSel = function()
+        {
+            if (lr) {
+                (function() {
+                    toolbar.editorcore.focus();
+                    var cr = toolbar.editorcore.getSelection();
+                    cr.removeAllRanges();
+                    cr.addRange(lr);
+                    toolbar.editorcore.onEditorEvent();
+                }).defer(10, this);
+                
+                
+            }
+        }
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'Button',
+                text : 'Edit Table',
+                listeners : {
+                    click : function() {
+                        var t = toolbar.tb.selectedNode.closest('table');
+                        toolbar.editorcore.selectNode(t);
+                        toolbar.editorcore.onEditorEvent();                        
+                    }
+                }
+                
+            },
+              
+           
+             
+            {
+                xtype : 'TextItem',
+                text : "Column Width: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().shrinkColumn();
+                        syncValue();
+                         toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Vertical Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'valign',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = cell();
+                        b.valign = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['top'],
+                        ['middle'],
+                        ['bottom'] // there are afew more... 
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Merge Cells: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Right',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeRight();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+             
+            {
+                xtype : 'Button',
+                text: 'Below',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeBelow();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'TextItem',
+                text : "| ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            {
+                xtype : 'Button',
+                text: 'Split',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        //toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().split();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                                             
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Fill',
+                xns : rooui.Toolbar 
+               
+            },
+        
+          
+            {
+                xtype : 'Button',
+                text: 'Delete',
+                 
+                xns : rooui.Toolbar,
+                menu : {
+                    xtype : 'Menu',
+                    xns : rooui.menu,
+                    items : [
+                        {
+                            xtype : 'Item',
+                            html: 'Column',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    
+                                    cell().deleteColumn();
+                                    syncValue();
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Row',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    cell().deleteRow();
+                                    syncValue();
+                                    
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                       {
+                            xtype : 'Separator',
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Table',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    var nn = t.node.nextSibling || t.node.previousSibling;
+                                    t.node.parentNode.removeChild(t.node);
+                                    if (nn) { 
+                                        toolbar.editorcore.selectNode(nn, true);
+                                    }
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        }
+                    ]
+                }
+            }
+            
+            // align... << fixme
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+ /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'td',
+            contenteditable : 'true', // this stops cell selection from picking the table.
+            'data-block' : 'Td',
+            valign : this.valign,
+            style : {  
+                'text-align' :  this.textAlign,
+                border : 'solid 1px rgb(0, 0, 0)', // ??? hard coded?
+                'border-collapse' : 'collapse',
+                padding : '6px', // 8 for desktop / 4 for mobile
+                'vertical-align': this.valign
+            },
+            html : this.html
+        };
+        if (this.width != '') {
+            ret.width = this.width;
+            ret.style.width = this.width;
+        }
+        
+        
+        if (this.colspan > 1) {
+            ret.colspan = this.colspan ;
+        } 
+        if (this.rowspan > 1) {
+            ret.rowspan = this.rowspan ;
+        }
+        
+           
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = node.style.width;
+        this.colspan = Math.max(1,1*node.getAttribute('colspan'));
+        this.rowspan = Math.max(1,1*node.getAttribute('rowspan'));
+        this.html = node.innerHTML;
+        
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return {
+            colspan :  1,
+            rowspan :  1,
+            textAlign : 'left',
+            html : "&nbsp;" // is this going to be editable now?
+        };
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node.closest('table');
+         
+    },
+    
+    cellData : false,
+    
+    colWidths : false,
+    
+    toTableArray  : function()
+    {
+        var ret = [];
+        var tab = this.node.closest('tr').closest('table');
+        Array.from(tab.rows).forEach(function(r, ri){
+            ret[ri] = [];
+        });
+        var rn = 0;
+        this.colWidths = [];
+        var all_auto = true;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            var cn = 0;
+            Array.from(r.cells).forEach(function(ce, ci){
+                var c =  {
+                    cell : ce,
+                    row : rn,
+                    col: cn,
+                    colspan : ce.colSpan,
+                    rowspan : ce.rowSpan
+                };
+                if (ce.isEqualNode(this.node)) {
+                    this.cellData = c;
+                }
+                // if we have been filled up by a row?
+                if (typeof(ret[rn][cn]) != 'undefined') {
+                    while(typeof(ret[rn][cn]) != 'undefined') {
+                        cn++;
+                    }
+                    c.col = cn;
+                }
+                
+                if (typeof(this.colWidths[cn]) == 'undefined') {
+                    this.colWidths[cn] =   ce.style.width;
+                    if (this.colWidths[cn] != '') {
+                        all_auto = false;
+                    }
+                }
+                
+                
+                if (c.colspan < 2 && c.rowspan < 2 ) {
+                    ret[rn][cn] = c;
+                    cn++;
+                    return;
+                }
+                for(var j = 0; j < c.rowspan; j++) {
+                    if (typeof(ret[rn+j]) == 'undefined') {
+                        continue; // we have a problem..
+                    }
+                    ret[rn+j][cn] = c;
+                    for(var i = 0; i < c.colspan; i++) {
+                        ret[rn+j][cn+i] = c;
+                    }
+                }
+                
+                cn += c.colspan;
+            }, this);
+            rn++;
+        }, this);
+        
+        // initalize widths.?
+        // either all widths or no widths..
+        if (all_auto) {
+            this.colWidths[0] = false; // no widths flag.
+        }
+        
+        
+        return ret;
+        
+    },
+    
+    
+    
+    
+    mergeRight: function()
+    {
+         
+        // get the contents of the next cell along..
+        var tr = this.node.closest('tr');
+        var i = Array.prototype.indexOf.call(tr.childNodes, this.node);
+        if (i >= tr.childNodes.length - 1) {
+            return; // no cells on right to merge with.
+        }
+        var table = this.toTableArray();
+        
+        if (typeof(table[this.cellData.row][this.cellData.col+this.cellData.colspan]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row][this.cellData.col+this.cellData.colspan];
+        // right cell - must be same rowspan and on the same row.
+        if (rc.rowspan != this.cellData.rowspan || rc.row != this.cellData.row) {
+            return; // right hand side is not same rowspan.
+        }
+        
+        
+        
+        this.node.innerHTML += ' ' + rc.cell.innerHTML;
+        tr.removeChild(rc.cell);
+        this.colspan += rc.colspan;
+        this.node.setAttribute('colspan', this.colspan);
+
+    },
+    
+    
+    mergeBelow : function()
+    {
+        var table = this.toTableArray();
+        if (typeof(table[this.cellData.row+this.cellData.rowspan]) == 'undefined') {
+            return; // no row below
+        }
+        if (typeof(table[this.cellData.row+this.cellData.rowspan][this.cellData.col]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row+this.cellData.rowspan][this.cellData.col];
+        
+        if (rc.colspan != this.cellData.colspan || rc.col != this.cellData.col) {
+            return; // right hand side is not same rowspan.
+        }
+        this.node.innerHTML =  this.node.innerHTML + rc.cell.innerHTML ;
+        rc.cell.parentNode.removeChild(rc.cell);
+        this.rowspan += rc.rowspan;
+        this.node.setAttribute('rowspan', this.rowspan);
+    },
+    
+    split: function()
+    {
+        if (this.node.rowSpan < 2 && this.node.colSpan < 2) {
+            return;
+        }
+        var table = this.toTableArray();
+        var cd = this.cellData;
+        this.rowspan = 1;
+        this.colspan = 1;
+        
+        for(var r = cd.row; r < cd.row + cd.rowspan; r++) {
+            
+            
+            
+            for(var c = cd.col; c < cd.col + cd.colspan; c++) {
+                if (r == cd.row && c == cd.col) {
+                    this.node.removeAttribute('rowspan');
+                    this.node.removeAttribute('colspan');
+                    continue;
+                }
+                 
+                var ntd = this.node.cloneNode(); // which col/row should be 0..
+                ntd.removeAttribute('id'); //
+                //ntd.style.width  = '';
+                ntd.innerHTML = '';
+                table[r][c] = { cell : ntd, col : c, row: r , colspan : 1 , rowspan : 1   };
+            }
+            
+        }
+        this.redrawAllCells(table);
+        
+         
+        
+    },
+    
+    
+    
+    redrawAllCells: function(table)
+    {
+        
+         
+        var tab = this.node.closest('tr').closest('table');
+        var ctr = tab.rows[0].parentNode;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            Array.from(r.cells).forEach(function(ce, ci){
+                ce.parentNode.removeChild(ce);
+            });
+            r.parentNode.removeChild(r);
+        });
+        for(var r = 0 ; r < table.length; r++) {
+            var re = tab.rows[r];
+            
+            var re = tab.ownerDocument.createElement('tr');
+            ctr.appendChild(re);
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                re.appendChild(table[r][c].cell);
+                 
+                table[r][c].cell = false;
+            }
+        }
+        
+    },
+    updateWidths : function(table)
+    {
+        for(var r = 0 ; r < table.length; r++) {
+           
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                if (this.colWidths[0] != false && table[r][c].colspan < 2) {
+                    var el = Roo.htmleditor.Block.factory(table[r][c].cell);
+                    el.width = Math.floor(this.colWidths[c])  +'%';
+                    el.updateElement(el.node);
+                }
+                table[r][c].cell = false; // done
+            }
+        }
+    },
+    normalizeWidths : function(table)
+    {
+    
+        if (this.colWidths[0] === false) {
+            var nw = 100.0 / this.colWidths.length;
+            this.colWidths.forEach(function(w,i) {
+                this.colWidths[i] = nw;
+            },this);
+            return;
+        }
+    
+        var t = 0, missing = [];
+        
+        this.colWidths.forEach(function(w,i) {
+            //if you mix % and
+            this.colWidths[i] = this.colWidths[i] == '' ? 0 : (this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+            var add =  this.colWidths[i];
+            if (add > 0) {
+                t+=add;
+                return;
+            }
+            missing.push(i);
+            
+            
+        },this);
+        var nc = this.colWidths.length;
+        if (missing.length) {
+            var mult = (nc - missing.length) / (1.0 * nc);
+            var t = mult * t;
+            var ew = (100 -t) / (1.0 * missing.length);
+            this.colWidths.forEach(function(w,i) {
+                if (w > 0) {
+                    this.colWidths[i] = w * mult;
+                    return;
+                }
+                
+                this.colWidths[i] = ew;
+            }, this);
+            // have to make up numbers..
+             
+        }
+        // now we should have all the widths..
+        
+    
+    },
+    
+    shrinkColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 0.8;
+        if (nw < 5) {
+            return;
+        }
+        var otherAdd = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                 this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] += otherAdd
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    growColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 1.2;
+        if (nw > 90) {
+            return;
+        }
+        var otherSub = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] -= otherSub
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    deleteRow : function()
+    {
+        // delete this rows 'tr'
+        // if any of the cells in this row have a rowspan > 1 && row!= this row..
+        // then reduce the rowspan.
+        var table = this.toTableArray();
+        // this.cellData.row;
+        for (var i =0;i< table[this.cellData.row].length ; i++) {
+            var c = table[this.cellData.row][i];
+            if (c.row != this.cellData.row) {
+                
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+                continue;
+            }
+            if (c.rowspan > 1) {
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+            }
+        }
+        table.splice(this.cellData.row,1);
+        this.redrawAllCells(table);
+        
+    },
+    deleteColumn : function()
+    {
+        var table = this.toTableArray();
+        
+        for (var i =0;i< table.length ; i++) {
+            var c = table[i][this.cellData.col];
+            if (c.col != this.cellData.col) {
+                table[i][this.cellData.col].colspan--;
+            } else if (c.colspan > 1) {
+                c.colspan--;
+                c.cell.setAttribute('colspan', c.colspan);
+            }
+            table[i].splice(this.cellData.col,1);
+        }
+        
+        this.redrawAllCells(table);
+    }
+    
+    
+    
+    
+})
+
+//<script type="text/javascript">
+
+/*
+ * Based  Ext JS Library 1.1.1
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * LGPL
+ *
+ */
+/**
+ * @class Roo.HtmlEditorCore
+ * @extends Roo.Component
+ * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
+ *
+ * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
+ */
+
+Roo.HtmlEditorCore = function(config){
+    
+    
+    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
+    
+    
+    this.addEvents({
+        /**
+         * @event initialize
+         * Fires when the editor is fully initialized (including the iframe)
+         * @param {Roo.HtmlEditorCore} this
+         */
+        initialize: true,
+        /**
+         * @event activate
+         * Fires when the editor is first receives the focus. Any insertion must wait
+         * until after this event.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        activate: true,
+         /**
+         * @event beforesync
+         * Fires before the textarea is updated with content from the editor iframe. Return false
+         * to cancel the sync.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforesync: true,
+         /**
+         * @event beforepush
+         * Fires before the iframe editor is updated with content from the textarea. Return false
+         * to cancel the push.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforepush: true,
+         /**
+         * @event sync
+         * Fires when the textarea is updated with content from the editor iframe.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        sync: true,
+         /**
+         * @event push
+         * Fires when the iframe editor is updated with content from the textarea.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        push: true,
+        
+        /**
+         * @event editorevent
+         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        editorevent: true 
+         
+        
+    });
+    
+    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
+    
+    // defaults : white / black...
+    this.applyBlacklists();
+    
+    
+    
+};
+
+
+Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
+
+
+     /**
+     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
+     */
+    
+    owner : false,
+    
+     /**
+     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
+     *                        Roo.resizable.
+     */
+    resizable : false,
+     /**
+     * @cfg {Number} height (in pixels)
+     */   
+    height: 300,
+   /**
+     * @cfg {Number} width (in pixels)
+     */   
+    width: 500,
+     /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
+    /**
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * 
+     */
+    stylesheets: false,
+     /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
+    
+    /**
+     * @cfg {boolean} allowComments - default false - allow comments in HTML source
+     *          - by default they are stripped - if you are editing email you may need this.
+     */
+    allowComments: false,
+    // id of frame..
+    frameId: false,
+    
+    // private properties
+    validationEvent : false,
+    deferHeight: true,
+    initialized : false,
+    activated : false,
+    sourceEditMode : false,
+    onFocus : Roo.emptyFn,
+    iframePad:3,
+    hideMode:'offsets',
+    
+    clearUp: true,
+    
+    // blacklist + whitelisted elements..
+    black: false,
+    white: false,
+     
+    bodyCls : '',
+
+    
+    undoManager : false,
+    /**
+     * Protected method that will not generally be called directly. It
+     * is called when the editor initializes the iframe with HTML contents. Override this method if you
+     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
+     */
+    getDocMarkup : function(){
+        // body styles..
+        var st = '';
+        
+        // inherit styels from page...?? 
+        if (this.stylesheets === false) {
+            
+            Roo.get(document.head).select('style').each(function(node) {
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+            Roo.get(document.head).select('link').each(function(node) { 
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+        } else if (!this.stylesheets.length) {
+                // simple..
+                st = '<style type="text/css">' +
+                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+                   '</style>';
+        } else {
+            for (var i in this.stylesheets) {
+                if (typeof(this.stylesheets[i]) != 'string') {
+                    continue;
+                }
+                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
+            }
+            
+        }
+        
+        st +=  '<style type="text/css">' +
+            'IMG { cursor: pointer } ' +
+        '</style>';
+        
+        st += '<meta name="google" content="notranslate">';
+        
+        var cls = 'notranslate roo-htmleditor-body';
+        
+        if(this.bodyCls.length){
+            cls += ' ' + this.bodyCls;
+        }
+        
+        return '<html  class="notranslate" translate="no"><head>' + st  +
+            //<style type="text/css">' +
+            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+            //'</style>' +
+            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
+    },
+
+    // private
+    onRender : function(ct, position)
+    {
+        var _t = this;
+        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
+        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
+        
+        
+        this.el.dom.style.border = '0 none';
+        this.el.dom.setAttribute('tabIndex', -1);
+        this.el.addClass('x-hidden hide');
+        
+        
+        
+        if(Roo.isIE){ // fix IE 1px bogus margin
+            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        }
+       
+        
+        this.frameId = Roo.id();
+        
          
          
-        var range = this.createRange(this.getSelection()).cloneRange();
         
         
-        if (Roo.isIE) {
-            var parent = range.parentElement();
-            while (true) {
-                var testRange = range.duplicate();
-                testRange.moveToElementText(parent);
-                if (testRange.inRange(range)) {
-                    break;
+        var iframe = this.owner.wrap.createChild({
+            tag: 'iframe',
+            cls: 'form-control', // bootstrap..
+            id: this.frameId,
+            name: this.frameId,
+            frameBorder : 'no',
+            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
+        }, this.el
+        );
+        
+        
+        this.iframe = iframe.dom;
+
+        this.assignDocWin();
+        
+        this.doc.designMode = 'on';
+       
+        this.doc.open();
+        this.doc.write(this.getDocMarkup());
+        this.doc.close();
+
+        
+        var task = { // must defer to wait for browser to be ready
+            run : function(){
+                //console.log("run task?" + this.doc.readyState);
+                this.assignDocWin();
+                if(this.doc.body || this.doc.readyState == 'complete'){
+                    try {
+                        this.doc.designMode="on";
+                        
+                    } catch (e) {
+                        return;
+                    }
+                    Roo.TaskMgr.stop(task);
+                    this.initEditor.defer(10, this);
                 }
                 }
-                if ((parent.nodeType != 1) || (parent.tagName.toLowerCase() == 'body')) {
-                    break;
+            },
+            interval : 10,
+            duration: 10000,
+            scope: this
+        };
+        Roo.TaskMgr.start(task);
+
+    },
+
+    // private
+    onResize : function(w, h)
+    {
+         Roo.log('resize: ' +w + ',' + h );
+        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
+        if(!this.iframe){
+            return;
+        }
+        if(typeof w == 'number'){
+            
+            this.iframe.style.width = w + 'px';
+        }
+        if(typeof h == 'number'){
+            
+            this.iframe.style.height = h + 'px';
+            if(this.doc){
+                (this.doc.body || this.doc.documentElement).style.height = (h - (this.iframePad*2)) + 'px';
+            }
+        }
+        
+    },
+
+    /**
+     * Toggles the editor between standard and source edit mode.
+     * @param {Boolean} sourceEdit (optional) True for source edit, false for standard
+     */
+    toggleSourceEdit : function(sourceEditMode){
+        
+        this.sourceEditMode = sourceEditMode === true;
+        
+        if(this.sourceEditMode){
+            Roo.get(this.iframe).addClass(['x-hidden','hide', 'd-none']);     //FIXME - what's the BS styles for these
+            
+        }else{
+            Roo.get(this.iframe).removeClass(['x-hidden','hide', 'd-none']);
+            //this.iframe.className = '';
+            this.deferFocus();
+        }
+        //this.setSize(this.owner.wrap.getSize());
+        //this.fireEvent('editmodechange', this, this.sourceEditMode);
+    },
+
+    
+  
+
+    /**
+     * Protected method that will not generally be called directly. If you need/want
+     * custom HTML cleanup, this is the method you should override.
+     * @param {String} html The HTML to be cleaned
+     * return {String} The cleaned HTML
+     */
+    cleanHtml : function(html)
+    {
+        html = String(html);
+        if(html.length > 5){
+            if(Roo.isSafari){ // strip safari nonsense
+                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
+            }
+        }
+        if(html == '&nbsp;'){
+            html = '';
+        }
+        return html;
+    },
+
+    /**
+     * HTML Editor -> Textarea
+     * Protected method that will not generally be called directly. Syncs the contents
+     * of the editor iframe with the textarea.
+     */
+    syncValue : function()
+    {
+        //Roo.log("HtmlEditorCore:syncValue (EDITOR->TEXT)");
+        if(this.initialized){
+            
+            this.undoManager.addEvent();
+
+            
+            var bd = (this.doc.body || this.doc.documentElement);
+           
+            
+            var sel = this.win.getSelection();
+            
+            var div = document.createElement('div');
+            div.innerHTML = bd.innerHTML;
+            var gtx = div.getElementsByClassName('gtx-trans-icon'); // google translate - really annoying and difficult to get rid of.
+            if (gtx.length > 0) {
+                var rm = gtx.item(0).parentNode;
+                rm.parentNode.removeChild(rm);
+            }
+            
+           
+            if (this.enableBlocks) {
+                new Roo.htmleditor.FilterBlock({ node : div });
+            }
+            //?? tidy?
+            var tidy = new Roo.htmleditor.TidySerializer({
+                inner:  true
+            });
+            var html  = tidy.serialize(div);
+            
+            
+            if(Roo.isSafari){
+                var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
+                var m = bs ? bs.match(/text-align:(.*?);/i) : false;
+                if(m && m[1]){
+                    html = '<div style="'+m[0]+'">' + html + '</div>';
                 }
                 }
-                parent = parent.parentElement;
             }
             }
-            return parent;
-        }
-        
-        // is ancestor a text element.
-        var ac =  range.commonAncestorContainer;
-        if (ac.nodeType == 3) {
-            ac = ac.parentNode;
-        }
-        
-        var ar = ac.childNodes;
+            html = this.cleanHtml(html);
+            // fix up the special chars.. normaly like back quotes in word...
+            // however we do not want to do this with chinese..
+            html = html.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, function(match) {
+                
+                var cc = match.charCodeAt();
+
+                // Get the character value, handling surrogate pairs
+                if (match.length == 2) {
+                    // It's a surrogate pair, calculate the Unicode code point
+                    var high = match.charCodeAt(0) - 0xD800;
+                    var low  = match.charCodeAt(1) - 0xDC00;
+                    cc = (high * 0x400) + low + 0x10000;
+                }  else if (
+                    (cc >= 0x4E00 && cc < 0xA000 ) ||
+                    (cc >= 0x3400 && cc < 0x4E00 ) ||
+                    (cc >= 0xf900 && cc < 0xfb00 )
+                ) {
+                        return match;
+                }  
          
          
-        var nodes = [];
-        var other_nodes = [];
-        var has_other_nodes = false;
-        for (var i=0;i<ar.length;i++) {
-            if ((ar[i].nodeType == 3) && (!ar[i].data.length)) { // empty text ? 
-                continue;
-            }
-            // fullly contained node.
+                // No, use a numeric entity. Here we brazenly (and possibly mistakenly)
+                return "&#" + cc + ";";
+                
+                
+            });
             
             
-            if (this.rangeIntersectsNode(range,ar[i]) && this.rangeCompareNode(range,ar[i]) == 3) {
-                nodes.push(ar[i]);
-                continue;
+            
+             
+            if(this.owner.fireEvent('beforesync', this, html) !== false){
+                this.el.dom.value = html;
+                this.owner.fireEvent('sync', this, html);
             }
             }
+        }
+    },
+
+    /**
+     * TEXTAREA -> EDITABLE
+     * Protected method that will not generally be called directly. Pushes the value of the textarea
+     * into the iframe editor.
+     */
+    pushValue : function()
+    {
+        //Roo.log("HtmlEditorCore:pushValue (TEXT->EDITOR)");
+        if(this.initialized){
+            var v = this.el.dom.value.trim();
             
             
-            // probably selected..
-            if ((ar[i].nodeType == 1) && this.rangeIntersectsNode(range,ar[i]) && (this.rangeCompareNode(range,ar[i]) > 0)) {
-                other_nodes.push(ar[i]);
-                continue;
+            
+            if(this.owner.fireEvent('beforepush', this, v) !== false){
+                var d = (this.doc.body || this.doc.documentElement);
+                d.innerHTML = v;
+                 
+                this.el.dom.value = d.innerHTML;
+                this.owner.fireEvent('push', this, v);
             }
             }
-            // outer..
-            if (!this.rangeIntersectsNode(range,ar[i])|| (this.rangeCompareNode(range,ar[i]) == 0))  {
-                continue;
+            if (this.autoClean) {
+                new Roo.htmleditor.FilterParagraph({node : this.doc.body}); // paragraphs
+                new Roo.htmleditor.FilterSpan({node : this.doc.body}); // empty spans
+            }
+            if (this.enableBlocks) {
+                Roo.htmleditor.Block.initAll(this.doc.body);
+            }
+            
+            this.updateLanguage();
+            
+            var lc = this.doc.body.lastChild;
+            if (lc && lc.nodeType == 1 && lc.getAttribute("contenteditable") == "false") {
+                // add an extra line at the end.
+                this.doc.body.appendChild(this.doc.createElement('br'));
             }
             
             
             }
             
             
-            has_other_nodes = true;
-        }
-        if (!nodes.length && other_nodes.length) {
-            nodes= other_nodes;
-        }
-        if (has_other_nodes || !nodes.length || (nodes.length > 1)) {
-            return false;
         }
         }
-        
-        return nodes[0];
     },
     },
-    createRange: function(sel)
-    {
-        // this has strange effects when using with 
-        // top toolbar - not sure if it's a great idea.
-        //this.editor.contentWindow.focus();
-        if (typeof sel != "undefined") {
-            try {
-                return sel.getRangeAt ? sel.getRangeAt(0) : sel.createRange();
-            } catch(e) {
-                return this.doc.createRange();
-            }
-        } else {
-            return this.doc.createRange();
+
+    // private
+    deferFocus : function(){
+        this.focus.defer(10, this);
+    },
+
+    // doc'ed in Field
+    focus : function(){
+        if(this.win && !this.sourceEditMode){
+            this.win.focus();
+        }else{
+            this.el.focus();
         }
     },
         }
     },
-    getParentElement: function()
+    
+    assignDocWin: function()
     {
     {
+        var iframe = this.iframe;
         
         
-        this.assignDocWin();
-        var sel = Roo.isIE ? this.doc.selection : this.win.getSelection();
-        
-        var range = this.createRange(sel);
-         
-        try {
-            var p = range.commonAncestorContainer;
-            while (p.nodeType == 3) { // text node
-                p = p.parentNode;
+         if(Roo.isIE){
+            this.doc = iframe.contentWindow.document;
+            this.win = iframe.contentWindow;
+        } else {
+//            if (!Roo.get(this.frameId)) {
+//                return;
+//            }
+//            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
+//            this.win = Roo.get(this.frameId).dom.contentWindow;
+            
+            if (!Roo.get(this.frameId) && !iframe.contentDocument) {
+                return;
             }
             }
-            return p;
-        } catch (e) {
-            return null;
+            
+            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
+            this.win = (iframe.contentWindow || Roo.get(this.frameId).dom.contentWindow);
         }
         }
-    
     },
     },
-    /***
-     *
-     * Range intersection.. the hard stuff...
-     *  '-1' = before
-     *  '0' = hits..
-     *  '1' = after.
-     *         [ -- selected range --- ]
-     *   [fail]                        [fail]
-     *
-     *    basically..
-     *      if end is before start or  hits it. fail.
-     *      if start is after end or hits it fail.
-     *
-     *   if either hits (but other is outside. - then it's not 
-     *   
-     *    
-     **/
-    
     
     
-    // @see http://www.thismuchiknow.co.uk/?p=64.
-    rangeIntersectsNode : function(range, node)
-    {
-        var nodeRange = node.ownerDocument.createRange();
-        try {
-            nodeRange.selectNode(node);
-        } catch (e) {
-            nodeRange.selectNodeContents(node);
+    // private
+    initEditor : function(){
+        //console.log("INIT EDITOR");
+        this.assignDocWin();
+        
+        
+        
+        this.doc.designMode="on";
+        this.doc.open();
+        this.doc.write(this.getDocMarkup());
+        this.doc.close();
+        
+        var dbody = (this.doc.body || this.doc.documentElement);
+        //var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
+        // this copies styles from the containing element into thsi one..
+        // not sure why we need all of this..
+        //var ss = this.el.getStyles('font-size', 'background-image', 'background-repeat');
+        
+        //var ss = this.el.getStyles( 'background-image', 'background-repeat');
+        //ss['background-attachment'] = 'fixed'; // w3c
+        dbody.bgProperties = 'fixed'; // ie
+        dbody.setAttribute("translate", "no");
+        
+        //Roo.DomHelper.applyStyles(dbody, ss);
+        Roo.EventManager.on(this.doc, {
+             
+            'mouseup': this.onEditorEvent,
+            'dblclick': this.onEditorEvent,
+            'click': this.onEditorEvent,
+            'keyup': this.onEditorEvent,
+            
+            buffer:100,
+            scope: this
+        });
+        Roo.EventManager.on(this.doc, {
+            'paste': this.onPasteEvent,
+            scope : this
+        });
+        if(Roo.isGecko){
+            Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
         }
-    
-        var rangeStartRange = range.cloneRange();
-        rangeStartRange.collapse(true);
-    
-        var rangeEndRange = range.cloneRange();
-        rangeEndRange.collapse(false);
-    
-        var nodeStartRange = nodeRange.cloneRange();
-        nodeStartRange.collapse(true);
-    
-        var nodeEndRange = nodeRange.cloneRange();
-        nodeEndRange.collapse(false);
-    
-        return rangeStartRange.compareBoundaryPoints(
-                 Range.START_TO_START, nodeEndRange) == -1 &&
-               rangeEndRange.compareBoundaryPoints(
-                 Range.START_TO_START, nodeStartRange) == 1;
+        //??? needed???
+        if(Roo.isIE || Roo.isSafari || Roo.isOpera){
+            Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
+        }
+        this.initialized = true;
+
+        
+        // initialize special key events - enter
+        new Roo.htmleditor.KeyEnter({core : this});
         
          
         
          
+        
+        this.owner.fireEvent('initialize', this);
+        this.pushValue();
     },
     },
-    rangeCompareNode : function(range, node)
+    // this is to prevent a href clicks resulting in a redirect?
+   
+    onPasteEvent : function(e,v)
     {
     {
-        var nodeRange = node.ownerDocument.createRange();
-        try {
-            nodeRange.selectNode(node);
-        } catch (e) {
-            nodeRange.selectNodeContents(node);
+        // I think we better assume paste is going to be a dirty load of rubish from word..
+        
+        // even pasting into a 'email version' of this widget will have to clean up that mess.
+        var cd = (e.browserEvent.clipboardData || window.clipboardData);
+        
+        // check what type of paste - if it's an image, then handle it differently.
+        if (cd.files.length > 0) {
+            // pasting images?
+            var urlAPI = (window.createObjectURL && window) || 
+                (window.URL && URL.revokeObjectURL && URL) || 
+                (window.webkitURL && webkitURL);
+    
+            var url = urlAPI.createObjectURL( cd.files[0]);
+            this.insertAtCursor('<img src=" + url + ">');
+            return false;
         }
         
         }
         
+        var html = cd.getData('text/html'); // clipboard event
+        var parser = new Roo.rtf.Parser(cd.getData('text/rtf'));
+        var images = parser.doc ? parser.doc.getElementsByType('pict') : [];
+        Roo.log(images);
+        //Roo.log(imgs);
+        // fixme..
+        images = images.filter(function(g) { return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/); }) // ignore headers
+                       .map(function(g) { return g.toDataURL(); })
+                       .filter(function(g) { return g != 'about:blank'; });
+        
+        
+        html = this.cleanWordChars(html);
+        
+        var d = (new DOMParser().parseFromString(html, 'text/html')).body;
         
         
-        range.collapse(true);
-    
-        nodeRange.collapse(true);
-     
-        var ss = range.compareBoundaryPoints( Range.START_TO_START, nodeRange);
-        var ee = range.compareBoundaryPoints(  Range.END_TO_END, nodeRange);
-         
-        //Roo.log(node.tagName + ': ss='+ss +', ee='+ee)
         
         
-        var nodeIsBefore   =  ss == 1;
-        var nodeIsAfter    = ee == -1;
+        var sn = this.getParentElement();
+        // check if d contains a table, and prevent nesting??
+        //Roo.log(d.getElementsByTagName('table'));
+        //Roo.log(sn);
+        //Roo.log(sn.closest('table'));
+        if (d.getElementsByTagName('table').length && sn && sn.closest('table')) {
+            e.preventDefault();
+            this.insertAtCursor("You can not nest tables");
+            //Roo.log("prevent?"); // fixme - 
+            return false;
+        }
         
         
-        if (nodeIsBefore && nodeIsAfter) {
-            return 0; // outer
+        if (images.length > 0) {
+            Roo.each(d.getElementsByTagName('img'), function(img, i) {
+                img.setAttribute('src', images[i]);
+            });
         }
         }
-        if (!nodeIsBefore && nodeIsAfter) {
-            return 1; //right trailed.
+        if (this.autoClean) {
+            new Roo.htmleditor.FilterStyleToTag({ node : d });
+            new Roo.htmleditor.FilterAttributes({
+                node : d,
+                attrib_white : ['href', 'src', 'name', 'align'],
+                attrib_clean : ['href', 'src' ] 
+            });
+            new Roo.htmleditor.FilterBlack({ node : d, tag : this.black});
+            // should be fonts..
+            new Roo.htmleditor.FilterKeepChildren({node : d, tag : [ 'FONT', 'O:P' ]} );
+            new Roo.htmleditor.FilterParagraph({ node : d });
+            new Roo.htmleditor.FilterSpan({ node : d });
+            new Roo.htmleditor.FilterLongBr({ node : d });
         }
         }
-        
-        if (nodeIsBefore && !nodeIsAfter) {
-            return 2;  // left trailed.
+        if (this.enableBlocks) {
+                
+            Array.from(d.getElementsByTagName('img')).forEach(function(img) {
+                if (img.closest('figure')) { // assume!! that it's aready
+                    return;
+                }
+                var fig  = new Roo.htmleditor.BlockFigure({
+                    image_src  : img.src
+                });
+                fig.updateElement(img); // replace it..
+                
+            });
         }
         }
-        // fully contined.
-        return 3;
-    },
-
-    // private? - in a new class?
-    cleanUpPaste :  function()
-    {
-        // cleans up the whole document..
-        Roo.log('cleanuppaste');
         
         
-        this.cleanUpChildren(this.doc.body);
-        var clean = this.cleanWordChars(this.doc.body.innerHTML);
-        if (clean != this.doc.body.innerHTML) {
-            this.doc.body.innerHTML = clean;
+        
+        this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));
+        if (this.enableBlocks) {
+            Roo.htmleditor.Block.initAll(this.doc.body);
         }
         
         }
         
+        
+        e.preventDefault();
+        return false;
+        // default behaveiour should be our local cleanup paste? (optional?)
+        // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
+        //this.owner.fireEvent('paste', e, v);
     },
     },
-    
-    cleanWordChars : function(input) {// change the chars to hex code
-        var he = Roo.HtmlEditorCore;
+    // private
+    onDestroy : function(){
         
         
-        var output = input;
-        Roo.each(he.swapCodes, function(sw) { 
-            var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
-            
-            output = output.replace(swapper, sw[1]);
-        });
         
         
-        return output;
+        
+        if(this.rendered){
+            
+            //for (var i =0; i < this.toolbars.length;i++) {
+            //    // fixme - ask toolbars for heights?
+            //    this.toolbars[i].onDestroy();
+           // }
+            
+            //this.wrap.dom.innerHTML = '';
+            //this.wrap.remove();
+        }
     },
     },
+
+    // private
+    onFirstFocus : function(){
+        
+        this.assignDocWin();
+        this.undoManager = new Roo.lib.UndoManager(100,(this.doc.body || this.doc.documentElement));
+        
+        this.activated = true;
+         
     
     
-    
-    cleanUpChildren : function (n)
-    {
-        if (!n.childNodes.length) {
-            return;
-        }
-        for (var i = n.childNodes.length-1; i > -1 ; i--) {
-           this.cleanUpChild(n.childNodes[i]);
+        if(Roo.isGecko){ // prevent silly gecko errors
+            this.win.focus();
+            var s = this.win.getSelection();
+            if(!s.focusNode || s.focusNode.nodeType != 3){
+                var r = s.getRangeAt(0);
+                r.selectNodeContents((this.doc.body || this.doc.documentElement));
+                r.collapse(true);
+                this.deferFocus();
+            }
+            try{
+                this.execCmd('useCSS', true);
+                this.execCmd('styleWithCSS', false);
+            }catch(e){}
         }
         }
+        this.owner.fireEvent('activate', this);
     },
     },
-    
-    
+
+    // private
+    adjustFont: function(btn){
+        var adjust = btn.cmd == 'increasefontsize' ? 1 : -1;
+        //if(Roo.isSafari){ // safari
+        //    adjust *= 2;
+       // }
+        var v = parseInt(this.doc.queryCommandValue('FontSize')|| 3, 10);
+        if(Roo.isSafari){ // safari
+            var sm = { 10 : 1, 13: 2, 16:3, 18:4, 24: 5, 32:6, 48: 7 };
+            v =  (v < 10) ? 10 : v;
+            v =  (v > 48) ? 48 : v;
+            v = typeof(sm[v]) == 'undefined' ? 1 : sm[v];
+            
+        }
         
         
-    
-    cleanUpChild : function (node)
+        
+        v = Math.max(1, v+adjust);
+        
+        this.execCmd('FontSize', v  );
+    },
+
+    onEditorEvent : function(e)
     {
     {
-        var ed = this;
-        //console.log(node);
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
+         
+        
+        if (e && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+            return; // we do not handle this.. (undo manager does..)
         }
         }
-        if (node.nodeName == "#comment") {
-            if (!this.allowComments) {
-                node.parentNode.removeChild(node);
+        // in theory this detects if the last element is not a br, then we try and do that.
+        // its so clicking in space at bottom triggers adding a br and moving the cursor.
+        if (e &&
+            e.target.nodeName == 'BODY' &&
+            e.type == "mouseup" &&
+            this.doc.body.lastChild
+           ) {
+            var lc = this.doc.body.lastChild;
+            // gtx-trans is google translate plugin adding crap.
+            while ((lc.nodeType == 3 && lc.nodeValue == '') || lc.id == 'gtx-trans') {
+                lc = lc.previousSibling;
+            }
+            if (lc.nodeType == 1 && lc.nodeName != 'BR') {
+            // if last element is <BR> - then dont do anything.
+            
+                var ns = this.doc.createElement('br');
+                this.doc.body.appendChild(ns);
+                range = this.doc.createRange();
+                range.setStartAfter(ns);
+                range.collapse(true);
+                var sel = this.win.getSelection();
+                sel.removeAllRanges();
+                sel.addRange(range);
             }
             }
-            // clean up silly Windows -- stuff?
-            return; 
         }
         }
-        var lcname = node.tagName.toLowerCase();
-        // we ignore whitelists... ?? = not really the way to go, but we probably have not got a full
-        // whitelist of tags..
         
         
-        if (this.black.indexOf(lcname) > -1 && this.clearUp ) {
-            // remove node.
-            node.parentNode.removeChild(node);
+        
+        
+        this.fireEditorEvent(e);
+      //  this.updateToolbar();
+        this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
+    },
+    
+    fireEditorEvent: function(e)
+    {
+        this.owner.fireEvent('editorevent', this, e);
+    },
+
+    insertTag : function(tg)
+    {
+        // could be a bit smarter... -> wrap the current selected tRoo..
+        if (tg.toLowerCase() == 'span' ||
+            tg.toLowerCase() == 'code' ||
+            tg.toLowerCase() == 'sup' ||
+            tg.toLowerCase() == 'sub' 
+            ) {
+            
+            range = this.createRange(this.getSelection());
+            var wrappingNode = this.doc.createElement(tg.toLowerCase());
+            wrappingNode.appendChild(range.extractContents());
+            range.insertNode(wrappingNode);
+
             return;
             
             return;
             
+            
+            
         }
         }
+        this.execCmd("formatblock",   tg);
+        this.undoManager.addEvent(); 
+    },
+    
+    insertText : function(txt)
+    {
         
         
-        var remove_keep_children= Roo.HtmlEditorCore.remove.indexOf(node.tagName.toLowerCase()) > -1;
         
         
-        // spans with no attributes - just remove them..
-        if ((!node.attributes || !node.attributes.length) && lcname == 'span') { 
-            remove_keep_children = true;
-        }
+        var range = this.createRange();
+        range.deleteContents();
+               //alert(Sender.getAttribute('label'));
+               
+        range.insertNode(this.doc.createTextNode(txt));
+        this.undoManager.addEvent();
+    } ,
+    
+     
+
+    /**
+     * Executes a Midas editor command on the editor document and performs necessary focus and
+     * toolbar updates. <b>This should only be called after the editor is initialized.</b>
+     * @param {String} cmd The Midas command
+     * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
+     */
+    relayCmd : function(cmd, value)
+    {
+        
+        switch (cmd) {
+            case 'justifyleft':
+            case 'justifyright':
+            case 'justifycenter':
+                // if we are in a cell, then we will adjust the
+                var n = this.getParentElement();
+                var td = n.closest('td');
+                if (td) {
+                    var bl = Roo.htmleditor.Block.factory(td);
+                    bl.textAlign = cmd.replace('justify','');
+                    bl.updateElement();
+                    this.owner.fireEvent('editorevent', this);
+                    return;
+                }
+                this.execCmd('styleWithCSS', true); // 
+                break;
+            case 'bold':
+            case 'italic':
+                // if there is no selection, then we insert, and set the curson inside it..
+                this.execCmd('styleWithCSS', false); 
+                break;
+                
         
         
-        // remove <a name=....> as rendering on yahoo mailer is borked with this.
-        // this will have to be flaged elsewhere - perhaps ablack=name... on the mailer..
+            default:
+                break;
+        }
         
         
-        //if (node.tagName.toLowerCase() == 'a' && !node.hasAttribute('href')) {
-        //    remove_keep_children = true;
-        //}
         
         
-        if (remove_keep_children) {
-            this.cleanUpChildren(node);
-            // inserts everything just before this node...
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-            }
-            node.parentNode.removeChild(node);
-            return;
-        }
+        this.win.focus();
+        this.execCmd(cmd, value);
+        this.owner.fireEvent('editorevent', this);
+        //this.updateToolbar();
+        this.owner.deferFocus();
+    },
+
+    /**
+     * Executes a Midas editor command directly on the editor document.
+     * For visual commands, you should use {@link #relayCmd} instead.
+     * <b>This should only be called after the editor is initialized.</b>
+     * @param {String} cmd The Midas command
+     * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
+     */
+    execCmd : function(cmd, value){
+        this.doc.execCommand(cmd, false, value === undefined ? null : value);
+        this.syncValue();
+    },
+   
+    /**
+     * Inserts the passed text at the current cursor position. Note: the editor must be initialized and activated
+     * to insert tRoo.
+     * @param {String} text | dom node.. 
+     */
+    insertAtCursor : function(text)
+    {
         
         
-        if (!node.attributes || !node.attributes.length) {
-            
-          
-            
-            
-            this.cleanUpChildren(node);
+        if(!this.activated){
             return;
         }
             return;
         }
-        
-        function cleanAttr(n,v)
-        {
+         
+        if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
+            this.win.focus();
             
             
-            if (v.match(/^\./) || v.match(/^\//)) {
-                return;
-            }
-            if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/) || v.match(/^ftp:/)) {
-                return;
-            }
-            if (v.match(/^#/)) {
-                return;
-            }
-            if (v.match(/^\{/)) { // allow template editing.
-                return;
-            }
-//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
-            node.removeAttribute(n);
             
             
-        }
-        
-        var cwhite = this.cwhite;
-        var cblack = this.cblack;
+            // from jquery ui (MIT licenced)
+            var range, node;
+            var win = this.win;
             
             
-        function cleanStyle(n,v)
-        {
-            if (v.match(/expression/)) { //XSS?? should we even bother..
-                node.removeAttribute(n);
-                return;
-            }
+            if (win.getSelection && win.getSelection().getRangeAt) {
+                
+                // delete the existing?
+                
+                this.createRange(this.getSelection()).deleteContents();
+                range = win.getSelection().getRangeAt(0);
+                node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
+                range.insertNode(node);
+                range = range.cloneRange();
+                range.collapse(false);
+                 
+                win.getSelection().removeAllRanges();
+                win.getSelection().addRange(range);
+                
+                
+                
+            } else if (win.document.selection && win.document.selection.createRange) {
+                // no firefox support
+                var txt = typeof(text) == 'string' ? text : text.outerHTML;
+                win.document.selection.createRange().pasteHTML(txt);
             
             
-            var parts = v.split(/;/);
-            var clean = [];
+            } else {
+                // no firefox support
+                var txt = typeof(text) == 'string' ? text : text.outerHTML;
+                this.execCmd('InsertHTML', txt);
+            } 
+            this.syncValue();
             
             
-            Roo.each(parts, function(p) {
-                p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                if (!p.length) {
-                    return true;
-                }
-                var l = p.split(':').shift().replace(/\s+/g,'');
-                l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                
-                if ( cwhite.length && cblack.indexOf(l) > -1) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
+            this.deferFocus();
+        }
+    },
+ // private
+    mozKeyPress : function(e){
+        if(e.ctrlKey){
+            var c = e.getCharCode(), cmd;
+          
+            if(c > 0){
+                c = String.fromCharCode(c).toLowerCase();
+                switch(c){
+                    case 'b':
+                        cmd = 'bold';
+                        break;
+                    case 'i':
+                        cmd = 'italic';
+                        break;
+                    
+                    case 'u':
+                        cmd = 'underline';
+                        break;
+                    
+                    //case 'v':
+                      //  this.cleanUpPaste.defer(100, this);
+                      //  return;
+                        
                 }
                 }
-                //Roo.log()
-                // only allow 'c whitelisted system attributes'
-                if ( cwhite.length &&  cwhite.indexOf(l) < 0 && cwhite.indexOf(l.toLowerCase()) < 0 ) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
+                if(cmd){
+                    
+                    this.relayCmd(cmd);
+                    //this.win.focus();
+                    //this.execCmd(cmd);
+                    //this.deferFocus();
+                    e.preventDefault();
                 }
                 
                 }
                 
-                
-                 
-                
-                clean.push(p);
-                return true;
-            });
-            if (clean.length) { 
-                node.setAttribute(n, clean.join(';'));
-            } else {
-                node.removeAttribute(n);
             }
             }
-            
         }
         }
+    },
+
+    // private
+    fixKeys : function(){ // load time branching for fastest keydown performance
         
         
         
         
-        for (var i = node.attributes.length-1; i > -1 ; i--) {
-            var a = node.attributes[i];
-            //console.log(a);
-            
-            if (a.name.toLowerCase().substr(0,2)=='on')  {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase()) > -1) {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase()) > -1) {
-                cleanAttr(a.name,a.value); // fixme..
-                continue;
-            }
-            if (a.name == 'style') {
-                cleanStyle(a.name,a.value);
-                continue;
-            }
-            /// clean up MS crap..
-            // tecnically this should be a list of valid class'es..
-            
-            
-            if (a.name == 'class') {
-                if (a.value.match(/^Mso/)) {
-                    node.removeAttribute('class');
+        if(Roo.isIE){
+            return function(e){
+                var k = e.getKey(), r;
+                if(k == e.TAB){
+                    e.stopEvent();
+                    r = this.doc.selection.createRange();
+                    if(r){
+                        r.collapse(true);
+                        r.pasteHTML('&#160;&#160;&#160;&#160;');
+                        this.deferFocus();
+                    }
+                    return;
+                }
+                /// this is handled by Roo.htmleditor.KeyEnter
+                 /*
+                if(k == e.ENTER){
+                    r = this.doc.selection.createRange();
+                    if(r){
+                        var target = r.parentElement();
+                        if(!target || target.tagName.toLowerCase() != 'li'){
+                            e.stopEvent();
+                            r.pasteHTML('<br/>');
+                            r.collapse(false);
+                            r.select();
+                        }
+                    }
                 }
                 }
+                */
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                //    return;
+                //}
                 
                 
-                if (a.value.match(/^body$/)) {
-                    node.removeAttribute('class');
+                
+            };
+        }else if(Roo.isOpera){
+            return function(e){
+                var k = e.getKey();
+                if(k == e.TAB){
+                    e.stopEvent();
+                    this.win.focus();
+                    this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
+                    this.deferFocus();
                 }
                 }
-                continue;
-            }
-            
-            // style cleanup!?
-            // class cleanup?
-            
+               
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                 //   return;
+                //}
+                
+            };
+        }else if(Roo.isSafari){
+            return function(e){
+                var k = e.getKey();
+                
+                if(k == e.TAB){
+                    e.stopEvent();
+                    this.execCmd('InsertText','\t');
+                    this.deferFocus();
+                    return;
+                }
+                 this.mozKeyPress(e);
+                
+               //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                 //   this.cleanUpPaste.defer(100, this);
+                 //   return;
+               // }
+                
+             };
+        }
+    }(),
+    
+    getAllAncestors: function()
+    {
+        var p = this.getSelectedNode();
+        var a = [];
+        if (!p) {
+            a.push(p); // push blank onto stack..
+            p = this.getParentElement();
         }
         
         
         }
         
         
-        this.cleanUpChildren(node);
-        
-        
+        while (p && (p.nodeType == 1) && (p.tagName.toLowerCase() != 'body')) {
+            a.push(p);
+            p = p.parentNode;
+        }
+        a.push(this.doc.body);
+        return a;
     },
     },
+    lastSel : false,
+    lastSelNode : false,
     
     
+    
+    getSelection : function() 
+    {
+        this.assignDocWin();
+        return Roo.lib.Selection.wrap(Roo.isIE ? this.doc.selection : this.win.getSelection(), this.doc);
+    },
     /**
     /**
-     * Clean up MS wordisms...
+     * Select a dom node
+     * @param {DomElement} node the node to select
      */
      */
-    cleanWord : function(node)
+    selectNode : function(node, collapse)
     {
     {
-        if (!node) {
-            this.cleanWord(this.doc.body);
-            return;
-        }
-        
-        if(
-                node.nodeName == 'SPAN' &&
-                !node.hasAttributes() &&
-                node.childNodes.length == 1 &&
-                node.firstChild.nodeName == "#text"  
-        ) {
-            var textNode = node.firstChild;
-            node.removeChild(textNode);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
-            }
-            node.parentNode.insertBefore(textNode, node);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
-            }
-            node.parentNode.removeChild(node);
-        }
-        
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
         }
         }
-        if (node.nodeName == "#comment") {
-            node.parentNode.removeChild(node);
-            // clean up silly Windows -- stuff?
-            return; 
+        if (collapse === true) {
+            nodeRange.collapse(true);
         }
         }
+        //
+        var s = this.win.getSelection();
+        s.removeAllRanges();
+        s.addRange(nodeRange);
+    },
+    
+    getSelectedNode: function() 
+    {
+        // this may only work on Gecko!!!
         
         
-        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
-            node.parentNode.removeChild(node);
-            return;
-        }
-        //Roo.log(node.tagName);
-        // remove - but keep children..
-        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
-            //Roo.log('-- removed');
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-                // move node to parent - and clean it..
-                this.cleanWord(cn);
-            }
-            node.parentNode.removeChild(node);
-            /// no need to iterate chidlren = it's got none..
-            //this.iterateChildren(node, this.cleanWord);
-            return;
-        }
-        // clean styles
-        if (node.className.length) {
-            
-            var cn = node.className.split(/\W+/);
-            var cna = [];
-            Roo.each(cn, function(cls) {
-                if (cls.match(/Mso[a-zA-Z]+/)) {
-                    return;
-                }
-                cna.push(cls);
-            });
-            node.className = cna.length ? cna.join(' ') : '';
-            if (!cna.length) {
-                node.removeAttribute("class");
-            }
-        }
+        // should we cache this!!!!
         
         
-        if (node.hasAttribute("lang")) {
-            node.removeAttribute("lang");
-        }
+         
+         
+        var range = this.createRange(this.getSelection()).cloneRange();
         
         
-        if (node.hasAttribute("style")) {
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
+        if (Roo.isIE) {
+            var parent = range.parentElement();
+            while (true) {
+                var testRange = range.duplicate();
+                testRange.moveToElementText(parent);
+                if (testRange.inRange(range)) {
+                    break;
+                }
+                if ((parent.nodeType != 1) || (parent.tagName.toLowerCase() == 'body')) {
+                    break;
+                }
+                parent = parent.parentElement;
             }
             }
+            return parent;
         }
         }
-        this.iterateChildren(node, this.cleanWord);
-        
         
         
+        // is ancestor a text element.
+        var ac =  range.commonAncestorContainer;
+        if (ac.nodeType == 3) {
+            ac = ac.parentNode;
+        }
         
         
-    },
-    /**
-     * iterateChildren of a Node, calling fn each time, using this as the scole..
-     * @param {DomNode} node node to iterate children of.
-     * @param {Function} fn method of this class to call on each item.
-     */
-    iterateChildren : function(node, fn)
-    {
-        if (!node.childNodes.length) {
-                return;
+        var ar = ac.childNodes;
+         
+        var nodes = [];
+        var other_nodes = [];
+        var has_other_nodes = false;
+        for (var i=0;i<ar.length;i++) {
+            if ((ar[i].nodeType == 3) && (!ar[i].data.length)) { // empty text ? 
+                continue;
+            }
+            // fullly contained node.
+            
+            if (this.rangeIntersectsNode(range,ar[i]) && this.rangeCompareNode(range,ar[i]) == 3) {
+                nodes.push(ar[i]);
+                continue;
+            }
+            
+            // probably selected..
+            if ((ar[i].nodeType == 1) && this.rangeIntersectsNode(range,ar[i]) && (this.rangeCompareNode(range,ar[i]) > 0)) {
+                other_nodes.push(ar[i]);
+                continue;
+            }
+            // outer..
+            if (!this.rangeIntersectsNode(range,ar[i])|| (this.rangeCompareNode(range,ar[i]) == 0))  {
+                continue;
+            }
+            
+            
+            has_other_nodes = true;
+        }
+        if (!nodes.length && other_nodes.length) {
+            nodes= other_nodes;
         }
         }
-        for (var i = node.childNodes.length-1; i > -1 ; i--) {
-           fn.call(this, node.childNodes[i])
+        if (has_other_nodes || !nodes.length || (nodes.length > 1)) {
+            return false;
         }
         }
+        
+        return nodes[0];
     },
     
     
     },
     
     
-    /**
-     * cleanTableWidths.
-     *
-     * Quite often pasting from word etc.. results in tables with column and widths.
-     * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
-     *
-     */
-    cleanTableWidths : function(node)
+    createRange: function(sel)
     {
     {
-         
-         
-        if (!node) {
-            this.cleanTableWidths(this.doc.body);
-            return;
+        // this has strange effects when using with 
+        // top toolbar - not sure if it's a great idea.
+        //this.editor.contentWindow.focus();
+        if (typeof sel != "undefined") {
+            try {
+                return sel.getRangeAt ? sel.getRangeAt(0) : sel.createRange();
+            } catch(e) {
+                return this.doc.createRange();
+            }
+        } else {
+            return this.doc.createRange();
         }
         }
+    },
+    getParentElement: function()
+    {
         
         
-        // ignore list...
-        if (node.nodeName == "#text" || node.nodeName == "#comment") {
-            return; 
-        }
-        Roo.log(node.tagName);
-        if (!node.tagName.toLowerCase().match(/^(table|td|tr)$/)) {
-            this.iterateChildren(node, this.cleanTableWidths);
-            return;
-        }
-        if (node.hasAttribute('width')) {
-            node.removeAttribute('width');
-        }
+        this.assignDocWin();
+        var sel = Roo.isIE ? this.doc.selection : this.win.getSelection();
         
         
+        var range = this.createRange(sel);
          
          
-        if (node.hasAttribute("style")) {
-            // pretty basic...
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
+        try {
+            var p = range.commonAncestorContainer;
+            while (p.nodeType == 3) { // text node
+                p = p.parentNode;
             }
             }
+            return p;
+        } catch (e) {
+            return null;
         }
         }
-        
-        this.iterateChildren(node, this.cleanTableWidths);
-        
-        
+    
     },
     },
+    /***
+     *
+     * Range intersection.. the hard stuff...
+     *  '-1' = before
+     *  '0' = hits..
+     *  '1' = after.
+     *         [ -- selected range --- ]
+     *   [fail]                        [fail]
+     *
+     *    basically..
+     *      if end is before start or  hits it. fail.
+     *      if start is after end or hits it fail.
+     *
+     *   if either hits (but other is outside. - then it's not 
+     *   
+     *    
+     **/
+    
+    
+    // @see http://www.thismuchiknow.co.uk/?p=64.
+    rangeIntersectsNode : function(range, node)
+    {
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
+        }
     
     
+        var rangeStartRange = range.cloneRange();
+        rangeStartRange.collapse(true);
     
     
+        var rangeEndRange = range.cloneRange();
+        rangeEndRange.collapse(false);
     
     
+        var nodeStartRange = nodeRange.cloneRange();
+        nodeStartRange.collapse(true);
     
     
-    domToHTML : function(currentElement, depth, nopadtext) {
-        
-        depth = depth || 0;
-        nopadtext = nopadtext || false;
+        var nodeEndRange = nodeRange.cloneRange();
+        nodeEndRange.collapse(false);
     
     
-        if (!currentElement) {
-            return this.domToHTML(this.doc.body);
+        return rangeStartRange.compareBoundaryPoints(
+                 Range.START_TO_START, nodeEndRange) == -1 &&
+               rangeEndRange.compareBoundaryPoints(
+                 Range.START_TO_START, nodeStartRange) == 1;
+        
+         
+    },
+    rangeCompareNode : function(range, node)
+    {
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
         }
         
         }
         
-        //Roo.log(currentElement);
-        var j;
-        var allText = false;
-        var nodeName = currentElement.nodeName;
-        var tagName = Roo.util.Format.htmlEncode(currentElement.tagName);
         
         
-        if  (nodeName == '#text') {
-            
-            return nopadtext ? currentElement.nodeValue : currentElement.nodeValue.trim();
-        }
+        range.collapse(true);
+    
+        nodeRange.collapse(true);
+     
+        var ss = range.compareBoundaryPoints( Range.START_TO_START, nodeRange);
+        var ee = range.compareBoundaryPoints(  Range.END_TO_END, nodeRange);
+         
+        //Roo.log(node.tagName + ': ss='+ss +', ee='+ee)
         
         
+        var nodeIsBefore   =  ss == 1;
+        var nodeIsAfter    = ee == -1;
         
         
-        var ret = '';
-        if (nodeName != 'BODY') {
-             
-            var i = 0;
-            // Prints the node tagName, such as <A>, <IMG>, etc
-            if (tagName) {
-                var attr = [];
-                for(i = 0; i < currentElement.attributes.length;i++) {
-                    // quoting?
-                    var aname = currentElement.attributes.item(i).name;
-                    if (!currentElement.attributes.item(i).value.length) {
-                        continue;
-                    }
-                    attr.push(aname + '="' + Roo.util.Format.htmlEncode(currentElement.attributes.item(i).value) + '"' );
-                }
-                
-                ret = "<"+currentElement.tagName+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">";
-            } 
-            else {
-                
-                // eack
-            }
-        } else {
-            tagName = false;
-        }
-        if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(tagName) > -1) {
-            return ret;
+        if (nodeIsBefore && nodeIsAfter) {
+            return 0; // outer
         }
         }
-        if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN'].indexOf(tagName) > -1) { // or code?
-            nopadtext = true;
+        if (!nodeIsBefore && nodeIsAfter) {
+            return 1; //right trailed.
         }
         
         }
         
+        if (nodeIsBefore && !nodeIsAfter) {
+            return 2;  // left trailed.
+        }
+        // fully contined.
+        return 3;
+    },
+    cleanWordChars : function(input) {// change the chars to hex code
         
         
-        // Traverse the tree
-        i = 0;
-        var currentElementChild = currentElement.childNodes.item(i);
-        var allText = true;
-        var innerHTML  = '';
-        lastnode = '';
-        while (currentElementChild) {
-            // Formatting code (indent the tree so it looks nice on the screen)
-            var nopad = nopadtext;
-            if (lastnode == 'SPAN') {
-                nopad  = true;
-            }
-            // text
-            if  (currentElementChild.nodeName == '#text') {
-                var toadd = Roo.util.Format.htmlEncode(currentElementChild.nodeValue);
-                toadd = nopadtext ? toadd : toadd.trim();
-                if (!nopad && toadd.length > 80) {
-                    innerHTML  += "\n" + (new Array( depth + 1 )).join( "  "  );
-                }
-                innerHTML  += toadd;
-                
-                i++;
-                currentElementChild = currentElement.childNodes.item(i);
-                lastNode = '';
-                continue;
-            }
-            allText = false;
+       var swapCodes  = [ 
+            [    8211, "&#8211;" ], 
+            [    8212, "&#8212;" ], 
+            [    8216,  "'" ],  
+            [    8217, "'" ],  
+            [    8220, '"' ],  
+            [    8221, '"' ],  
+            [    8226, "*" ],  
+            [    8230, "..." ]
+        ]; 
+        var output = input;
+        Roo.each(swapCodes, function(sw) { 
+            var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             
-            innerHTML  += nopad ? '' : "\n" + (new Array( depth + 1 )).join( "  "  );
-                
-            // Recursively traverse the tree structure of the child node
-            innerHTML   += this.domToHTML(currentElementChild, depth+1, nopadtext);
-            lastnode = currentElementChild.nodeName;
-            i++;
-            currentElementChild=currentElement.childNodes.item(i);
-        }
+            output = output.replace(swapper, sw[1]);
+        });
         
         
-        ret += innerHTML;
+        return output;
+    },
+    
+     
+    
         
         
-        if (!allText) {
-                // The remaining code is mostly for formatting the tree
-            ret+= nopadtext ? '' : "\n" + (new Array( depth  )).join( "  "  );
-        }
+    
+    cleanUpChild : function (node)
+    {
         
         
+        new Roo.htmleditor.FilterComment({node : node});
+        new Roo.htmleditor.FilterAttributes({
+                node : node,
+                attrib_black : this.ablack,
+                attrib_clean : this.aclean,
+                style_white : this.cwhite,
+                style_black : this.cblack
+        });
+        new Roo.htmleditor.FilterBlack({ node : node, tag : this.black});
+        new Roo.htmleditor.FilterKeepChildren({node : node, tag : this.tag_remove} );
+         
         
         
-        if (tagName) {
-            ret+= "</"+tagName+">";
-        }
-        return ret;
+    },
+    
+    /**
+     * Clean up MS wordisms...
+     * @deprecated - use filter directly
+     */
+    cleanWord : function(node)
+    {
+        new Roo.htmleditor.FilterWord({ node : node ? node : this.doc.body });
+        
+    },
+   
+    
+    /**
+
+     * @deprecated - use filters
+     */
+    cleanTableWidths : function(node)
+    {
+        new Roo.htmleditor.FilterTableWidth({ node : node ? node : this.doc.body});
         
         
     },
     },
+    
+     
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
+        this.aclean = typeof(this.owner.aclean) != 'undefined' && this.owner.aclean ? this.owner.aclean :  Roo.HtmlEditorCore.aclean;
+        this.ablack = typeof(this.owner.ablack) != 'undefined' && this.owner.ablack ? this.owner.ablack :  Roo.HtmlEditorCore.ablack;
+        this.tag_remove = typeof(this.owner.tag_remove) != 'undefined' && this.owner.tag_remove ? this.owner.tag_remove :  Roo.HtmlEditorCore.tag_remove;
+        
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
@@ -27586,6 +30052,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
     },
     
         
     },
     
+    
+    updateLanguage : function()
+    {
+        if (!this.iframe || !this.iframe.contentDocument) {
+            return;
+        }
+        Roo.get(this.iframe.contentDocument.body).attr("lang", this.language);
+    },
+    
+    
     removeStylesheets : function()
     {
         var _this = this;
     removeStylesheets : function()
     {
         var _this = this;
@@ -27650,36 +30126,40 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 });
 
 Roo.HtmlEditorCore.white = [
 });
 
 Roo.HtmlEditorCore.white = [
-        'area', 'br', 'img', 'input', 'hr', 'wbr',
+        'AREA', 'BR', 'IMG', 'INPUT', 'HR', 'WBR',
         
         
-       'address', 'blockquote', 'center', 'dd',      'dir',       'div', 
-       'dl',      'dt',         'h1',     'h2',      'h3',        'h4', 
-       'h5',      'h6',         'hr',     'isindex', 'listing',   'marquee', 
-       'menu',    'multicol',   'ol',     'p',       'plaintext', 'pre', 
-       'table',   'ul',         'xmp', 
+       'ADDRESS', 'BLOCKQUOTE', 'CENTER', 'DD',      'DIR',       'DIV', 
+       'DL',      'DT',         'H1',     'H2',      'H3',        'H4', 
+       'H5',      'H6',         'HR',     'ISINDEX', 'LISTING',   'MARQUEE', 
+       'MENU',    'MULTICOL',   'OL',     'P',       'PLAINTEXT', 'PRE', 
+       'TABLE',   'UL',         'XMP', 
        
        
-       'caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', 
-      'thead',   'tr', 
+       'CAPTION', 'COL', 'COLGROUP', 'TBODY', 'TD', 'TFOOT', 'TH', 
+      'THEAD',   'TR', 
      
      
-      'dir', 'menu', 'ol', 'ul', 'dl',
+      'DIR', 'MENU', 'OL', 'UL', 'DL',
        
        
-      'embed',  'object'
+      'EMBED',  'OBJECT'
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
-        'applet', // 
-        'base',   'basefont', 'bgsound', 'blink',  'body', 
-        'frame',  'frameset', 'head',    'html',   'ilayer', 
-        'iframe', 'layer',  'link',     'meta',    'object',   
-        'script', 'style' ,'title',  'xml' // clean later..
+        'APPLET', // 
+        'BASE',   'BASEFONT', 'BGSOUND', 'BLINK',  'BODY', 
+        'FRAME',  'FRAMESET', 'HEAD',    'HTML',   'ILAYER', 
+        'IFRAME', 'LAYER',  'LINK',     'META',    'OBJECT',   
+        'SCRIPT', 'STYLE' ,'TITLE',  'XML',
+        //'FONT' // CLEAN LATER..
+        'COLGROUP', 'COL'   // messy tables.
+        
+        
 ];
 ];
-Roo.HtmlEditorCore.clean = [
-    'script', 'style', 'title', 'xml'
+Roo.HtmlEditorCore.clean = [ // ?? needed???
+     'SCRIPT', 'STYLE', 'TITLE', 'XML'
 ];
 ];
-Roo.HtmlEditorCore.remove = [
-    'font'
+Roo.HtmlEditorCore.tag_remove = [
+    'FONT', 'TBODY'  
 ];
 // attributes..
 
 ];
 // attributes..
 
@@ -27710,16 +30190,7 @@ Roo.HtmlEditorCore.cblack= [
 ];
 
 
 ];
 
 
-Roo.HtmlEditorCore.swapCodes   =[ 
-    [    8211, "&#8211;" ], 
-    [    8212, "&#8212;" ], 
-    [    8216,  "'" ],  
-    [    8217, "'" ],  
-    [    8220, '"' ],  
-    [    8221, '"' ],  
-    [    8226, "*" ],  
-    [    8230, "..." ]
-]; 
+
 
     /*
  * - LGPL
 
     /*
  * - LGPL
@@ -29251,7 +31722,7 @@ Roo.extend(Roo.bootstrap.Graph, Roo.bootstrap.Component,  {
 });
 
  
 });
 
  
-/*
+Roo.bootstrap.dash = {};/*
  * - LGPL
  *
  * numberBox
  * - LGPL
  *
  * numberBox
index 29f8231..15d5c60 100644 (file)
@@ -1,3 +1,5 @@
+// Roo/bootstrap/namespace.js
+Roo.bootstrap={};
 // Roo/bootstrap/version.js
 Roo.bootstrap.version=(function(){var A=3;Roo.each(document.styleSheets,function(s){if(s.href&&s.href.match(/css-bootstrap4/)){A=4;}});if(A>3){Roo.Element.prototype.visibilityMode=Roo.Element.DISPLAY;}return A;})();
 // Roo/bootstrap/menu/namespace.js
 // Roo/bootstrap/version.js
 Roo.bootstrap.version=(function(){var A=3;Roo.each(document.styleSheets,function(s){if(s.href&&s.href.match(/css-bootstrap4/)){A=4;}});if(A>3){Roo.Element.prototype.visibilityMode=Roo.Element.DISPLAY;}return A;})();
 // Roo/bootstrap/menu/namespace.js
@@ -1105,75 +1107,203 @@ pt.innerHTML=this.meterLabel+'&nbsp;'+this.pwdStrengths[B];this.errorMsg='';retu
 }break;case this.kDigit:if(A>='0'&&A<='9'){return true;}break;case this.kPunctuation:if('!@#$%^&*()_+-=\'";:[{]}|.>,</?`~'.indexOf(A)>=0){return true;}break;default:return false;}},IsLongEnough:function(A,B){return !(A==null||isNaN(B)||A.length<B);},SpansEnoughCharacterSets:function(A,nb){if(!this.IsLongEnough(A,nb)){return false;
 }var B=new Array(new this.CharacterSetChecks(this.kCapitalLetter),new this.CharacterSetChecks(this.kSmallLetter),new this.CharacterSetChecks(this.kDigit),new this.CharacterSetChecks(this.kPunctuation));for(var C=0;C<A.length;++C){for(var D=0;D<B.length;++D){if(!B[D].fResult&&this.isctype(A.charAt(C),B[D].type)){B[D].fResult=true;
 break;}}}var E=0;for(var D=0;D<B.length;++D){if(B[D].fResult){++E;}}if(E<nb){return false;}return true;},ClientSideStrongPassword:function(A){return this.IsLongEnough(A,8)&&this.SpansEnoughCharacterSets(A,3);},ClientSideMediumPassword:function(A){return this.IsLongEnough(A,7)&&this.SpansEnoughCharacterSets(A,2);
 }break;case this.kDigit:if(A>='0'&&A<='9'){return true;}break;case this.kPunctuation:if('!@#$%^&*()_+-=\'";:[{]}|.>,</?`~'.indexOf(A)>=0){return true;}break;default:return false;}},IsLongEnough:function(A,B){return !(A==null||isNaN(B)||A.length<B);},SpansEnoughCharacterSets:function(A,nb){if(!this.IsLongEnough(A,nb)){return false;
 }var B=new Array(new this.CharacterSetChecks(this.kCapitalLetter),new this.CharacterSetChecks(this.kSmallLetter),new this.CharacterSetChecks(this.kDigit),new this.CharacterSetChecks(this.kPunctuation));for(var C=0;C<A.length;++C){for(var D=0;D<B.length;++D){if(!B[D].fResult&&this.isctype(A.charAt(C),B[D].type)){B[D].fResult=true;
 break;}}}var E=0;for(var D=0;D<B.length;++D){if(B[D].fResult){++E;}}if(E<nb){return false;}return true;},ClientSideStrongPassword:function(A){return this.IsLongEnough(A,8)&&this.SpansEnoughCharacterSets(A,3);},ClientSideMediumPassword:function(A){return this.IsLongEnough(A,7)&&this.SpansEnoughCharacterSets(A,2);
-},ClientSideWeakPassword:function(A){return this.IsLongEnough(A,6)||!this.IsLongEnough(A,0);}})
+},ClientSideWeakPassword:function(A){return this.IsLongEnough(A,6)||!this.IsLongEnough(A,0);}});
+// Roo/htmleditor/namespace.js
+Roo.htmleditor={};
+// Roo/htmleditor/Filter.js
+Roo.htmleditor.Filter=function(A){Roo.apply(this.cfg);};Roo.htmleditor.Filter.prototype={node:false,tag:false,replaceComment:false,replaceTag:false,walk:function(A){Roo.each(Array.from(A.childNodes),function(e){switch(true){case e.nodeType==8&&this.replaceComment!==false:this.replaceComment(e);
+return;case e.nodeType!=1:return;case this.tag===true:case typeof(this.tag)=='object'&&this.tag.indexOf(e.tagName)>-1:case typeof(this.tag)=='string'&&this.tag==e.tagName:if(this.replaceTag&&false===this.replaceTag(e)){return;}if(e.hasChildNodes()){this.walk(e);
+}return;default:if(e.hasChildNodes()){this.walk(e);}}},this);}};
+// Roo/htmleditor/FilterAttributes.js
+Roo.htmleditor.FilterAttributes=function(A){Roo.apply(this,A);this.attrib_black=this.attrib_black||[];this.attrib_white=this.attrib_white||[];this.attrib_clean=this.attrib_clean||[];this.style_white=this.style_white||[];this.style_black=this.style_black||[];
+this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterAttributes,Roo.htmleditor.Filter,{tag:true,attrib_black:false,attrib_clean:false,attrib_white:false,style_white:false,style_black:false,replaceTag:function(A){if(!A.attributes||!A.attributes.length){return true;
+}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(this.attrib_white.length&&this.attrib_white.indexOf(a.name.toLowerCase())<0){A.removeAttribute(a.name);continue;}if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;
+}if(this.attrib_black.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);continue;}if(this.attrib_clean.indexOf(a.name.toLowerCase())>-1){this.cleanAttr(A,a.name,a.value);continue;}if(a.name=='style'){this.cleanStyle(A,a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');
+}if(a.value.match(/^body$/)){A.removeAttribute('class');}continue;}}return true;},cleanAttr:function(A,n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)||v.match(/^data:/)){return;}if(v.match(/^#/)){return;
+}if(v.match(/^\{/)){return;}A.removeAttribute(n);},cleanStyle:function(A,n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var B=v.split(/;/);var C=[];Roo.each(B,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');if(!p.length){return true;}
+var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(this.style_black.length&&(this.style_black.indexOf(l)>-1||this.style_black.indexOf(l.toLowerCase())>-1)){return true;}if(this.style_white.length&&style_white.indexOf(l)<0&&style_white.indexOf(l.toLowerCase())<0){return true;
+}C.push(p);return true;},this);if(C.length){A.setAttribute(n,C.join(';'));}else{A.removeAttribute(n);}}});
+// Roo/htmleditor/FilterBlack.js
+Roo.htmleditor.FilterBlack=function(A){Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterBlack,Roo.htmleditor.Filter,{tag:true,replaceTag:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterComment.js
+Roo.htmleditor.FilterComment=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterComment,Roo.htmleditor.Filter,{replaceComment:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterKeepChildren.js
+Roo.htmleditor.FilterKeepChildren=function(A){Roo.apply(this,A);if(this.tag===false){return;}this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterKeepChildren,Roo.htmleditor.FilterBlack,{replaceTag:function(A){var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;
+i++){if(ar[i].nodeType==1){if((typeof(this.tag)=='object'&&this.tag.indexOf(ar[i].tagName)>-1)||(typeof(this.tag)=='string'&&this.tag==ar[i].tagName)){this.replaceTag(ar[i]);continue;}}}ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);
+A.parentNode.insertBefore(ar[i],A);if(this.tag!==false){this.walk(ar[i]);}}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterParagraph.js
+Roo.htmleditor.FilterParagraph=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterParagraph,Roo.htmleditor.Filter,{tag:'P',replaceTag:function(A){if(A.childNodes.length==1&&A.childNodes[0].nodeType==3&&A.childNodes[0].textContent.trim().length<1){A.parentNode.replaceChild(A.ownerDocument.createElement('BR'),A);
+return false;}var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);A.parentNode.insertBefore(ar[i],A);}A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);
+A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterSpan.js
+Roo.htmleditor.FilterSpan=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterSpan,Roo.htmleditor.FilterKeepChildren,{tag:'SPAN',replaceTag:function(A){if(A.attributes&&A.attributes.length>0){return true;}Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this,A);
+return false;}});
+// Roo/htmleditor/FilterTableWidth.js
+Roo.htmleditor.FilterTableWidth=function(A){this.tag=['TABLE','TD','TR','TH','THEAD','TBODY'];this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterTableWidth,Roo.htmleditor.Filter,{replaceTag:function(A){if(A.hasAttribute('width')){A.removeAttribute('width');
+}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');
+if(!C.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterWord.js
+Roo.htmleditor.FilterWord=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterWord,Roo.htmleditor.Filter,{tag:true,replaceTag:function(A){if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;
+A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);
+return false;}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return false;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];
+A.removeChild(cn);A.parentNode.insertBefore(cn,A);this.replaceTag(cn);}A.parentNode.removeChild(A);return false;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
+if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
+}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterStyleToTag.js
+Roo.htmleditor.FilterStyleToTag=function(A){this.tags={B:['fontWeight','bold'],I:['fontStyle','italic'],SUP:['verticalAlign','super'],SUB:['verticalAlign','sub']};Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterStyleToTag,Roo.htmleditor.Filter,{tag:true,tags:false,replaceTag:function(A){if(A.getAttribute("style")===null){return true;
+}var B=[];for(var k in this.tags){if(A.style[this.tags[k][0]]==this.tags[k][1]){B.push(k);A.style.removeProperty(this.tags[k][0]);}}if(!B.length){return true;}var cn=Array.from(A.childNodes);var nn=A;Roo.each(B,function(t){var nc=A.ownerDocument.createElement(t);
+nn.appendChild(nc);nn=nc;});for(var i=0;i<cn.length;cn++){A.removeChild(cn[i]);nn.appendChild(cn[i]);}return true}})
+// Roo/htmleditor/FilterLongBr.js
+Roo.htmleditor.FilterLongBr=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterLongBr,Roo.htmleditor.Filter,{tag:'BR',replaceTag:function(A){var ps=A.nextSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.nextSibling;}if(!ps&&['TD','TH','LI','H1','H2','H3','H4','H5','H6'].indexOf(A.parentNode.tagName)>-1){A.parentNode.removeChild(A);
+return false;}if(!ps||ps.nodeType!=1){return false;}if(!ps||ps.tagName!='BR'){return false;}if(!A.previousSibling){return false;}var ps=A.previousSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.previousSibling;}if(!ps||ps.nodeType!=1){return false;
+}if(!ps||['BR','H1','H2','H3','H4','H5','H6'].indexOf(ps.tagName)<0){return false;}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterBlock.js
+Roo.htmleditor.FilterBlock=function(A){Roo.apply(this,A);var qa=A.node.querySelectorAll;this.removeAttributes('data-block');this.removeAttributes('contenteditable');this.removeAttributes('id');};Roo.apply(Roo.htmleditor.FilterBlock.prototype,{node:true,removeAttributes:function(A){var ar=this.node.querySelectorAll('*['+A+']');
+for(var i=0;i<ar.length;i++){ar[i].removeAttribute(A);}}});
+// Roo/htmleditor/KeyEnter.js
+Roo.htmleditor.KeyEnter=function(A){Roo.apply(this,A);Roo.get(this.core.doc.body).on('keypress',this.keypress,this);};Roo.htmleditor.KeyEnter.prototype={core:false,keypress:function(e){if(e.charCode!=13&&e.charCode!=10){Roo.log([e.charCode,e]);return true;
+}e.preventDefault();var A=this.core.doc;var B=this.core.getSelection();var C=B.getRangeAt(0);var n=C.commonAncestorContainer;var pc=C.closest(['ol','ul']);var D=C.closest('li');if(!pc||e.ctrlKey){B.insertNode('br','after');this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}if(D.innerText.trim()==''&&D.previousSibling&&D.previousSibling.nodeName=='LI'&&D.previousSibling.innerText.trim()==''){D.parentNode.removeChild(D.previousSibling);B.cursorAfter(pc);this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}var li=A.createElement('LI');li.innerHTML='&nbsp;';if(!D||!D.firstSibling){pc.appendChild(li);}else{D.parentNode.insertBefore(li,D.firstSibling);}B.cursorText(li.firstChild);this.core.undoManager.addEvent();this.core.fireEditorEvent(e);
+return false;}};
+// Roo/htmleditor/Block.js
+Roo.htmleditor.Block=function(A){};Roo.htmleditor.Block.factory=function(A){var cc=Roo.htmleditor.Block.cache;var id=Roo.get(A).id;if(typeof(cc[id])!='undefined'&&(!cc[id].node||cc[id].node.closest('body'))){Roo.htmleditor.Block.cache[id].readElement(A);return Roo.htmleditor.Block.cache[id];
+}var db=A.getAttribute('data-block');if(!db){db=A.nodeName.toLowerCase().toUpperCaseFirst();}var B=Roo.htmleditor['Block'+db];if(typeof(B)=='undefined'){Roo.log("OOps missing block : "+'Block'+db);return false;}Roo.htmleditor.Block.cache[id]=new B({node:A}
+);return Roo.htmleditor.Block.cache[id];};Roo.htmleditor.Block.initAll=function(A,B){if(typeof(B)=='undefined'){var ia=Roo.htmleditor.Block.initAll;ia(A,'table');ia(A,'td');ia(A,'figure');return;}Roo.each(Roo.get(A).query(B),function(e){Roo.htmleditor.Block.factory(e);
+},this);};Roo.htmleditor.Block.cache={};Roo.htmleditor.Block.prototype={node:false,friendly_name:'Based Block',deleteTitle:false,context:false,updateElement:function(A){Roo.DomHelper.update(A===undefined?this.node:A,this.toObject());},toHTML:function(){return Roo.DomHelper.markup(this.toObject());
+},getVal:function(A,B,C,D){var n=A;if(B!==true&&n.tagName!=B.toUpperCase()){n=A.getElementsByTagName(B).item(0);}if(!n){return '';}if(C=='html'){return n.innerHTML;}if(C=='style'){return n.style[D];}return n.hasAttribute(C)?n.getAttribute(C):'';},toObject:function(){return {}
+;},readElement:function(A){}};
+// Roo/htmleditor/BlockFigure.js
+Roo.htmleditor.BlockFigure=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockFigure,Roo.htmleditor.Block,{image_src:'',align:'center',caption:'',caption_display:'block',width:'100%',cls:'',href:'',video_url:'',text_align:'left',friendly_name:'Image with caption',deleteTitle:"Delete Image and Caption",contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Source: ",xns:C.Toolbar},{xtype:'Button',text:'Change Image URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Image Source URL",msg:"Enter the url for the image",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.image_src=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.image_src});}},xns:C.Toolbar},{xtype:'Button',text:'Change Link URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Link URL",msg:"Enter the url for the link - leave blank to have no link",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.href=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.href});}},xns:C.Toolbar},{xtype:'Button',text:'Show Video URL',listeners:{click:function(F,G){Roo.MessageBox.alert("Video URL",B().video_url==''?'This image is not linked ot a video':'The image is linked to: <a target="_new" href="'+B().video_url+'">'+B().video_url+'</a>');
+}},xns:C.Toolbar},{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['auto'],['50%'],['100%']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Align: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'align',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.align=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['left'],['right'],['center']],fields:['val'],xns:Roo.data}},{xtype:'Button',text:'Hide Caption',name:'caption_display',pressed:false,enableToggle:true,setValue:function(v){this.toggle(v=='block'?false:true);
+},listeners:{toggle:function(F,G){var b=B();b.caption_display=b.caption_display=='block'?'none':'block';this.setText(b.caption_display=='block'?"Hide Caption":"Show Caption");b.updateElement();D();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();
+}},xns:C.Toolbar}];},toObject:function(){var d=document.createElement('div');d.innerHTML=this.caption;var m=this.width=='50%'&&this.align=='center'?'0 auto':0;var A={tag:'img',contenteditable:'false',src:this.image_src,alt:d.innerText.replace(/\n/g," ").replace(/\s+/g,' ').trim(),style:{width:'auto','max-width':'100%',margin:'0px'}
+};if(this.href.length>0){A={tag:'a',href:this.href,contenteditable:'true',cn:[A]};}if(this.video_url.length>0){A={tag:'div',cls:this.cls,frameborder:0,allowfullscreen:true,width:420,height:315,src:this.video_url,cn:[A]};}var B=this.caption_display=='hidden'?this.caption:(this.caption.length?this.caption:"Caption");
+return {tag:'figure','data-block':'Figure',contenteditable:'false',style:{display:'block',float:this.align,'max-width':this.width,width:'auto',margin:m,padding:'10px'},align:this.align,cn:[A,{tag:'figcaption',style:{'text-align':'left','margin-top':'16px','font-size':'16px','line-height':'24px',display:this.caption_display}
+,cls:this.cls.length>0?(this.cls+'-thumbnail'):'',cn:[{tag:'i',contenteditable:true,html:B}]}]};},readElement:function(A){this.video_url=this.getVal(A,'div','src');this.cls=this.getVal(A,'div','class');this.href=this.getVal(A,'a','href');this.image_src=this.getVal(A,'img','src');
+this.align=this.getVal(A,'figure','align');this.caption=this.getVal(A,'figcaption','html');if(this.caption.trim().match(/^<i[^>]*>/i)){this.caption=this.caption.trim().replace(/^<i[^>]*>/i,'').replace(/^<\/i>$/i,'');}this.width=this.getVal(A,'figure','style','max-width');
+},removeNode:function(){return this.node;}})
+// Roo/htmleditor/BlockTable.js
+Roo.htmleditor.BlockTable=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);if(!A.node){this.rows=[];for(var r=0;r<this.no_row;r++){this.rows[r]=[];for(var c=0;c<this.no_col;c++){this.rows[r][c]=this.emptyCell();
+}}}};Roo.extend(Roo.htmleditor.BlockTable,Roo.htmleditor.Block,{rows:false,no_col:1,no_row:1,width:'100%',friendly_name:'Table',deleteTitle:'Delete Table',contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;
+var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['100%'],['auto']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Columns: ",xns:C.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().removeColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().addColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'TextItem',text:"Rows: ",xns:C.Toolbar}
+,{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().removeRow();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){B().addRow();D();A.editorcore.onEditorEvent();
+}},xns:C.Toolbar},{xtype:'Button',text:'Reset Column Widths',listeners:{click:function(F,e){B().resetWidths();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar}];},toObject:function(){var A={tag:'table',contenteditable:'false','data-block':'Table',style:{width:this.width,border:'solid 1px #000','border-collapse':'collapse'}
+,cn:[{tag:'tbody',cn:[]}]};var B=0;Roo.each(this.rows,function(C){var tr={tag:'tr',style:{margin:'6px',border:'solid 1px #000',textAlign:'left'},cn:[]};A.cn[0].cn.push(tr);var nc=0;Roo.each(C,function(D){var td={tag:'td',contenteditable:'true','data-block':'Td',html:D.html,style:D.style}
+;if(D.colspan>1){td.colspan=D.colspan;nc+=D.colspan;}else{nc++;}if(D.rowspan>1){td.rowspan=D.rowspan;}tr.cn.push(td);},this);B=Math.max(nc,B);},this);B++;return A;},readElement:function(A){A=A?A:this.node;this.width=this.getVal(A,true,'style','width')||'100%';
+this.rows=[];this.no_row=0;var B=Array.from(A.rows);B.forEach(function(tr){var C=[];this.rows.push(C);this.no_row++;var D=0;Array.from(tr.cells).forEach(function(td){var E={colspan:td.hasAttribute('colspan')?td.getAttribute('colspan')*1:1,rowspan:td.hasAttribute('rowspan')?td.getAttribute('rowspan')*1:1,style:td.hasAttribute('style')?td.getAttribute('style'):'',html:td.innerHTML}
+;D+=E.colspan;C.push(E);},this);this.no_col=Math.max(this.no_col,D);},this);},normalizeRows:function(){var A=[];var B=-1;this.rows.forEach(function(C){B++;A[B]=[];C=this.normalizeRow(C);var D=0;C.forEach(function(c){while(typeof(A[B][D])!='undefined'){D++;
+}if(typeof(A[B])=='undefined'){A[B]=[];}A[B][D]=c;c.row=B;c.col=D;if(c.rowspan<2){return;}for(var i=1;i<c.rowspan;i++){if(typeof(A[B+i])=='undefined'){A[B+i]=[];}A[B+i][D]=c;}});},this);return A;},normalizeRow:function(A){var B=[];A.forEach(function(c){if(c.colspan<2){B.push(c);
+return;}for(var i=0;i<c.colspan;i++){B.push(c);}});return B;},deleteColumn:function(A){if(!A||A.type!='col'){return;}if(this.no_col<2){return;}this.rows.forEach(function(B){var C=this.normalizeRow(B);var D=C[A.col];if(D.colspan>1){D.colspan--;}else{B.remove(D);
+}},this);this.no_col--;},removeColumn:function(){this.deleteColumn({type:'col',col:this.no_col-1});this.updateElement();},addColumn:function(){this.rows.forEach(function(A){A.push(this.emptyCell());},this);this.updateElement();},deleteRow:function(A){if(!A||A.type!='row'){return;
+}if(this.no_row<2){return;}var B=this.normalizeRows();B[A.row].forEach(function(D){if(D.rowspan>1){D.rowspan--;}else{D.remove=1;}},this);var C=[];this.rows.forEach(function(D){newrow=[];D.forEach(function(c){if(typeof(c.remove)=='undefined'){newrow.push(c);
+}});if(newrow.length>0){C.push(D);}});this.rows=C;this.no_row--;this.updateElement();},removeRow:function(){this.deleteRow({type:'row',row:this.no_row-1});},addRow:function(){var A=[];for(var i=0;i<this.no_col;i++){A.push(this.emptyCell());}this.rows.push(A);
+this.updateElement();},emptyCell:function(){return (new Roo.htmleditor.BlockTd({})).toObject();},removeNode:function(){return this.node;},resetWidths:function(){Array.from(this.node.getElementsByTagName('td')).forEach(function(n){var nn=Roo.htmleditor.Block.factory(n);
+nn.width='';nn.updateElement(n);});}})
+// Roo/htmleditor/BlockTd.js
+Roo.htmleditor.BlockTd=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockTd,Roo.htmleditor.Block,{node:false,width:'',textAlign:'left',valign:'top',colspan:1,rowspan:1,friendly_name:'Table Cell',deleteTitle:false,contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode.closest('table'));};var lr=false;var D=function(){lr=A.editorcore.getSelection().getRangeAt(0);};var restoreSel=function(){if(lr){(function(){A.editorcore.focus();var cr=A.editorcore.getSelection();
+cr.removeAllRanges();cr.addRange(lr);A.editorcore.onEditorEvent();}).defer(10,this);}};var rooui=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var E=A.editorcore.syncValue;var F={};return [{xtype:'Button',text:'Edit Table',listeners:{click:function(){var t=A.tb.selectedNode.closest('table');
+A.editorcore.selectNode(t);A.editorcore.onEditorEvent();}}},{xtype:'TextItem',text:"Column Width: ",xns:rooui.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().shrinkColumn();E();A.editorcore.onEditorEvent();
+}},xns:rooui.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().growColumn();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"Vertical Align: ",xns:rooui.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'valign',listeners:{select:function(G,r,H){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.valign=r.get('val');b.updateElement();E();A.editorcore.onEditorEvent();}},xns:rooui.form,store:{xtype:'SimpleStore',data:[['top'],['middle'],['bottom']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Merge Cells: ",xns:rooui.Toolbar},{xtype:'Button',text:'Right',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().mergeRight();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Button',text:'Below',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().mergeBelow();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"| ",xns:rooui.Toolbar}
+,{xtype:'Button',text:'Split',listeners:{click:function(G,e){B().split();E();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Fill',xns:rooui.Toolbar},{xtype:'Button',text:'Delete',xns:rooui.Toolbar,menu:{xtype:'Menu',xns:rooui.menu,items:[{xtype:'Item',html:'Column',listeners:{click:function(G,e){var t=C();
+B().deleteColumn();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu},{xtype:'Item',html:'Row',listeners:{click:function(G,e){var t=C();B().deleteRow();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu}
+,{xtype:'Separator',xns:rooui.menu},{xtype:'Item',html:'Table',listeners:{click:function(G,e){var t=C();var nn=t.node.nextSibling||t.node.previousSibling;t.node.parentNode.removeChild(t.node);if(nn){A.editorcore.selectNode(nn,true);}A.editorcore.onEditorEvent();
+}},xns:rooui.menu}]}}];},toObject:function(){var A={tag:'td',contenteditable:'true','data-block':'Td',valign:this.valign,style:{'text-align':this.textAlign,border:'solid 1px rgb(0, 0, 0)','border-collapse':'collapse',padding:'6px','vertical-align':this.valign}
+,html:this.html};if(this.width!=''){A.width=this.width;A.style.width=this.width;}if(this.colspan>1){A.colspan=this.colspan;}if(this.rowspan>1){A.rowspan=this.rowspan;}return A;},readElement:function(A){A=A?A:this.node;this.width=A.style.width;this.colspan=Math.max(1,1*A.getAttribute('colspan'));
+this.rowspan=Math.max(1,1*A.getAttribute('rowspan'));this.html=A.innerHTML;},emptyCell:function(){return {colspan:1,rowspan:1,textAlign:'left',html:"&nbsp;"};},removeNode:function(){return this.node.closest('table');},cellData:false,colWidths:false,toTableArray:function(){var A=[];
+var B=this.node.closest('tr').closest('table');Array.from(B.rows).forEach(function(r,ri){A[ri]=[];});var rn=0;this.colWidths=[];var C=true;Array.from(B.rows).forEach(function(r,ri){var cn=0;Array.from(r.cells).forEach(function(ce,ci){var c={cell:ce,row:rn,col:cn,colspan:ce.colSpan,rowspan:ce.rowSpan}
+;if(ce.isEqualNode(this.node)){this.cellData=c;}if(typeof(A[rn][cn])!='undefined'){while(typeof(A[rn][cn])!='undefined'){cn++;}c.col=cn;}if(typeof(this.colWidths[cn])=='undefined'){this.colWidths[cn]=ce.style.width;if(this.colWidths[cn]!=''){C=false;}}if(c.colspan<2&&c.rowspan<2){A[rn][cn]=c;
+cn++;return;}for(var j=0;j<c.rowspan;j++){if(typeof(A[rn+j])=='undefined'){continue;}A[rn+j][cn]=c;for(var i=0;i<c.colspan;i++){A[rn+j][cn+i]=c;}}cn+=c.colspan;},this);rn++;},this);if(C){this.colWidths[0]=false;}return A;},mergeRight:function(){var tr=this.node.closest('tr');
+var i=Array.prototype.indexOf.call(tr.childNodes,this.node);if(i>=tr.childNodes.length-1){return;}var A=this.toTableArray();if(typeof(A[this.cellData.row][this.cellData.col+this.cellData.colspan])=='undefined'){return;}var rc=A[this.cellData.row][this.cellData.col+this.cellData.colspan];
+if(rc.rowspan!=this.cellData.rowspan||rc.row!=this.cellData.row){return;}this.node.innerHTML+=' '+rc.cell.innerHTML;tr.removeChild(rc.cell);this.colspan+=rc.colspan;this.node.setAttribute('colspan',this.colspan);},mergeBelow:function(){var A=this.toTableArray();
+if(typeof(A[this.cellData.row+this.cellData.rowspan])=='undefined'){return;}if(typeof(A[this.cellData.row+this.cellData.rowspan][this.cellData.col])=='undefined'){return;}var rc=A[this.cellData.row+this.cellData.rowspan][this.cellData.col];if(rc.colspan!=this.cellData.colspan||rc.col!=this.cellData.col){return;
+}this.node.innerHTML=this.node.innerHTML+rc.cell.innerHTML;rc.cell.parentNode.removeChild(rc.cell);this.rowspan+=rc.rowspan;this.node.setAttribute('rowspan',this.rowspan);},split:function(){if(this.node.rowSpan<2&&this.node.colSpan<2){return;}var A=this.toTableArray();
+var cd=this.cellData;this.rowspan=1;this.colspan=1;for(var r=cd.row;r<cd.row+cd.rowspan;r++){for(var c=cd.col;c<cd.col+cd.colspan;c++){if(r==cd.row&&c==cd.col){this.node.removeAttribute('rowspan');this.node.removeAttribute('colspan');continue;}var B=this.node.cloneNode();
+B.removeAttribute('id');B.innerHTML='';A[r][c]={cell:B,col:c,row:r,colspan:1,rowspan:1};}}this.redrawAllCells(A);},redrawAllCells:function(A){var B=this.node.closest('tr').closest('table');var C=B.rows[0].parentNode;Array.from(B.rows).forEach(function(r,ri){Array.from(r.cells).forEach(function(ce,ci){ce.parentNode.removeChild(ce);
+});r.parentNode.removeChild(r);});for(var r=0;r<A.length;r++){var re=B.rows[r];var re=B.ownerDocument.createElement('tr');C.appendChild(re);for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}re.appendChild(A[r][c].cell);A[r][c].cell=false;}
+}},updateWidths:function(A){for(var r=0;r<A.length;r++){for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}if(this.colWidths[0]!=false&&A[r][c].colspan<2){var el=Roo.htmleditor.Block.factory(A[r][c].cell);el.width=Math.floor(this.colWidths[c])+'%';
+el.updateElement(el.node);}A[r][c].cell=false;}}},normalizeWidths:function(A){if(this.colWidths[0]===false){var nw=100.0/this.colWidths.length;this.colWidths.forEach(function(w,i){this.colWidths[i]=nw;},this);return;}var t=0,B=[];this.colWidths.forEach(function(w,i){this.colWidths[i]=this.colWidths[i]==''?0:(this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+var D=this.colWidths[i];if(D>0){t+=D;return;}B.push(i);},this);var nc=this.colWidths.length;if(B.length){var C=(nc-B.length)/(1.0*nc);var t=C*t;var ew=(100-t)/(1.0*B.length);this.colWidths.forEach(function(w,i){if(w>0){this.colWidths[i]=w*C;return;}this.colWidths[i]=ew;
+},this);}},shrinkColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*0.8;if(nw<5){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;
+return;}this.colWidths[i]+=C},this);this.updateWidths(A);},growColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*1.2;if(nw>90){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);
+this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;return;}this.colWidths[i]-=C},this);this.updateWidths(A);},deleteRow:function(){var A=this.toTableArray();for(var i=0;i<A[this.cellData.row].length;i++){var c=A[this.cellData.row][i];if(c.row!=this.cellData.row){c.rowspan--;
+c.cell.setAttribute('rowspan',c.rowspan);continue;}if(c.rowspan>1){c.rowspan--;c.cell.setAttribute('rowspan',c.rowspan);}}A.splice(this.cellData.row,1);this.redrawAllCells(A);},deleteColumn:function(){var A=this.toTableArray();for(var i=0;i<A.length;i++){var c=A[i][this.cellData.col];
+if(c.col!=this.cellData.col){A[i][this.cellData.col].colspan--;}else if(c.colspan>1){c.colspan--;c.cell.setAttribute('colspan',c.colspan);}A[i].splice(this.cellData.col,1);}this.redrawAllCells(A);}})
 // Roo/HtmlEditorCore.js
 // Roo/HtmlEditorCore.js
-Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,stylesheets:false,allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',getDocMarkup:function(){var st='';
+Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,autoClean:true,enableBlocks:true,stylesheets:false,language:'en',allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',undoManager:false,getDocMarkup:function(){var st='';
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
-});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';}
-}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';var A='roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
+});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){if(typeof(this.stylesheets[i])!='string'){continue;}st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';
+}}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';st+='<meta name="google" content="notranslate">';var A='notranslate roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html  class="notranslate" translate="no"><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
-}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide']);this.deferFocus();}},cleanHtml:function(A){A=String(A);if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');
-}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){var bd=(this.doc.body||this.doc.documentElement);var A=bd.innerHTML;if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){A='<div style="'+m[0]+'">'+A+'</div>';
-}}A=this.cleanHtml(A);A=A.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(B){var cc=B.charCodeAt();if(B.length==2){var C=B.charCodeAt(0)-0xD800;var D=B.charCodeAt(1)-0xDC00;cc=(C*0x400)+D+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return B;
-}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,A)!==false){this.el.dom.value=A;this.owner.fireEvent('sync',this,A);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);
-d.innerHTML=v;this.cleanUpPaste();this.el.dom.value=d.innerHTML;this.owner.fireEvent('push',this,v);}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;
-if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);
-}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);A.bgProperties='fixed';Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this}
-);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;this.owner.fireEvent('initialize',this);this.pushValue();
-},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));
-r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);
-if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);this.syncValue();
+}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide','d-none']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide','d-none']);this.deferFocus();}},cleanHtml:function(A){A=String(A);
+if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){this.undoManager.addEvent();var bd=(this.doc.body||this.doc.documentElement);
+var A=this.win.getSelection();var B=document.createElement('div');B.innerHTML=bd.innerHTML;var C=B.getElementsByClassName('gtx-trans-icon');if(C.length>0){var rm=C.item(0).parentNode;rm.parentNode.removeChild(rm);}if(this.enableBlocks){new Roo.htmleditor.FilterBlock({node:B}
+);}var D=new Roo.htmleditor.TidySerializer({inner:true});var E=D.serialize(B);if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){E='<div style="'+m[0]+'">'+E+'</div>';}}E=this.cleanHtml(E);E=E.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(F){var cc=F.charCodeAt();
+if(F.length==2){var G=F.charCodeAt(0)-0xD800;var H=F.charCodeAt(1)-0xDC00;cc=(G*0x400)+H+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return F;}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,E)!==false){this.el.dom.value=E;
+this.owner.fireEvent('sync',this,E);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);d.innerHTML=v;this.el.dom.value=d.innerHTML;
+this.owner.fireEvent('push',this,v);}if(this.autoClean){new Roo.htmleditor.FilterParagraph({node:this.doc.body});new Roo.htmleditor.FilterSpan({node:this.doc.body});}if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}this.updateLanguage();
+var lc=this.doc.body.lastChild;if(lc&&lc.nodeType==1&&lc.getAttribute("contenteditable")=="false"){this.doc.body.appendChild(this.doc.createElement('br'));}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();
+}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);
+this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);
+A.bgProperties='fixed';A.setAttribute("translate","no");Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this});Roo.EventManager.on(this.doc,{'paste':this.onPasteEvent,scope:this}
+);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;new Roo.htmleditor.KeyEnter({core:this});this.owner.fireEvent('initialize',this);
+this.pushValue();},onPasteEvent:function(e,v){var cd=(e.browserEvent.clipboardData||window.clipboardData);if(cd.files.length>0){var A=(window.createObjectURL&&window)||(window.URL&&URL.revokeObjectURL&&URL)||(window.webkitURL&&webkitURL);var B=A.createObjectURL(cd.files[0]);
+this.insertAtCursor('<img src=" + url + ">');return false;}var C=cd.getData('text/html');var D=new Roo.rtf.Parser(cd.getData('text/rtf'));var E=D.doc?D.doc.getElementsByType('pict'):[];Roo.log(E);E=E.filter(function(g){return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/);
+}).map(function(g){return g.toDataURL();}).filter(function(g){return g!='about:blank';});C=this.cleanWordChars(C);var d=(new DOMParser().parseFromString(C,'text/html')).body;var sn=this.getParentElement();if(d.getElementsByTagName('table').length&&sn&&sn.closest('table')){e.preventDefault();
+this.insertAtCursor("You can not nest tables");return false;}if(E.length>0){Roo.each(d.getElementsByTagName('img'),function(F,i){F.setAttribute('src',E[i]);});}if(this.autoClean){new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name','align'],attrib_clean:['href','src']}
+);new Roo.htmleditor.FilterBlack({node:d,tag:this.black});new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT','O:P']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});}if(this.enableBlocks){Array.from(d.getElementsByTagName('img')).forEach(function(F){if(F.closest('figure')){return;
+}var G=new Roo.htmleditor.BlockFigure({image_src:F.src});G.updateElement(F);});}this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}e.preventDefault();return false;},onDestroy:function(){if(this.rendered){}
+},onFirstFocus:function(){this.assignDocWin();this.undoManager=new Roo.lib.UndoManager(100,(this.doc.body||this.doc.documentElement));this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);
+r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;
+var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){if(e&&(e.ctrlKey||e.metaKey)&&e.keyCode===90){return;
+}if(e&&e.target.nodeName=='BODY'&&e.type=="mouseup"&&this.doc.body.lastChild){var lc=this.doc.body.lastChild;while((lc.nodeType==3&&lc.nodeValue=='')||lc.id=='gtx-trans'){lc=lc.previousSibling;}if(lc.nodeType==1&&lc.nodeName!='BR'){var ns=this.doc.createElement('br');
+this.doc.body.appendChild(ns);range=this.doc.createRange();range.setStartAfter(ns);range.collapse(true);var A=this.win.getSelection();A.removeAllRanges();A.addRange(range);}}this.fireEditorEvent(e);this.syncValue();},fireEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
-range.insertNode(A);return;}this.execCmd("formatblock",tg);},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));},relayCmd:function(A,B){this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);
-this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;
-if(D.getSelection&&D.getSelection().getRangeAt){B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;B.insertNode(C);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;
-D.document.selection.createRange().pasteHTML(E);}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();
-switch(c){case 'b':A='bold';break;case 'i':A='italic';break;case 'u':A='underline';break;case 'v':this.cleanUpPaste.defer(100,this);return;}if(A){this.win.focus();this.execCmd(A);this.deferFocus();e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;
-if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}if(k==e.ENTER){r=this.doc.selection.createRange();if(r){var A=r.parentElement();if(!A||A.tagName.toLowerCase()!='li'){e.stopEvent();
-r.pasteHTML('<br />');r.collapse(false);r.select();}}}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
-this.deferFocus();}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isSafari){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);
-return;}};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();
-return Roo.isIE?this.doc.selection:this.win.getSelection();},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;
-}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;
-}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;
-}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();
-}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();
-try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;
-},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);
-var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;}return 3;},cleanUpPaste:function(){Roo.log('cleanuppaste');this.cleanUpChildren(this.doc.body);var A=this.cleanWordChars(this.doc.body.innerHTML);if(A!=this.doc.body.innerHTML){this.doc.body.innerHTML=A;
-}},cleanWordChars:function(A){var he=Roo.HtmlEditorCore;var B=A;Roo.each(he.swapCodes,function(sw){var C=new RegExp("\\u"+sw[0].toString(16),"g");B=B.replace(C,sw[1]);});return B;},cleanUpChildren:function(n){if(!n.childNodes.length){return;}for(var i=n.childNodes.length-1;
-i>-1;i--){this.cleanUpChild(n.childNodes[i]);}},cleanUpChild:function(A){var ed=this;if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){if(!this.allowComments){A.parentNode.removeChild(A);}return;}var B=A.tagName.toLowerCase();if(this.black.indexOf(B)>-1&&this.clearUp){A.parentNode.removeChild(A);
-return;}var C=Roo.HtmlEditorCore.remove.indexOf(A.tagName.toLowerCase())>-1;if((!A.attributes||!A.attributes.length)&&B=='span'){C=true;}if(C){this.cleanUpChildren(A);while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);A.parentNode.insertBefore(cn,A);
-}A.parentNode.removeChild(A);return;}if(!A.attributes||!A.attributes.length){this.cleanUpChildren(A);return;}function cleanAttr(n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)){return;
-}if(v.match(/^#/)){return;}if(v.match(/^\{/)){return;}A.removeAttribute(n);}var D=this.cwhite;var E=this.cblack;function cleanStyle(n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var F=v.split(/;/);var G=[];Roo.each(F,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-if(!p.length){return true;}var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(D.length&&E.indexOf(l)>-1){return true;}if(D.length&&D.indexOf(l)<0&&D.indexOf(l.toLowerCase())<0){return true;}G.push(p);return true;}
-);if(G.length){A.setAttribute(n,G.join(';'));}else{A.removeAttribute(n);}}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;}if(Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);
-continue;}if(Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase())>-1){cleanAttr(a.name,a.value);continue;}if(a.name=='style'){cleanStyle(a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');}if(a.value.match(/^body$/)){A.removeAttribute('class');
-}continue;}}this.cleanUpChildren(A);},cleanWord:function(A){if(!A){this.cleanWord(this.doc.body);return;}if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);
-}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);}if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){A.parentNode.removeChild(A);return;
-}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);
-A.parentNode.insertBefore(cn,A);this.cleanWord(cn);}A.parentNode.removeChild(A);return;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
-if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
-}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanWord);},iterateChildren:function(A,fn){if(!A.childNodes.length){return;}for(var i=A.childNodes.length-1;i>-1;i--){fn.call(this,A.childNodes[i])}
-},cleanTableWidths:function(A){if(!A){this.cleanTableWidths(this.doc.body);return;}if(A.nodeName=="#text"||A.nodeName=="#comment"){return;}Roo.log(A.tagName);if(!A.tagName.toLowerCase().match(/^(table|td|tr)$/)){this.iterateChildren(A,this.cleanTableWidths);
-return;}if(A.hasAttribute('width')){A.removeAttribute('width');}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;
-}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');if(!C.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanTableWidths);},domToHTML:function(A,B,C){B=B||0;C=C||false;if(!A){return this.domToHTML(this.doc.body);}var j;var D=false;
-var E=A.nodeName;var F=Roo.util.Format.htmlEncode(A.tagName);if(E=='#text'){return C?A.nodeValue:A.nodeValue.trim();}var G='';if(E!='BODY'){var i=0;if(F){var H=[];for(i=0;i<A.attributes.length;i++){var I=A.attributes.item(i).name;if(!A.attributes.item(i).value.length){continue;
-}H.push(I+'="'+Roo.util.Format.htmlEncode(A.attributes.item(i).value)+'"');}G="<"+A.tagName+(H.length?(' '+H.join(' ')):'')+">";}else{}}else{F=false;}if(['IMG','BR','HR','INPUT'].indexOf(F)>-1){return G;}if(['PRE','TEXTAREA','TD','A','SPAN'].indexOf(F)>-1){C=true;
-}i=0;var J=A.childNodes.item(i);var D=true;var K='';lastnode='';while(J){var L=C;if(lastnode=='SPAN'){L=true;}if(J.nodeName=='#text'){var M=Roo.util.Format.htmlEncode(J.nodeValue);M=C?M:M.trim();if(!L&&M.length>80){K+="\n"+(new Array(B+1)).join("  ");}K+=M;
-i++;J=A.childNodes.item(i);lastNode='';continue;}D=false;K+=L?'':"\n"+(new Array(B+1)).join("  ");K+=this.domToHTML(J,B+1,C);lastnode=J.nodeName;i++;J=A.childNodes.item(i);}G+=K;if(!D){G+=C?'':"\n"+(new Array(B)).join("  ");}if(F){G+="</"+F+">";}return G;
-},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;
-}this.white.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
+range.insertNode(A);return;}this.execCmd("formatblock",tg);this.undoManager.addEvent();},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));this.undoManager.addEvent();},relayCmd:function(A,B){switch(A){case 'justifyleft':case 'justifyright':case 'justifycenter':var n=this.getParentElement();
+var td=n.closest('td');if(td){var bl=Roo.htmleditor.Block.factory(td);bl.textAlign=A.replace('justify','');bl.updateElement();this.owner.fireEvent('editorevent',this);return;}this.execCmd('styleWithCSS',true);break;case 'bold':case 'italic':this.execCmd('styleWithCSS',false);
+break;default:break;}this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;
+}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;if(D.getSelection&&D.getSelection().getRangeAt){this.createRange(this.getSelection()).deleteContents();B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;
+B.insertNode(C);B=B.cloneRange();B.collapse(false);D.getSelection().removeAllRanges();D.getSelection().addRange(B);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;D.document.selection.createRange().pasteHTML(E);
+}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();switch(c){case 'b':A='bold';break;
+case 'i':A='italic';break;case 'u':A='underline';break;}if(A){this.relayCmd(A);e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);
+r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');this.deferFocus();}};}else if(Roo.isSafari){return function(e){var k=e.getKey();
+if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}this.mozKeyPress(e);};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);
+p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();return Roo.lib.Selection.wrap(Roo.isIE?this.doc.selection:this.win.getSelection(),this.doc);},selectNode:function(A,B){var C=A.ownerDocument.createRange();
+try{C.selectNode(A);}catch(e){C.selectNodeContents(A);}if(B===true){C.collapse(true);}var s=this.win.getSelection();s.removeAllRanges();s.addRange(C);},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();
+while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;
+var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);
+continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();
+}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;
+}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();
+F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);
+}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;
+}return 3;},cleanWordChars:function(A){var B=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];var C=A;Roo.each(B,function(sw){var D=new RegExp("\\u"+sw[0].toString(16),"g");C=C.replace(D,sw[1]);});return C;
+},cleanUpChild:function(A){new Roo.htmleditor.FilterComment({node:A});new Roo.htmleditor.FilterAttributes({node:A,attrib_black:this.ablack,attrib_clean:this.aclean,style_white:this.cwhite,style_black:this.cblack});new Roo.htmleditor.FilterBlack({node:A,tag:this.black}
+);new Roo.htmleditor.FilterKeepChildren({node:A,tag:this.tag_remove});},cleanWord:function(A){new Roo.htmleditor.FilterWord({node:A?A:this.doc.body});},cleanTableWidths:function(A){new Roo.htmleditor.FilterTableWidth({node:A?A:this.doc.body});},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];
+var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.aclean=typeof(this.owner.aclean)!='undefined'&&this.owner.aclean?this.owner.aclean:Roo.HtmlEditorCore.aclean;this.ablack=typeof(this.owner.ablack)!='undefined'&&this.owner.ablack?this.owner.ablack:Roo.HtmlEditorCore.ablack;
+this.tag_remove=typeof(this.owner.tag_remove)!='undefined'&&this.owner.tag_remove?this.owner.tag_remove:Roo.HtmlEditorCore.tag_remove;this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;}this.white.push(A);
+},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
-);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();
-});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A});return;}});Roo.HtmlEditorCore.white=['area','br','img','input','hr','wbr','address','blockquote','center','dd','dir','div','dl','dt','h1','h2','h3','h4','h5','h6','hr','isindex','listing','marquee','menu','multicol','ol','p','plaintext','pre','table','ul','xmp','caption','col','colgroup','tbody','td','tfoot','th','thead','tr','dir','menu','ol','ul','dl','embed','object'];
-Roo.HtmlEditorCore.black=['applet','base','basefont','bgsound','blink','body','frame','frameset','head','html','ilayer','iframe','layer','link','meta','object','script','style','title','xml'];Roo.HtmlEditorCore.clean=['script','style','title','xml'];Roo.HtmlEditorCore.remove=['font'];
-Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];Roo.HtmlEditorCore.swapCodes=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];
+);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},updateLanguage:function(){if(!this.iframe||!this.iframe.contentDocument){return;
+}Roo.get(this.iframe.contentDocument.body).attr("lang",this.language);},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A}
+);return;}});Roo.HtmlEditorCore.white=['AREA','BR','IMG','INPUT','HR','WBR','ADDRESS','BLOCKQUOTE','CENTER','DD','DIR','DIV','DL','DT','H1','H2','H3','H4','H5','H6','HR','ISINDEX','LISTING','MARQUEE','MENU','MULTICOL','OL','P','PLAINTEXT','PRE','TABLE','UL','XMP','CAPTION','COL','COLGROUP','TBODY','TD','TFOOT','TH','THEAD','TR','DIR','MENU','OL','UL','DL','EMBED','OBJECT'];
+Roo.HtmlEditorCore.black=['APPLET','BASE','BASEFONT','BGSOUND','BLINK','BODY','FRAME','FRAMESET','HEAD','HTML','ILAYER','IFRAME','LAYER','LINK','META','OBJECT','SCRIPT','STYLE','TITLE','XML','COLGROUP','COL'];Roo.HtmlEditorCore.clean=['SCRIPT','STYLE','TITLE','XML'];
+Roo.HtmlEditorCore.tag_remove=['FONT','TBODY'];Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];
 
 // Roo/bootstrap/form/HtmlEditor.js
 Roo.bootstrap.form.HtmlEditor=function(A){Roo.bootstrap.form.HtmlEditor.superclass.constructor.call(this,A);if(!this.toolbars){this.toolbars=[];}this.editorcore=new Roo.HtmlEditorCore(Roo.apply({owner:this},A));this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true,editorevent:true,firstfocus:true,autosave:true,savedpreview:true}
 
 // Roo/bootstrap/form/HtmlEditor.js
 Roo.bootstrap.form.HtmlEditor=function(A){Roo.bootstrap.form.HtmlEditor.superclass.constructor.call(this,A);if(!this.toolbars){this.toolbars=[];}this.editorcore=new Roo.HtmlEditorCore(Roo.apply({owner:this},A));this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true,editorevent:true,firstfocus:true,autosave:true,savedpreview:true}
@@ -1241,6 +1371,8 @@ return;}this.raphael=Raphael(this.el.dom);},load:function(A,B,C){this.raphael.cl
 ,500,"bounce");if(this.label){this.label[0].animate({r:5},500,"bounce");this.label[1].attr({"font-weight":400});}};switch(A){case 'bar':this.raphael.barchart(this.g_x,this.g_y,this.g_width,this.g_height,B,C).hover(D,E);break;case 'hbar':this.raphael.hbarchart(this.g_x,this.g_y,this.g_width,this.g_height,B,C).hover(D,E);
 break;case 'pie':this.raphael.piechart(this.g_x,this.g_y,this.g_r,B,C).hover(F,G);break;}if(this.title){this.raphael.text(this.title.x,this.title.y,this.title.text).attr(this.title.attr);}},setTitle:function(o){this.title=o;},initEvents:function(){if(!this.href){this.el.on('click',this.onClick,this);
 }},onClick:function(e){Roo.log('img onclick');this.fireEvent('click',this,e);}});
 ,500,"bounce");if(this.label){this.label[0].animate({r:5},500,"bounce");this.label[1].attr({"font-weight":400});}};switch(A){case 'bar':this.raphael.barchart(this.g_x,this.g_y,this.g_width,this.g_height,B,C).hover(D,E);break;case 'hbar':this.raphael.hbarchart(this.g_x,this.g_y,this.g_width,this.g_height,B,C).hover(D,E);
 break;case 'pie':this.raphael.piechart(this.g_x,this.g_y,this.g_r,B,C).hover(F,G);break;}if(this.title){this.raphael.text(this.title.x,this.title.y,this.title.text).attr(this.title.attr);}},setTitle:function(o){this.title=o;},initEvents:function(){if(!this.href){this.el.on('click',this.onClick,this);
 }},onClick:function(e){Roo.log('img onclick');this.fireEvent('click',this,e);}});
+// Roo/bootstrap/dash/namespace.js
+Roo.bootstrap.dash={};
 // Roo/bootstrap/dash/NumberBox.js
 Roo.bootstrap.dash=Roo.bootstrap.dash||{};Roo.bootstrap.dash.NumberBox=function(A){Roo.bootstrap.dash.NumberBox.superclass.constructor.call(this,A);};Roo.extend(Roo.bootstrap.dash.NumberBox,Roo.bootstrap.Component,{headline:'',content:'',icon:'',footer:'',fhref:'',ficon:'',getAutoCreate:function(){var A={tag:'div',cls:'small-box ',cn:[{tag:'div',cls:'inner',cn:[{tag:'h3',cls:'roo-headline',html:this.headline}
 ,{tag:'p',cls:'roo-content',html:this.content}]}]};if(this.icon){A.cn.push({tag:'div',cls:'icon',cn:[{tag:'i',cls:'ion '+this.icon}]});}if(this.footer){var B={tag:'a',cls:'small-box-footer',href:this.fhref||'#',html:this.footer};A.cn.push(B);}return A;},onRender:function(ct,A){Roo.bootstrap.dash.NumberBox.superclass.onRender.call(this,ct,A);
 // Roo/bootstrap/dash/NumberBox.js
 Roo.bootstrap.dash=Roo.bootstrap.dash||{};Roo.bootstrap.dash.NumberBox=function(A){Roo.bootstrap.dash.NumberBox.superclass.constructor.call(this,A);};Roo.extend(Roo.bootstrap.dash.NumberBox,Roo.bootstrap.Component,{headline:'',content:'',icon:'',footer:'',fhref:'',ficon:'',getAutoCreate:function(){var A={tag:'div',cls:'small-box ',cn:[{tag:'div',cls:'inner',cn:[{tag:'h3',cls:'roo-headline',html:this.headline}
 ,{tag:'p',cls:'roo-content',html:this.content}]}]};if(this.icon){A.cn.push({tag:'div',cls:'icon',cn:[{tag:'i',cls:'ion '+this.icon}]});}if(this.footer){var B={tag:'a',cls:'small-box-footer',href:this.fhref||'#',html:this.footer};A.cn.push(B);}return A;},onRender:function(ct,A){Roo.bootstrap.dash.NumberBox.superclass.onRender.call(this,ct,A);
index d64393b..e655f12 100644 (file)
@@ -691,7 +691,7 @@ Roo.factory(conf, Roo.data);
                                        return 'xs'
                        }
                        
                                        return 'xs'
                        }
                        
-               }
+               } 
         
     });
 
         
     });
 
@@ -700,9 +700,8 @@ Roo.factory(conf, Roo.data);
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
-                "Roo.app", "Roo.ux",
-                "Roo.bootstrap",
-                "Roo.bootstrap.dash");
+                "Roo.app", "Roo.ux" 
+               );
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -955,6 +954,16 @@ String.prototype.unicodeClean = function () {
     );
 };
   
     );
 };
   
+
+/**
+  * Make the first letter of a string uppercase
+  *
+  * @return {String} The new string.
+  */
+String.prototype.toUpperCaseFirst = function () {
+    return this.charAt(0).toUpperCase() + this.slice(1);
+};  
+  
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -1046,30 +1055,50 @@ Roo.applyIf(Array.prototype, {
      */
     equals : function(b)
     {
      */
     equals : function(b)
     {
-        // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
-       if (this === b) {
-           return true;
-        }
-       if (b == null) {
-           return false;
-       }
-       if (this.length !== b.length) {
-           return false;
-       }
-      
-       // sort?? a.sort().equals(b.sort());
+            // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
+        if (this === b) {
+            return true;
+        }
+        if (b == null) {
+            return false;
+        }
+        if (this.length !== b.length) {
+            return false;
+        }
+          
+        // sort?? a.sort().equals(b.sort());
+          
+        for (var i = 0; i < this.length; ++i) {
+            if (this[i] !== b[i]) {
+            return false;
+            }
+        }
+        return true;
+    } 
+    
+    
+    
+    
+});
+
+Roo.applyIf(Array, {
+ /**
+     * from
+     * @static
+     * @param {Array} o Or Array like object (eg. nodelist)
+     * @returns {Array} 
+     */
+    from : function(o)
+    {
+        var ret= [];
+    
+        for (var i =0; i < o.length; i++) { 
+            ret[i] = o[i];
+        }
+        return ret;
       
       
-       for (var i = 0; i < this.length; ++i) {
-           if (this[i] !== b[i]) {
-               return false;
-           }
-       }
-       return true;
     }
 });
     }
 });
-
-
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -1373,17 +1402,17 @@ Date.createParser = function(format) {
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-        + "{v = new Date(y, m, d, h, i, s);}\n"
+        + "{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-        + "{v = new Date(y, m, d, h, i);}\n"
+        + "{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
-        + "{v = new Date(y, m, d, h);}\n"
+        + "{v = new Date(y, m, d, h); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
-        + "{v = new Date(y, m, d);}\n"
+        + "{v = new Date(y, m, d); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0)\n"
         + "else if (y >= 0 && m >= 0)\n"
-        + "{v = new Date(y, m);}\n"
+        + "{v = new Date(y, m); v.setFullYear(y);}\n"
         + "else if (y >= 0)\n"
         + "else if (y >= 0)\n"
-        + "{v = new Date(y);}\n"
+        + "{v = new Date(y); v.setFullYear(y);}\n"
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
@@ -1443,7 +1472,7 @@ Date.formatCodeToRegex = function(character, currentGroup) {
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
+            c:"m = Math.max(0,parseInt(results[" + currentGroup + "], 10) - 1);\n",
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
@@ -4878,7 +4907,468 @@ Roo.lib.Easing = {
             }
         };
     })();
             }
         };
     })();
-/*
+/**
+ * Originally based of this code... - refactored for Roo...
+ * https://github.com/aaalsaleh/undo-manager
+ * undo-manager.js
+ * @author  Abdulrahman Alsaleh 
+ * @copyright 2015 Abdulrahman Alsaleh 
+ * @license  MIT License (c) 
+ *
+ * Hackily modifyed by alan@roojs.com
+ *
+ *
+ *  
+ *
+ *  TOTALLY UNTESTED...
+ *
+ *  Documentation to be done....
+ */
+
+/**
+* @class Roo.lib.UndoManager
+* An undo manager implementation in JavaScript. It follows the W3C UndoManager and DOM Transaction
+* Draft and the undocumented and disabled Mozilla Firefox's UndoManager implementation.
+
+ * Usage:
+ * <pre><code>
+
+
+editor.undoManager = new Roo.lib.UndoManager(1000, editor);
+</code></pre>
+
+* For more information see this blog post with examples:
+*  <a href="http://www.cnitblog.com/seeyeah/archive/2011/12/30/38728.html/">DomHelper
+     - Create Elements using DOM, HTML fragments and Templates</a>. 
+* @constructor
+* @param {Number} limit how far back to go ... use 1000?
+* @param {Object} scope usually use document..
+*/
+
+Roo.lib.UndoManager = function (limit, undoScopeHost)
+{
+    this.stack = [];
+    this.limit = limit;
+    this.scope = undoScopeHost;
+    this.fireEvent = typeof CustomEvent != 'undefined' && undoScopeHost && undoScopeHost.dispatchEvent;
+    if (this.fireEvent) {
+        this.bindEvents();
+    }
+    this.reset();
+    
+};
+        
+Roo.lib.UndoManager.prototype = {
+    
+    limit : false,
+    stack : false,
+    scope :  false,
+    fireEvent : false,
+    position : 0,
+    length : 0,
+    
+    
+     /**
+     * To push and execute a transaction, the method undoManager.transact
+     * must be called by passing a transaction object as the first argument, and a merge
+     * flag as the second argument. A transaction object has the following properties:
+     *
+     * Usage:
+<pre><code>
+undoManager.transact({
+    label: 'Typing',
+    execute: function() { ... },
+    undo: function() { ... },
+    // redo same as execute
+    redo: function() { this.execute(); }
+}, false);
+
+// merge transaction
+undoManager.transact({
+    label: 'Typing',
+    execute: function() { ... },  // this will be run...
+    undo: function() { ... }, // what to do when undo is run.
+    // redo same as execute
+    redo: function() { this.execute(); }
+}, true); 
+</code></pre> 
+     *
+     * 
+     * @param {Object} transaction The transaction to add to the stack.
+     * @return {String} The HTML fragment
+     */
+    
+    
+    transact : function (transaction, merge)
+    {
+        if (arguments.length < 2) {
+            throw new TypeError('Not enough arguments to UndoManager.transact.');
+        }
+
+        transaction.execute();
+
+        this.stack.splice(0, this.position);
+        if (merge && this.length) {
+            this.stack[0].push(transaction);
+        } else {
+            this.stack.unshift([transaction]);
+        }
+    
+        this.position = 0;
+
+        if (this.limit && this.stack.length > this.limit) {
+            this.length = this.stack.length = this.limit;
+        } else {
+            this.length = this.stack.length;
+        }
+
+        if (this.fireEvent) {
+            this.scope.dispatchEvent(
+                new CustomEvent('DOMTransaction', {
+                    detail: {
+                        transactions: this.stack[0].slice()
+                    },
+                    bubbles: true,
+                    cancelable: false
+                })
+            );
+        }
+        
+        //Roo.log("transaction: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
+      
+        
+    },
+
+    undo : function ()
+    {
+        //Roo.log("undo: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
+        
+        if (this.position < this.length) {
+            for (var i = this.stack[this.position].length - 1; i >= 0; i--) {
+                this.stack[this.position][i].undo();
+            }
+            this.position++;
+
+            if (this.fireEvent) {
+                this.scope.dispatchEvent(
+                    new CustomEvent('undo', {
+                        detail: {
+                            transactions: this.stack[this.position - 1].slice()
+                        },
+                        bubbles: true,
+                        cancelable: false
+                    })
+                );
+            }
+        }
+    },
+
+    redo : function ()
+    {
+        if (this.position > 0) {
+            for (var i = 0, n = this.stack[this.position - 1].length; i < n; i++) {
+                this.stack[this.position - 1][i].redo();
+            }
+            this.position--;
+
+            if (this.fireEvent) {
+                this.scope.dispatchEvent(
+                    new CustomEvent('redo', {
+                        detail: {
+                            transactions: this.stack[this.position].slice()
+                        },
+                        bubbles: true,
+                        cancelable: false
+                    })
+                );
+            }
+        }
+    },
+
+    item : function (index)
+    {
+        if (index >= 0 && index < this.length) {
+            return this.stack[index].slice();
+        }
+        return null;
+    },
+
+    clearUndo : function () {
+        this.stack.length = this.length = this.position;
+    },
+
+    clearRedo : function () {
+        this.stack.splice(0, this.position);
+        this.position = 0;
+        this.length = this.stack.length;
+    },
+    /**
+     * Reset the undo - probaly done on load to clear all history.
+     */
+    reset : function()
+    {
+        this.stack = [];
+        this.position = 0;
+        this.length = 0;
+        this.current_html = this.scope.innerHTML;
+        if (this.timer !== false) {
+            clearTimeout(this.timer);
+        }
+        this.timer = false;
+        this.merge = false;
+        this.addEvent();
+        
+    },
+    current_html : '',
+    timer : false,
+    merge : false,
+    
+    
+    // this will handle the undo/redo on the element.?
+    bindEvents : function()
+    {
+        var el  = this.scope;
+        el.undoManager = this;
+        
+        
+        this.scope.addEventListener('keydown', function(e) {
+            if ((e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+                if (e.shiftKey) {
+                    el.undoManager.redo(); // Ctrl/Command + Shift + Z
+                } else {
+                    el.undoManager.undo(); // Ctrl/Command + Z
+                }
+        
+                e.preventDefault();
+            }
+        });
+        /// ignore keyup..
+        this.scope.addEventListener('keyup', function(e) {
+            if ((e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+                e.preventDefault();
+            }
+        });
+        
+        
+        
+        var t = this;
+        
+        el.addEventListener('input', function(e) {
+            if(el.innerHTML == t.current_html) {
+                return;
+            }
+            // only record events every second.
+            if (t.timer !== false) {
+               clearTimeout(t.timer);
+               t.timer = false;
+            }
+            t.timer = setTimeout(function() { t.merge = false; }, 1000);
+            
+            t.addEvent(t.merge);
+            t.merge = true; // ignore changes happening every second..
+        });
+       },
+    /**
+     * Manually add an event.
+     * Normall called without arguements - and it will just get added to the stack.
+     * 
+     */
+    
+    addEvent : function(merge)
+    {
+        //Roo.log("undomanager +" + (merge ? 'Y':'n'));
+        // not sure if this should clear the timer 
+        merge = typeof(merge) == 'undefined' ? false : merge; 
+        
+        this.scope.undoManager.transact({
+            scope : this.scope,
+            oldHTML: this.current_html,
+            newHTML: this.scope.innerHTML,
+            // nothing to execute (content already changed when input is fired)
+            execute: function() { },
+            undo: function() {
+                this.scope.innerHTML = this.current_html = this.oldHTML;
+            },
+            redo: function() {
+                this.scope.innerHTML = this.current_html = this.newHTML;
+            }
+        }, false); //merge);
+        
+        this.merge = merge;
+        
+        this.current_html = this.scope.innerHTML;
+    }
+    
+    
+     
+    
+    
+    
+};
+/**
+ * @class Roo.lib.Range
+ * @constructor
+ * This is a toolkit, normally used to copy features into a Dom Range element
+ * Roo.lib.Range.wrap(x);
+ *
+ *
+ *
+ */
+Roo.lib.Range = function() { };
+
+/**
+ * Wrap a Dom Range object, to give it new features...
+ * @static
+ * @param {Range} the range to wrap
+ */
+Roo.lib.Range.wrap = function(r) {
+    return Roo.apply(r, Roo.lib.Range.prototype);
+};
+/**
+ * find a parent node eg. LI / OL
+ * @param {string|Array} node name or array of nodenames
+ * @return {DomElement|false}
+ */
+Roo.apply(Roo.lib.Range.prototype,
+{
+    
+    closest : function(str)
+    {
+        if (typeof(str) != 'string') {
+            // assume it's a array.
+            for(var i = 0;i < str.length;i++) {
+                var r = this.closest(str[i]);
+                if (r !== false) {
+                    return r;
+                }
+                
+            }
+            return false;
+        }
+        str = str.toLowerCase();
+        var n = this.commonAncestorContainer; // might not be a node
+        while (n.nodeType != 1) {
+            n = n.parentNode;
+        }
+        
+        if (n.nodeName.toLowerCase() == str ) {
+            return n;
+        }
+        if (n.nodeName.toLowerCase() == 'body') {
+            return false;
+        }
+            
+        return n.closest(str) || false;
+        
+    },
+    cloneRange : function()
+    {
+        return Roo.lib.Range.wrap(Range.prototype.cloneRange.call(this));
+    }
+});/**
+ * @class Roo.lib.Selection
+ * @constructor
+ * This is a toolkit, normally used to copy features into a Dom Selection element
+ * Roo.lib.Selection.wrap(x);
+ *
+ *
+ *
+ */
+Roo.lib.Selection = function() { };
+
+/**
+ * Wrap a Dom Range object, to give it new features...
+ * @static
+ * @param {Range} the range to wrap
+ */
+Roo.lib.Selection.wrap = function(r, doc) {
+    Roo.apply(r, Roo.lib.Selection.prototype);
+    r.ownerDocument = doc; // usefull so we dont have to keep referening to it.
+    return r;
+};
+/**
+ * find a parent node eg. LI / OL
+ * @param {string|Array} node name or array of nodenames
+ * @return {DomElement|false}
+ */
+Roo.apply(Roo.lib.Selection.prototype,
+{
+    /**
+     * the owner document
+     */
+    ownerDocument : false,
+    
+    getRangeAt : function(n)
+    {
+        return Roo.lib.Range.wrap(Selection.prototype.getRangeAt.call(this,n));
+    },
+    
+    /**
+     * insert node at selection 
+     * @param {DomElement|string} node
+     * @param {string} cursor (after|in|none) where to place the cursor after inserting.
+     */
+    insertNode: function(node, cursor)
+    {
+        if (typeof(node) == 'string') {
+            node = this.ownerDocument.createElement(node);
+            if (cursor == 'in') {
+                node.innerHTML = '&nbsp;';
+            }
+        }
+        
+        var range = this.getRangeAt(0);
+        
+        if (this.type != 'Caret') {
+            range.deleteContents();
+        }
+        var sn = node.childNodes[0]; // select the contents.
+
+        
+        
+        range.insertNode(node);
+        if (cursor == 'after') {
+            node.insertAdjacentHTML('afterend', '&nbsp;');
+            sn = node.nextSibling;
+        }
+        
+        if (cursor == 'none') {
+            return;
+        }
+        
+        this.cursorText(sn);
+    },
+    
+    cursorText : function(n)
+    {
+       
+        //var range = this.getRangeAt(0);
+        range = Roo.lib.Range.wrap(new Range());
+        //range.selectNode(n);
+        
+        var ix = Array.from(n.parentNode.childNodes).indexOf(n);
+        range.setStart(n.parentNode,ix);
+        range.setEnd(n.parentNode,ix+1);
+        //range.collapse(false);
+         
+        this.removeAllRanges();
+        this.addRange(range);
+        
+        Roo.log([n, range, this,this.baseOffset,this.extentOffset, this.type]);
+    },
+    cursorAfter : function(n)
+    {
+        if (!n.nextSibling || n.nextSibling.nodeValue != '&nbsp;') {
+            n.insertAdjacentHTML('afterend', '&nbsp;');
+        }
+        this.cursorText (n.nextSibling);
+    }
+        
+    
+});/*
  * Based on:
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
  * Based on:
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
@@ -5125,212 +5615,320 @@ Roo.DomHelper = function(){
         el.insertBefore(node, before);
         return node;
     };
         el.insertBefore(node, before);
         return node;
     };
+    
+    // this is a bit like the react update code...
+    // 
+    
+    var updateNode = function(from, to)
+    {
+        // should we handle non-standard elements?
+        Roo.log(["UpdateNode" , from, to]);
+        if (from.nodeType != to.nodeType) {
+            Roo.log(["ReplaceChild - mismatch notType" , to, from ]);
+            from.parentNode.replaceChild(to, from);
+        }
+        
+        if (from.nodeType == 3) {
+            // assume it's text?!
+            if (from.data == to.data) {
+                return;
+            }
+            from.data = to.data;
+            return;
+        }
+        if (!from.parentNode) {
+            // not sure why this is happening?
+            return;
+        }
+        // assume 'to' doesnt have '1/3 nodetypes!
+        // not sure why, by from, parent node might not exist?
+        if (from.nodeType !=1 || from.tagName != to.tagName) {
+            Roo.log(["ReplaceChild" , from, to ]);
+            
+            from.parentNode.replaceChild(to, from);
+            return;
+        }
+        // compare attributes
+        var ar = Array.from(from.attributes);
+        for(var i = 0; i< ar.length;i++) {
+            if (to.hasAttribute(ar[i].name)) {
+                continue;
+            }
+            if (ar[i].name == 'id') { // always keep ids?
+               continue;
+            }
+            //if (ar[i].name == 'style') {
+            //   throw "style removed?";
+            //}
+            Roo.log("removeAttribute" + ar[i].name);
+            from.removeAttribute(ar[i].name);
+        }
+        ar = to.attributes;
+        for(var i = 0; i< ar.length;i++) {
+            if (from.getAttribute(ar[i].name) == to.getAttribute(ar[i].name)) {
+                Roo.log("skipAttribute " + ar[i].name  + '=' + to.getAttribute(ar[i].name));
+                continue;
+            }
+            Roo.log("updateAttribute " + ar[i].name + '=>' + to.getAttribute(ar[i].name));
+            from.setAttribute(ar[i].name, to.getAttribute(ar[i].name));
+        }
+        // children
+        var far = Array.from(from.childNodes);
+        var tar = Array.from(to.childNodes);
+        // if the lengths are different.. then it's probably a editable content change, rather than
+        // a change of the block definition..
+        
+        // this did notwork , as our rebuilt nodes did not include ID's so did not match at all.
+         /*if (from.innerHTML == to.innerHTML) {
+            return;
+        }
+        if (far.length != tar.length) {
+            from.innerHTML = to.innerHTML;
+            return;
+        }
+        */
+        
+        for(var i = 0; i < Math.max(tar.length, far.length); i++) {
+            if (i >= far.length) {
+                from.appendChild(tar[i]);
+                Roo.log(["add", tar[i]]);
+                
+            } else if ( i  >= tar.length) {
+                from.removeChild(far[i]);
+                Roo.log(["remove", far[i]]);
+            } else {
+                
+                updateNode(far[i], tar[i]);
+            }    
+        }
+        
+        
+        
+        
+    };
+    
+    
 
     return {
 
     return {
-    /** True to force the use of DOM instead of html fragments @type Boolean */
-    useDom : false,
-
-    /**
-     * Returns the markup for the passed Element(s) config
-     * @param {Object} o The Dom object spec (and children)
-     * @return {String}
-     */
-    markup : function(o){
-        return createHtml(o);
-    },
-
-    /**
-     * Applies a style specification to an element
-     * @param {String/HTMLElement} el The element to apply styles to
-     * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
-     * a function which returns such a specification.
-     */
-    applyStyles : function(el, styles){
-        if(styles){
-           el = Roo.fly(el);
-           if(typeof styles == "string"){
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               var matches;
-               while ((matches = re.exec(styles)) != null){
-                   el.setStyle(matches[1], matches[2]);
-               }
-           }else if (typeof styles == "object"){
-               for (var style in styles){
-                  el.setStyle(style, styles[style]);
+        /** True to force the use of DOM instead of html fragments @type Boolean */
+        useDom : false,
+    
+        /**
+         * Returns the markup for the passed Element(s) config
+         * @param {Object} o The Dom object spec (and children)
+         * @return {String}
+         */
+        markup : function(o){
+            return createHtml(o);
+        },
+    
+        /**
+         * Applies a style specification to an element
+         * @param {String/HTMLElement} el The element to apply styles to
+         * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
+         * a function which returns such a specification.
+         */
+        applyStyles : function(el, styles){
+            if(styles){
+               el = Roo.fly(el);
+               if(typeof styles == "string"){
+                   var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+                   var matches;
+                   while ((matches = re.exec(styles)) != null){
+                       el.setStyle(matches[1], matches[2]);
+                   }
+               }else if (typeof styles == "object"){
+                   for (var style in styles){
+                      el.setStyle(style, styles[style]);
+                   }
+               }else if (typeof styles == "function"){
+                    Roo.DomHelper.applyStyles(el, styles.call());
                }
                }
-           }else if (typeof styles == "function"){
-                Roo.DomHelper.applyStyles(el, styles.call());
-           }
-        }
-    },
-
-    /**
-     * Inserts an HTML fragment into the Dom
-     * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
-     * @param {HTMLElement} el The context element
-     * @param {String} html The HTML fragmenet
-     * @return {HTMLElement} The new node
-     */
-    insertHtml : function(where, el, html){
-        where = where.toLowerCase();
-        if(el.insertAdjacentHTML){
-            if(tableRe.test(el.tagName)){
-                var rs;
-                if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
-                    return rs;
-                }
             }
             }
+        },
+    
+        /**
+         * Inserts an HTML fragment into the Dom
+         * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
+         * @param {HTMLElement} el The context element
+         * @param {String} html The HTML fragmenet
+         * @return {HTMLElement} The new node
+         */
+        insertHtml : function(where, el, html){
+            where = where.toLowerCase();
+            if(el.insertAdjacentHTML){
+                if(tableRe.test(el.tagName)){
+                    var rs;
+                    if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
+                        return rs;
+                    }
+                }
+                switch(where){
+                    case "beforebegin":
+                        el.insertAdjacentHTML('BeforeBegin', html);
+                        return el.previousSibling;
+                    case "afterbegin":
+                        el.insertAdjacentHTML('AfterBegin', html);
+                        return el.firstChild;
+                    case "beforeend":
+                        el.insertAdjacentHTML('BeforeEnd', html);
+                        return el.lastChild;
+                    case "afterend":
+                        el.insertAdjacentHTML('AfterEnd', html);
+                        return el.nextSibling;
+                }
+                throw 'Illegal insertion point -> "' + where + '"';
+            }
+            var range = el.ownerDocument.createRange();
+            var frag;
             switch(where){
             switch(where){
-                case "beforebegin":
-                    el.insertAdjacentHTML('BeforeBegin', html);
+                 case "beforebegin":
+                    range.setStartBefore(el);
+                    frag = range.createContextualFragment(html);
+                    el.parentNode.insertBefore(frag, el);
                     return el.previousSibling;
                     return el.previousSibling;
-                case "afterbegin":
-                    el.insertAdjacentHTML('AfterBegin', html);
-                    return el.firstChild;
+                 case "afterbegin":
+                    if(el.firstChild){
+                        range.setStartBefore(el.firstChild);
+                        frag = range.createContextualFragment(html);
+                        el.insertBefore(frag, el.firstChild);
+                        return el.firstChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.firstChild;
+                    }
                 case "beforeend":
                 case "beforeend":
-                    el.insertAdjacentHTML('BeforeEnd', html);
-                    return el.lastChild;
+                    if(el.lastChild){
+                        range.setStartAfter(el.lastChild);
+                        frag = range.createContextualFragment(html);
+                        el.appendChild(frag);
+                        return el.lastChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.lastChild;
+                    }
                 case "afterend":
                 case "afterend":
-                    el.insertAdjacentHTML('AfterEnd', html);
-                    return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-        }
-        var range = el.ownerDocument.createRange();
-        var frag;
-        switch(where){
-             case "beforebegin":
-                range.setStartBefore(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el);
-                return el.previousSibling;
-             case "afterbegin":
-                if(el.firstChild){
-                    range.setStartBefore(el.firstChild);
+                    range.setStartAfter(el);
                     frag = range.createContextualFragment(html);
                     frag = range.createContextualFragment(html);
-                    el.insertBefore(frag, el.firstChild);
-                    return el.firstChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.firstChild;
+                    el.parentNode.insertBefore(frag, el.nextSibling);
+                    return el.nextSibling;
                 }
                 }
-            case "beforeend":
-                if(el.lastChild){
-                    range.setStartAfter(el.lastChild);
-                    frag = range.createContextualFragment(html);
-                    el.appendChild(frag);
-                    return el.lastChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.lastChild;
+                throw 'Illegal insertion point -> "' + where + '"';
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them before el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertBefore : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "beforeBegin");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them after el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object} o The Dom object spec (and children)
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertAfter : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them as the first child of el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertFirst : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterBegin");
+        },
+    
+        // private
+        doInsert : function(el, o, returnElement, pos, sibling){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml(pos, el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and appends them to el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        append : function(el, o, returnElement){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.appendChild(newNode);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml("beforeEnd", el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and overwrites the contents of el with them
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        overwrite : function(el, o, returnElement)
+        {
+            el = Roo.getDom(el);
+            if (o.ns) {
+              
+                while (el.childNodes.length) {
+                    el.removeChild(el.firstChild);
                 }
                 }
-            case "afterend":
-                range.setStartAfter(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el.nextSibling);
-                return el.nextSibling;
+                createDom(o, el);
+            } else {
+                el.innerHTML = createHtml(o);   
             }
             }
-            throw 'Illegal insertion point -> "' + where + '"';
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them before el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertBefore : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "beforeBegin");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them after el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object} o The Dom object spec (and children)
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertAfter : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them as the first child of el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertFirst : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterBegin");
-    },
-
-    // private
-    doInsert : function(el, o, returnElement, pos, sibling){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml(pos, el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and appends them to el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    append : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.appendChild(newNode);
-        }else{
+            
+            return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
+        },
+    
+        /**
+         * Creates a new Roo.DomHelper.Template from the Dom object spec
+         * @param {Object} o The Dom object spec (and children)
+         * @return {Roo.DomHelper.Template} The new template
+         */
+        createTemplate : function(o){
             var html = createHtml(o);
             var html = createHtml(o);
-            newNode = this.insertHtml("beforeEnd", el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and overwrites the contents of el with them
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    overwrite : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        if (o.ns) {
-          
-            while (el.childNodes.length) {
-                el.removeChild(el.firstChild);
-            }
-            createDom(o, el);
-        } else {
-            el.innerHTML = createHtml(o);   
+            return new Roo.Template(html);
+        },
+         /**
+         * Updates the first element with the spec from the o (replacing if necessary)
+         * This iterates through the children, and updates attributes / children etc..
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         */
+        
+        update : function(el, o)
+        {
+            updateNode(Roo.getDom(el), createDom(o));
+            
         }
         
         }
         
-        return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
-    },
-
-    /**
-     * Creates a new Roo.DomHelper.Template from the Dom object spec
-     * @param {Object} o The Dom object spec (and children)
-     * @return {Roo.DomHelper.Template} The new template
-     */
-    createTemplate : function(o){
-        var html = createHtml(o);
-        return new Roo.Template(html);
-    }
+        
     };
 }();
 /*
     };
 }();
 /*
index 279a52a..051147b 100644 (file)
@@ -18,7 +18,7 @@ i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==un
 },destroy:function(){for(var i=0,a=arguments,S=a.length;i<S;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;
 }if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';
 case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,S){return v===null||v===undefined||(!S?v==='':false);},isOpera:C,isSafari:D,isFirefox:E,isIE:F,isIE7:G,isIE11:H,isEdge:I,isGecko:J,isBorderBox:K,isWindows:L,isLinux:N,isMac:M,isIOS:P,isAndroid:Q,isTouch:R,useShims:((F&&!G)||(J&&M)),selectNode:function(S,T){var U=Roo.DomQuery.selectNode(S,T);
 },destroy:function(){for(var i=0,a=arguments,S=a.length;i<S;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}if(typeof as.purgeListeners=='function'){as.purgeListeners();}if(typeof as.destroy=='function'){as.destroy();}}}},type:function(o){if(o===undefined||o===null){return false;
 }if(o.htmlElement){return 'element';}var t=typeof o;if(t=='object'&&o.nodeName){switch(o.nodeType){case 1:return 'element';case 3:return (/\S/).test(o.nodeValue)?'textnode':'whitespace';}}if(t=='object'||t=='function'){switch(o.constructor){case Array:return 'array';
 case RegExp:return 'regexp';}if(typeof o.length=='number'&&typeof o.item=='function'){return 'nodelist';}}return t;},isEmpty:function(v,S){return v===null||v===undefined||(!S?v==='':false);},isOpera:C,isSafari:D,isFirefox:E,isIE:F,isIE7:G,isIE11:H,isEdge:I,isGecko:J,isBorderBox:K,isWindows:L,isLinux:N,isMac:M,isIOS:P,isAndroid:Q,isTouch:R,useShims:((F&&!G)||(J&&M)),selectNode:function(S,T){var U=Roo.DomQuery.selectNode(S,T);
-return U?Roo.get(U):new Roo.Element(false);},getGridSize:function(){var w=Roo.lib.Dom.getViewWidth();switch(true){case w>1200:return 'xl';case w>992:return 'lg';case w>768:return 'md';case w>576:return 'sm';default:return 'xs'}}});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux","Roo.bootstrap","Roo.bootstrap.dash");
+return U?Roo.get(U):new Roo.Element(false);},getGridSize:function(){var w=Roo.lib.Dom.getViewWidth();switch(true){case w>1200:return 'xl';case w>992:return 'lg';case w>768:return 'md';case w>576:return 'sm';default:return 'xs'}}});})();Roo.namespace("Roo","Roo.util","Roo.grid","Roo.dd","Roo.tree","Roo.data","Roo.form","Roo.menu","Roo.state","Roo.lib","Roo.layout","Roo.app","Roo.ux");
 
 // Function.js
 (function(){if(Roo.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);}window.attachEvent("onunload",fnCleanUp);
 
 // Function.js
 (function(){if(Roo.isIE){function fnCleanUp(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("onunload",fnCleanUp);}window.attachEvent("onunload",fnCleanUp);
@@ -29,13 +29,13 @@ E=E.concat(B);}else if(typeof C=="number"){E=Array.prototype.slice.call(argument
 // String.js
 Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(A,B,ch){var C=new String(A);if(ch===null||ch===undefined||ch===''){ch=" ";}while(C.length<B){C=ch+C;}return C;},format:function(A){var B=Array.prototype.slice.call(arguments,1);
 return A.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(B[i]);});}});String.prototype.toggle=function(A,B){return this==A?B:A;};String.prototype.unicodeClean=function(){return this.replace(/[\s\S]/g,function(A){if(A.charCodeAt()<256){return A;
 // String.js
 Roo.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1");},leftPad:function(A,B,ch){var C=new String(A);if(ch===null||ch===undefined||ch===''){ch=" ";}while(C.length<B){C=ch+C;}return C;},format:function(A){var B=Array.prototype.slice.call(arguments,1);
 return A.replace(/\{(\d+)\}/g,function(m,i){return Roo.util.Format.htmlEncode(B[i]);});}});String.prototype.toggle=function(A,B){return this==A?B:A;};String.prototype.unicodeClean=function(){return this.replace(/[\s\S]/g,function(A){if(A.charCodeAt()<256){return A;
-}try{encodeURIComponent(A);}catch(e){return '';}return A;});};
+}try{encodeURIComponent(A);}catch(e){return '';}return A;});};String.prototype.toUpperCaseFirst=function(){return this.charAt(0).toUpperCase()+this.slice(1);};
 // Number.js
 Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
 // Array.js
 Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,A=this.length;i<A;i++){if(this[i]==o){return i;}}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(A){var B=this.length>>>0;if(typeof A!="function"){throw new TypeError();
 }var C=new Array(B);var D=arguments[1];for(var i=0;i<B;i++){if(i in this){C[i]=A.call(D,this[i],i,this);}}return C;},equals:function(b){if(this===b){return true;}if(b==null){return false;}if(this.length!==b.length){return false;}for(var i=0;i<this.length;
 // Number.js
 Roo.applyIf(Number.prototype,{constrain:function(A,B){return Math.min(Math.max(this,A),B);}});
 // Array.js
 Roo.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,A=this.length;i<A;i++){if(this[i]==o){return i;}}return -1;},remove:function(o){var A=this.indexOf(o);if(A!=-1){this.splice(A,1);}},map:function(A){var B=this.length>>>0;if(typeof A!="function"){throw new TypeError();
 }var C=new Array(B);var D=arguments[1];for(var i=0;i<B;i++){if(i in this){C[i]=A.call(D,this[i],i,this);}}return C;},equals:function(b){if(this===b){return true;}if(b==null){return false;}if(this.length!==b.length){return false;}for(var i=0;i<this.length;
-++i){if(this[i]!==b[i]){return false;}}return true;}});
+++i){if(this[i]!==b[i]){return false;}}return true;}});Roo.applyIf(Array,{from:function(o){var A=[];for(var i=0;i<o.length;i++){A[i]=o[i];}return A;}});
 // Date.js
 Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(A){if(Date.formatFunctions[A]==null){Date.createNewFormat(A);
 }var B=Date.formatFunctions[A];return this[B]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(A){var B="format"+Date.formatFunctions.count++;Date.formatFunctions[A]=B;var C="Date.prototype."+B+" = function(){return ";var D=false;
 // Date.js
 Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime());};Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(A){if(Date.formatFunctions[A]==null){Date.createNewFormat(A);
 }var B=Date.formatFunctions[A];return this[B]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(A){var B="format"+Date.formatFunctions.count++;Date.formatFunctions[A]=B;var C="Date.prototype."+B+" = function(){return ";var D=false;
@@ -47,10 +47,10 @@ case "g":return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";case "
 case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "P":return "this.getGMTColonOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";
 default:return "'"+String.escape(A)+"' + ";}};Date.parseDate=function(A,B){if(Date.parseFunctions[B]==null){Date.createParser(B);}var C=Date.parseFunctions[B];return Date[C](A);};Date.createParser=function(A){var B="parse"+Date.parseFunctions.count++;var C=Date.parseRegexes.length;
 var D=1;Date.parseFunctions[A]=B;var E="Date."+B+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"if (typeof(input) !== 'string') { input = input.toString(); }\n"+"var results = input.match(Date.parseRegexes["+C+"]);\n"+"if (results && results.length > 0) {";
 case "i":return "String.leftPad(this.getMinutes(), 2, '0') + ";case "s":return "String.leftPad(this.getSeconds(), 2, '0') + ";case "O":return "this.getGMTOffset() + ";case "P":return "this.getGMTColonOffset() + ";case "T":return "this.getTimezone() + ";case "Z":return "(this.getTimezoneOffset() * -60) + ";
 default:return "'"+String.escape(A)+"' + ";}};Date.parseDate=function(A,B){if(Date.parseFunctions[B]==null){Date.createParser(B);}var C=Date.parseFunctions[B];return Date[C](A);};Date.createParser=function(A){var B="parse"+Date.parseFunctions.count++;var C=Date.parseRegexes.length;
 var D=1;Date.parseFunctions[A]=B;var E="Date."+B+" = function(input){\n"+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1, o, z, v;\n"+"var d = new Date();\n"+"y = d.getFullYear();\n"+"m = d.getMonth();\n"+"d = d.getDate();\n"+"if (typeof(input) !== 'string') { input = input.toString(); }\n"+"var results = input.match(Date.parseRegexes["+C+"]);\n"+"if (results && results.length > 0) {";
-var F="";var G=false;var ch='';for(var i=0;i<A.length;++i){ch=A.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+=String.escape(ch);}else{var H=Date.formatCodeToRegex(ch,D);D+=H.g;F+=H.s;if(H.g&&H.c){E+=H.c;}}}E+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m);}\n"+"else if (y >= 0)\n"+"{v = new Date(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";
+var F="";var G=false;var ch='';for(var i=0;i<A.length;++i){ch=A.charAt(i);if(!G&&ch=="\\"){G=true;}else if(G){G=false;F+=String.escape(ch);}else{var H=Date.formatCodeToRegex(ch,D);D+=H.g;F+=H.s;if(H.g&&H.c){E+=H.c;}}}E+="if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"+"{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"+"{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"+"{v = new Date(y, m, d, h); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0 && d > 0)\n"+"{v = new Date(y, m, d); v.setFullYear(y);}\n"+"else if (y >= 0 && m >= 0)\n"+"{v = new Date(y, m); v.setFullYear(y);}\n"+"else if (y >= 0)\n"+"{v = new Date(y); v.setFullYear(y);}\n"+"}return (v && (z || o))?\n"+"    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"+"        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"+";}";
 Date.parseRegexes[C]=new RegExp("^"+F+"$");eval(E);};Date.formatCodeToRegex=function(A,B){switch(A){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"}
 Date.parseRegexes[C]=new RegExp("^"+F+"$");eval(E);};Date.formatCodeToRegex=function(A,B){switch(A){case "D":return {g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case "j":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "d":return {g:1,c:"d = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "l":return {g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case "S":return {g:0,c:null,s:"(?:st|nd|rd|th)"};case "w":return {g:0,c:null,s:"\\d"};case "z":return {g:0,c:null,s:"(?:\\d{1,3})"};case "W":return {g:0,c:null,s:"(?:\\d{2})"};case "F":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"}
-;case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{2})"}
+;case "M":return {g:1,c:"m = parseInt(Date.monthNumbers[results["+B+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case "n":return {g:1,c:"m = parseInt(results["+B+"], 10) - 1;\n",s:"(\\d{1,2})"};case "m":return {g:1,c:"m = Math.max(0,parseInt(results["+B+"], 10) - 1);\n",s:"(\\d{2})"}
 ;case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+B+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+B+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"}
 ;case "a":return {g:1,c:"if (results["+B+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+B+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"}
 ;case "g":case "G":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
 ;case "t":return {g:0,c:null,s:"\\d{1,2}"};case "L":return {g:0,c:null,s:"(?:1|0)"};case "Y":return {g:1,c:"y = parseInt(results["+B+"], 10);\n",s:"(\\d{4})"};case "y":return {g:1,c:"var ty = parseInt(results["+B+"], 10);\n"+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"}
 ;case "a":return {g:1,c:"if (results["+B+"] == 'am') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case "A":return {g:1,c:"if (results["+B+"] == 'AM') {\n"+"if (h == 12) { h = 0; }\n"+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"}
 ;case "g":case "G":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{1,2})"};case "h":case "H":return {g:1,c:"h = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "i":return {g:1,c:"i = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"};case "s":return {g:1,c:"s = parseInt(results["+B+"], 10);\n",s:"(\\d{2})"}
@@ -209,28 +209,52 @@ i<J;++i){H[i]=[G[0]+H[i][0],G[1]+H[i][1]];}}this.runtimeAttributes[E]=[G];if(H.l
 var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else{F=A.doMethod.call(this,C,D,E);
 }return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else{D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];
 }else{A.setAttribute.call(this,C,D,E);}};})();
 var id=el.id||el.tagName;return ("Scroll "+id);};B.doMethod=function(C,D,E){var F=null;if(C=='scroll'){F=[this.method(this.currentFrame,D[0],E[0]-D[0],this.totalFrames),this.method(this.currentFrame,D[1],E[1]-D[1],this.totalFrames)];}else{F=A.doMethod.call(this,C,D,E);
 }return F;};B.getAttribute=function(C){var D=null;var el=this.getEl();if(C=='scroll'){D=[el.scrollLeft,el.scrollTop];}else{D=A.getAttribute.call(this,C);}return D;};B.setAttribute=function(C,D,E){var el=this.getEl();if(C=='scroll'){el.scrollLeft=D[0];el.scrollTop=D[1];
 }else{A.setAttribute.call(this,C,D,E);}};})();
+// Roo/lib/UndoManager.js
+Roo.lib.UndoManager=function(A,B){this.stack=[];this.limit=A;this.scope=B;this.fireEvent=typeof CustomEvent!='undefined'&&B&&B.dispatchEvent;if(this.fireEvent){this.bindEvents();}this.reset();};Roo.lib.UndoManager.prototype={limit:false,stack:false,scope:false,fireEvent:false,position:0,length:0,transact:function(A,B){if(arguments.length<2){throw new TypeError('Not enough arguments to UndoManager.transact.');
+}A.execute();this.stack.splice(0,this.position);if(B&&this.length){this.stack[0].push(A);}else{this.stack.unshift([A]);}this.position=0;if(this.limit&&this.stack.length>this.limit){this.length=this.stack.length=this.limit;}else{this.length=this.stack.length;
+}if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('DOMTransaction',{detail:{transactions:this.stack[0].slice()},bubbles:true,cancelable:false}));}},undo:function(){if(this.position<this.length){for(var i=this.stack[this.position].length-1;i>=0;
+i--){this.stack[this.position][i].undo();}this.position++;if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('undo',{detail:{transactions:this.stack[this.position-1].slice()},bubbles:true,cancelable:false}));}}},redo:function(){if(this.position>0){for(var i=0,n=this.stack[this.position-1].length;
+i<n;i++){this.stack[this.position-1][i].redo();}this.position--;if(this.fireEvent){this.scope.dispatchEvent(new CustomEvent('redo',{detail:{transactions:this.stack[this.position].slice()},bubbles:true,cancelable:false}));}}},item:function(A){if(A>=0&&A<this.length){return this.stack[A].slice();
+}return null;},clearUndo:function(){this.stack.length=this.length=this.position;},clearRedo:function(){this.stack.splice(0,this.position);this.position=0;this.length=this.stack.length;},reset:function(){this.stack=[];this.position=0;this.length=0;this.current_html=this.scope.innerHTML;
+if(this.timer!==false){clearTimeout(this.timer);}this.timer=false;this.merge=false;this.addEvent();},current_html:'',timer:false,merge:false,bindEvents:function(){var el=this.scope;el.undoManager=this;this.scope.addEventListener('keydown',function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode===90){if(e.shiftKey){el.undoManager.redo();
+}else{el.undoManager.undo();}e.preventDefault();}});this.scope.addEventListener('keyup',function(e){if((e.ctrlKey||e.metaKey)&&e.keyCode===90){e.preventDefault();}});var t=this;el.addEventListener('input',function(e){if(el.innerHTML==t.current_html){return;
+}if(t.timer!==false){clearTimeout(t.timer);t.timer=false;}t.timer=setTimeout(function(){t.merge=false;},1000);t.addEvent(t.merge);t.merge=true;});},addEvent:function(A){A=typeof(A)=='undefined'?false:A;this.scope.undoManager.transact({scope:this.scope,oldHTML:this.current_html,newHTML:this.scope.innerHTML,execute:function(){}
+,undo:function(){this.scope.innerHTML=this.current_html=this.oldHTML;},redo:function(){this.scope.innerHTML=this.current_html=this.newHTML;}},false);this.merge=A;this.current_html=this.scope.innerHTML;}};
+// Roo/lib/Range.js
+Roo.lib.Range=function(){};Roo.lib.Range.wrap=function(r){return Roo.apply(r,Roo.lib.Range.prototype);};Roo.apply(Roo.lib.Range.prototype,{closest:function(A){if(typeof(A)!='string'){for(var i=0;i<A.length;i++){var r=this.closest(A[i]);if(r!==false){return r;
+}}return false;}A=A.toLowerCase();var n=this.commonAncestorContainer;while(n.nodeType!=1){n=n.parentNode;}if(n.nodeName.toLowerCase()==A){return n;}if(n.nodeName.toLowerCase()=='body'){return false;}return n.closest(A)||false;},cloneRange:function(){return Roo.lib.Range.wrap(Range.prototype.cloneRange.call(this));
+}});
+// Roo/lib/Selection.js
+Roo.lib.Selection=function(){};Roo.lib.Selection.wrap=function(r,A){Roo.apply(r,Roo.lib.Selection.prototype);r.ownerDocument=A;return r;};Roo.apply(Roo.lib.Selection.prototype,{ownerDocument:false,getRangeAt:function(n){return Roo.lib.Range.wrap(Selection.prototype.getRangeAt.call(this,n));
+},insertNode:function(A,B){if(typeof(A)=='string'){A=this.ownerDocument.createElement(A);if(B=='in'){A.innerHTML='&nbsp;';}}var C=this.getRangeAt(0);if(this.type!='Caret'){C.deleteContents();}var sn=A.childNodes[0];C.insertNode(A);if(B=='after'){A.insertAdjacentHTML('afterend','&nbsp;');
+sn=A.nextSibling;}if(B=='none'){return;}this.cursorText(sn);},cursorText:function(n){range=Roo.lib.Range.wrap(new Range());var ix=Array.from(n.parentNode.childNodes).indexOf(n);range.setStart(n.parentNode,ix);range.setEnd(n.parentNode,ix+1);this.removeAllRanges();
+this.addRange(range);Roo.log([n,range,this,this.baseOffset,this.extentOffset,this.type]);},cursorAfter:function(n){if(!n.nextSibling||n.nextSibling.nodeValue!='&nbsp;'){n.insertAdjacentHTML('afterend','&nbsp;');}this.cursorText(n.nextSibling);}});
 // Roo/DomHelper.js
 if(typeof Range!="undefined"&&typeof Range.prototype.createContextualFragment=="undefined"){Range.prototype.createContextualFragment=function(A){var B=window.document;var C=B.createElement("div");C.innerHTML=A;var D=B.createDocumentFragment(),n;while((n=C.firstChild)){D.appendChild(n);
 }return D;};}Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}b+="<"+o.tag;
 // Roo/DomHelper.js
 if(typeof Range!="undefined"&&typeof Range.prototype.createContextualFragment=="undefined"){Range.prototype.createContextualFragment=function(A){var B=window.document;var C=B.createElement("div");C.innerHTML=A;var D=B.createDocumentFragment(),n;while((n=C.firstChild)){D.appendChild(n);
 }return D;};}Roo.DomHelper=function(){var A=null;var B=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var C=/^table|tbody|tr|td$/i;var D={};var E=function(o){if(typeof o=='string'){return o;}var b="";if(!o.tag){o.tag="div";}b+="<"+o.tag;
-for(var M in o){if(M=="tag"||M=="children"||M=="cn"||M=="html"||typeof o[M]=="function"){continue;}if(M=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var N in s){if(typeof s[N]!="function"){b+=N+":"+s[N]+";";
-}}b+='"';}}else{if(M=="cls"){b+=' class="'+o["cls"]+'"';}else if(M=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+M+'="'+o[M]+'"';}}}if(B.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,O=cn.length;
-i<O;i++){b+=E(cn[i],b);}}else{b+=E(cn,b);}}if(o.html){b+=o.html;}b+="</"+o.tag+">";}return b;};var F=function(o,M){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");
-}ns=D[o.ns];}if(typeof(o)=='string'){return M.appendChild(document.createTextNode(o));}o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var N=el.setAttribute?true:false;
-for(var O in o){if(O=="tag"||O=="ns"||O=="xmlns"||O=="children"||O=="cn"||O=="html"||O=="style"||typeof o[O]=="function"){continue;}if(O=="cls"&&Roo.isIE){el.className=o["cls"];}else{if(N){el.setAttribute(O=="cls"?'class':O,o[O]);}else{el[O]=o[O];}}}Roo.DomHelper.applyStyles(el,o.style);
-var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,P=cn.length;i<P;i++){F(cn[i],el);}}else{F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(M){M.appendChild(el);}return el;};var G=function(M,s,h,e){A.innerHTML=[s,h,e].join('');
-var i=-1,el=A;while(++i<M&&el.firstChild){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(M,N,el,O){if(!A){A=document.createElement('div');}var P;var Q=null;if(M=='td'){if(N=='afterbegin'||N=='beforeend'){return;
-}if(N=='beforebegin'){Q=el;el=el.parentNode;}else{Q=el.nextSibling;el=el.parentNode;}P=G(4,J,O,K);}else if(M=='tr'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(3,H,O,I);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(3,H,O,I);}else{if(N=='afterbegin'){Q=el.firstChild;
-}P=G(4,J,O,K);}}else if(M=='tbody'){if(N=='beforebegin'){Q=el;el=el.parentNode;P=G(2,ts,O,te);}else if(N=='afterend'){Q=el.nextSibling;el=el.parentNode;P=G(2,ts,O,te);}else{if(N=='afterbegin'){Q=el.firstChild;}P=G(3,H,O,I);}}else{if(N=='beforebegin'||N=='afterend'){return;
-}if(N=='afterbegin'){Q=el.firstChild;}P=G(2,ts,O,te);}el.insertBefore(P,Q);return P;};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,M){if(M){el=Roo.fly(el);if(typeof M=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var N;
-while((N=re.exec(M))!=null){el.setStyle(N[1],N[2]);}}else if(typeof M=="object"){for(var O in M){el.setStyle(O,M[O]);}}else if(typeof M=="function"){Roo.DomHelper.applyStyles(el,M.call());}}},insertHtml:function(M,el,N){M=M.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;
-if(rs=L(el.tagName.toLowerCase(),M,el,N)){return rs;}}switch(M){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',N);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',N);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',N);
-return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',N);return el.nextSibling;}throw 'Illegal insertion point -> "'+M+'"';}var O=el.ownerDocument.createRange();var P;switch(M){case "beforebegin":O.setStartBefore(el);P=O.createContextualFragment(N);
-el.parentNode.insertBefore(P,el);return el.previousSibling;case "afterbegin":if(el.firstChild){O.setStartBefore(el.firstChild);P=O.createContextualFragment(N);el.insertBefore(P,el.firstChild);return el.firstChild;}else{el.innerHTML=N;return el.firstChild;
-}case "beforeend":if(el.lastChild){O.setStartAfter(el.lastChild);P=O.createContextualFragment(N);el.appendChild(P);return el.lastChild;}else{el.innerHTML=N;return el.lastChild;}case "afterend":O.setStartAfter(el);P=O.createContextualFragment(N);el.parentNode.insertBefore(P,el.nextSibling);
-return el.nextSibling;}throw 'Illegal insertion point -> "'+M+'"';},insertBefore:function(el,o,M){return this.doInsert(el,o,M,"beforeBegin");},insertAfter:function(el,o,M){return this.doInsert(el,o,M,"afterEnd","nextSibling");},insertFirst:function(el,o,M){return this.doInsert(el,o,M,"afterBegin");
-},doInsert:function(el,o,M,N,O){el=Roo.getDom(el);var P;if(this.useDom||o.ns){P=F(o,null);el.parentNode.insertBefore(P,O?el[O]:el);}else{var Q=E(o);P=this.insertHtml(N,el,Q);}return M?Roo.get(P,true):P;},append:function(el,o,M){el=Roo.getDom(el);var N;if(this.useDom||o.ns){N=F(o,null);
-el.appendChild(N);}else{var O=E(o);N=this.insertHtml("beforeEnd",el,O);}return M?Roo.get(N,true):N;},overwrite:function(el,o,M){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}F(o,el);}else{el.innerHTML=E(o);}return M?Roo.get(el.firstChild,true):el.firstChild;
-},createTemplate:function(o){var M=E(o);return new Roo.Template(M);}};}();
+for(var N in o){if(N=="tag"||N=="children"||N=="cn"||N=="html"||typeof o[N]=="function"){continue;}if(N=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var O in s){if(typeof s[O]!="function"){b+=O+":"+s[O]+";";
+}}b+='"';}}else{if(N=="cls"){b+=' class="'+o["cls"]+'"';}else if(N=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+N+'="'+o[N]+'"';}}}if(B.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,P=cn.length;
+i<P;i++){b+=E(cn[i],b);}}else{b+=E(cn,b);}}if(o.html){b+=o.html;}b+="</"+o.tag+">";}return b;};var F=function(o,N){var ns=false;if(o.ns&&o.ns!='html'){if(o.xmlns&&typeof(D[o.ns])=='undefined'){D[o.ns]=o.xmlns;ns=o.xmlns;}if(typeof(D[o.ns])=='undefined'){console.log("Trying to create namespace element "+o.ns+", however no xmlns was sent to builder previously");
+}ns=D[o.ns];}if(typeof(o)=='string'){return N.appendChild(document.createTextNode(o));}o.tag=o.tag||div;if(o.ns&&Roo.isIE){ns=false;o.tag=o.ns+':'+o.tag;}var el=ns?document.createElementNS(ns,o.tag||'div'):document.createElement(o.tag||'div');var O=el.setAttribute?true:false;
+for(var P in o){if(P=="tag"||P=="ns"||P=="xmlns"||P=="children"||P=="cn"||P=="html"||P=="style"||typeof o[P]=="function"){continue;}if(P=="cls"&&Roo.isIE){el.className=o["cls"];}else{if(O){el.setAttribute(P=="cls"?'class':P,o[P]);}else{el[P]=o[P];}}}Roo.DomHelper.applyStyles(el,o.style);
+var cn=o.children||o.cn;if(cn){if((cn instanceof Array)||(Roo.isSafari&&typeof(cn.join)=="function")){for(var i=0,Q=cn.length;i<Q;i++){F(cn[i],el);}}else{F(cn,el);}}if(o.html){el.innerHTML=o.html;}if(N){N.appendChild(el);}return el;};var G=function(N,s,h,e){A.innerHTML=[s,h,e].join('');
+var i=-1,el=A;while(++i<N&&el.firstChild){el=el.firstChild;}return el;};var ts='<table>',te='</table>',H=ts+'<tbody>',I='</tbody>'+te,J=H+'<tr>',K='</tr>'+I;var L=function(N,O,el,P){if(!A){A=document.createElement('div');}var Q;var R=null;if(N=='td'){if(O=='afterbegin'||O=='beforeend'){return;
+}if(O=='beforebegin'){R=el;el=el.parentNode;}else{R=el.nextSibling;el=el.parentNode;}Q=G(4,J,P,K);}else if(N=='tr'){if(O=='beforebegin'){R=el;el=el.parentNode;Q=G(3,H,P,I);}else if(O=='afterend'){R=el.nextSibling;el=el.parentNode;Q=G(3,H,P,I);}else{if(O=='afterbegin'){R=el.firstChild;
+}Q=G(4,J,P,K);}}else if(N=='tbody'){if(O=='beforebegin'){R=el;el=el.parentNode;Q=G(2,ts,P,te);}else if(O=='afterend'){R=el.nextSibling;el=el.parentNode;Q=G(2,ts,P,te);}else{if(O=='afterbegin'){R=el.firstChild;}Q=G(3,H,P,I);}}else{if(O=='beforebegin'||O=='afterend'){return;
+}if(O=='afterbegin'){R=el.firstChild;}Q=G(2,ts,P,te);}el.insertBefore(Q,R);return Q;};var M=function(N,to){Roo.log(["UpdateNode",N,to]);if(N.nodeType!=to.nodeType){Roo.log(["ReplaceChild - mismatch notType",to,N]);N.parentNode.replaceChild(to,N);}if(N.nodeType==3){if(N.data==to.data){return;
+}N.data=to.data;return;}if(!N.parentNode){return;}if(N.nodeType!=1||N.tagName!=to.tagName){Roo.log(["ReplaceChild",N,to]);N.parentNode.replaceChild(to,N);return;}var ar=Array.from(N.attributes);for(var i=0;i<ar.length;i++){if(to.hasAttribute(ar[i].name)){continue;
+}if(ar[i].name=='id'){continue;}Roo.log("removeAttribute"+ar[i].name);N.removeAttribute(ar[i].name);}ar=to.attributes;for(var i=0;i<ar.length;i++){if(N.getAttribute(ar[i].name)==to.getAttribute(ar[i].name)){Roo.log("skipAttribute "+ar[i].name+'='+to.getAttribute(ar[i].name));
+continue;}Roo.log("updateAttribute "+ar[i].name+'=>'+to.getAttribute(ar[i].name));N.setAttribute(ar[i].name,to.getAttribute(ar[i].name));}var O=Array.from(N.childNodes);var P=Array.from(to.childNodes);for(var i=0;i<Math.max(P.length,O.length);i++){if(i>=O.length){N.appendChild(P[i]);
+Roo.log(["add",P[i]]);}else if(i>=P.length){N.removeChild(O[i]);Roo.log(["remove",O[i]]);}else{M(O[i],P[i]);}}};return {useDom:false,markup:function(o){return E(o);},applyStyles:function(el,N){if(N){el=Roo.fly(el);if(typeof N=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+var O;while((O=re.exec(N))!=null){el.setStyle(O[1],O[2]);}}else if(typeof N=="object"){for(var P in N){el.setStyle(P,N[P]);}}else if(typeof N=="function"){Roo.DomHelper.applyStyles(el,N.call());}}},insertHtml:function(N,el,O){N=N.toLowerCase();if(el.insertAdjacentHTML){if(C.test(el.tagName)){var rs;
+if(rs=L(el.tagName.toLowerCase(),N,el,O)){return rs;}}switch(N){case "beforebegin":el.insertAdjacentHTML('BeforeBegin',O);return el.previousSibling;case "afterbegin":el.insertAdjacentHTML('AfterBegin',O);return el.firstChild;case "beforeend":el.insertAdjacentHTML('BeforeEnd',O);
+return el.lastChild;case "afterend":el.insertAdjacentHTML('AfterEnd',O);return el.nextSibling;}throw 'Illegal insertion point -> "'+N+'"';}var P=el.ownerDocument.createRange();var Q;switch(N){case "beforebegin":P.setStartBefore(el);Q=P.createContextualFragment(O);
+el.parentNode.insertBefore(Q,el);return el.previousSibling;case "afterbegin":if(el.firstChild){P.setStartBefore(el.firstChild);Q=P.createContextualFragment(O);el.insertBefore(Q,el.firstChild);return el.firstChild;}else{el.innerHTML=O;return el.firstChild;
+}case "beforeend":if(el.lastChild){P.setStartAfter(el.lastChild);Q=P.createContextualFragment(O);el.appendChild(Q);return el.lastChild;}else{el.innerHTML=O;return el.lastChild;}case "afterend":P.setStartAfter(el);Q=P.createContextualFragment(O);el.parentNode.insertBefore(Q,el.nextSibling);
+return el.nextSibling;}throw 'Illegal insertion point -> "'+N+'"';},insertBefore:function(el,o,N){return this.doInsert(el,o,N,"beforeBegin");},insertAfter:function(el,o,N){return this.doInsert(el,o,N,"afterEnd","nextSibling");},insertFirst:function(el,o,N){return this.doInsert(el,o,N,"afterBegin");
+},doInsert:function(el,o,N,O,P){el=Roo.getDom(el);var Q;if(this.useDom||o.ns){Q=F(o,null);el.parentNode.insertBefore(Q,P?el[P]:el);}else{var R=E(o);Q=this.insertHtml(O,el,R);}return N?Roo.get(Q,true):Q;},append:function(el,o,N){el=Roo.getDom(el);var O;if(this.useDom||o.ns){O=F(o,null);
+el.appendChild(O);}else{var P=E(o);O=this.insertHtml("beforeEnd",el,P);}return N?Roo.get(O,true):O;},overwrite:function(el,o,N){el=Roo.getDom(el);if(o.ns){while(el.childNodes.length){el.removeChild(el.firstChild);}F(o,el);}else{el.innerHTML=E(o);}return N?Roo.get(el.firstChild,true):el.firstChild;
+},createTemplate:function(o){var N=E(o);return new Roo.Template(N);},update:function(el,o){M(Roo.getDom(el),F(o));}};}();
 // Roo/Template.js
 Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}if(typeof(A)=='object'){Roo.apply(this,A)}else{this.html=A;}if(this.url){this.load();}};Roo.Template.prototype={onLoad:false,url:false,html:'',compiled:false,loaded:false,applyTemplate:function(A){try{if(this.compiled){return this.compiled(A);
 }var B=this.disableFormats!==true;var fm=Roo.util.Format,C=this;var fn=function(m,D,E,F){if(E&&B){if(E.substr(0,5)=="this."){return C.call(E.substr(5),A[D],A);}else{if(F){var re=/^\s*['"](.*)["']\s*$/;F=F.split(',');for(var i=0,G=F.length;i<G;i++){F[i]=F[i].replace(re,"$1");
 // Roo/Template.js
 Roo.Template=function(A){if(A instanceof Array){A=A.join("");}else if(arguments.length>1){A=Array.prototype.join.call(arguments,"");}if(typeof(A)=='object'){Roo.apply(this,A)}else{this.html=A;}if(this.url){this.load();}};Roo.Template.prototype={onLoad:false,url:false,html:'',compiled:false,loaded:false,applyTemplate:function(A){try{if(this.compiled){return this.compiled(A);
 }var B=this.disableFormats!==true;var fm=Roo.util.Format,C=this;var fn=function(m,D,E,F){if(E&&B){if(E.substr(0,5)=="this."){return C.call(E.substr(5),A[D],A);}else{if(F){var re=/^\s*['"](.*)["']\s*$/;F=F.split(',');for(var i=0,G=F.length;i<G;i++){F[i]=F[i].replace(re,"$1");
index 7b48a1d..d2b15cc 100644 (file)
@@ -691,7 +691,7 @@ Roo.factory(conf, Roo.data);
                                        return 'xs'
                        }
                        
                                        return 'xs'
                        }
                        
-               }
+               } 
         
     });
 
         
     });
 
@@ -700,9 +700,8 @@ Roo.factory(conf, Roo.data);
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
 
 Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data",
                 "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout",
-                "Roo.app", "Roo.ux",
-                "Roo.bootstrap",
-                "Roo.bootstrap.dash");
+                "Roo.app", "Roo.ux" 
+               );
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -955,6 +954,16 @@ String.prototype.unicodeClean = function () {
     );
 };
   
     );
 };
   
+
+/**
+  * Make the first letter of a string uppercase
+  *
+  * @return {String} The new string.
+  */
+String.prototype.toUpperCaseFirst = function () {
+    return this.charAt(0).toUpperCase() + this.slice(1);
+};  
+  
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -1046,30 +1055,50 @@ Roo.applyIf(Array.prototype, {
      */
     equals : function(b)
     {
      */
     equals : function(b)
     {
-        // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
-       if (this === b) {
-           return true;
-        }
-       if (b == null) {
-           return false;
-       }
-       if (this.length !== b.length) {
-           return false;
-       }
-      
-       // sort?? a.sort().equals(b.sort());
+            // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
+        if (this === b) {
+            return true;
+        }
+        if (b == null) {
+            return false;
+        }
+        if (this.length !== b.length) {
+            return false;
+        }
+          
+        // sort?? a.sort().equals(b.sort());
+          
+        for (var i = 0; i < this.length; ++i) {
+            if (this[i] !== b[i]) {
+            return false;
+            }
+        }
+        return true;
+    } 
+    
+    
+    
+    
+});
+
+Roo.applyIf(Array, {
+ /**
+     * from
+     * @static
+     * @param {Array} o Or Array like object (eg. nodelist)
+     * @returns {Array} 
+     */
+    from : function(o)
+    {
+        var ret= [];
+    
+        for (var i =0; i < o.length; i++) { 
+            ret[i] = o[i];
+        }
+        return ret;
       
       
-       for (var i = 0; i < this.length; ++i) {
-           if (this[i] !== b[i]) {
-               return false;
-           }
-       }
-       return true;
     }
 });
     }
 });
-
-
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -1373,17 +1402,17 @@ Date.createParser = function(format) {
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
     }
 
     code += "if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-        + "{v = new Date(y, m, d, h, i, s);}\n"
+        + "{v = new Date(y, m, d, h, i, s); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-        + "{v = new Date(y, m, d, h, i);}\n"
+        + "{v = new Date(y, m, d, h, i); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0 && h >= 0)\n"
-        + "{v = new Date(y, m, d, h);}\n"
+        + "{v = new Date(y, m, d, h); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
         + "else if (y >= 0 && m >= 0 && d > 0)\n"
-        + "{v = new Date(y, m, d);}\n"
+        + "{v = new Date(y, m, d); v.setFullYear(y);}\n"
         + "else if (y >= 0 && m >= 0)\n"
         + "else if (y >= 0 && m >= 0)\n"
-        + "{v = new Date(y, m);}\n"
+        + "{v = new Date(y, m); v.setFullYear(y);}\n"
         + "else if (y >= 0)\n"
         + "else if (y >= 0)\n"
-        + "{v = new Date(y);}\n"
+        + "{v = new Date(y); v.setFullYear(y);}\n"
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
         + "}return (v && (z || o))?\n" // favour UTC offset over GMT offset
         + "    ((z)? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n" // reset to UTC, then add offset
         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n" // reset to GMT, then add offset
@@ -1443,7 +1472,7 @@ Date.formatCodeToRegex = function(character, currentGroup) {
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
             s:"(\\d{1,2})"}; // Numeric representation of a month, without leading zeros
     case "m":
         return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
+            c:"m = Math.max(0,parseInt(results[" + currentGroup + "], 10) - 1);\n",
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
             s:"(\\d{2})"}; // Numeric representation of a month, with leading zeros
     case "t":
         return {g:0,
@@ -4878,7 +4907,468 @@ Roo.lib.Easing = {
             }
         };
     })();
             }
         };
     })();
-/*
+/**
+ * Originally based of this code... - refactored for Roo...
+ * https://github.com/aaalsaleh/undo-manager
+ * undo-manager.js
+ * @author  Abdulrahman Alsaleh 
+ * @copyright 2015 Abdulrahman Alsaleh 
+ * @license  MIT License (c) 
+ *
+ * Hackily modifyed by alan@roojs.com
+ *
+ *
+ *  
+ *
+ *  TOTALLY UNTESTED...
+ *
+ *  Documentation to be done....
+ */
+
+/**
+* @class Roo.lib.UndoManager
+* An undo manager implementation in JavaScript. It follows the W3C UndoManager and DOM Transaction
+* Draft and the undocumented and disabled Mozilla Firefox's UndoManager implementation.
+
+ * Usage:
+ * <pre><code>
+
+
+editor.undoManager = new Roo.lib.UndoManager(1000, editor);
+</code></pre>
+
+* For more information see this blog post with examples:
+*  <a href="http://www.cnitblog.com/seeyeah/archive/2011/12/30/38728.html/">DomHelper
+     - Create Elements using DOM, HTML fragments and Templates</a>. 
+* @constructor
+* @param {Number} limit how far back to go ... use 1000?
+* @param {Object} scope usually use document..
+*/
+
+Roo.lib.UndoManager = function (limit, undoScopeHost)
+{
+    this.stack = [];
+    this.limit = limit;
+    this.scope = undoScopeHost;
+    this.fireEvent = typeof CustomEvent != 'undefined' && undoScopeHost && undoScopeHost.dispatchEvent;
+    if (this.fireEvent) {
+        this.bindEvents();
+    }
+    this.reset();
+    
+};
+        
+Roo.lib.UndoManager.prototype = {
+    
+    limit : false,
+    stack : false,
+    scope :  false,
+    fireEvent : false,
+    position : 0,
+    length : 0,
+    
+    
+     /**
+     * To push and execute a transaction, the method undoManager.transact
+     * must be called by passing a transaction object as the first argument, and a merge
+     * flag as the second argument. A transaction object has the following properties:
+     *
+     * Usage:
+<pre><code>
+undoManager.transact({
+    label: 'Typing',
+    execute: function() { ... },
+    undo: function() { ... },
+    // redo same as execute
+    redo: function() { this.execute(); }
+}, false);
+
+// merge transaction
+undoManager.transact({
+    label: 'Typing',
+    execute: function() { ... },  // this will be run...
+    undo: function() { ... }, // what to do when undo is run.
+    // redo same as execute
+    redo: function() { this.execute(); }
+}, true); 
+</code></pre> 
+     *
+     * 
+     * @param {Object} transaction The transaction to add to the stack.
+     * @return {String} The HTML fragment
+     */
+    
+    
+    transact : function (transaction, merge)
+    {
+        if (arguments.length < 2) {
+            throw new TypeError('Not enough arguments to UndoManager.transact.');
+        }
+
+        transaction.execute();
+
+        this.stack.splice(0, this.position);
+        if (merge && this.length) {
+            this.stack[0].push(transaction);
+        } else {
+            this.stack.unshift([transaction]);
+        }
+    
+        this.position = 0;
+
+        if (this.limit && this.stack.length > this.limit) {
+            this.length = this.stack.length = this.limit;
+        } else {
+            this.length = this.stack.length;
+        }
+
+        if (this.fireEvent) {
+            this.scope.dispatchEvent(
+                new CustomEvent('DOMTransaction', {
+                    detail: {
+                        transactions: this.stack[0].slice()
+                    },
+                    bubbles: true,
+                    cancelable: false
+                })
+            );
+        }
+        
+        //Roo.log("transaction: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
+      
+        
+    },
+
+    undo : function ()
+    {
+        //Roo.log("undo: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
+        
+        if (this.position < this.length) {
+            for (var i = this.stack[this.position].length - 1; i >= 0; i--) {
+                this.stack[this.position][i].undo();
+            }
+            this.position++;
+
+            if (this.fireEvent) {
+                this.scope.dispatchEvent(
+                    new CustomEvent('undo', {
+                        detail: {
+                            transactions: this.stack[this.position - 1].slice()
+                        },
+                        bubbles: true,
+                        cancelable: false
+                    })
+                );
+            }
+        }
+    },
+
+    redo : function ()
+    {
+        if (this.position > 0) {
+            for (var i = 0, n = this.stack[this.position - 1].length; i < n; i++) {
+                this.stack[this.position - 1][i].redo();
+            }
+            this.position--;
+
+            if (this.fireEvent) {
+                this.scope.dispatchEvent(
+                    new CustomEvent('redo', {
+                        detail: {
+                            transactions: this.stack[this.position].slice()
+                        },
+                        bubbles: true,
+                        cancelable: false
+                    })
+                );
+            }
+        }
+    },
+
+    item : function (index)
+    {
+        if (index >= 0 && index < this.length) {
+            return this.stack[index].slice();
+        }
+        return null;
+    },
+
+    clearUndo : function () {
+        this.stack.length = this.length = this.position;
+    },
+
+    clearRedo : function () {
+        this.stack.splice(0, this.position);
+        this.position = 0;
+        this.length = this.stack.length;
+    },
+    /**
+     * Reset the undo - probaly done on load to clear all history.
+     */
+    reset : function()
+    {
+        this.stack = [];
+        this.position = 0;
+        this.length = 0;
+        this.current_html = this.scope.innerHTML;
+        if (this.timer !== false) {
+            clearTimeout(this.timer);
+        }
+        this.timer = false;
+        this.merge = false;
+        this.addEvent();
+        
+    },
+    current_html : '',
+    timer : false,
+    merge : false,
+    
+    
+    // this will handle the undo/redo on the element.?
+    bindEvents : function()
+    {
+        var el  = this.scope;
+        el.undoManager = this;
+        
+        
+        this.scope.addEventListener('keydown', function(e) {
+            if ((e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+                if (e.shiftKey) {
+                    el.undoManager.redo(); // Ctrl/Command + Shift + Z
+                } else {
+                    el.undoManager.undo(); // Ctrl/Command + Z
+                }
+        
+                e.preventDefault();
+            }
+        });
+        /// ignore keyup..
+        this.scope.addEventListener('keyup', function(e) {
+            if ((e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+                e.preventDefault();
+            }
+        });
+        
+        
+        
+        var t = this;
+        
+        el.addEventListener('input', function(e) {
+            if(el.innerHTML == t.current_html) {
+                return;
+            }
+            // only record events every second.
+            if (t.timer !== false) {
+               clearTimeout(t.timer);
+               t.timer = false;
+            }
+            t.timer = setTimeout(function() { t.merge = false; }, 1000);
+            
+            t.addEvent(t.merge);
+            t.merge = true; // ignore changes happening every second..
+        });
+       },
+    /**
+     * Manually add an event.
+     * Normall called without arguements - and it will just get added to the stack.
+     * 
+     */
+    
+    addEvent : function(merge)
+    {
+        //Roo.log("undomanager +" + (merge ? 'Y':'n'));
+        // not sure if this should clear the timer 
+        merge = typeof(merge) == 'undefined' ? false : merge; 
+        
+        this.scope.undoManager.transact({
+            scope : this.scope,
+            oldHTML: this.current_html,
+            newHTML: this.scope.innerHTML,
+            // nothing to execute (content already changed when input is fired)
+            execute: function() { },
+            undo: function() {
+                this.scope.innerHTML = this.current_html = this.oldHTML;
+            },
+            redo: function() {
+                this.scope.innerHTML = this.current_html = this.newHTML;
+            }
+        }, false); //merge);
+        
+        this.merge = merge;
+        
+        this.current_html = this.scope.innerHTML;
+    }
+    
+    
+     
+    
+    
+    
+};
+/**
+ * @class Roo.lib.Range
+ * @constructor
+ * This is a toolkit, normally used to copy features into a Dom Range element
+ * Roo.lib.Range.wrap(x);
+ *
+ *
+ *
+ */
+Roo.lib.Range = function() { };
+
+/**
+ * Wrap a Dom Range object, to give it new features...
+ * @static
+ * @param {Range} the range to wrap
+ */
+Roo.lib.Range.wrap = function(r) {
+    return Roo.apply(r, Roo.lib.Range.prototype);
+};
+/**
+ * find a parent node eg. LI / OL
+ * @param {string|Array} node name or array of nodenames
+ * @return {DomElement|false}
+ */
+Roo.apply(Roo.lib.Range.prototype,
+{
+    
+    closest : function(str)
+    {
+        if (typeof(str) != 'string') {
+            // assume it's a array.
+            for(var i = 0;i < str.length;i++) {
+                var r = this.closest(str[i]);
+                if (r !== false) {
+                    return r;
+                }
+                
+            }
+            return false;
+        }
+        str = str.toLowerCase();
+        var n = this.commonAncestorContainer; // might not be a node
+        while (n.nodeType != 1) {
+            n = n.parentNode;
+        }
+        
+        if (n.nodeName.toLowerCase() == str ) {
+            return n;
+        }
+        if (n.nodeName.toLowerCase() == 'body') {
+            return false;
+        }
+            
+        return n.closest(str) || false;
+        
+    },
+    cloneRange : function()
+    {
+        return Roo.lib.Range.wrap(Range.prototype.cloneRange.call(this));
+    }
+});/**
+ * @class Roo.lib.Selection
+ * @constructor
+ * This is a toolkit, normally used to copy features into a Dom Selection element
+ * Roo.lib.Selection.wrap(x);
+ *
+ *
+ *
+ */
+Roo.lib.Selection = function() { };
+
+/**
+ * Wrap a Dom Range object, to give it new features...
+ * @static
+ * @param {Range} the range to wrap
+ */
+Roo.lib.Selection.wrap = function(r, doc) {
+    Roo.apply(r, Roo.lib.Selection.prototype);
+    r.ownerDocument = doc; // usefull so we dont have to keep referening to it.
+    return r;
+};
+/**
+ * find a parent node eg. LI / OL
+ * @param {string|Array} node name or array of nodenames
+ * @return {DomElement|false}
+ */
+Roo.apply(Roo.lib.Selection.prototype,
+{
+    /**
+     * the owner document
+     */
+    ownerDocument : false,
+    
+    getRangeAt : function(n)
+    {
+        return Roo.lib.Range.wrap(Selection.prototype.getRangeAt.call(this,n));
+    },
+    
+    /**
+     * insert node at selection 
+     * @param {DomElement|string} node
+     * @param {string} cursor (after|in|none) where to place the cursor after inserting.
+     */
+    insertNode: function(node, cursor)
+    {
+        if (typeof(node) == 'string') {
+            node = this.ownerDocument.createElement(node);
+            if (cursor == 'in') {
+                node.innerHTML = '&nbsp;';
+            }
+        }
+        
+        var range = this.getRangeAt(0);
+        
+        if (this.type != 'Caret') {
+            range.deleteContents();
+        }
+        var sn = node.childNodes[0]; // select the contents.
+
+        
+        
+        range.insertNode(node);
+        if (cursor == 'after') {
+            node.insertAdjacentHTML('afterend', '&nbsp;');
+            sn = node.nextSibling;
+        }
+        
+        if (cursor == 'none') {
+            return;
+        }
+        
+        this.cursorText(sn);
+    },
+    
+    cursorText : function(n)
+    {
+       
+        //var range = this.getRangeAt(0);
+        range = Roo.lib.Range.wrap(new Range());
+        //range.selectNode(n);
+        
+        var ix = Array.from(n.parentNode.childNodes).indexOf(n);
+        range.setStart(n.parentNode,ix);
+        range.setEnd(n.parentNode,ix+1);
+        //range.collapse(false);
+         
+        this.removeAllRanges();
+        this.addRange(range);
+        
+        Roo.log([n, range, this,this.baseOffset,this.extentOffset, this.type]);
+    },
+    cursorAfter : function(n)
+    {
+        if (!n.nextSibling || n.nextSibling.nodeValue != '&nbsp;') {
+            n.insertAdjacentHTML('afterend', '&nbsp;');
+        }
+        this.cursorText (n.nextSibling);
+    }
+        
+    
+});/*
  * Based on:
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
  * Based on:
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
@@ -5125,212 +5615,320 @@ Roo.DomHelper = function(){
         el.insertBefore(node, before);
         return node;
     };
         el.insertBefore(node, before);
         return node;
     };
+    
+    // this is a bit like the react update code...
+    // 
+    
+    var updateNode = function(from, to)
+    {
+        // should we handle non-standard elements?
+        Roo.log(["UpdateNode" , from, to]);
+        if (from.nodeType != to.nodeType) {
+            Roo.log(["ReplaceChild - mismatch notType" , to, from ]);
+            from.parentNode.replaceChild(to, from);
+        }
+        
+        if (from.nodeType == 3) {
+            // assume it's text?!
+            if (from.data == to.data) {
+                return;
+            }
+            from.data = to.data;
+            return;
+        }
+        if (!from.parentNode) {
+            // not sure why this is happening?
+            return;
+        }
+        // assume 'to' doesnt have '1/3 nodetypes!
+        // not sure why, by from, parent node might not exist?
+        if (from.nodeType !=1 || from.tagName != to.tagName) {
+            Roo.log(["ReplaceChild" , from, to ]);
+            
+            from.parentNode.replaceChild(to, from);
+            return;
+        }
+        // compare attributes
+        var ar = Array.from(from.attributes);
+        for(var i = 0; i< ar.length;i++) {
+            if (to.hasAttribute(ar[i].name)) {
+                continue;
+            }
+            if (ar[i].name == 'id') { // always keep ids?
+               continue;
+            }
+            //if (ar[i].name == 'style') {
+            //   throw "style removed?";
+            //}
+            Roo.log("removeAttribute" + ar[i].name);
+            from.removeAttribute(ar[i].name);
+        }
+        ar = to.attributes;
+        for(var i = 0; i< ar.length;i++) {
+            if (from.getAttribute(ar[i].name) == to.getAttribute(ar[i].name)) {
+                Roo.log("skipAttribute " + ar[i].name  + '=' + to.getAttribute(ar[i].name));
+                continue;
+            }
+            Roo.log("updateAttribute " + ar[i].name + '=>' + to.getAttribute(ar[i].name));
+            from.setAttribute(ar[i].name, to.getAttribute(ar[i].name));
+        }
+        // children
+        var far = Array.from(from.childNodes);
+        var tar = Array.from(to.childNodes);
+        // if the lengths are different.. then it's probably a editable content change, rather than
+        // a change of the block definition..
+        
+        // this did notwork , as our rebuilt nodes did not include ID's so did not match at all.
+         /*if (from.innerHTML == to.innerHTML) {
+            return;
+        }
+        if (far.length != tar.length) {
+            from.innerHTML = to.innerHTML;
+            return;
+        }
+        */
+        
+        for(var i = 0; i < Math.max(tar.length, far.length); i++) {
+            if (i >= far.length) {
+                from.appendChild(tar[i]);
+                Roo.log(["add", tar[i]]);
+                
+            } else if ( i  >= tar.length) {
+                from.removeChild(far[i]);
+                Roo.log(["remove", far[i]]);
+            } else {
+                
+                updateNode(far[i], tar[i]);
+            }    
+        }
+        
+        
+        
+        
+    };
+    
+    
 
     return {
 
     return {
-    /** True to force the use of DOM instead of html fragments @type Boolean */
-    useDom : false,
-
-    /**
-     * Returns the markup for the passed Element(s) config
-     * @param {Object} o The Dom object spec (and children)
-     * @return {String}
-     */
-    markup : function(o){
-        return createHtml(o);
-    },
-
-    /**
-     * Applies a style specification to an element
-     * @param {String/HTMLElement} el The element to apply styles to
-     * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
-     * a function which returns such a specification.
-     */
-    applyStyles : function(el, styles){
-        if(styles){
-           el = Roo.fly(el);
-           if(typeof styles == "string"){
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               var matches;
-               while ((matches = re.exec(styles)) != null){
-                   el.setStyle(matches[1], matches[2]);
-               }
-           }else if (typeof styles == "object"){
-               for (var style in styles){
-                  el.setStyle(style, styles[style]);
+        /** True to force the use of DOM instead of html fragments @type Boolean */
+        useDom : false,
+    
+        /**
+         * Returns the markup for the passed Element(s) config
+         * @param {Object} o The Dom object spec (and children)
+         * @return {String}
+         */
+        markup : function(o){
+            return createHtml(o);
+        },
+    
+        /**
+         * Applies a style specification to an element
+         * @param {String/HTMLElement} el The element to apply styles to
+         * @param {String/Object/Function} styles A style specification string eg "width:100px", or object in the form {width:"100px"}, or
+         * a function which returns such a specification.
+         */
+        applyStyles : function(el, styles){
+            if(styles){
+               el = Roo.fly(el);
+               if(typeof styles == "string"){
+                   var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
+                   var matches;
+                   while ((matches = re.exec(styles)) != null){
+                       el.setStyle(matches[1], matches[2]);
+                   }
+               }else if (typeof styles == "object"){
+                   for (var style in styles){
+                      el.setStyle(style, styles[style]);
+                   }
+               }else if (typeof styles == "function"){
+                    Roo.DomHelper.applyStyles(el, styles.call());
                }
                }
-           }else if (typeof styles == "function"){
-                Roo.DomHelper.applyStyles(el, styles.call());
-           }
-        }
-    },
-
-    /**
-     * Inserts an HTML fragment into the Dom
-     * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
-     * @param {HTMLElement} el The context element
-     * @param {String} html The HTML fragmenet
-     * @return {HTMLElement} The new node
-     */
-    insertHtml : function(where, el, html){
-        where = where.toLowerCase();
-        if(el.insertAdjacentHTML){
-            if(tableRe.test(el.tagName)){
-                var rs;
-                if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
-                    return rs;
+            }
+        },
+    
+        /**
+         * Inserts an HTML fragment into the Dom
+         * @param {String} where Where to insert the html in relation to el - beforeBegin, afterBegin, beforeEnd, afterEnd.
+         * @param {HTMLElement} el The context element
+         * @param {String} html The HTML fragmenet
+         * @return {HTMLElement} The new node
+         */
+        insertHtml : function(where, el, html){
+            where = where.toLowerCase();
+            if(el.insertAdjacentHTML){
+                if(tableRe.test(el.tagName)){
+                    var rs;
+                    if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){
+                        return rs;
+                    }
                 }
                 }
+                switch(where){
+                    case "beforebegin":
+                        el.insertAdjacentHTML('BeforeBegin', html);
+                        return el.previousSibling;
+                    case "afterbegin":
+                        el.insertAdjacentHTML('AfterBegin', html);
+                        return el.firstChild;
+                    case "beforeend":
+                        el.insertAdjacentHTML('BeforeEnd', html);
+                        return el.lastChild;
+                    case "afterend":
+                        el.insertAdjacentHTML('AfterEnd', html);
+                        return el.nextSibling;
+                }
+                throw 'Illegal insertion point -> "' + where + '"';
             }
             }
+            var range = el.ownerDocument.createRange();
+            var frag;
             switch(where){
             switch(where){
-                case "beforebegin":
-                    el.insertAdjacentHTML('BeforeBegin', html);
+                 case "beforebegin":
+                    range.setStartBefore(el);
+                    frag = range.createContextualFragment(html);
+                    el.parentNode.insertBefore(frag, el);
                     return el.previousSibling;
                     return el.previousSibling;
-                case "afterbegin":
-                    el.insertAdjacentHTML('AfterBegin', html);
-                    return el.firstChild;
+                 case "afterbegin":
+                    if(el.firstChild){
+                        range.setStartBefore(el.firstChild);
+                        frag = range.createContextualFragment(html);
+                        el.insertBefore(frag, el.firstChild);
+                        return el.firstChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.firstChild;
+                    }
                 case "beforeend":
                 case "beforeend":
-                    el.insertAdjacentHTML('BeforeEnd', html);
-                    return el.lastChild;
+                    if(el.lastChild){
+                        range.setStartAfter(el.lastChild);
+                        frag = range.createContextualFragment(html);
+                        el.appendChild(frag);
+                        return el.lastChild;
+                    }else{
+                        el.innerHTML = html;
+                        return el.lastChild;
+                    }
                 case "afterend":
                 case "afterend":
-                    el.insertAdjacentHTML('AfterEnd', html);
-                    return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-        }
-        var range = el.ownerDocument.createRange();
-        var frag;
-        switch(where){
-             case "beforebegin":
-                range.setStartBefore(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el);
-                return el.previousSibling;
-             case "afterbegin":
-                if(el.firstChild){
-                    range.setStartBefore(el.firstChild);
+                    range.setStartAfter(el);
                     frag = range.createContextualFragment(html);
                     frag = range.createContextualFragment(html);
-                    el.insertBefore(frag, el.firstChild);
-                    return el.firstChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.firstChild;
+                    el.parentNode.insertBefore(frag, el.nextSibling);
+                    return el.nextSibling;
                 }
                 }
-            case "beforeend":
-                if(el.lastChild){
-                    range.setStartAfter(el.lastChild);
-                    frag = range.createContextualFragment(html);
-                    el.appendChild(frag);
-                    return el.lastChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.lastChild;
+                throw 'Illegal insertion point -> "' + where + '"';
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them before el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertBefore : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "beforeBegin");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them after el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object} o The Dom object spec (and children)
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertAfter : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
+        },
+    
+        /**
+         * Creates new Dom element(s) and inserts them as the first child of el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        insertFirst : function(el, o, returnElement){
+            return this.doInsert(el, o, returnElement, "afterBegin");
+        },
+    
+        // private
+        doInsert : function(el, o, returnElement, pos, sibling){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml(pos, el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and appends them to el
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        append : function(el, o, returnElement){
+            el = Roo.getDom(el);
+            var newNode;
+            if(this.useDom || o.ns){
+                newNode = createDom(o, null);
+                el.appendChild(newNode);
+            }else{
+                var html = createHtml(o);
+                newNode = this.insertHtml("beforeEnd", el, html);
+            }
+            return returnElement ? Roo.get(newNode, true) : newNode;
+        },
+    
+        /**
+         * Creates new Dom element(s) and overwrites the contents of el with them
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         * @param {Boolean} returnElement (optional) true to return a Roo.Element
+         * @return {HTMLElement/Roo.Element} The new node
+         */
+        overwrite : function(el, o, returnElement)
+        {
+            el = Roo.getDom(el);
+            if (o.ns) {
+              
+                while (el.childNodes.length) {
+                    el.removeChild(el.firstChild);
                 }
                 }
-            case "afterend":
-                range.setStartAfter(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el.nextSibling);
-                return el.nextSibling;
+                createDom(o, el);
+            } else {
+                el.innerHTML = createHtml(o);   
             }
             }
-            throw 'Illegal insertion point -> "' + where + '"';
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them before el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertBefore : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "beforeBegin");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them after el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object} o The Dom object spec (and children)
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertAfter : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
-    },
-
-    /**
-     * Creates new Dom element(s) and inserts them as the first child of el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    insertFirst : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterBegin");
-    },
-
-    // private
-    doInsert : function(el, o, returnElement, pos, sibling){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml(pos, el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and appends them to el
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    append : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        var newNode;
-        if(this.useDom || o.ns){
-            newNode = createDom(o, null);
-            el.appendChild(newNode);
-        }else{
+            
+            return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
+        },
+    
+        /**
+         * Creates a new Roo.DomHelper.Template from the Dom object spec
+         * @param {Object} o The Dom object spec (and children)
+         * @return {Roo.DomHelper.Template} The new template
+         */
+        createTemplate : function(o){
             var html = createHtml(o);
             var html = createHtml(o);
-            newNode = this.insertHtml("beforeEnd", el, html);
-        }
-        return returnElement ? Roo.get(newNode, true) : newNode;
-    },
-
-    /**
-     * Creates new Dom element(s) and overwrites the contents of el with them
-     * @param {String/HTMLElement/Element} el The context element
-     * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
-     * @param {Boolean} returnElement (optional) true to return a Roo.Element
-     * @return {HTMLElement/Roo.Element} The new node
-     */
-    overwrite : function(el, o, returnElement){
-        el = Roo.getDom(el);
-        if (o.ns) {
-          
-            while (el.childNodes.length) {
-                el.removeChild(el.firstChild);
-            }
-            createDom(o, el);
-        } else {
-            el.innerHTML = createHtml(o);   
+            return new Roo.Template(html);
+        },
+         /**
+         * Updates the first element with the spec from the o (replacing if necessary)
+         * This iterates through the children, and updates attributes / children etc..
+         * @param {String/HTMLElement/Element} el The context element
+         * @param {Object/String} o The Dom object spec (and children) or raw HTML blob
+         */
+        
+        update : function(el, o)
+        {
+            updateNode(Roo.getDom(el), createDom(o));
+            
         }
         
         }
         
-        return returnElement ? Roo.get(el.firstChild, true) : el.firstChild;
-    },
-
-    /**
-     * Creates a new Roo.DomHelper.Template from the Dom object spec
-     * @param {Object} o The Dom object spec (and children)
-     * @return {Roo.DomHelper.Template} The new template
-     */
-    createTemplate : function(o){
-        var html = createHtml(o);
-        return new Roo.Template(html);
-    }
+        
     };
 }();
 /*
     };
 }();
 /*
@@ -24537,6 +25135,16 @@ Roo.extend(Roo.data.Store, Roo.util.Observable, {
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
+     * <li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
+     * <pre>
+                {
+                    data : data,  // array of key=>value data like JsonReader
+                    total : data.length,
+                    success : true
+                    
+                }
+        </pre>
+            }.</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
@@ -30877,7 +31485,7 @@ Roo.MenuButton = Roo.SplitButton;/*
 
 /**
  * @class Roo.Toolbar
 
 /**
  * @class Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field 
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
@@ -31413,7 +32021,23 @@ Roo.extend(Roo.Toolbar.TextItem, Roo.Toolbar.Item, {
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
-    focus:Roo.emptyFn
+    focus:Roo.emptyFn,
+     /**
+     * Shows this button
+     */
+    show: function(){
+        this.hidden = false;
+        this.el.style.display = "";
+    },
+    
+    /**
+     * Hides this button
+     */
+    hide: function(){
+        this.hidden = true;
+        this.el.style.display = "none";
+    }
+    
 });
 
 /**
 });
 
 /**
@@ -31536,7 +32160,7 @@ Roo.Toolbar.MenuButton = Roo.Toolbar.SplitButton;/*
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
@@ -31779,7 +32403,11 @@ Roo.extend(Roo.PagingToolbar, Roo.Toolbar, {
             this.loading.disable();
         }
     },
             this.loading.disable();
         }
     },
-
+    /**
+     * event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.
+     * @param {String} which (first|prev|next|last|refresh)  which button to press.
+     *
+     */
     // private
     onClick : function(which){
         var ds = this.ds;
     // private
     onClick : function(which){
         var ds = this.ds;
@@ -32869,6 +33497,7 @@ Roo.extend(Roo.Editor, Roo.Component, {
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
+ * @parent none builder
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
@@ -34146,6 +34775,7 @@ Roo.extend(Roo.LayoutDialog, Roo.BasicDialog, {
  
 /**
  * @class Roo.MessageBox
  
 /**
  * @class Roo.MessageBox
+ * @static
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
@@ -34255,6 +34885,7 @@ Roo.MessageBox = function(){
                         }
                     }
                 });
                         }
                     }
                 });
+              
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
@@ -34498,6 +35129,7 @@ Roo.Msg.show({
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
+            dlg.toFront();
             return this;
         },
 
             return this;
         },
 
@@ -38279,7 +38911,7 @@ Roo.extend(Roo.tree.ColumnTree, Roo.tree.TreePanel, {
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
- * @children Roo.menu.BaseItem
+ * @children Roo.menu.Item Roo.menu.Separator Roo.menu.TextItem
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
@@ -39364,7 +39996,7 @@ Roo.extend(Roo.menu.Item, Roo.menu.BaseItem, {
      */
     text: '',
      /**
      */
     text: '',
      /**
-     * @cfg {String} HTML to render in menu
+     * @cfg {String} html to render in menu
      * The text to show on the menu item (HTML version).
      */
     html: '',
      * The text to show on the menu item (HTML version).
      */
     html: '',
@@ -41437,6 +42069,16 @@ Roo.extend(Roo.form.DateField, Roo.form.TriggerField,  {
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
+       
+       
+       /**
+     * @cfg {Date/String} zeroValue
+     * if the date is less that this number, then the field is rendered as empty
+     * default is 1800
+     */
+       zeroValue : '1800-01-01',
+       
+       
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
@@ -41613,6 +42255,15 @@ dateField.setValue('2006-5-4');
 
     // private
     parseDate : function(value){
 
     // private
     parseDate : function(value){
+               
+               if (value instanceof Date) {
+                       if (value < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                               return  '';
+                       }
+                       return value;
+               }
+               
+               
         if(!value || value instanceof Date){
             return value;
         }
         if(!value || value instanceof Date){
             return value;
         }
@@ -41628,6 +42279,9 @@ dateField.setValue('2006-5-4');
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
+               if (v < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                       v = '';
+               }
         return v;
     },
 
         return v;
     },
 
@@ -44412,269 +45066,4663 @@ Roo.extend(Roo.form.Radio, Roo.form.Checkbox, {
     } 
     
     
     } 
     
     
-});//<script type="text/javascript">
-
-/*
- * Based  Ext JS Library 1.1.1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * LGPL
- *
- */
-/**
- * @class Roo.HtmlEditorCore
- * @extends Roo.Component
- * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
- *
- * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
- */
+});Roo.rtf = {}; // namespace
+Roo.rtf.Hex = function(hex)
+{
+    this.hexstr = hex;
+};
+Roo.rtf.Paragraph = function(opts)
+{
+    this.content = []; ///??? is that used?
+};Roo.rtf.Span = function(opts)
+{
+    this.value = opts.value;
+};
 
 
-Roo.HtmlEditorCore = function(config){
-    
-    
-    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
-    
+Roo.rtf.Group = function(parent)
+{
+    // we dont want to acutally store parent - it will make debug a nightmare..
+    this.content = [];
+    this.cn  = [];
+     
+       
     
     
-    this.addEvents({
-        /**
-         * @event initialize
-         * Fires when the editor is fully initialized (including the iframe)
-         * @param {Roo.HtmlEditorCore} this
-         */
-        initialize: true,
-        /**
-         * @event activate
-         * Fires when the editor is first receives the focus. Any insertion must wait
-         * until after this event.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        activate: true,
-         /**
-         * @event beforesync
-         * Fires before the textarea is updated with content from the editor iframe. Return false
-         * to cancel the sync.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforesync: true,
-         /**
-         * @event beforepush
-         * Fires before the iframe editor is updated with content from the textarea. Return false
-         * to cancel the push.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforepush: true,
-         /**
-         * @event sync
-         * Fires when the textarea is updated with content from the editor iframe.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        sync: true,
-         /**
-         * @event push
-         * Fires when the iframe editor is updated with content from the textarea.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        push: true,
+};
+
+Roo.rtf.Group.prototype = {
+    ignorable : false,
+    content: false,
+    cn: false,
+    addContent : function(node) {
+        // could set styles...
+        this.content.push(node);
+    },
+    addChild : function(cn)
+    {
+        this.cn.push(cn);
+    },
+    // only for images really...
+    toDataURL : function()
+    {
+        var mimetype = false;
+        switch(true) {
+            case this.content.filter(function(a) { return a.value == 'pngblip' } ).length > 0: 
+                mimetype = "image/png";
+                break;
+             case this.content.filter(function(a) { return a.value == 'jpegblip' } ).length > 0:
+                mimetype = "image/jpeg";
+                break;
+            default :
+                return 'about:blank'; // ?? error?
+        }
         
         
-        /**
-         * @event editorevent
-         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        editorevent: true
         
         
-    });
-    
-    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
+        var hexstring = this.content[this.content.length-1].value;
+        
+        return 'data:' + mimetype + ';base64,' + btoa(hexstring.match(/\w{2}/g).map(function(a) {
+            return String.fromCharCode(parseInt(a, 16));
+        }).join(""));
+    }
     
     
-    // defaults : white / black...
-    this.applyBlacklists();
+};
+// this looks like it's normally the {rtf{ .... }}
+Roo.rtf.Document = function()
+{
+    // we dont want to acutally store parent - it will make debug a nightmare..
+    this.rtlch  = [];
+    this.content = [];
+    this.cn = [];
     
     
+};
+Roo.extend(Roo.rtf.Document, Roo.rtf.Group, { 
+    addChild : function(cn)
+    {
+        this.cn.push(cn);
+        switch(cn.type) {
+            case 'rtlch': // most content seems to be inside this??
+            case 'listtext':
+            case 'shpinst':
+                this.rtlch.push(cn);
+                return;
+            default:
+                this[cn.type] = cn;
+        }
+        
+    },
     
     
+    getElementsByType : function(type)
+    {
+        var ret =  [];
+        this._getElementsByType(type, ret, this.cn, 'rtf');
+        return ret;
+    },
+    _getElementsByType : function (type, ret, search_array, path)
+    {
+        search_array.forEach(function(n,i) {
+            if (n.type == type) {
+                n.path = path + '/' + n.type + ':' + i;
+                ret.push(n);
+            }
+            if (n.cn.length > 0) {
+                this._getElementsByType(type, ret, n.cn, path + '/' + n.type+':'+i);
+            }
+        },this);
+    }
     
     
+});
+Roo.rtf.Ctrl = function(opts)
+{
+    this.value = opts.value;
+    this.param = opts.param;
 };
 };
+/**
+ *
+ *
+ * based on this https://github.com/iarna/rtf-parser
+ * it's really only designed to extract pict from pasted RTF 
+ *
+ * usage:
+ *
+ *  var images = new Roo.rtf.Parser().parse(a_string).filter(function(g) { return g.type == 'pict'; });
+ *  
+ *
+ */
 
 
 
 
-Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
 
 
 
-     /**
-     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
-     */
+Roo.rtf.Parser = function(text) {
+    //super({objectMode: true})
+    this.text = '';
+    this.parserState = this.parseText;
     
     
-    owner : false,
+    // these are for interpeter...
+    this.doc = {};
+    ///this.parserState = this.parseTop
+    this.groupStack = [];
+    this.hexStore = [];
+    this.doc = false;
     
     
-     /**
-     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
-     *                        Roo.resizable.
-     */
-    resizable : false,
-     /**
-     * @cfg {Number} height (in pixels)
-     */   
-    height: 300,
-   /**
-     * @cfg {Number} width (in pixels)
-     */   
-    width: 500,
+    this.groups = []; // where we put the return.
     
     
-    /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
-     * 
-     */
-    stylesheets: false,
+    for (var ii = 0; ii < text.length; ++ii) {
+        ++this.cpos;
+        
+        if (text[ii] === '\n') {
+            ++this.row;
+            this.col = 1;
+        } else {
+            ++this.col;
+        }
+        this.parserState(text[ii]);
+    }
     
     
-    /**
-     * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
-     */
-    allowComments: false,
-    // id of frame..
-    frameId: false,
     
     
-    // private properties
-    validationEvent : false,
-    deferHeight: true,
-    initialized : false,
-    activated : false,
-    sourceEditMode : false,
-    onFocus : Roo.emptyFn,
-    iframePad:3,
-    hideMode:'offsets',
     
     
-    clearUp: true,
+};
+Roo.rtf.Parser.prototype = {
+    text : '', // string being parsed..
+    controlWord : '',
+    controlWordParam :  '',
+    hexChar : '',
+    doc : false,
+    group: false,
+    groupStack : false,
+    hexStore : false,
     
     
-    // blacklist + whitelisted elements..
-    black: false,
-    white: false,
-     
-    bodyCls : '',
+    
+    cpos : 0, 
+    row : 1, // reportin?
+    col : 1, //
 
 
-    /**
-     * Protected method that will not generally be called directly. It
-     * is called when the editor initializes the iframe with HTML contents. Override this method if you
-     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
-     */
-    getDocMarkup : function(){
-        // body styles..
-        var st = '';
-        
-        // inherit styels from page...?? 
-        if (this.stylesheets === false) {
-            
-            Roo.get(document.head).select('style').each(function(node) {
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
-            
-            Roo.get(document.head).select('link').each(function(node) { 
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
-            
-        } else if (!this.stylesheets.length) {
-                // simple..
-                st = '<style type="text/css">' +
-                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-                   '</style>';
-        } else {
-            for (var i in this.stylesheets) { 
-                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
-            }
-            
+     
+    push : function (el)
+    {
+        var m = 'cmd'+ el.type;
+        if (typeof(this[m]) == 'undefined') {
+            Roo.log('invalid cmd:' + el.type);
+            return;
+        }
+        this[m](el);
+        //Roo.log(el);
+    },
+    flushHexStore : function()
+    {
+        if (this.hexStore.length < 1) {
+            return;
         }
         }
+        var hexstr = this.hexStore.map(
+            function(cmd) {
+                return cmd.value;
+        }).join('');
         
         
-        st +=  '<style type="text/css">' +
-            'IMG { cursor: pointer } ' +
-        '</style>';
-
-        var cls = 'roo-htmleditor-body';
+        this.group.addContent( new Roo.rtf.Hex( hexstr ));
+              
+            
+        this.hexStore.splice(0)
         
         
-        if(this.bodyCls.length){
-            cls += ' ' + this.bodyCls;
+    },
+    
+    cmdgroupstart : function()
+    {
+        this.flushHexStore();
+        if (this.group) {
+            this.groupStack.push(this.group);
         }
         }
-        
-        return '<html><head>' + st  +
-            //<style type="text/css">' +
-            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-            //'</style>' +
-            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
+         // parent..
+        if (this.doc === false) {
+            this.group = this.doc = new Roo.rtf.Document();
+            return;
+            
+        }
+        this.group = new Roo.rtf.Group(this.group);
     },
     },
-
-    // private
-    onRender : function(ct, position)
+    cmdignorable : function()
     {
     {
-        var _t = this;
-        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
-        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
-        
-        
-        this.el.dom.style.border = '0 none';
-        this.el.dom.setAttribute('tabIndex', -1);
-        this.el.addClass('x-hidden hide');
-        
+        this.flushHexStore();
+        this.group.ignorable = true;
+    },
+    cmdendparagraph : function()
+    {
+        this.flushHexStore();
+        this.group.addContent(new Roo.rtf.Paragraph());
+    },
+    cmdgroupend : function ()
+    {
+        this.flushHexStore();
+        var endingGroup = this.group;
         
         
         
         
-        if(Roo.isIE){ // fix IE 1px bogus margin
-            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        this.group = this.groupStack.pop();
+        if (this.group) {
+            this.group.addChild(endingGroup);
         }
         }
-       
-        
-        this.frameId = Roo.id();
-        
-         
-        
-        var iframe = this.owner.wrap.createChild({
-            tag: 'iframe',
-            cls: 'form-control', // bootstrap..
-            id: this.frameId,
-            name: this.frameId,
-            frameBorder : 'no',
-            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
-        }, this.el
-        );
         
         
         
         
-        this.iframe = iframe.dom;
-
-         this.assignDocWin();
-        
-        this.doc.designMode = 'on';
-       
-        this.doc.open();
-        this.doc.write(this.getDocMarkup());
-        this.doc.close();
-
         
         
-        var task = { // must defer to wait for browser to be ready
-            run : function(){
-                //console.log("run task?" + this.doc.readyState);
-                this.assignDocWin();
-                if(this.doc.body || this.doc.readyState == 'complete'){
-                    try {
-                        this.doc.designMode="on";
-                    } catch (e) {
-                        return;
-                    }
-                    Roo.TaskMgr.stop(task);
-                    this.initEditor.defer(10, this);
-                }
-            },
-            interval : 10,
-            duration: 10000,
-            scope: this
-        };
-        Roo.TaskMgr.start(task);
-
+        var doc = this.group || this.doc;
+        //if (endingGroup instanceof FontTable) {
+        //  doc.fonts = endingGroup.table
+        //} else if (endingGroup instanceof ColorTable) {
+        //  doc.colors = endingGroup.table
+        //} else if (endingGroup !== this.doc && !endingGroup.get('ignorable')) {
+        if (endingGroup.ignorable === false) {
+            //code
+            this.groups.push(endingGroup);
+           // Roo.log( endingGroup );
+        }
+            //Roo.each(endingGroup.content, function(item)) {
+            //    doc.addContent(item);
+            //}
+            //process.emit('debug', 'GROUP END', endingGroup.type, endingGroup.get('ignorable'))
+        //}
     },
     },
-
-    // private
-    onResize : function(w, h)
+    cmdtext : function (cmd)
     {
     {
-         Roo.log('resize: ' +w + ',' + h );
-        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
-        if(!this.iframe){
+        this.flushHexStore();
+        if (!this.group) { // an RTF fragment, missing the {\rtf1 header
+            //this.group = this.doc
+        }
+        this.group.addContent(new Roo.rtf.Span(cmd));
+    },
+    cmdcontrolword : function (cmd)
+    {
+        this.flushHexStore();
+        if (!this.group.type) {
+            this.group.type = cmd.value;
+            return;
+        }
+        this.group.addContent(new Roo.rtf.Ctrl(cmd));
+        // we actually don't care about ctrl words...
+        return ;
+        /*
+        var method = 'ctrl$' + cmd.value.replace(/-(.)/g, (_, char) => char.toUpperCase())
+        if (this[method]) {
+            this[method](cmd.param)
+        } else {
+            if (!this.group.get('ignorable')) process.emit('debug', method, cmd.param)
+        }
+        */
+    },
+    cmdhexchar : function(cmd) {
+        this.hexStore.push(cmd);
+    },
+    cmderror : function(cmd) {
+        throw new Exception (cmd.value);
+    },
+    
+    /*
+      _flush (done) {
+        if (this.text !== '\u0000') this.emitText()
+        done()
+      }
+      */
+      
+      
+    parseText : function(c)
+    {
+        if (c === '\\') {
+            this.parserState = this.parseEscapes;
+        } else if (c === '{') {
+            this.emitStartGroup();
+        } else if (c === '}') {
+            this.emitEndGroup();
+        } else if (c === '\x0A' || c === '\x0D') {
+            // cr/lf are noise chars
+        } else {
+            this.text += c;
+        }
+    },
+    
+    parseEscapes: function (c)
+    {
+        if (c === '\\' || c === '{' || c === '}') {
+            this.text += c;
+            this.parserState = this.parseText;
+        } else {
+            this.parserState = this.parseControlSymbol;
+            this.parseControlSymbol(c);
+        }
+    },
+    parseControlSymbol: function(c)
+    {
+        if (c === '~') {
+            this.text += '\u00a0'; // nbsp
+            this.parserState = this.parseText
+        } else if (c === '-') {
+             this.text += '\u00ad'; // soft hyphen
+        } else if (c === '_') {
+            this.text += '\u2011'; // non-breaking hyphen
+        } else if (c === '*') {
+            this.emitIgnorable();
+            this.parserState = this.parseText;
+        } else if (c === "'") {
+            this.parserState = this.parseHexChar;
+        } else if (c === '|') { // formula cacter
+            this.emitFormula();
+            this.parserState = this.parseText;
+        } else if (c === ':') { // subentry in an index entry
+            this.emitIndexSubEntry();
+            this.parserState = this.parseText;
+        } else if (c === '\x0a') {
+            this.emitEndParagraph();
+            this.parserState = this.parseText;
+        } else if (c === '\x0d') {
+            this.emitEndParagraph();
+            this.parserState = this.parseText;
+        } else {
+            this.parserState = this.parseControlWord;
+            this.parseControlWord(c);
+        }
+    },
+    parseHexChar: function (c)
+    {
+        if (/^[A-Fa-f0-9]$/.test(c)) {
+            this.hexChar += c;
+            if (this.hexChar.length >= 2) {
+              this.emitHexChar();
+              this.parserState = this.parseText;
+            }
+            return;
+        }
+        this.emitError("Invalid character \"" + c + "\" in hex literal.");
+        this.parserState = this.parseText;
+        
+    },
+    parseControlWord : function(c)
+    {
+        if (c === ' ') {
+            this.emitControlWord();
+            this.parserState = this.parseText;
+        } else if (/^[-\d]$/.test(c)) {
+            this.parserState = this.parseControlWordParam;
+            this.controlWordParam += c;
+        } else if (/^[A-Za-z]$/.test(c)) {
+          this.controlWord += c;
+        } else {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+          this.parseText(c);
+        }
+    },
+    parseControlWordParam : function (c) {
+        if (/^\d$/.test(c)) {
+          this.controlWordParam += c;
+        } else if (c === ' ') {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+        } else {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+          this.parseText(c);
+        }
+    },
+    
+    
+    
+    
+    emitText : function () {
+        if (this.text === '') {
+            return;
+        }
+        this.push({
+            type: 'text',
+            value: this.text,
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+        this.text = ''
+    },
+    emitControlWord : function ()
+    {
+        this.emitText();
+        if (this.controlWord === '') {
+            this.emitError('empty control word');
+        } else {
+            this.push({
+                  type: 'controlword',
+                  value: this.controlWord,
+                  param: this.controlWordParam !== '' && Number(this.controlWordParam),
+                  pos: this.cpos,
+                  row: this.row,
+                  col: this.col
+            });
+        }
+        this.controlWord = '';
+        this.controlWordParam = '';
+    },
+    emitStartGroup : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'groupstart',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitEndGroup : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'groupend',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitIgnorable : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'ignorable',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitHexChar : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'hexchar',
+            value: this.hexChar,
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+        this.hexChar = ''
+    },
+    emitError : function (message)
+    {
+      this.emitText();
+      this.push({
+            type: 'error',
+            value: message,
+            row: this.row,
+            col: this.col,
+            char: this.cpos //,
+            //stack: new Error().stack
+        });
+    },
+    emitEndParagraph : function () {
+        this.emitText();
+        this.push({
+            type: 'endparagraph',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    }
+     
+} ;
+Roo.htmleditor = {};
+/**
+ * @class Roo.htmleditor.Filter
+ * Base Class for filtering htmleditor stuff. - do not use this directly - extend it.
+ * @cfg {DomElement} node The node to iterate and filter
+ * @cfg {boolean|String|Array} tag Tags to replace 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+Roo.htmleditor.Filter = function(cfg) {
+    Roo.apply(this.cfg);
+    // this does not actually call walk as it's really just a abstract class
+}
+
+
+Roo.htmleditor.Filter.prototype = {
+    
+    node: false,
+    
+    tag: false,
+
+    // overrride to do replace comments.
+    replaceComment : false,
+    
+    // overrride to do replace or do stuff with tags..
+    replaceTag : false,
+    
+    walk : function(dom)
+    {
+        Roo.each( Array.from(dom.childNodes), function( e ) {
+            switch(true) {
+                
+                case e.nodeType == 8 &&  this.replaceComment  !== false: // comment
+                    this.replaceComment(e);
+                    return;
+                
+                case e.nodeType != 1: //not a node.
+                    return;
+                
+                case this.tag === true: // everything
+                case typeof(this.tag) == 'object' && this.tag.indexOf(e.tagName) > -1: // array and it matches.
+                case typeof(this.tag) == 'string' && this.tag == e.tagName: // array and it matches.
+                    if (this.replaceTag && false === this.replaceTag(e)) {
+                        return;
+                    }
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+                    return;
+                
+                default:    // tags .. that do not match.
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+            }
+            
+        }, this);
+        
+    }
+}; 
+
+/**
+ * @class Roo.htmleditor.FilterAttributes
+ * clean attributes and  styles including http:// etc.. in attribute
+ * @constructor
+* Run a new Attribute Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterAttributes = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.attrib_black = this.attrib_black || [];
+    this.attrib_white = this.attrib_white || [];
+
+    this.attrib_clean = this.attrib_clean || [];
+    this.style_white = this.style_white || [];
+    this.style_black = this.style_black || [];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterAttributes, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
+    
+    attrib_black : false, // array
+    attrib_clean : false,
+    attrib_white : false,
+
+    style_white : false,
+    style_black : false,
+     
+     
+    replaceTag : function(node)
+    {
+        if (!node.attributes || !node.attributes.length) {
+            return true;
+        }
+        
+        for (var i = node.attributes.length-1; i > -1 ; i--) {
+            var a = node.attributes[i];
+            //console.log(a);
+            if (this.attrib_white.length && this.attrib_white.indexOf(a.name.toLowerCase()) < 0) {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            
+            
+            
+            if (a.name.toLowerCase().substr(0,2)=='on')  {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            
+            
+            if (this.attrib_black.indexOf(a.name.toLowerCase()) > -1) {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            if (this.attrib_clean.indexOf(a.name.toLowerCase()) > -1) {
+                this.cleanAttr(node,a.name,a.value); // fixme..
+                continue;
+            }
+            if (a.name == 'style') {
+                this.cleanStyle(node,a.name,a.value);
+                continue;
+            }
+            /// clean up MS crap..
+            // tecnically this should be a list of valid class'es..
+            
+            
+            if (a.name == 'class') {
+                if (a.value.match(/^Mso/)) {
+                    node.removeAttribute('class');
+                }
+                
+                if (a.value.match(/^body$/)) {
+                    node.removeAttribute('class');
+                }
+                continue;
+            }
+            
+            
+            // style cleanup!?
+            // class cleanup?
+            
+        }
+        return true; // clean children
+    },
+        
+    cleanAttr: function(node, n,v)
+    {
+        
+        if (v.match(/^\./) || v.match(/^\//)) {
+            return;
+        }
+        if (v.match(/^(http|https):\/\//)
+            || v.match(/^mailto:/) 
+            || v.match(/^ftp:/)
+            || v.match(/^data:/)
+            ) {
+            return;
+        }
+        if (v.match(/^#/)) {
+            return;
+        }
+        if (v.match(/^\{/)) { // allow template editing.
+            return;
+        }
+//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
+        node.removeAttribute(n);
+        
+    },
+    cleanStyle : function(node,  n,v)
+    {
+        if (v.match(/expression/)) { //XSS?? should we even bother..
+            node.removeAttribute(n);
+            return;
+        }
+        
+        var parts = v.split(/;/);
+        var clean = [];
+        
+        Roo.each(parts, function(p) {
+            p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            if (!p.length) {
+                return true;
+            }
+            var l = p.split(':').shift().replace(/\s+/g,'');
+            l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            
+            if ( this.style_black.length && (this.style_black.indexOf(l) > -1 || this.style_black.indexOf(l.toLowerCase()) > -1)) {
+                return true;
+            }
+            //Roo.log()
+            // only allow 'c whitelisted system attributes'
+            if ( this.style_white.length &&  style_white.indexOf(l) < 0 && style_white.indexOf(l.toLowerCase()) < 0 ) {
+                return true;
+            }
+            
+            
+            clean.push(p);
+            return true;
+        },this);
+        if (clean.length) { 
+            node.setAttribute(n, clean.join(';'));
+        } else {
+            node.removeAttribute(n);
+        }
+        
+    }
+        
+        
+        
+    
+});/**
+ * @class Roo.htmleditor.FilterBlack
+ * remove blacklisted elements.
+ * @constructor
+ * Run a new Blacklisted Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterBlack = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterBlack, Roo.htmleditor.Filter,
+{
+    tag : true, // all elements.
+   
+    replaceTag : function(n)
+    {
+        n.parentNode.removeChild(n);
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterComment
+ * remove comments.
+ * @constructor
+* Run a new Comments Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterComment = function(cfg)
+{
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterComment, Roo.htmleditor.Filter,
+{
+  
+    replaceComment : function(n)
+    {
+        n.parentNode.removeChild(n);
+    }
+});/**
+ * @class Roo.htmleditor.FilterKeepChildren
+ * remove tags but keep children
+ * @constructor
+ * Run a new Keep Children Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterKeepChildren = function(cfg)
+{
+    Roo.apply(this, cfg);
+    if (this.tag === false) {
+        return; // dont walk.. (you can use this to use this just to do a child removal on a single tag )
+    }
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterKeepChildren, Roo.htmleditor.FilterBlack,
+{
+    
+  
+    replaceTag : function(node)
+    {
+        // walk children...
+        //Roo.log(node);
+        var ar = Array.from(node.childNodes);
+        //remove first..
+        for (var i = 0; i < ar.length; i++) {
+            if (ar[i].nodeType == 1) {
+                if (
+                    (typeof(this.tag) == 'object' && this.tag.indexOf(ar[i].tagName) > -1)
+                    || // array and it matches
+                    (typeof(this.tag) == 'string' && this.tag == ar[i].tagName)
+                ) {
+                    this.replaceTag(ar[i]); // child is blacklisted as well...
+                    continue;
+                }
+            }
+        }  
+        ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
+         
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+            if (this.tag !== false) {
+                this.walk(ar[i]);
+                
+            }
+        }
+        node.parentNode.removeChild(node);
+        return false; // don't walk children
+        
+        
+    }
+});/**
+ * @class Roo.htmleditor.FilterParagraph
+ * paragraphs cause a nightmare for shared content - this filter is designed to be called ? at various points when editing
+ * like on 'push' to remove the <p> tags and replace them with line breaks.
+ * @constructor
+ * Run a new Paragraph Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterParagraph = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterParagraph, Roo.htmleditor.Filter,
+{
+    
+     
+    tag : 'P',
+    
+     
+    replaceTag : function(node)
+    {
+        
+        if (node.childNodes.length == 1 &&
+            node.childNodes[0].nodeType == 3 &&
+            node.childNodes[0].textContent.trim().length < 1
+            ) {
+            // remove and replace with '<BR>';
+            node.parentNode.replaceChild(node.ownerDocument.createElement('BR'),node);
+            return false; // no need to walk..
+        }
+        var ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+        }
+        // now what about this?
+        // <p> &nbsp; </p>
+        
+        // double BR.
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.removeChild(node);
+        
+        return false;
+
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterSpan
+ * filter span's with no attributes out..
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterSpan = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterSpan, Roo.htmleditor.FilterKeepChildren,
+{
+     
+    tag : 'SPAN',
+     
+    replaceTag : function(node)
+    {
+        if (node.attributes && node.attributes.length > 0) {
+            return true; // walk if there are any.
+        }
+        Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this, node);
+        return false;
+     
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterTableWidth
+  try and remove table width data - as that frequently messes up other stuff.
+ * 
+ *      was cleanTableWidths.
+ *
+ * Quite often pasting from word etc.. results in tables with column and widths.
+ * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
+ *
+ * @constructor
+ * Run a new Table Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterTableWidth = function(cfg)
+{
+    // no need to apply config.
+    this.tag = ['TABLE', 'TD', 'TR', 'TH', 'THEAD', 'TBODY' ];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterTableWidth, Roo.htmleditor.Filter,
+{
+     
+     
+    
+    replaceTag: function(node) {
+        
+        
+      
+        if (node.hasAttribute('width')) {
+            node.removeAttribute('width');
+        }
+        
+         
+        if (node.hasAttribute("style")) {
+            // pretty basic...
+            
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
+        }
+        
+        return true; // continue doing children..
+    }
+});/**
+ * @class Roo.htmleditor.FilterWord
+ * try and clean up all the mess that Word generates.
+ * 
+ * This is the 'nice version' - see 'Heavy' that white lists a very short list of elements, and multi-filters 
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterWord = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter,
+{
+    tag: true,
+     
+    
+    /**
+     * Clean up MS wordisms...
+     */
+    replaceTag : function(node)
+    {
+         
+        // no idea what this does - span with text, replaceds with just text.
+        if(
+                node.nodeName == 'SPAN' &&
+                !node.hasAttributes() &&
+                node.childNodes.length == 1 &&
+                node.firstChild.nodeName == "#text"  
+        ) {
+            var textNode = node.firstChild;
+            node.removeChild(textNode);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
+            }
+            node.parentNode.insertBefore(textNode, node);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
+            }
+            
+            node.parentNode.removeChild(node);
+            return false; // dont do chidren - we have remove our node - so no need to do chdhilren?
+        }
+        
+   
+        
+        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
+            node.parentNode.removeChild(node);
+            return false; // dont do chidlren
+        }
+        //Roo.log(node.tagName);
+        // remove - but keep children..
+        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
+            //Roo.log('-- removed');
+            while (node.childNodes.length) {
+                var cn = node.childNodes[0];
+                node.removeChild(cn);
+                node.parentNode.insertBefore(cn, node);
+                // move node to parent - and clean it..
+                this.replaceTag(cn);
+            }
+            node.parentNode.removeChild(node);
+            /// no need to iterate chidlren = it's got none..
+            //this.iterateChildren(node, this.cleanWord);
+            return false; // no need to iterate children.
+        }
+        // clean styles
+        if (node.className.length) {
+            
+            var cn = node.className.split(/\W+/);
+            var cna = [];
+            Roo.each(cn, function(cls) {
+                if (cls.match(/Mso[a-zA-Z]+/)) {
+                    return;
+                }
+                cna.push(cls);
+            });
+            node.className = cna.length ? cna.join(' ') : '';
+            if (!cna.length) {
+                node.removeAttribute("class");
+            }
+        }
+        
+        if (node.hasAttribute("lang")) {
+            node.removeAttribute("lang");
+        }
+        
+        if (node.hasAttribute("style")) {
+            
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
+        }
+        return true; // do children
+        
+        
+        
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterStyleToTag
+ * part of the word stuff... - certain 'styles' should be converted to tags.
+ * eg.
+ *   font-weight: bold -> bold
+ *   ?? super / subscrit etc..
+ * 
+ * @constructor
+* Run a new style to tag filter.
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterStyleToTag = function(cfg)
+{
+    
+    this.tags = {
+        B  : [ 'fontWeight' , 'bold'],
+        I :  [ 'fontStyle' , 'italic'],
+        //pre :  [ 'font-style' , 'italic'],
+        // h1.. h6 ?? font-size?
+        SUP : [ 'verticalAlign' , 'super' ],
+        SUB : [ 'verticalAlign' , 'sub' ]
+        
+        
+    };
+    
+    Roo.apply(this, cfg);
+     
+    
+    this.walk(cfg.node);
+    
+    
+    
+}
+
+
+Roo.extend(Roo.htmleditor.FilterStyleToTag, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
+    
+    tags : false,
+    
+    
+    replaceTag : function(node)
+    {
+        
+        
+        if (node.getAttribute("style") === null) {
+            return true;
+        }
+        var inject = [];
+        for (var k in this.tags) {
+            if (node.style[this.tags[k][0]] == this.tags[k][1]) {
+                inject.push(k);
+                node.style.removeProperty(this.tags[k][0]);
+            }
+        }
+        if (!inject.length) {
+            return true; 
+        }
+        var cn = Array.from(node.childNodes);
+        var nn = node;
+        Roo.each(inject, function(t) {
+            var nc = node.ownerDocument.createElement(t);
+            nn.appendChild(nc);
+            nn = nc;
+        });
+        for(var i = 0;i < cn.length;cn++) {
+            node.removeChild(cn[i]);
+            nn.appendChild(cn[i]);
+        }
+        return true /// iterate thru
+    }
+    
+})/**
+ * @class Roo.htmleditor.FilterLongBr
+ * BR/BR/BR - keep a maximum of 2...
+ * @constructor
+ * Run a new Long BR Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterLongBr = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterLongBr, Roo.htmleditor.Filter,
+{
+    
+     
+    tag : 'BR',
+    
+     
+    replaceTag : function(node)
+    {
+        
+        var ps = node.nextSibling;
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.nextSibling;
+        }
+        
+        if (!ps &&  [ 'TD', 'TH', 'LI', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(node.parentNode.tagName) > -1) { 
+            node.parentNode.removeChild(node); // remove last BR inside one fo these tags
+            return false;
+        }
+        
+        if (!ps || ps.nodeType != 1) {
+            return false;
+        }
+        
+        if (!ps || ps.tagName != 'BR') {
+           
+            return false;
+        }
+        
+        
+        
+        
+        
+        if (!node.previousSibling) {
+            return false;
+        }
+        var ps = node.previousSibling;
+        
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.previousSibling;
+        }
+        if (!ps || ps.nodeType != 1) {
+            return false;
+        }
+        // if header or BR before.. then it's a candidate for removal.. - as we only want '2' of these..
+        if (!ps || [ 'BR', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(ps.tagName) < 0) {
+            return false;
+        }
+        
+        node.parentNode.removeChild(node); // remove me...
+        
+        return false; // no need to do children
+
+    }
+    
+}); 
+
+/**
+ * @class Roo.htmleditor.FilterBlock
+ * removes id / data-block and contenteditable that are associated with blocks
+ * usage should be done on a cloned copy of the dom
+ * @constructor
+* Run a new Attribute Filter { node : xxxx }}
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterBlock = function(cfg)
+{
+    Roo.apply(this, cfg);
+    var qa = cfg.node.querySelectorAll;
+    this.removeAttributes('data-block');
+    this.removeAttributes('contenteditable');
+    this.removeAttributes('id');
+    
+}
+
+Roo.apply(Roo.htmleditor.FilterBlock.prototype,
+{
+    node: true, // all tags
+     
+     
+    removeAttributes : function(attr)
+    {
+        var ar = this.node.querySelectorAll('*[' + attr + ']');
+        for (var i =0;i<ar.length;i++) {
+            ar[i].removeAttribute(attr);
+        }
+    }
+        
+        
+        
+    
+});
+/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidySerializer
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ * @constructor
+ * @method Serializer
+ * @param {Object} settings Name/value settings object.
+ */
+
+
+Roo.htmleditor.TidySerializer = function(settings)
+{
+    Roo.apply(this, settings);
+    
+    this.writer = new Roo.htmleditor.TidyWriter(settings);
+    
+    
+
+};
+Roo.htmleditor.TidySerializer.prototype = {
+    
+    /**
+     * @param {boolean} inner do the inner of the node.
+     */
+    inner : false,
+    
+    writer : false,
+    
+    /**
+    * Serializes the specified node into a string.
+    *
+    * @example
+    * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
+    * @method serialize
+    * @param {DomElement} node Node instance to serialize.
+    * @return {String} String with HTML based on DOM tree.
+    */
+    serialize : function(node) {
+        
+        // = settings.validate;
+        var writer = this.writer;
+        var self  = this;
+        this.handlers = {
+            // #text
+            3: function(node) {
+                
+                writer.text(node.nodeValue, node);
+            },
+            // #comment
+            8: function(node) {
+                writer.comment(node.nodeValue);
+            },
+            // Processing instruction
+            7: function(node) {
+                writer.pi(node.name, node.nodeValue);
+            },
+            // Doctype
+            10: function(node) {
+                writer.doctype(node.nodeValue);
+            },
+            // CDATA
+            4: function(node) {
+                writer.cdata(node.nodeValue);
+            },
+            // Document fragment
+            11: function(node) {
+                node = node.firstChild;
+                if (!node) {
+                    return;
+                }
+                while(node) {
+                    self.walk(node);
+                    node = node.nextSibling
+                }
+            }
+        };
+        writer.reset();
+        1 != node.nodeType || this.inner ? this.handlers[11](node) : this.walk(node);
+        return writer.getContent();
+    },
+
+    walk: function(node)
+    {
+        var attrName, attrValue, sortedAttrs, i, l, elementRule,
+            handler = this.handlers[node.nodeType];
+            
+        if (handler) {
+            handler(node);
+            return;
+        }
+    
+        var name = node.nodeName;
+        var isEmpty = node.childNodes.length < 1;
+      
+        var writer = this.writer;
+        var attrs = node.attributes;
+        // Sort attributes
+        
+        writer.start(node.nodeName, attrs, isEmpty, node);
+        if (isEmpty) {
+            return;
+        }
+        node = node.firstChild;
+        if (!node) {
+            writer.end(name);
+            return;
+        }
+        while (node) {
+            this.walk(node);
+            node = node.nextSibling;
+        }
+        writer.end(name);
+        
+    
+    }
+    // Serialize element and treat all non elements as fragments
+   
+}; 
+
+/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidyWriter
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ *
+ * Known issues?
+ * - not tested much with 'PRE' formated elements.
+ * 
+ *
+ *
+ */
+
+Roo.htmleditor.TidyWriter = function(settings)
+{
+    
+    // indent, indentBefore, indentAfter, encode, htmlOutput, html = [];
+    Roo.apply(this, settings);
+    this.html = [];
+    this.state = [];
+     
+    this.encode = Roo.htmleditor.TidyEntities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
+  
+}
+Roo.htmleditor.TidyWriter.prototype = {
+
+    state : false,
+    
+    indent :  '  ',
+    
+    // part of state...
+    indentstr : '',
+    in_pre: false,
+    in_inline : false,
+    last_inline : false,
+    encode : false,
+     
+    
+            /**
+    * Writes the a start element such as <p id="a">.
+    *
+    * @method start
+    * @param {String} name Name of the element.
+    * @param {Array} attrs Optional attribute array or undefined if it hasn't any.
+    * @param {Boolean} empty Optional empty state if the tag should end like <br />.
+    */
+    start: function(name, attrs, empty, node)
+    {
+        var i, l, attr, value;
+        
+        // there are some situations where adding line break && indentation will not work. will not work.
+        // <span / b / i ... formating?
+        
+        var in_inline = this.in_inline || Roo.htmleditor.TidyWriter.inline_elements.indexOf(name) > -1;
+        var in_pre    = this.in_pre    || Roo.htmleditor.TidyWriter.whitespace_elements.indexOf(name) > -1;
+        
+        var is_short   = empty ? Roo.htmleditor.TidyWriter.shortend_elements.indexOf(name) > -1 : false;
+        
+        var add_lb = name == 'BR' ? false : in_inline;
+        
+        if (!add_lb && !this.in_pre && this.lastElementEndsWS()) {
+            i_inline = false;
+        }
+
+        var indentstr =  this.indentstr;
+        
+        // e_inline = elements that can be inline, but still allow \n before and after?
+        // only 'BR' ??? any others?
+        
+        // ADD LINE BEFORE tage
+        if (!this.in_pre) {
+            if (in_inline) {
+                //code
+                if (name == 'BR') {
+                    this.addLine();
+                } else if (this.lastElementEndsWS()) {
+                    this.addLine();
+                } else{
+                    // otherwise - no new line. (and dont indent.)
+                    indentstr = '';
+                }
+                
+            } else {
+                this.addLine();
+            }
+        } else {
+            indentstr = '';
+        }
+        
+        this.html.push(indentstr + '<', name.toLowerCase());
+        
+        if (attrs) {
+            for (i = 0, l = attrs.length; i < l; i++) {
+                attr = attrs[i];
+                this.html.push(' ', attr.name, '="', this.encode(attr.value, true), '"');
+            }
+        }
+     
+        if (empty) {
+            if (is_short) {
+                this.html[this.html.length] = '/>';
+            } else {
+                this.html[this.html.length] = '></' + name.toLowerCase() + '>';
+            }
+            var e_inline = name == 'BR' ? false : this.in_inline;
+            
+            if (!e_inline && !this.in_pre) {
+                this.addLine();
+            }
+            return;
+        
+        }
+        // not empty..
+        this.html[this.html.length] = '>';
+        
+        // there is a special situation, where we need to turn on in_inline - if any of the imediate chidlren are one of these.
+        /*
+        if (!in_inline && !in_pre) {
+            var cn = node.firstChild;
+            while(cn) {
+                if (Roo.htmleditor.TidyWriter.inline_elements.indexOf(cn.nodeName) > -1) {
+                    in_inline = true
+                    break;
+                }
+                cn = cn.nextSibling;
+            }
+             
+        }
+        */
+        
+        
+        this.pushState({
+            indentstr : in_pre   ? '' : (this.indentstr + this.indent),
+            in_pre : in_pre,
+            in_inline :  in_inline
+        });
+        // add a line after if we are not in a
+        
+        if (!in_inline && !in_pre) {
+            this.addLine();
+        }
+        
+            
+         
+        
+    },
+    
+    lastElementEndsWS : function()
+    {
+        var value = this.html.length > 0 ? this.html[this.html.length-1] : false;
+        if (value === false) {
+            return true;
+        }
+        return value.match(/\s+$/);
+        
+    },
+    
+    /**
+     * Writes the a end element such as </p>.
+     *
+     * @method end
+     * @param {String} name Name of the element.
+     */
+    end: function(name) {
+        var value;
+        this.popState();
+        var indentstr = '';
+        var in_inline = this.in_inline || Roo.htmleditor.TidyWriter.inline_elements.indexOf(name) > -1;
+        
+        if (!this.in_pre && !in_inline) {
+            this.addLine();
+            indentstr  = this.indentstr;
+        }
+        this.html.push(indentstr + '</', name.toLowerCase(), '>');
+        this.last_inline = in_inline;
+        
+        // pop the indent state..
+    },
+    /**
+     * Writes a text node.
+     *
+     * In pre - we should not mess with the contents.
+     * 
+     *
+     * @method text
+     * @param {String} text String to write out.
+     * @param {Boolean} raw Optional raw state if true the contents wont get encoded.
+     */
+    text: function(text, node)
+    {
+        // if not in whitespace critical
+        if (text.length < 1) {
+            return;
+        }
+        if (this.in_pre) {
+            this.html[this.html.length] =  text;
+            return;   
+        }
+        
+        if (this.in_inline) {
+            text = text.replace(/\s+/g,' '); // all white space inc line breaks to a slingle' '
+            if (text != ' ') {
+                text = text.replace(/\s+/,' ');  // all white space to single white space
+                
+                    
+                // if next tag is '<BR>', then we can trim right..
+                if (node.nextSibling &&
+                    node.nextSibling.nodeType == 1 &&
+                    node.nextSibling.nodeName == 'BR' )
+                {
+                    text = text.replace(/\s+$/g,'');
+                }
+                // if previous tag was a BR, we can also trim..
+                if (node.previousSibling &&
+                    node.previousSibling.nodeType == 1 &&
+                    node.previousSibling.nodeName == 'BR' )
+                {
+                    text = this.indentstr +  text.replace(/^\s+/g,'');
+                }
+                if (text.match(/\n/)) {
+                    text = text.replace(
+                        /(?![^\n]{1,64}$)([^\n]{1,64})\s/g, '$1\n' + this.indentstr
+                    );
+                    // remoeve the last whitespace / line break.
+                    text = text.replace(/\n\s+$/,'');
+                }
+                // repace long lines
+                
+            }
+             
+            this.html[this.html.length] =  text;
+            return;   
+        }
+        // see if previous element was a inline element.
+        var indentstr = this.indentstr;
+   
+        text = text.replace(/\s+/g," "); // all whitespace into single white space.
+        
+        // should trim left?
+        if (node.previousSibling &&
+            node.previousSibling.nodeType == 1 &&
+            Roo.htmleditor.TidyWriter.inline_elements.indexOf(node.previousSibling.nodeName) > -1)
+        {
+            indentstr = '';
+            
+        } else {
+            this.addLine();
+            text = text.replace(/^\s+/,''); // trim left
+          
+        }
+        // should trim right?
+        if (node.nextSibling &&
+            node.nextSibling.nodeType == 1 &&
+            Roo.htmleditor.TidyWriter.inline_elements.indexOf(node.nextSibling.nodeName) > -1)
+        {
+          // noop
+            
+        }  else {
+            text = text.replace(/\s+$/,''); // trim right
+        }
+         
+              
+        
+        
+        
+        if (text.length < 1) {
+            return;
+        }
+        if (!text.match(/\n/)) {
+            this.html.push(indentstr + text);
+            return;
+        }
+        
+        text = this.indentstr + text.replace(
+            /(?![^\n]{1,64}$)([^\n]{1,64})\s/g, '$1\n' + this.indentstr
+        );
+        // remoeve the last whitespace / line break.
+        text = text.replace(/\s+$/,''); 
+        
+        this.html.push(text);
+        
+        // split and indent..
+        
+        
+    },
+    /**
+     * Writes a cdata node such as <![CDATA[data]]>.
+     *
+     * @method cdata
+     * @param {String} text String to write out inside the cdata.
+     */
+    cdata: function(text) {
+        this.html.push('<![CDATA[', text, ']]>');
+    },
+    /**
+    * Writes a comment node such as <!-- Comment -->.
+    *
+    * @method cdata
+    * @param {String} text String to write out inside the comment.
+    */
+   comment: function(text) {
+       this.html.push('<!--', text, '-->');
+   },
+    /**
+     * Writes a PI node such as <?xml attr="value" ?>.
+     *
+     * @method pi
+     * @param {String} name Name of the pi.
+     * @param {String} text String to write out inside the pi.
+     */
+    pi: function(name, text) {
+        text ? this.html.push('<?', name, ' ', this.encode(text), '?>') : this.html.push('<?', name, '?>');
+        this.indent != '' && this.html.push('\n');
+    },
+    /**
+     * Writes a doctype node such as <!DOCTYPE data>.
+     *
+     * @method doctype
+     * @param {String} text String to write out inside the doctype.
+     */
+    doctype: function(text) {
+        this.html.push('<!DOCTYPE', text, '>', this.indent != '' ? '\n' : '');
+    },
+    /**
+     * Resets the internal buffer if one wants to reuse the writer.
+     *
+     * @method reset
+     */
+    reset: function() {
+        this.html.length = 0;
+        this.state = [];
+        this.pushState({
+            indentstr : '',
+            in_pre : false, 
+            in_inline : false
+        })
+    },
+    /**
+     * Returns the contents that got serialized.
+     *
+     * @method getContent
+     * @return {String} HTML contents that got written down.
+     */
+    getContent: function() {
+        return this.html.join('').replace(/\n$/, '');
+    },
+    
+    pushState : function(cfg)
+    {
+        this.state.push(cfg);
+        Roo.apply(this, cfg);
+    },
+    
+    popState : function()
+    {
+        if (this.state.length < 1) {
+            return; // nothing to push
+        }
+        var cfg = {
+            in_pre: false,
+            indentstr : ''
+        };
+        this.state.pop();
+        if (this.state.length > 0) {
+            cfg = this.state[this.state.length-1]; 
+        }
+        Roo.apply(this, cfg);
+    },
+    
+    addLine: function()
+    {
+        if (this.html.length < 1) {
+            return;
+        }
+        
+        
+        var value = this.html[this.html.length - 1];
+        if (value.length > 0 && '\n' !== value) {
+            this.html.push('\n');
+        }
+    }
+    
+    
+//'pre script noscript style textarea video audio iframe object code'
+// shortended... 'area base basefont br col frame hr img input isindex link  meta param embed source wbr track');
+// inline 
+};
+
+Roo.htmleditor.TidyWriter.inline_elements = [
+        'SPAN','STRONG','B','EM','I','FONT','STRIKE','U','VAR',
+        'CITE','DFN','CODE','MARK','Q','SUP','SUB','SAMP', 'A'
+];
+Roo.htmleditor.TidyWriter.shortend_elements = [
+    'AREA','BASE','BASEFONT','BR','COL','FRAME','HR','IMG','INPUT',
+    'ISINDEX','LINK','','META','PARAM','EMBED','SOURCE','WBR','TRACK'
+];
+
+Roo.htmleditor.TidyWriter.whitespace_elements = [
+    'PRE','SCRIPT','NOSCRIPT','STYLE','TEXTAREA','VIDEO','AUDIO','IFRAME','OBJECT','CODE'
+];/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidyEntities
+ * @static
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ *
+ * Not 100% sure this is actually used or needed.
+ */
+
+Roo.htmleditor.TidyEntities = {
+    
+    /**
+     * initialize data..
+     */
+    init : function (){
+     
+        this.namedEntities = this.buildEntitiesLookup(this.namedEntitiesData, 32);
+       
+    },
+
+
+    buildEntitiesLookup: function(items, radix) {
+        var i, chr, entity, lookup = {};
+        if (!items) {
+            return {};
+        }
+        items = typeof(items) == 'string' ? items.split(',') : items;
+        radix = radix || 10;
+        // Build entities lookup table
+        for (i = 0; i < items.length; i += 2) {
+            chr = String.fromCharCode(parseInt(items[i], radix));
+            // Only add non base entities
+            if (!this.baseEntities[chr]) {
+                entity = '&' + items[i + 1] + ';';
+                lookup[chr] = entity;
+                lookup[entity] = chr;
+            }
+        }
+        return lookup;
+        
+    },
+    
+    asciiMap : {
+            128: '€',
+            130: '‚',
+            131: 'ƒ',
+            132: '„',
+            133: '…',
+            134: '†',
+            135: '‡',
+            136: 'ˆ',
+            137: '‰',
+            138: 'Š',
+            139: '‹',
+            140: 'Œ',
+            142: 'Ž',
+            145: '‘',
+            146: '’',
+            147: '“',
+            148: '”',
+            149: '•',
+            150: '–',
+            151: '—',
+            152: '˜',
+            153: '™',
+            154: 'š',
+            155: '›',
+            156: 'œ',
+            158: 'ž',
+            159: 'Ÿ'
+    },
+    // Raw entities
+    baseEntities : {
+        '"': '&quot;',
+        // Needs to be escaped since the YUI compressor would otherwise break the code
+        '\'': '&#39;',
+        '<': '&lt;',
+        '>': '&gt;',
+        '&': '&amp;',
+        '`': '&#96;'
+    },
+    // Reverse lookup table for raw entities
+    reverseEntities : {
+        '&lt;': '<',
+        '&gt;': '>',
+        '&amp;': '&',
+        '&quot;': '"',
+        '&apos;': '\''
+    },
+    
+    attrsCharsRegExp : /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+    textCharsRegExp : /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+    rawCharsRegExp : /[<>&\"\']/g,
+    entityRegExp : /&#([a-z0-9]+);?|&([a-z0-9]+);/gi,
+    namedEntities  : false,
+    namedEntitiesData : [ 
+        '50',
+        'nbsp',
+        '51',
+        'iexcl',
+        '52',
+        'cent',
+        '53',
+        'pound',
+        '54',
+        'curren',
+        '55',
+        'yen',
+        '56',
+        'brvbar',
+        '57',
+        'sect',
+        '58',
+        'uml',
+        '59',
+        'copy',
+        '5a',
+        'ordf',
+        '5b',
+        'laquo',
+        '5c',
+        'not',
+        '5d',
+        'shy',
+        '5e',
+        'reg',
+        '5f',
+        'macr',
+        '5g',
+        'deg',
+        '5h',
+        'plusmn',
+        '5i',
+        'sup2',
+        '5j',
+        'sup3',
+        '5k',
+        'acute',
+        '5l',
+        'micro',
+        '5m',
+        'para',
+        '5n',
+        'middot',
+        '5o',
+        'cedil',
+        '5p',
+        'sup1',
+        '5q',
+        'ordm',
+        '5r',
+        'raquo',
+        '5s',
+        'frac14',
+        '5t',
+        'frac12',
+        '5u',
+        'frac34',
+        '5v',
+        'iquest',
+        '60',
+        'Agrave',
+        '61',
+        'Aacute',
+        '62',
+        'Acirc',
+        '63',
+        'Atilde',
+        '64',
+        'Auml',
+        '65',
+        'Aring',
+        '66',
+        'AElig',
+        '67',
+        'Ccedil',
+        '68',
+        'Egrave',
+        '69',
+        'Eacute',
+        '6a',
+        'Ecirc',
+        '6b',
+        'Euml',
+        '6c',
+        'Igrave',
+        '6d',
+        'Iacute',
+        '6e',
+        'Icirc',
+        '6f',
+        'Iuml',
+        '6g',
+        'ETH',
+        '6h',
+        'Ntilde',
+        '6i',
+        'Ograve',
+        '6j',
+        'Oacute',
+        '6k',
+        'Ocirc',
+        '6l',
+        'Otilde',
+        '6m',
+        'Ouml',
+        '6n',
+        'times',
+        '6o',
+        'Oslash',
+        '6p',
+        'Ugrave',
+        '6q',
+        'Uacute',
+        '6r',
+        'Ucirc',
+        '6s',
+        'Uuml',
+        '6t',
+        'Yacute',
+        '6u',
+        'THORN',
+        '6v',
+        'szlig',
+        '70',
+        'agrave',
+        '71',
+        'aacute',
+        '72',
+        'acirc',
+        '73',
+        'atilde',
+        '74',
+        'auml',
+        '75',
+        'aring',
+        '76',
+        'aelig',
+        '77',
+        'ccedil',
+        '78',
+        'egrave',
+        '79',
+        'eacute',
+        '7a',
+        'ecirc',
+        '7b',
+        'euml',
+        '7c',
+        'igrave',
+        '7d',
+        'iacute',
+        '7e',
+        'icirc',
+        '7f',
+        'iuml',
+        '7g',
+        'eth',
+        '7h',
+        'ntilde',
+        '7i',
+        'ograve',
+        '7j',
+        'oacute',
+        '7k',
+        'ocirc',
+        '7l',
+        'otilde',
+        '7m',
+        'ouml',
+        '7n',
+        'divide',
+        '7o',
+        'oslash',
+        '7p',
+        'ugrave',
+        '7q',
+        'uacute',
+        '7r',
+        'ucirc',
+        '7s',
+        'uuml',
+        '7t',
+        'yacute',
+        '7u',
+        'thorn',
+        '7v',
+        'yuml',
+        'ci',
+        'fnof',
+        'sh',
+        'Alpha',
+        'si',
+        'Beta',
+        'sj',
+        'Gamma',
+        'sk',
+        'Delta',
+        'sl',
+        'Epsilon',
+        'sm',
+        'Zeta',
+        'sn',
+        'Eta',
+        'so',
+        'Theta',
+        'sp',
+        'Iota',
+        'sq',
+        'Kappa',
+        'sr',
+        'Lambda',
+        'ss',
+        'Mu',
+        'st',
+        'Nu',
+        'su',
+        'Xi',
+        'sv',
+        'Omicron',
+        't0',
+        'Pi',
+        't1',
+        'Rho',
+        't3',
+        'Sigma',
+        't4',
+        'Tau',
+        't5',
+        'Upsilon',
+        't6',
+        'Phi',
+        't7',
+        'Chi',
+        't8',
+        'Psi',
+        't9',
+        'Omega',
+        'th',
+        'alpha',
+        'ti',
+        'beta',
+        'tj',
+        'gamma',
+        'tk',
+        'delta',
+        'tl',
+        'epsilon',
+        'tm',
+        'zeta',
+        'tn',
+        'eta',
+        'to',
+        'theta',
+        'tp',
+        'iota',
+        'tq',
+        'kappa',
+        'tr',
+        'lambda',
+        'ts',
+        'mu',
+        'tt',
+        'nu',
+        'tu',
+        'xi',
+        'tv',
+        'omicron',
+        'u0',
+        'pi',
+        'u1',
+        'rho',
+        'u2',
+        'sigmaf',
+        'u3',
+        'sigma',
+        'u4',
+        'tau',
+        'u5',
+        'upsilon',
+        'u6',
+        'phi',
+        'u7',
+        'chi',
+        'u8',
+        'psi',
+        'u9',
+        'omega',
+        'uh',
+        'thetasym',
+        'ui',
+        'upsih',
+        'um',
+        'piv',
+        '812',
+        'bull',
+        '816',
+        'hellip',
+        '81i',
+        'prime',
+        '81j',
+        'Prime',
+        '81u',
+        'oline',
+        '824',
+        'frasl',
+        '88o',
+        'weierp',
+        '88h',
+        'image',
+        '88s',
+        'real',
+        '892',
+        'trade',
+        '89l',
+        'alefsym',
+        '8cg',
+        'larr',
+        '8ch',
+        'uarr',
+        '8ci',
+        'rarr',
+        '8cj',
+        'darr',
+        '8ck',
+        'harr',
+        '8dl',
+        'crarr',
+        '8eg',
+        'lArr',
+        '8eh',
+        'uArr',
+        '8ei',
+        'rArr',
+        '8ej',
+        'dArr',
+        '8ek',
+        'hArr',
+        '8g0',
+        'forall',
+        '8g2',
+        'part',
+        '8g3',
+        'exist',
+        '8g5',
+        'empty',
+        '8g7',
+        'nabla',
+        '8g8',
+        'isin',
+        '8g9',
+        'notin',
+        '8gb',
+        'ni',
+        '8gf',
+        'prod',
+        '8gh',
+        'sum',
+        '8gi',
+        'minus',
+        '8gn',
+        'lowast',
+        '8gq',
+        'radic',
+        '8gt',
+        'prop',
+        '8gu',
+        'infin',
+        '8h0',
+        'ang',
+        '8h7',
+        'and',
+        '8h8',
+        'or',
+        '8h9',
+        'cap',
+        '8ha',
+        'cup',
+        '8hb',
+        'int',
+        '8hk',
+        'there4',
+        '8hs',
+        'sim',
+        '8i5',
+        'cong',
+        '8i8',
+        'asymp',
+        '8j0',
+        'ne',
+        '8j1',
+        'equiv',
+        '8j4',
+        'le',
+        '8j5',
+        'ge',
+        '8k2',
+        'sub',
+        '8k3',
+        'sup',
+        '8k4',
+        'nsub',
+        '8k6',
+        'sube',
+        '8k7',
+        'supe',
+        '8kl',
+        'oplus',
+        '8kn',
+        'otimes',
+        '8l5',
+        'perp',
+        '8m5',
+        'sdot',
+        '8o8',
+        'lceil',
+        '8o9',
+        'rceil',
+        '8oa',
+        'lfloor',
+        '8ob',
+        'rfloor',
+        '8p9',
+        'lang',
+        '8pa',
+        'rang',
+        '9ea',
+        'loz',
+        '9j0',
+        'spades',
+        '9j3',
+        'clubs',
+        '9j5',
+        'hearts',
+        '9j6',
+        'diams',
+        'ai',
+        'OElig',
+        'aj',
+        'oelig',
+        'b0',
+        'Scaron',
+        'b1',
+        'scaron',
+        'bo',
+        'Yuml',
+        'm6',
+        'circ',
+        'ms',
+        'tilde',
+        '802',
+        'ensp',
+        '803',
+        'emsp',
+        '809',
+        'thinsp',
+        '80c',
+        'zwnj',
+        '80d',
+        'zwj',
+        '80e',
+        'lrm',
+        '80f',
+        'rlm',
+        '80j',
+        'ndash',
+        '80k',
+        'mdash',
+        '80o',
+        'lsquo',
+        '80p',
+        'rsquo',
+        '80q',
+        'sbquo',
+        '80s',
+        'ldquo',
+        '80t',
+        'rdquo',
+        '80u',
+        'bdquo',
+        '810',
+        'dagger',
+        '811',
+        'Dagger',
+        '81g',
+        'permil',
+        '81p',
+        'lsaquo',
+        '81q',
+        'rsaquo',
+        '85c',
+        'euro'
+    ],
+
+         
+    /**
+     * Encodes the specified string using raw entities. This means only the required XML base entities will be encoded.
+     *
+     * @method encodeRaw
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @return {String} Entity encoded text.
+     */
+    encodeRaw: function(text, attr)
+    {
+        var t = this;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || chr;
+        });
+    },
+    /**
+     * Encoded the specified text with both the attributes and text entities. This function will produce larger text contents
+     * since it doesn't know if the context is within a attribute or text node. This was added for compatibility
+     * and is exposed as the DOMUtils.encode function.
+     *
+     * @method encodeAllRaw
+     * @param {String} text Text to encode.
+     * @return {String} Entity encoded text.
+     */
+    encodeAllRaw: function(text) {
+        var t = this;
+        return ('' + text).replace(this.rawCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || chr;
+        });
+    },
+    /**
+     * Encodes the specified string using numeric entities. The core entities will be
+     * encoded as named ones but all non lower ascii characters will be encoded into numeric entities.
+     *
+     * @method encodeNumeric
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @return {String} Entity encoded text.
+     */
+    encodeNumeric: function(text, attr) {
+        var t = this;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            // Multi byte sequence convert it to a single entity
+            if (chr.length > 1) {
+                return '&#' + (1024 * (chr.charCodeAt(0) - 55296) + (chr.charCodeAt(1) - 56320) + 65536) + ';';
+            }
+            return t.baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';
+        });
+    },
+    /**
+     * Encodes the specified string using named entities. The core entities will be encoded
+     * as named ones but all non lower ascii characters will be encoded into named entities.
+     *
+     * @method encodeNamed
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @param {Object} entities Optional parameter with entities to use.
+     * @return {String} Entity encoded text.
+     */
+    encodeNamed: function(text, attr, entities) {
+        var t = this;
+        entities = entities || this.namedEntities;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || entities[chr] || chr;
+        });
+    },
+    /**
+     * Returns an encode function based on the name(s) and it's optional entities.
+     *
+     * @method getEncodeFunc
+     * @param {String} name Comma separated list of encoders for example named,numeric.
+     * @param {String} entities Optional parameter with entities to use instead of the built in set.
+     * @return {function} Encode function to be used.
+     */
+    getEncodeFunc: function(name, entities) {
+        entities = this.buildEntitiesLookup(entities) || this.namedEntities;
+        var t = this;
+        function encodeNamedAndNumeric(text, attr) {
+            return text.replace(attr ? t.attrsCharsRegExp : t.textCharsRegExp, function(chr) {
+                return t.baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;
+            });
+        }
+
+        function encodeCustomNamed(text, attr) {
+            return t.encodeNamed(text, attr, entities);
+        }
+        // Replace + with , to be compatible with previous TinyMCE versions
+        name = this.makeMap(name.replace(/\+/g, ','));
+        // Named and numeric encoder
+        if (name.named && name.numeric) {
+            return this.encodeNamedAndNumeric;
+        }
+        // Named encoder
+        if (name.named) {
+            // Custom names
+            if (entities) {
+                return encodeCustomNamed;
+            }
+            return this.encodeNamed;
+        }
+        // Numeric
+        if (name.numeric) {
+            return this.encodeNumeric;
+        }
+        // Raw encoder
+        return this.encodeRaw;
+    },
+    /**
+     * Decodes the specified string, this will replace entities with raw UTF characters.
+     *
+     * @method decode
+     * @param {String} text Text to entity decode.
+     * @return {String} Entity decoded string.
+     */
+    decode: function(text)
+    {
+        var  t = this;
+        return text.replace(this.entityRegExp, function(all, numeric) {
+            if (numeric) {
+                numeric = 'x' === numeric.charAt(0).toLowerCase() ? parseInt(numeric.substr(1), 16) : parseInt(numeric, 10);
+                // Support upper UTF
+                if (numeric > 65535) {
+                    numeric -= 65536;
+                    return String.fromCharCode(55296 + (numeric >> 10), 56320 + (1023 & numeric));
+                }
+                return t.asciiMap[numeric] || String.fromCharCode(numeric);
+            }
+            return t.reverseEntities[all] || t.namedEntities[all] || t.nativeDecode(all);
+        });
+    },
+    nativeDecode : function (text) {
+        return text;
+    },
+    makeMap : function (items, delim, map) {
+               var i;
+               items = items || [];
+               delim = delim || ',';
+               if (typeof items == "string") {
+                       items = items.split(delim);
+               }
+               map = map || {};
+               i = items.length;
+               while (i--) {
+                       map[items[i]] = {};
+               }
+               return map;
+       }
+};
+    
+    
+    
+Roo.htmleditor.TidyEntities.init();
+/**
+ * @class Roo.htmleditor.KeyEnter
+ * Handle Enter press..
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+
+
+Roo.htmleditor.KeyEnter = function(cfg) {
+    Roo.apply(this, cfg);
+    // this does not actually call walk as it's really just a abstract class
+    Roo.get(this.core.doc.body).on('keypress', this.keypress, this);
+}
+
+//Roo.htmleditor.KeyEnter.i = 0;
+
+
+Roo.htmleditor.KeyEnter.prototype = {
+    
+    core : false,
+    
+    keypress : function(e)
+    {
+        if (e.charCode != 13 && e.charCode != 10) {
+            Roo.log([e.charCode,e]);
+            return true;
+        }
+        e.preventDefault();
+        // https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome
+        var doc = this.core.doc;
+          //add a new line
+       
+    
+        var sel = this.core.getSelection();
+        var range = sel.getRangeAt(0);
+        var n = range.commonAncestorContainer;
+        var pc = range.closest([ 'ol', 'ul']);
+        var pli = range.closest('li');
+        if (!pc || e.ctrlKey) {
+            sel.insertNode('br', 'after'); 
+         
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+        
+        // deal with <li> insetion
+        if (pli.innerText.trim() == '' &&
+            pli.previousSibling &&
+            pli.previousSibling.nodeName == 'LI' &&
+            pli.previousSibling.innerText.trim() ==  '') {
+            pli.parentNode.removeChild(pli.previousSibling);
+            sel.cursorAfter(pc);
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+    
+        var li = doc.createElement('LI');
+        li.innerHTML = '&nbsp;';
+        if (!pli || !pli.firstSibling) {
+            pc.appendChild(li);
+        } else {
+            pli.parentNode.insertBefore(li, pli.firstSibling);
+        }
+        sel.cursorText (li.firstChild);
+      
+        this.core.undoManager.addEvent();
+        this.core.fireEditorEvent(e);
+
+        return false;
+        
+    
+        
+        
+         
+    }
+};
+     
+/**
+ * @class Roo.htmleditor.Block
+ * Base class for html editor blocks - do not use it directly .. extend it..
+ * @cfg {DomElement} node The node to apply stuff to.
+ * @cfg {String} friendly_name the name that appears in the context bar about this block
+ * @cfg {Object} Context menu - see Roo.form.HtmlEditor.ToolbarContext
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.Block  = function(cfg)
+{
+    // do nothing .. should not be called really.
+}
+/**
+ * factory method to get the block from an element (using cache if necessary)
+ * @static
+ * @param {HtmlElement} the dom element
+ */
+Roo.htmleditor.Block.factory = function(node)
+{
+    var cc = Roo.htmleditor.Block.cache;
+    var id = Roo.get(node).id;
+    if (typeof(cc[id]) != 'undefined' && (!cc[id].node || cc[id].node.closest('body'))) {
+        Roo.htmleditor.Block.cache[id].readElement(node);
+        return Roo.htmleditor.Block.cache[id];
+    }
+    var db  = node.getAttribute('data-block');
+    if (!db) {
+        db = node.nodeName.toLowerCase().toUpperCaseFirst();
+    }
+    var cls = Roo.htmleditor['Block' + db];
+    if (typeof(cls) == 'undefined') {
+        //Roo.log(node.getAttribute('data-block'));
+        Roo.log("OOps missing block : " + 'Block' + db);
+        return false;
+    }
+    Roo.htmleditor.Block.cache[id] = new cls({ node: node });
+    return Roo.htmleditor.Block.cache[id];  /// should trigger update element
+};
+
+/**
+ * initalize all Elements from content that are 'blockable'
+ * @static
+ * @param the body element
+ */
+Roo.htmleditor.Block.initAll = function(body, type)
+{
+    if (typeof(type) == 'undefined') {
+        var ia = Roo.htmleditor.Block.initAll;
+        ia(body,'table');
+        ia(body,'td');
+        ia(body,'figure');
+        return;
+    }
+    Roo.each(Roo.get(body).query(type), function(e) {
+        Roo.htmleditor.Block.factory(e);    
+    },this);
+};
+// question goes here... do we need to clear out this cache sometimes?
+// or show we make it relivant to the htmleditor.
+Roo.htmleditor.Block.cache = {};
+
+Roo.htmleditor.Block.prototype = {
+    
+    node : false,
+    
+     // used by context menu
+    friendly_name : 'Based Block',
+    
+    // text for button to delete this element
+    deleteTitle : false,
+    
+    context : false,
+    /**
+     * Update a node with values from this object
+     * @param {DomElement} node
+     */
+    updateElement : function(node)
+    {
+        Roo.DomHelper.update(node === undefined ? this.node : node, this.toObject());
+    },
+     /**
+     * convert to plain HTML for calling insertAtCursor..
+     */
+    toHTML : function()
+    {
+        return Roo.DomHelper.markup(this.toObject());
+    },
+    /**
+     * used by readEleemnt to extract data from a node
+     * may need improving as it's pretty basic
+     
+     * @param {DomElement} node
+     * @param {String} tag - tag to find, eg. IMG ?? might be better to use DomQuery ?
+     * @param {String} attribute (use html - for contents, or style for using next param as style)
+     * @param {String} style the style property - eg. text-align
+     */
+    getVal : function(node, tag, attr, style)
+    {
+        var n = node;
+        if (tag !== true && n.tagName != tag.toUpperCase()) {
+            // in theory we could do figure[3] << 3rd figure? or some more complex search..?
+            // but kiss for now.
+            n = node.getElementsByTagName(tag).item(0);
+        }
+        if (!n) {
+            return '';
+        }
+        if (attr == 'html') {
+            return n.innerHTML;
+        }
+        if (attr == 'style') {
+            return n.style[style]; 
+        }
+        
+        return n.hasAttribute(attr) ? n.getAttribute(attr) : '';
+            
+    },
+    /**
+     * create a DomHelper friendly object - for use with 
+     * Roo.DomHelper.markup / overwrite / etc..
+     * (override this)
+     */
+    toObject : function()
+    {
+        return {};
+    },
+      /**
+     * Read a node that has a 'data-block' property - and extract the values from it.
+     * @param {DomElement} node - the node
+     */
+    readElement : function(node)
+    {
+        
+    } 
+    
+    
+};
+
+
+/**
+ * @class Roo.htmleditor.BlockFigure
+ * Block that has an image and a figcaption
+ * @cfg {String} image_src the url for the image
+ * @cfg {String} align (left|right) alignment for the block default left
+ * @cfg {String} caption the text to appear below  (and in the alt tag)
+ * @cfg {String} caption_display (block|none) display or not the caption
+ * @cfg {String|number} image_width the width of the image number or %?
+ * @cfg {String|number} image_height the height of the image number or %?
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockFigure = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+}
+Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, {
+    
+    // setable values.
+    image_src: '',
+    align: 'center',
+    caption : '',
+    caption_display : 'block',
+    width : '100%',
+    cls : '',
+    href: '',
+    video_url : '',
+    
+    // margin: '2%', not used
+    
+    text_align: 'left', //   (left|right) alignment for the text caption default left. - not used at present
+
+    
+    // used by context menu
+    friendly_name : 'Image with caption',
+    deleteTitle : "Delete Image and Caption",
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+             {
+                xtype : 'TextItem',
+                text : "Source: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'Button',
+                text: 'Change Image URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Image Source URL",
+                            msg : "Enter the url for the image",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.image_src = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.image_src
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+         
+            {
+                xtype : 'Button',
+                text: 'Change Link URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Link URL",
+                            msg : "Enter the url for the link - leave blank to have no link",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.href = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.href
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: 'Show Video URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        Roo.MessageBox.alert("Video URL",
+                            block().video_url == '' ? 'This image is not linked ot a video' :
+                                'The image is linked to: <a target="_new" href="' + block().video_url + '">' + block().video_url + '</a>');
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['auto'],
+                        ['50%'],
+                        ['100%']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            {
+                xtype : 'TextItem',
+                text : "Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'align',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.align = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['left'],
+                        ['right'],
+                        ['center']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Hide Caption',
+                name : 'caption_display',
+                pressed : false,
+                enableToggle : true,
+                setValue : function(v) {
+                    this.toggle(v == 'block' ? false : true);
+                },
+                listeners : {
+                    toggle: function (btn, state)
+                    {
+                        var b  = block();
+                        b.caption_display = b.caption_display == 'block' ? 'none' : 'block';
+                        this.setText(b.caption_display == 'block' ? "Hide Caption" : "Show Caption");
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            }
+        ];
+        
+    },
+    /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     */
+    toObject : function()
+    {
+        var d = document.createElement('div');
+        d.innerHTML = this.caption;
+        
+        var m = this.width == '50%' && this.align == 'center' ? '0 auto' : 0; 
+        
+        var img =   {
+            tag : 'img',
+            contenteditable : 'false',
+            src : this.image_src,
+            alt : d.innerText.replace(/\n/g, " ").replace(/\s+/g, ' ').trim(), // removeHTML and reduce spaces..
+            style: {
+                width : 'auto',
+                'max-width': '100%',
+                margin : '0px' 
+                
+                
+            }
+        };
+        /*
+        '<div class="{0}" width="420" height="315" src="{1}" frameborder="0" allowfullscreen>' +
+                    '<a href="{2}">' + 
+                        '<img class="{0}-thumbnail" src="{3}/Images/{4}/{5}#image-{4}" />' + 
+                    '</a>' + 
+                '</div>',
+        */
+                
+        if (this.href.length > 0) {
+            img = {
+                tag : 'a',
+                href: this.href,
+                contenteditable : 'true',
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        
+        if (this.video_url.length > 0) {
+            img = {
+                tag : 'div',
+                cls : this.cls,
+                frameborder : 0,
+                allowfullscreen : true,
+                width : 420,  // these are for video tricks - that we replace the outer
+                height : 315,
+                src : this.video_url,
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        var captionhtml = this.caption_display == 'hidden' ? this.caption : (this.caption.length ? this.caption : "Caption");
+        
+        return  {
+            tag: 'figure',
+            'data-block' : 'Figure',
+            contenteditable : 'false',
+            style : {
+                display: 'block',
+                float :  this.align ,
+                'max-width':  this.width,
+                width : 'auto',
+                margin:  m,
+                padding: '10px'
+                
+            },
+           
+            
+            align : this.align,
+            cn : [
+                img,
+              
+                {
+                    tag: 'figcaption',
+                    
+                    style : {
+                        'text-align': 'left',
+                        'margin-top' : '16px',
+                        'font-size' : '16px',
+                        'line-height' : '24px',
+                         display : this.caption_display
+                    },
+                    cls : this.cls.length > 0 ? (this.cls  + '-thumbnail' ) : '',
+                    cn : [
+                        {
+                            // we can not rely on yahoo syndication to use CSS elements - so have to use  '<i>' to encase stuff.
+                            tag : 'i',
+                            contenteditable : true,
+                            html : captionhtml
+                        }
+                    ]
+                    
+                }
+            ]
+        };
+         
+    },
+    
+    readElement : function(node)
+    {
+        // this should not really come from the link...
+        this.video_url = this.getVal(node, 'div', 'src');
+        this.cls = this.getVal(node, 'div', 'class');
+        this.href = this.getVal(node, 'a', 'href');
+        
+        this.image_src = this.getVal(node, 'img', 'src');
+         
+        this.align = this.getVal(node, 'figure', 'align');
+        this.caption = this.getVal(node, 'figcaption', 'html');
+        // remove '<i>
+        if (this.caption.trim().match(/^<i[^>]*>/i)) {
+            this.caption = this.caption.trim().replace(/^<i[^>]*>/i, '').replace(/^<\/i>$/i, '');
+        }
+        //this.text_align = this.getVal(node, 'figcaption', 'style','text-align');
+        this.width = this.getVal(node, 'figure', 'style', 'max-width');
+        //this.margin = this.getVal(node, 'figure', 'style', 'margin');
+        
+    },
+    removeNode : function()
+    {
+        return this.node;
+    }
+    
+  
+   
+     
+    
+    
+    
+    
+})
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTable = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+    if (!cfg.node) {
+        this.rows = [];
+        for(var r = 0; r < this.no_row; r++) {
+            this.rows[r] = [];
+            for(var c = 0; c < this.no_col; c++) {
+                this.rows[r][c] = this.emptyCell();
+            }
+        }
+    }
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTable, Roo.htmleditor.Block, {
+    rows : false,
+    no_col : 1,
+    no_row : 1,
+    
+    
+    width: '100%',
+    
+    // used by context menu
+    friendly_name : 'Table',
+    deleteTitle : 'Delete Table',
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['100%'],
+                        ['auto']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            // -------- Cols
+            
+            {
+                xtype : 'TextItem',
+                text : "Columns: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().addColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'TextItem',
+                text : "Rows: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        block().addRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'Button',
+                text: 'Reset Column Widths',
+                listeners : {
+                    
+                    click : function (_self, e)
+                    {
+                        block().resetWidths();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            } 
+            
+            
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'table',
+            contenteditable : 'false', // this stops cell selection from picking the table.
+            'data-block' : 'Table',
+            style : {
+                width:  this.width,
+                border : 'solid 1px #000', // ??? hard coded?
+                'border-collapse' : 'collapse' 
+            },
+            cn : [
+                { tag : 'tbody' , cn : [] }
+            ]
+        };
+        
+        // do we have a head = not really 
+        var ncols = 0;
+        Roo.each(this.rows, function( row ) {
+            var tr = {
+                tag: 'tr',
+                style : {
+                    margin: '6px',
+                    border : 'solid 1px #000',
+                    textAlign : 'left' 
+                },
+                cn : [ ]
+            };
+            
+            ret.cn[0].cn.push(tr);
+            // does the row have any properties? ?? height?
+            var nc = 0;
+            Roo.each(row, function( cell ) {
+                
+                var td = {
+                    tag : 'td',
+                    contenteditable :  'true',
+                    'data-block' : 'Td',
+                    html : cell.html,
+                    style : cell.style
+                };
+                if (cell.colspan > 1) {
+                    td.colspan = cell.colspan ;
+                    nc += cell.colspan;
+                } else {
+                    nc++;
+                }
+                if (cell.rowspan > 1) {
+                    td.rowspan = cell.rowspan ;
+                }
+                
+                
+                // widths ?
+                tr.cn.push(td);
+                    
+                
+            }, this);
+            ncols = Math.max(nc, ncols);
+            
+            
+        }, this);
+        // add the header row..
+        
+        ncols++;
+         
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = this.getVal(node, true, 'style', 'width') || '100%';
+        
+        this.rows = [];
+        this.no_row = 0;
+        var trs = Array.from(node.rows);
+        trs.forEach(function(tr) {
+            var row =  [];
+            this.rows.push(row);
+            
+            this.no_row++;
+            var no_column = 0;
+            Array.from(tr.cells).forEach(function(td) {
+                
+                var add = {
+                    colspan : td.hasAttribute('colspan') ? td.getAttribute('colspan')*1 : 1,
+                    rowspan : td.hasAttribute('rowspan') ? td.getAttribute('rowspan')*1 : 1,
+                    style : td.hasAttribute('style') ? td.getAttribute('style') : '',
+                    html : td.innerHTML
+                };
+                no_column += add.colspan;
+                     
+                
+                row.push(add);
+                
+                
+            },this);
+            this.no_col = Math.max(this.no_col, no_column);
+            
+            
+        },this);
+        
+        
+    },
+    normalizeRows: function()
+    {
+        var ret= [];
+        var rid = -1;
+        this.rows.forEach(function(row) {
+            rid++;
+            ret[rid] = [];
+            row = this.normalizeRow(row);
+            var cid = 0;
+            row.forEach(function(c) {
+                while (typeof(ret[rid][cid]) != 'undefined') {
+                    cid++;
+                }
+                if (typeof(ret[rid]) == 'undefined') {
+                    ret[rid] = [];
+                }
+                ret[rid][cid] = c;
+                c.row = rid;
+                c.col = cid;
+                if (c.rowspan < 2) {
+                    return;
+                }
+                
+                for(var i = 1 ;i < c.rowspan; i++) {
+                    if (typeof(ret[rid+i]) == 'undefined') {
+                        ret[rid+i] = [];
+                    }
+                    ret[rid+i][cid] = c;
+                }
+            });
+        }, this);
+        return ret;
+    
+    },
+    
+    normalizeRow: function(row)
+    {
+        var ret= [];
+        row.forEach(function(c) {
+            if (c.colspan < 2) {
+                ret.push(c);
+                return;
+            }
+            for(var i =0 ;i < c.colspan; i++) {
+                ret.push(c);
+            }
+        });
+        return ret;
+    
+    },
+    
+    deleteColumn : function(sel)
+    {
+        if (!sel || sel.type != 'col') {
+            return;
+        }
+        if (this.no_col < 2) {
+            return;
+        }
+        
+        this.rows.forEach(function(row) {
+            var cols = this.normalizeRow(row);
+            var col = cols[sel.col];
+            if (col.colspan > 1) {
+                col.colspan --;
+            } else {
+                row.remove(col);
+            }
+            
+        }, this);
+        this.no_col--;
+        
+    },
+    removeColumn : function()
+    {
+        this.deleteColumn({
+            type: 'col',
+            col : this.no_col-1
+        });
+        this.updateElement();
+    },
+    
+     
+    addColumn : function()
+    {
+        
+        this.rows.forEach(function(row) {
+            row.push(this.emptyCell());
+           
+        }, this);
+        this.updateElement();
+    },
+    
+    deleteRow : function(sel)
+    {
+        if (!sel || sel.type != 'row') {
+            return;
+        }
+        
+        if (this.no_row < 2) {
+            return;
+        }
+        
+        var rows = this.normalizeRows();
+        
+        
+        rows[sel.row].forEach(function(col) {
+            if (col.rowspan > 1) {
+                col.rowspan--;
+            } else {
+                col.remove = 1; // flage it as removed.
+            }
+            
+        }, this);
+        var newrows = [];
+        this.rows.forEach(function(row) {
+            newrow = [];
+            row.forEach(function(c) {
+                if (typeof(c.remove) == 'undefined') {
+                    newrow.push(c);
+                }
+                
+            });
+            if (newrow.length > 0) {
+                newrows.push(row);
+            }
+        });
+        this.rows =  newrows;
+        
+        
+        
+        this.no_row--;
+        this.updateElement();
+        
+    },
+    removeRow : function()
+    {
+        this.deleteRow({
+            type: 'row',
+            row : this.no_row-1
+        });
+        
+    },
+    
+     
+    addRow : function()
+    {
+        
+        var row = [];
+        for (var i = 0; i < this.no_col; i++ ) {
+            
+            row.push(this.emptyCell());
+           
+        }
+        this.rows.push(row);
+        this.updateElement();
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return (new Roo.htmleditor.BlockTd({})).toObject();
+        
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node;
+    },
+    
+    
+    
+    resetWidths : function()
+    {
+        Array.from(this.node.getElementsByTagName('td')).forEach(function(n) {
+            var nn = Roo.htmleditor.Block.factory(n);
+            nn.width = '';
+            nn.updateElement(n);
+        });
+    }
+    
+    
+    
+    
+})
+
+/**
+ *
+ * editing a TD?
+ *
+ * since selections really work on the table cell, then editing really should work from there
+ *
+ * The original plan was to support merging etc... - but that may not be needed yet..
+ *
+ * So this simple version will support:
+ *   add/remove cols
+ *   adjust the width +/-
+ *   reset the width...
+ *   
+ *
+ */
+
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTd = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+     
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTd, Roo.htmleditor.Block, {
+    node : false,
+    
+    width: '',
+    textAlign : 'left',
+    valign : 'top',
+    
+    colspan : 1,
+    rowspan : 1,
+    
+    
+    // used by context menu
+    friendly_name : 'Table Cell',
+    deleteTitle : false, // use our customer delete
+    
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var cell = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        var table = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode.closest('table'));
+        };
+        
+        var lr = false;
+        var saveSel = function()
+        {
+            lr = toolbar.editorcore.getSelection().getRangeAt(0);
+        }
+        var restoreSel = function()
+        {
+            if (lr) {
+                (function() {
+                    toolbar.editorcore.focus();
+                    var cr = toolbar.editorcore.getSelection();
+                    cr.removeAllRanges();
+                    cr.addRange(lr);
+                    toolbar.editorcore.onEditorEvent();
+                }).defer(10, this);
+                
+                
+            }
+        }
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'Button',
+                text : 'Edit Table',
+                listeners : {
+                    click : function() {
+                        var t = toolbar.tb.selectedNode.closest('table');
+                        toolbar.editorcore.selectNode(t);
+                        toolbar.editorcore.onEditorEvent();                        
+                    }
+                }
+                
+            },
+              
+           
+             
+            {
+                xtype : 'TextItem',
+                text : "Column Width: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().shrinkColumn();
+                        syncValue();
+                         toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Vertical Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'valign',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = cell();
+                        b.valign = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['top'],
+                        ['middle'],
+                        ['bottom'] // there are afew more... 
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Merge Cells: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Right',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeRight();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+             
+            {
+                xtype : 'Button',
+                text: 'Below',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeBelow();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'TextItem',
+                text : "| ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            {
+                xtype : 'Button',
+                text: 'Split',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        //toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().split();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                                             
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Fill',
+                xns : rooui.Toolbar 
+               
+            },
+        
+          
+            {
+                xtype : 'Button',
+                text: 'Delete',
+                 
+                xns : rooui.Toolbar,
+                menu : {
+                    xtype : 'Menu',
+                    xns : rooui.menu,
+                    items : [
+                        {
+                            xtype : 'Item',
+                            html: 'Column',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    
+                                    cell().deleteColumn();
+                                    syncValue();
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Row',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    cell().deleteRow();
+                                    syncValue();
+                                    
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                       {
+                            xtype : 'Separator',
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Table',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    var nn = t.node.nextSibling || t.node.previousSibling;
+                                    t.node.parentNode.removeChild(t.node);
+                                    if (nn) { 
+                                        toolbar.editorcore.selectNode(nn, true);
+                                    }
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        }
+                    ]
+                }
+            }
+            
+            // align... << fixme
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+ /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'td',
+            contenteditable : 'true', // this stops cell selection from picking the table.
+            'data-block' : 'Td',
+            valign : this.valign,
+            style : {  
+                'text-align' :  this.textAlign,
+                border : 'solid 1px rgb(0, 0, 0)', // ??? hard coded?
+                'border-collapse' : 'collapse',
+                padding : '6px', // 8 for desktop / 4 for mobile
+                'vertical-align': this.valign
+            },
+            html : this.html
+        };
+        if (this.width != '') {
+            ret.width = this.width;
+            ret.style.width = this.width;
+        }
+        
+        
+        if (this.colspan > 1) {
+            ret.colspan = this.colspan ;
+        } 
+        if (this.rowspan > 1) {
+            ret.rowspan = this.rowspan ;
+        }
+        
+           
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = node.style.width;
+        this.colspan = Math.max(1,1*node.getAttribute('colspan'));
+        this.rowspan = Math.max(1,1*node.getAttribute('rowspan'));
+        this.html = node.innerHTML;
+        
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return {
+            colspan :  1,
+            rowspan :  1,
+            textAlign : 'left',
+            html : "&nbsp;" // is this going to be editable now?
+        };
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node.closest('table');
+         
+    },
+    
+    cellData : false,
+    
+    colWidths : false,
+    
+    toTableArray  : function()
+    {
+        var ret = [];
+        var tab = this.node.closest('tr').closest('table');
+        Array.from(tab.rows).forEach(function(r, ri){
+            ret[ri] = [];
+        });
+        var rn = 0;
+        this.colWidths = [];
+        var all_auto = true;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            var cn = 0;
+            Array.from(r.cells).forEach(function(ce, ci){
+                var c =  {
+                    cell : ce,
+                    row : rn,
+                    col: cn,
+                    colspan : ce.colSpan,
+                    rowspan : ce.rowSpan
+                };
+                if (ce.isEqualNode(this.node)) {
+                    this.cellData = c;
+                }
+                // if we have been filled up by a row?
+                if (typeof(ret[rn][cn]) != 'undefined') {
+                    while(typeof(ret[rn][cn]) != 'undefined') {
+                        cn++;
+                    }
+                    c.col = cn;
+                }
+                
+                if (typeof(this.colWidths[cn]) == 'undefined') {
+                    this.colWidths[cn] =   ce.style.width;
+                    if (this.colWidths[cn] != '') {
+                        all_auto = false;
+                    }
+                }
+                
+                
+                if (c.colspan < 2 && c.rowspan < 2 ) {
+                    ret[rn][cn] = c;
+                    cn++;
+                    return;
+                }
+                for(var j = 0; j < c.rowspan; j++) {
+                    if (typeof(ret[rn+j]) == 'undefined') {
+                        continue; // we have a problem..
+                    }
+                    ret[rn+j][cn] = c;
+                    for(var i = 0; i < c.colspan; i++) {
+                        ret[rn+j][cn+i] = c;
+                    }
+                }
+                
+                cn += c.colspan;
+            }, this);
+            rn++;
+        }, this);
+        
+        // initalize widths.?
+        // either all widths or no widths..
+        if (all_auto) {
+            this.colWidths[0] = false; // no widths flag.
+        }
+        
+        
+        return ret;
+        
+    },
+    
+    
+    
+    
+    mergeRight: function()
+    {
+         
+        // get the contents of the next cell along..
+        var tr = this.node.closest('tr');
+        var i = Array.prototype.indexOf.call(tr.childNodes, this.node);
+        if (i >= tr.childNodes.length - 1) {
+            return; // no cells on right to merge with.
+        }
+        var table = this.toTableArray();
+        
+        if (typeof(table[this.cellData.row][this.cellData.col+this.cellData.colspan]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row][this.cellData.col+this.cellData.colspan];
+        // right cell - must be same rowspan and on the same row.
+        if (rc.rowspan != this.cellData.rowspan || rc.row != this.cellData.row) {
+            return; // right hand side is not same rowspan.
+        }
+        
+        
+        
+        this.node.innerHTML += ' ' + rc.cell.innerHTML;
+        tr.removeChild(rc.cell);
+        this.colspan += rc.colspan;
+        this.node.setAttribute('colspan', this.colspan);
+
+    },
+    
+    
+    mergeBelow : function()
+    {
+        var table = this.toTableArray();
+        if (typeof(table[this.cellData.row+this.cellData.rowspan]) == 'undefined') {
+            return; // no row below
+        }
+        if (typeof(table[this.cellData.row+this.cellData.rowspan][this.cellData.col]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row+this.cellData.rowspan][this.cellData.col];
+        
+        if (rc.colspan != this.cellData.colspan || rc.col != this.cellData.col) {
+            return; // right hand side is not same rowspan.
+        }
+        this.node.innerHTML =  this.node.innerHTML + rc.cell.innerHTML ;
+        rc.cell.parentNode.removeChild(rc.cell);
+        this.rowspan += rc.rowspan;
+        this.node.setAttribute('rowspan', this.rowspan);
+    },
+    
+    split: function()
+    {
+        if (this.node.rowSpan < 2 && this.node.colSpan < 2) {
+            return;
+        }
+        var table = this.toTableArray();
+        var cd = this.cellData;
+        this.rowspan = 1;
+        this.colspan = 1;
+        
+        for(var r = cd.row; r < cd.row + cd.rowspan; r++) {
+            
+            
+            
+            for(var c = cd.col; c < cd.col + cd.colspan; c++) {
+                if (r == cd.row && c == cd.col) {
+                    this.node.removeAttribute('rowspan');
+                    this.node.removeAttribute('colspan');
+                    continue;
+                }
+                 
+                var ntd = this.node.cloneNode(); // which col/row should be 0..
+                ntd.removeAttribute('id'); //
+                //ntd.style.width  = '';
+                ntd.innerHTML = '';
+                table[r][c] = { cell : ntd, col : c, row: r , colspan : 1 , rowspan : 1   };
+            }
+            
+        }
+        this.redrawAllCells(table);
+        
+         
+        
+    },
+    
+    
+    
+    redrawAllCells: function(table)
+    {
+        
+         
+        var tab = this.node.closest('tr').closest('table');
+        var ctr = tab.rows[0].parentNode;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            Array.from(r.cells).forEach(function(ce, ci){
+                ce.parentNode.removeChild(ce);
+            });
+            r.parentNode.removeChild(r);
+        });
+        for(var r = 0 ; r < table.length; r++) {
+            var re = tab.rows[r];
+            
+            var re = tab.ownerDocument.createElement('tr');
+            ctr.appendChild(re);
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                re.appendChild(table[r][c].cell);
+                 
+                table[r][c].cell = false;
+            }
+        }
+        
+    },
+    updateWidths : function(table)
+    {
+        for(var r = 0 ; r < table.length; r++) {
+           
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                if (this.colWidths[0] != false && table[r][c].colspan < 2) {
+                    var el = Roo.htmleditor.Block.factory(table[r][c].cell);
+                    el.width = Math.floor(this.colWidths[c])  +'%';
+                    el.updateElement(el.node);
+                }
+                table[r][c].cell = false; // done
+            }
+        }
+    },
+    normalizeWidths : function(table)
+    {
+    
+        if (this.colWidths[0] === false) {
+            var nw = 100.0 / this.colWidths.length;
+            this.colWidths.forEach(function(w,i) {
+                this.colWidths[i] = nw;
+            },this);
+            return;
+        }
+    
+        var t = 0, missing = [];
+        
+        this.colWidths.forEach(function(w,i) {
+            //if you mix % and
+            this.colWidths[i] = this.colWidths[i] == '' ? 0 : (this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+            var add =  this.colWidths[i];
+            if (add > 0) {
+                t+=add;
+                return;
+            }
+            missing.push(i);
+            
+            
+        },this);
+        var nc = this.colWidths.length;
+        if (missing.length) {
+            var mult = (nc - missing.length) / (1.0 * nc);
+            var t = mult * t;
+            var ew = (100 -t) / (1.0 * missing.length);
+            this.colWidths.forEach(function(w,i) {
+                if (w > 0) {
+                    this.colWidths[i] = w * mult;
+                    return;
+                }
+                
+                this.colWidths[i] = ew;
+            }, this);
+            // have to make up numbers..
+             
+        }
+        // now we should have all the widths..
+        
+    
+    },
+    
+    shrinkColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 0.8;
+        if (nw < 5) {
+            return;
+        }
+        var otherAdd = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                 this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] += otherAdd
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    growColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 1.2;
+        if (nw > 90) {
+            return;
+        }
+        var otherSub = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] -= otherSub
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    deleteRow : function()
+    {
+        // delete this rows 'tr'
+        // if any of the cells in this row have a rowspan > 1 && row!= this row..
+        // then reduce the rowspan.
+        var table = this.toTableArray();
+        // this.cellData.row;
+        for (var i =0;i< table[this.cellData.row].length ; i++) {
+            var c = table[this.cellData.row][i];
+            if (c.row != this.cellData.row) {
+                
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+                continue;
+            }
+            if (c.rowspan > 1) {
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+            }
+        }
+        table.splice(this.cellData.row,1);
+        this.redrawAllCells(table);
+        
+    },
+    deleteColumn : function()
+    {
+        var table = this.toTableArray();
+        
+        for (var i =0;i< table.length ; i++) {
+            var c = table[i][this.cellData.col];
+            if (c.col != this.cellData.col) {
+                table[i][this.cellData.col].colspan--;
+            } else if (c.colspan > 1) {
+                c.colspan--;
+                c.cell.setAttribute('colspan', c.colspan);
+            }
+            table[i].splice(this.cellData.col,1);
+        }
+        
+        this.redrawAllCells(table);
+    }
+    
+    
+    
+    
+})
+
+//<script type="text/javascript">
+
+/*
+ * Based  Ext JS Library 1.1.1
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * LGPL
+ *
+ */
+/**
+ * @class Roo.HtmlEditorCore
+ * @extends Roo.Component
+ * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
+ *
+ * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
+ */
+
+Roo.HtmlEditorCore = function(config){
+    
+    
+    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
+    
+    
+    this.addEvents({
+        /**
+         * @event initialize
+         * Fires when the editor is fully initialized (including the iframe)
+         * @param {Roo.HtmlEditorCore} this
+         */
+        initialize: true,
+        /**
+         * @event activate
+         * Fires when the editor is first receives the focus. Any insertion must wait
+         * until after this event.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        activate: true,
+         /**
+         * @event beforesync
+         * Fires before the textarea is updated with content from the editor iframe. Return false
+         * to cancel the sync.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforesync: true,
+         /**
+         * @event beforepush
+         * Fires before the iframe editor is updated with content from the textarea. Return false
+         * to cancel the push.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforepush: true,
+         /**
+         * @event sync
+         * Fires when the textarea is updated with content from the editor iframe.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        sync: true,
+         /**
+         * @event push
+         * Fires when the iframe editor is updated with content from the textarea.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        push: true,
+        
+        /**
+         * @event editorevent
+         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        editorevent: true 
+         
+        
+    });
+    
+    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
+    
+    // defaults : white / black...
+    this.applyBlacklists();
+    
+    
+    
+};
+
+
+Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
+
+
+     /**
+     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
+     */
+    
+    owner : false,
+    
+     /**
+     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
+     *                        Roo.resizable.
+     */
+    resizable : false,
+     /**
+     * @cfg {Number} height (in pixels)
+     */   
+    height: 300,
+   /**
+     * @cfg {Number} width (in pixels)
+     */   
+    width: 500,
+     /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
+    /**
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * 
+     */
+    stylesheets: false,
+     /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
+    
+    /**
+     * @cfg {boolean} allowComments - default false - allow comments in HTML source
+     *          - by default they are stripped - if you are editing email you may need this.
+     */
+    allowComments: false,
+    // id of frame..
+    frameId: false,
+    
+    // private properties
+    validationEvent : false,
+    deferHeight: true,
+    initialized : false,
+    activated : false,
+    sourceEditMode : false,
+    onFocus : Roo.emptyFn,
+    iframePad:3,
+    hideMode:'offsets',
+    
+    clearUp: true,
+    
+    // blacklist + whitelisted elements..
+    black: false,
+    white: false,
+     
+    bodyCls : '',
+
+    
+    undoManager : false,
+    /**
+     * Protected method that will not generally be called directly. It
+     * is called when the editor initializes the iframe with HTML contents. Override this method if you
+     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
+     */
+    getDocMarkup : function(){
+        // body styles..
+        var st = '';
+        
+        // inherit styels from page...?? 
+        if (this.stylesheets === false) {
+            
+            Roo.get(document.head).select('style').each(function(node) {
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+            Roo.get(document.head).select('link').each(function(node) { 
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+        } else if (!this.stylesheets.length) {
+                // simple..
+                st = '<style type="text/css">' +
+                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+                   '</style>';
+        } else {
+            for (var i in this.stylesheets) {
+                if (typeof(this.stylesheets[i]) != 'string') {
+                    continue;
+                }
+                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
+            }
+            
+        }
+        
+        st +=  '<style type="text/css">' +
+            'IMG { cursor: pointer } ' +
+        '</style>';
+        
+        st += '<meta name="google" content="notranslate">';
+        
+        var cls = 'notranslate roo-htmleditor-body';
+        
+        if(this.bodyCls.length){
+            cls += ' ' + this.bodyCls;
+        }
+        
+        return '<html  class="notranslate" translate="no"><head>' + st  +
+            //<style type="text/css">' +
+            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+            //'</style>' +
+            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
+    },
+
+    // private
+    onRender : function(ct, position)
+    {
+        var _t = this;
+        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
+        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
+        
+        
+        this.el.dom.style.border = '0 none';
+        this.el.dom.setAttribute('tabIndex', -1);
+        this.el.addClass('x-hidden hide');
+        
+        
+        
+        if(Roo.isIE){ // fix IE 1px bogus margin
+            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        }
+       
+        
+        this.frameId = Roo.id();
+        
+         
+        
+        var iframe = this.owner.wrap.createChild({
+            tag: 'iframe',
+            cls: 'form-control', // bootstrap..
+            id: this.frameId,
+            name: this.frameId,
+            frameBorder : 'no',
+            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
+        }, this.el
+        );
+        
+        
+        this.iframe = iframe.dom;
+
+        this.assignDocWin();
+        
+        this.doc.designMode = 'on';
+       
+        this.doc.open();
+        this.doc.write(this.getDocMarkup());
+        this.doc.close();
+
+        
+        var task = { // must defer to wait for browser to be ready
+            run : function(){
+                //console.log("run task?" + this.doc.readyState);
+                this.assignDocWin();
+                if(this.doc.body || this.doc.readyState == 'complete'){
+                    try {
+                        this.doc.designMode="on";
+                        
+                    } catch (e) {
+                        return;
+                    }
+                    Roo.TaskMgr.stop(task);
+                    this.initEditor.defer(10, this);
+                }
+            },
+            interval : 10,
+            duration: 10000,
+            scope: this
+        };
+        Roo.TaskMgr.start(task);
+
+    },
+
+    // private
+    onResize : function(w, h)
+    {
+         Roo.log('resize: ' +w + ',' + h );
+        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
+        if(!this.iframe){
             return;
         }
         if(typeof w == 'number'){
             return;
         }
         if(typeof w == 'number'){
@@ -44701,10 +49749,10 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         if(this.sourceEditMode){
  
         
         if(this.sourceEditMode){
  
-            Roo.get(this.iframe).addClass(['x-hidden','hide']);     //FIXME - what's the BS styles for these
+            Roo.get(this.iframe).addClass(['x-hidden','hide', 'd-none']);     //FIXME - what's the BS styles for these
             
         }else{
             
         }else{
-            Roo.get(this.iframe).removeClass(['x-hidden','hide']);
+            Roo.get(this.iframe).removeClass(['x-hidden','hide', 'd-none']);
             //this.iframe.className = '';
             this.deferFocus();
         }
             //this.iframe.className = '';
             this.deferFocus();
         }
@@ -44721,7 +49769,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
      * @param {String} html The HTML to be cleaned
      * return {String} The cleaned HTML
      */
-    cleanHtml : function(html){
+    cleanHtml : function(html)
+    {
         html = String(html);
         if(html.length > 5){
             if(Roo.isSafari){ // strip safari nonsense
         html = String(html);
         if(html.length > 5){
             if(Roo.isSafari){ // strip safari nonsense
@@ -44739,11 +49788,38 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
      * Protected method that will not generally be called directly. Syncs the contents
      * of the editor iframe with the textarea.
      */
-    syncValue : function(){
+    syncValue : function()
+    {
+        //Roo.log("HtmlEditorCore:syncValue (EDITOR->TEXT)");
         if(this.initialized){
         if(this.initialized){
+            
+            this.undoManager.addEvent();
+
+            
             var bd = (this.doc.body || this.doc.documentElement);
             var bd = (this.doc.body || this.doc.documentElement);
-            //this.cleanUpPaste(); -- this is done else where and causes havoc..
-            var html = bd.innerHTML;
+           
+            
+            var sel = this.win.getSelection();
+            
+            var div = document.createElement('div');
+            div.innerHTML = bd.innerHTML;
+            var gtx = div.getElementsByClassName('gtx-trans-icon'); // google translate - really annoying and difficult to get rid of.
+            if (gtx.length > 0) {
+                var rm = gtx.item(0).parentNode;
+                rm.parentNode.removeChild(rm);
+            }
+            
+           
+            if (this.enableBlocks) {
+                new Roo.htmleditor.FilterBlock({ node : div });
+            }
+            //?? tidy?
+            var tidy = new Roo.htmleditor.TidySerializer({
+                inner:  true
+            });
+            var html  = tidy.serialize(div);
+            
+            
             if(Roo.isSafari){
                 var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
                 var m = bs ? bs.match(/text-align:(.*?);/i) : false;
             if(Roo.isSafari){
                 var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
                 var m = bs ? bs.match(/text-align:(.*?);/i) : false;
@@ -44788,24 +49864,41 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     },
 
     /**
     },
 
     /**
+     * TEXTAREA -> EDITABLE
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
      * Protected method that will not generally be called directly. Pushes the value of the textarea
      * into the iframe editor.
      */
-    pushValue : function(){
+    pushValue : function()
+    {
+        //Roo.log("HtmlEditorCore:pushValue (TEXT->EDITOR)");
         if(this.initialized){
             var v = this.el.dom.value.trim();
             
         if(this.initialized){
             var v = this.el.dom.value.trim();
             
-//            if(v.length < 1){
-//                v = '&#160;';
-//            }
             
             if(this.owner.fireEvent('beforepush', this, v) !== false){
                 var d = (this.doc.body || this.doc.documentElement);
                 d.innerHTML = v;
             
             if(this.owner.fireEvent('beforepush', this, v) !== false){
                 var d = (this.doc.body || this.doc.documentElement);
                 d.innerHTML = v;
-                this.cleanUpPaste();
+                 
                 this.el.dom.value = d.innerHTML;
                 this.owner.fireEvent('push', this, v);
             }
                 this.el.dom.value = d.innerHTML;
                 this.owner.fireEvent('push', this, v);
             }
+            if (this.autoClean) {
+                new Roo.htmleditor.FilterParagraph({node : this.doc.body}); // paragraphs
+                new Roo.htmleditor.FilterSpan({node : this.doc.body}); // empty spans
+            }
+            if (this.enableBlocks) {
+                Roo.htmleditor.Block.initAll(this.doc.body);
+            }
+            
+            this.updateLanguage();
+            
+            var lc = this.doc.body.lastChild;
+            if (lc && lc.nodeType == 1 && lc.getAttribute("contenteditable") == "false") {
+                // add an extra line at the end.
+                this.doc.body.appendChild(this.doc.createElement('br'));
+            }
+            
+            
         }
     },
 
         }
     },
 
@@ -44867,28 +49960,136 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
+        dbody.setAttribute("translate", "no");
+        
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
-            //'mousedown': this.onEditorEvent,
+             
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
+            
             buffer:100,
             scope: this
         });
             buffer:100,
             scope: this
         });
+        Roo.EventManager.on(this.doc, {
+            'paste': this.onPasteEvent,
+            scope : this
+        });
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
+        //??? needed???
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
+        
+        // initialize special key events - enter
+        new Roo.htmleditor.KeyEnter({core : this});
+        
+         
+        
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
-
+    // this is to prevent a href clicks resulting in a redirect?
+   
+    onPasteEvent : function(e,v)
+    {
+        // I think we better assume paste is going to be a dirty load of rubish from word..
+        
+        // even pasting into a 'email version' of this widget will have to clean up that mess.
+        var cd = (e.browserEvent.clipboardData || window.clipboardData);
+        
+        // check what type of paste - if it's an image, then handle it differently.
+        if (cd.files.length > 0) {
+            // pasting images?
+            var urlAPI = (window.createObjectURL && window) || 
+                (window.URL && URL.revokeObjectURL && URL) || 
+                (window.webkitURL && webkitURL);
+    
+            var url = urlAPI.createObjectURL( cd.files[0]);
+            this.insertAtCursor('<img src=" + url + ">');
+            return false;
+        }
+        
+        var html = cd.getData('text/html'); // clipboard event
+        var parser = new Roo.rtf.Parser(cd.getData('text/rtf'));
+        var images = parser.doc ? parser.doc.getElementsByType('pict') : [];
+        Roo.log(images);
+        //Roo.log(imgs);
+        // fixme..
+        images = images.filter(function(g) { return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/); }) // ignore headers
+                       .map(function(g) { return g.toDataURL(); })
+                       .filter(function(g) { return g != 'about:blank'; });
+        
+        
+        html = this.cleanWordChars(html);
+        
+        var d = (new DOMParser().parseFromString(html, 'text/html')).body;
+        
+        
+        var sn = this.getParentElement();
+        // check if d contains a table, and prevent nesting??
+        //Roo.log(d.getElementsByTagName('table'));
+        //Roo.log(sn);
+        //Roo.log(sn.closest('table'));
+        if (d.getElementsByTagName('table').length && sn && sn.closest('table')) {
+            e.preventDefault();
+            this.insertAtCursor("You can not nest tables");
+            //Roo.log("prevent?"); // fixme - 
+            return false;
+        }
+        
+        if (images.length > 0) {
+            Roo.each(d.getElementsByTagName('img'), function(img, i) {
+                img.setAttribute('src', images[i]);
+            });
+        }
+        if (this.autoClean) {
+            new Roo.htmleditor.FilterStyleToTag({ node : d });
+            new Roo.htmleditor.FilterAttributes({
+                node : d,
+                attrib_white : ['href', 'src', 'name', 'align'],
+                attrib_clean : ['href', 'src' ] 
+            });
+            new Roo.htmleditor.FilterBlack({ node : d, tag : this.black});
+            // should be fonts..
+            new Roo.htmleditor.FilterKeepChildren({node : d, tag : [ 'FONT', 'O:P' ]} );
+            new Roo.htmleditor.FilterParagraph({ node : d });
+            new Roo.htmleditor.FilterSpan({ node : d });
+            new Roo.htmleditor.FilterLongBr({ node : d });
+        }
+        if (this.enableBlocks) {
+                
+            Array.from(d.getElementsByTagName('img')).forEach(function(img) {
+                if (img.closest('figure')) { // assume!! that it's aready
+                    return;
+                }
+                var fig  = new Roo.htmleditor.BlockFigure({
+                    image_src  : img.src
+                });
+                fig.updateElement(img); // replace it..
+                
+            });
+        }
+        
+        
+        this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));
+        if (this.enableBlocks) {
+            Roo.htmleditor.Block.initAll(this.doc.body);
+        }
+        
+        
+        e.preventDefault();
+        return false;
+        // default behaveiour should be our local cleanup paste? (optional?)
+        // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
+        //this.owner.fireEvent('paste', e, v);
+    },
     // private
     onDestroy : function(){
         
     // private
     onDestroy : function(){
         
@@ -44910,7 +50111,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     onFirstFocus : function(){
         
         this.assignDocWin();
     onFirstFocus : function(){
         
         this.assignDocWin();
-        
+        this.undoManager = new Roo.lib.UndoManager(100,(this.doc.body || this.doc.documentElement));
         
         this.activated = true;
          
         
         this.activated = true;
          
@@ -44955,10 +50156,48 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     onEditorEvent : function(e)
     {
 
     onEditorEvent : function(e)
     {
-        this.owner.fireEvent('editorevent', this, e);
+         
+        
+        if (e && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+            return; // we do not handle this.. (undo manager does..)
+        }
+        // in theory this detects if the last element is not a br, then we try and do that.
+        // its so clicking in space at bottom triggers adding a br and moving the cursor.
+        if (e &&
+            e.target.nodeName == 'BODY' &&
+            e.type == "mouseup" &&
+            this.doc.body.lastChild
+           ) {
+            var lc = this.doc.body.lastChild;
+            // gtx-trans is google translate plugin adding crap.
+            while ((lc.nodeType == 3 && lc.nodeValue == '') || lc.id == 'gtx-trans') {
+                lc = lc.previousSibling;
+            }
+            if (lc.nodeType == 1 && lc.nodeName != 'BR') {
+            // if last element is <BR> - then dont do anything.
+            
+                var ns = this.doc.createElement('br');
+                this.doc.body.appendChild(ns);
+                range = this.doc.createRange();
+                range.setStartAfter(ns);
+                range.collapse(true);
+                var sel = this.win.getSelection();
+                sel.removeAllRanges();
+                sel.addRange(range);
+            }
+        }
+        
+        
+        
+        this.fireEditorEvent(e);
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
+    
+    fireEditorEvent: function(e)
+    {
+        this.owner.fireEvent('editorevent', this, e);
+    },
 
     insertTag : function(tg)
     {
 
     insertTag : function(tg)
     {
@@ -44980,7 +50219,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             
         }
         this.execCmd("formatblock",   tg);
             
         }
         this.execCmd("formatblock",   tg);
-        
+        this.undoManager.addEvent(); 
     },
     
     insertText : function(txt)
     },
     
     insertText : function(txt)
@@ -44992,6 +50231,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
+        this.undoManager.addEvent();
     } ,
     
      
     } ,
     
      
@@ -45002,7 +50242,37 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
-    relayCmd : function(cmd, value){
+    relayCmd : function(cmd, value)
+    {
+        
+        switch (cmd) {
+            case 'justifyleft':
+            case 'justifyright':
+            case 'justifycenter':
+                // if we are in a cell, then we will adjust the
+                var n = this.getParentElement();
+                var td = n.closest('td');
+                if (td) {
+                    var bl = Roo.htmleditor.Block.factory(td);
+                    bl.textAlign = cmd.replace('justify','');
+                    bl.updateElement();
+                    this.owner.fireEvent('editorevent', this);
+                    return;
+                }
+                this.execCmd('styleWithCSS', true); // 
+                break;
+            case 'bold':
+            case 'italic':
+                // if there is no selection, then we insert, and set the curson inside it..
+                this.execCmd('styleWithCSS', false); 
+                break;
+                
+        
+            default:
+                break;
+        }
+        
+        
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
@@ -45035,20 +50305,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         if(!this.activated){
             return;
         }
         if(!this.activated){
             return;
         }
-        /*
-        if(Roo.isIE){
-            this.win.focus();
-            var r = this.doc.selection.createRange();
-            if(r){
-                r.collapse(true);
-                r.pasteHTML(text);
-                this.syncValue();
-                this.deferFocus();
-            
-            }
-            return;
-        }
-        */
+         
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
@@ -45058,19 +50315,31 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
+                
+                // delete the existing?
+                
+                this.createRange(this.getSelection()).deleteContents();
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
+                range = range.cloneRange();
+                range.collapse(false);
+                 
+                win.getSelection().removeAllRanges();
+                win.getSelection().addRange(range);
+                
+                
+                
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
+            
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
-            
             this.syncValue();
             
             this.deferFocus();
             this.syncValue();
             
             this.deferFocus();
@@ -45095,15 +50364,17 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                         cmd = 'underline';
                         break;
                     
                         cmd = 'underline';
                         break;
                     
-                    case 'v':
-                        this.cleanUpPaste.defer(100, this);
-                        return;
+                    //case 'v':
+                      //  this.cleanUpPaste.defer(100, this);
+                      //  return;
                         
                 }
                 if(cmd){
                         
                 }
                 if(cmd){
-                    this.win.focus();
-                    this.execCmd(cmd);
-                    this.deferFocus();
+                    
+                    this.relayCmd(cmd);
+                    //this.win.focus();
+                    //this.execCmd(cmd);
+                    //this.deferFocus();
                     e.preventDefault();
                 }
                 
                     e.preventDefault();
                 }
                 
@@ -45113,6 +50384,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
+        
+        
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
@@ -45126,23 +50399,25 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     }
                     return;
                 }
                     }
                     return;
                 }
-                
+                /// this is handled by Roo.htmleditor.KeyEnter
+                 /*
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
-                            r.pasteHTML('<br />');
+                            r.pasteHTML('<br/>');
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                */
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                //    return;
+                //}
                 
                 
             };
                 
                 
             };
@@ -45155,10 +50430,11 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+               
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                 //   return;
+                //}
                 
             };
         }else if(Roo.isSafari){
                 
             };
         }else if(Roo.isSafari){
@@ -45171,10 +50447,12 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.deferFocus();
                     return;
                 }
                     this.deferFocus();
                     return;
                 }
-               if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                 this.mozKeyPress(e);
+                
+               //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                 //   this.cleanUpPaste.defer(100, this);
+                 //   return;
+               // }
                 
              };
         }
                 
              };
         }
@@ -45204,7 +50482,27 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     getSelection : function() 
     {
         this.assignDocWin();
     getSelection : function() 
     {
         this.assignDocWin();
-        return Roo.isIE ? this.doc.selection : this.win.getSelection();
+        return Roo.lib.Selection.wrap(Roo.isIE ? this.doc.selection : this.win.getSelection(), this.doc);
+    },
+    /**
+     * Select a dom node
+     * @param {DomElement} node the node to select
+     */
+    selectNode : function(node, collapse)
+    {
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
+        }
+        if (collapse === true) {
+            nodeRange.collapse(true);
+        }
+        //
+        var s = this.win.getSelection();
+        s.removeAllRanges();
+        s.addRange(nodeRange);
     },
     
     getSelectedNode: function() 
     },
     
     getSelectedNode: function() 
@@ -45213,8 +50511,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         // should we cache this!!!!
         
         
         // should we cache this!!!!
         
-        
-        
+         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
@@ -45278,6 +50575,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         return nodes[0];
     },
         
         return nodes[0];
     },
+    
+    
     createRange: function(sel)
     {
         // this has strange effects when using with 
     createRange: function(sel)
     {
         // this has strange effects when using with 
@@ -45395,26 +50694,21 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         // fully contined.
         return 3;
     },
         // fully contined.
         return 3;
     },
-
-    // private? - in a new class?
-    cleanUpPaste :  function()
-    {
-        // cleans up the whole document..
-        Roo.log('cleanuppaste');
-        
-        this.cleanUpChildren(this.doc.body);
-        var clean = this.cleanWordChars(this.doc.body.innerHTML);
-        if (clean != this.doc.body.innerHTML) {
-            this.doc.body.innerHTML = clean;
-        }
-        
-    },
-    
     cleanWordChars : function(input) {// change the chars to hex code
     cleanWordChars : function(input) {// change the chars to hex code
-        var he = Roo.HtmlEditorCore;
         
         
+       var swapCodes  = [ 
+            [    8211, "&#8211;" ], 
+            [    8212, "&#8212;" ], 
+            [    8216,  "'" ],  
+            [    8217, "'" ],  
+            [    8220, '"' ],  
+            [    8221, '"' ],  
+            [    8226, "*" ],  
+            [    8230, "..." ]
+        ]; 
         var output = input;
         var output = input;
-        Roo.each(he.swapCodes, function(sw) { 
+        Roo.each(swapCodes, function(sw) { 
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
@@ -45423,487 +50717,60 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         return output;
     },
     
         return output;
     },
     
-    
-    cleanUpChildren : function (n)
-    {
-        if (!n.childNodes.length) {
-            return;
-        }
-        for (var i = n.childNodes.length-1; i > -1 ; i--) {
-           this.cleanUpChild(n.childNodes[i]);
-        }
-    },
-    
+     
     
         
     
     cleanUpChild : function (node)
     {
     
         
     
     cleanUpChild : function (node)
     {
-        var ed = this;
-        //console.log(node);
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            if (!this.allowComments) {
-                node.parentNode.removeChild(node);
-            }
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        var lcname = node.tagName.toLowerCase();
-        // we ignore whitelists... ?? = not really the way to go, but we probably have not got a full
-        // whitelist of tags..
-        
-        if (this.black.indexOf(lcname) > -1 && this.clearUp ) {
-            // remove node.
-            node.parentNode.removeChild(node);
-            return;
-            
-        }
-        
-        var remove_keep_children= Roo.HtmlEditorCore.remove.indexOf(node.tagName.toLowerCase()) > -1;
-        
-        // spans with no attributes - just remove them..
-        if ((!node.attributes || !node.attributes.length) && lcname == 'span') { 
-            remove_keep_children = true;
-        }
-        
-        // remove <a name=....> as rendering on yahoo mailer is borked with this.
-        // this will have to be flaged elsewhere - perhaps ablack=name... on the mailer..
-        
-        //if (node.tagName.toLowerCase() == 'a' && !node.hasAttribute('href')) {
-        //    remove_keep_children = true;
-        //}
-        
-        if (remove_keep_children) {
-            this.cleanUpChildren(node);
-            // inserts everything just before this node...
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-            }
-            node.parentNode.removeChild(node);
-            return;
-        }
-        
-        if (!node.attributes || !node.attributes.length) {
-            
-          
-            
-            
-            this.cleanUpChildren(node);
-            return;
-        }
-        
-        function cleanAttr(n,v)
-        {
-            
-            if (v.match(/^\./) || v.match(/^\//)) {
-                return;
-            }
-            if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/) || v.match(/^ftp:/)) {
-                return;
-            }
-            if (v.match(/^#/)) {
-                return;
-            }
-            if (v.match(/^\{/)) { // allow template editing.
-                return;
-            }
-//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
-            node.removeAttribute(n);
-            
-        }
-        
-        var cwhite = this.cwhite;
-        var cblack = this.cblack;
-            
-        function cleanStyle(n,v)
-        {
-            if (v.match(/expression/)) { //XSS?? should we even bother..
-                node.removeAttribute(n);
-                return;
-            }
-            
-            var parts = v.split(/;/);
-            var clean = [];
-            
-            Roo.each(parts, function(p) {
-                p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                if (!p.length) {
-                    return true;
-                }
-                var l = p.split(':').shift().replace(/\s+/g,'');
-                l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                
-                if ( cwhite.length && cblack.indexOf(l) > -1) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                //Roo.log()
-                // only allow 'c whitelisted system attributes'
-                if ( cwhite.length &&  cwhite.indexOf(l) < 0 && cwhite.indexOf(l.toLowerCase()) < 0 ) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                
-                
-                 
-                
-                clean.push(p);
-                return true;
-            });
-            if (clean.length) { 
-                node.setAttribute(n, clean.join(';'));
-            } else {
-                node.removeAttribute(n);
-            }
-            
-        }
-        
-        
-        for (var i = node.attributes.length-1; i > -1 ; i--) {
-            var a = node.attributes[i];
-            //console.log(a);
-            
-            if (a.name.toLowerCase().substr(0,2)=='on')  {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase()) > -1) {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase()) > -1) {
-                cleanAttr(a.name,a.value); // fixme..
-                continue;
-            }
-            if (a.name == 'style') {
-                cleanStyle(a.name,a.value);
-                continue;
-            }
-            /// clean up MS crap..
-            // tecnically this should be a list of valid class'es..
-            
-            
-            if (a.name == 'class') {
-                if (a.value.match(/^Mso/)) {
-                    node.removeAttribute('class');
-                }
-                
-                if (a.value.match(/^body$/)) {
-                    node.removeAttribute('class');
-                }
-                continue;
-            }
-            
-            // style cleanup!?
-            // class cleanup?
-            
-        }
-        
-        
-        this.cleanUpChildren(node);
         
         
+        new Roo.htmleditor.FilterComment({node : node});
+        new Roo.htmleditor.FilterAttributes({
+                node : node,
+                attrib_black : this.ablack,
+                attrib_clean : this.aclean,
+                style_white : this.cwhite,
+                style_black : this.cblack
+        });
+        new Roo.htmleditor.FilterBlack({ node : node, tag : this.black});
+        new Roo.htmleditor.FilterKeepChildren({node : node, tag : this.tag_remove} );
+         
         
     },
     
     /**
      * Clean up MS wordisms...
         
     },
     
     /**
      * Clean up MS wordisms...
+     * @deprecated - use filter directly
      */
     cleanWord : function(node)
     {
      */
     cleanWord : function(node)
     {
-        if (!node) {
-            this.cleanWord(this.doc.body);
-            return;
-        }
-        
-        if(
-                node.nodeName == 'SPAN' &&
-                !node.hasAttributes() &&
-                node.childNodes.length == 1 &&
-                node.firstChild.nodeName == "#text"  
-        ) {
-            var textNode = node.firstChild;
-            node.removeChild(textNode);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
-            }
-            node.parentNode.insertBefore(textNode, node);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
-            }
-            node.parentNode.removeChild(node);
-        }
-        
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            node.parentNode.removeChild(node);
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        
-        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
-            node.parentNode.removeChild(node);
-            return;
-        }
-        //Roo.log(node.tagName);
-        // remove - but keep children..
-        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
-            //Roo.log('-- removed');
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-                // move node to parent - and clean it..
-                this.cleanWord(cn);
-            }
-            node.parentNode.removeChild(node);
-            /// no need to iterate chidlren = it's got none..
-            //this.iterateChildren(node, this.cleanWord);
-            return;
-        }
-        // clean styles
-        if (node.className.length) {
-            
-            var cn = node.className.split(/\W+/);
-            var cna = [];
-            Roo.each(cn, function(cls) {
-                if (cls.match(/Mso[a-zA-Z]+/)) {
-                    return;
-                }
-                cna.push(cls);
-            });
-            node.className = cna.length ? cna.join(' ') : '';
-            if (!cna.length) {
-                node.removeAttribute("class");
-            }
-        }
-        
-        if (node.hasAttribute("lang")) {
-            node.removeAttribute("lang");
-        }
-        
-        if (node.hasAttribute("style")) {
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        this.iterateChildren(node, this.cleanWord);
-        
+        new Roo.htmleditor.FilterWord({ node : node ? node : this.doc.body });
         
         
-        
-    },
-    /**
-     * iterateChildren of a Node, calling fn each time, using this as the scole..
-     * @param {DomNode} node node to iterate children of.
-     * @param {Function} fn method of this class to call on each item.
-     */
-    iterateChildren : function(node, fn)
-    {
-        if (!node.childNodes.length) {
-                return;
-        }
-        for (var i = node.childNodes.length-1; i > -1 ; i--) {
-           fn.call(this, node.childNodes[i])
-        }
     },
     },
-    
+   
     
     /**
     
     /**
-     * cleanTableWidths.
-     *
-     * Quite often pasting from word etc.. results in tables with column and widths.
-     * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
-     *
+
+     * @deprecated - use filters
      */
     cleanTableWidths : function(node)
     {
      */
     cleanTableWidths : function(node)
     {
-         
-         
-        if (!node) {
-            this.cleanTableWidths(this.doc.body);
-            return;
-        }
-        
-        // ignore list...
-        if (node.nodeName == "#text" || node.nodeName == "#comment") {
-            return; 
-        }
-        Roo.log(node.tagName);
-        if (!node.tagName.toLowerCase().match(/^(table|td|tr)$/)) {
-            this.iterateChildren(node, this.cleanTableWidths);
-            return;
-        }
-        if (node.hasAttribute('width')) {
-            node.removeAttribute('width');
-        }
-        
-         
-        if (node.hasAttribute("style")) {
-            // pretty basic...
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        
-        this.iterateChildren(node, this.cleanTableWidths);
-        
+        new Roo.htmleditor.FilterTableWidth({ node : node ? node : this.doc.body});
         
         
     },
     
     },
     
-    
-    
-    
-    domToHTML : function(currentElement, depth, nopadtext) {
-        
-        depth = depth || 0;
-        nopadtext = nopadtext || false;
-    
-        if (!currentElement) {
-            return this.domToHTML(this.doc.body);
-        }
-        
-        //Roo.log(currentElement);
-        var j;
-        var allText = false;
-        var nodeName = currentElement.nodeName;
-        var tagName = Roo.util.Format.htmlEncode(currentElement.tagName);
-        
-        if  (nodeName == '#text') {
-            
-            return nopadtext ? currentElement.nodeValue : currentElement.nodeValue.trim();
-        }
-        
-        
-        var ret = '';
-        if (nodeName != 'BODY') {
-             
-            var i = 0;
-            // Prints the node tagName, such as <A>, <IMG>, etc
-            if (tagName) {
-                var attr = [];
-                for(i = 0; i < currentElement.attributes.length;i++) {
-                    // quoting?
-                    var aname = currentElement.attributes.item(i).name;
-                    if (!currentElement.attributes.item(i).value.length) {
-                        continue;
-                    }
-                    attr.push(aname + '="' + Roo.util.Format.htmlEncode(currentElement.attributes.item(i).value) + '"' );
-                }
-                
-                ret = "<"+currentElement.tagName+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">";
-            } 
-            else {
-                
-                // eack
-            }
-        } else {
-            tagName = false;
-        }
-        if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(tagName) > -1) {
-            return ret;
-        }
-        if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN'].indexOf(tagName) > -1) { // or code?
-            nopadtext = true;
-        }
-        
-        
-        // Traverse the tree
-        i = 0;
-        var currentElementChild = currentElement.childNodes.item(i);
-        var allText = true;
-        var innerHTML  = '';
-        lastnode = '';
-        while (currentElementChild) {
-            // Formatting code (indent the tree so it looks nice on the screen)
-            var nopad = nopadtext;
-            if (lastnode == 'SPAN') {
-                nopad  = true;
-            }
-            // text
-            if  (currentElementChild.nodeName == '#text') {
-                var toadd = Roo.util.Format.htmlEncode(currentElementChild.nodeValue);
-                toadd = nopadtext ? toadd : toadd.trim();
-                if (!nopad && toadd.length > 80) {
-                    innerHTML  += "\n" + (new Array( depth + 1 )).join( "  "  );
-                }
-                innerHTML  += toadd;
-                
-                i++;
-                currentElementChild = currentElement.childNodes.item(i);
-                lastNode = '';
-                continue;
-            }
-            allText = false;
-            
-            innerHTML  += nopad ? '' : "\n" + (new Array( depth + 1 )).join( "  "  );
-                
-            // Recursively traverse the tree structure of the child node
-            innerHTML   += this.domToHTML(currentElementChild, depth+1, nopadtext);
-            lastnode = currentElementChild.nodeName;
-            i++;
-            currentElementChild=currentElement.childNodes.item(i);
-        }
-        
-        ret += innerHTML;
-        
-        if (!allText) {
-                // The remaining code is mostly for formatting the tree
-            ret+= nopadtext ? '' : "\n" + (new Array( depth  )).join( "  "  );
-        }
-        
-        
-        if (tagName) {
-            ret+= "</"+tagName+">";
-        }
-        return ret;
-        
-    },
+     
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
+        this.aclean = typeof(this.owner.aclean) != 'undefined' && this.owner.aclean ? this.owner.aclean :  Roo.HtmlEditorCore.aclean;
+        this.ablack = typeof(this.owner.ablack) != 'undefined' && this.owner.ablack ? this.owner.ablack :  Roo.HtmlEditorCore.ablack;
+        this.tag_remove = typeof(this.owner.tag_remove) != 'undefined' && this.owner.tag_remove ? this.owner.tag_remove :  Roo.HtmlEditorCore.tag_remove;
+        
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
@@ -46021,6 +50888,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
     },
     
         
     },
     
+    
+    updateLanguage : function()
+    {
+        if (!this.iframe || !this.iframe.contentDocument) {
+            return;
+        }
+        Roo.get(this.iframe.contentDocument.body).attr("lang", this.language);
+    },
+    
+    
     removeStylesheets : function()
     {
         var _this = this;
     removeStylesheets : function()
     {
         var _this = this;
@@ -46085,36 +50962,40 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 });
 
 Roo.HtmlEditorCore.white = [
 });
 
 Roo.HtmlEditorCore.white = [
-        'area', 'br', 'img', 'input', 'hr', 'wbr',
+        'AREA', 'BR', 'IMG', 'INPUT', 'HR', 'WBR',
         
         
-       'address', 'blockquote', 'center', 'dd',      'dir',       'div', 
-       'dl',      'dt',         'h1',     'h2',      'h3',        'h4', 
-       'h5',      'h6',         'hr',     'isindex', 'listing',   'marquee', 
-       'menu',    'multicol',   'ol',     'p',       'plaintext', 'pre', 
-       'table',   'ul',         'xmp', 
+       'ADDRESS', 'BLOCKQUOTE', 'CENTER', 'DD',      'DIR',       'DIV', 
+       'DL',      'DT',         'H1',     'H2',      'H3',        'H4', 
+       'H5',      'H6',         'HR',     'ISINDEX', 'LISTING',   'MARQUEE', 
+       'MENU',    'MULTICOL',   'OL',     'P',       'PLAINTEXT', 'PRE', 
+       'TABLE',   'UL',         'XMP', 
        
        
-       'caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', 
-      'thead',   'tr', 
+       'CAPTION', 'COL', 'COLGROUP', 'TBODY', 'TD', 'TFOOT', 'TH', 
+      'THEAD',   'TR', 
      
      
-      'dir', 'menu', 'ol', 'ul', 'dl',
+      'DIR', 'MENU', 'OL', 'UL', 'DL',
        
        
-      'embed',  'object'
+      'EMBED',  'OBJECT'
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
-        'applet', // 
-        'base',   'basefont', 'bgsound', 'blink',  'body', 
-        'frame',  'frameset', 'head',    'html',   'ilayer', 
-        'iframe', 'layer',  'link',     'meta',    'object',   
-        'script', 'style' ,'title',  'xml' // clean later..
+        'APPLET', // 
+        'BASE',   'BASEFONT', 'BGSOUND', 'BLINK',  'BODY', 
+        'FRAME',  'FRAMESET', 'HEAD',    'HTML',   'ILAYER', 
+        'IFRAME', 'LAYER',  'LINK',     'META',    'OBJECT',   
+        'SCRIPT', 'STYLE' ,'TITLE',  'XML',
+        //'FONT' // CLEAN LATER..
+        'COLGROUP', 'COL'   // messy tables.
+        
+        
 ];
 ];
-Roo.HtmlEditorCore.clean = [
-    'script', 'style', 'title', 'xml'
+Roo.HtmlEditorCore.clean = [ // ?? needed???
+     'SCRIPT', 'STYLE', 'TITLE', 'XML'
 ];
 ];
-Roo.HtmlEditorCore.remove = [
-    'font'
+Roo.HtmlEditorCore.tag_remove = [
+    'FONT', 'TBODY'  
 ];
 // attributes..
 
 ];
 // attributes..
 
@@ -46145,16 +51026,7 @@ Roo.HtmlEditorCore.cblack= [
 ];
 
 
 ];
 
 
-Roo.HtmlEditorCore.swapCodes   =[ 
-    [    8211, "&#8211;" ], 
-    [    8212, "&#8212;" ], 
-    [    8216,  "'" ],  
-    [    8217, "'" ],  
-    [    8220, '"' ],  
-    [    8221, '"' ],  
-    [    8226, "*" ],  
-    [    8230, "..." ]
-]; 
+
 
     //<script type="text/javascript">
 
 
     //<script type="text/javascript">
 
@@ -46217,7 +51089,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
     width: 500,
     
     /**
     width: 500,
     
     /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .
      * 
      */
     stylesheets: false,
      * 
      */
     stylesheets: false,
@@ -46248,7 +51120,27 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
     
     
+    /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    /**
+     * @cfg {string} bodyCls default '' default classes to add to body of editable area - usually undoreset is a good start..
+     */
+    bodyCls : '',
+    /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
+    
+     
     // id of frame..
     frameId: false,
     
     // id of frame..
     frameId: false,
     
@@ -46353,7 +51245,13 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
-            stylesheetsclick: true
+            stylesheetsclick: true,
+            /**
+            * @event paste
+            * Fires when press user pastes into the editor
+            * @param {Roo.HtmlEditorCore} this
+            */
+            paste: true 
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
@@ -46384,8 +51282,19 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
          
         
     },
          
         
     },
-
-     
+    /**
+     * get the Context selected node
+     * @returns {DomElement|boolean} selected node if active or false if none
+     * 
+     */
+    getSelectedNode : function()
+    {
+        if (this.toolbars.length < 2 || !this.toolbars[1].tb) {
+            return false;
+        }
+        return this.toolbars[1].tb.selectedNode;
+    
+    },
     // private
     onRender : function(ct, position)
     {
     // private
     onRender : function(ct, position)
     {
@@ -46606,6 +51515,8 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
+            this.el.dom.scrollTop = 0;
+            
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
@@ -46673,7 +51584,17 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
         this.editorcore.pushValue();
     },
 
         this.editorcore.pushValue();
     },
 
+    /**
+     * update the language in the body - really done by core
+     * @param {String} language - eg. en / ar / zh-CN etc..
+     */
+    updateLanguage : function(lang)
+    {
+        this.language = lang;
+        this.editorcore.language = lang;
+        this.editorcore.updateLanguage();
      
      
+    },
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
@@ -46778,8 +51699,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      */
 });
  
      */
 });
  
-    // <script type="text/javascript">
-/*
+    /*
  * Based on
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
  * Based on
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
@@ -46788,9 +51708,9 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
  */
 
 /**
  */
 
 /**
- * @class Roo.form.HtmlEditorToolbar1
+ * @class Roo.form.HtmlEditor.ToolbarStandard
  * Basic Toolbar
  * Basic Toolbar
- * 
+
  * Usage:
  *
  new Roo.form.HtmlEditor({
  * Usage:
  *
  new Roo.form.HtmlEditor({
@@ -46804,7 +51724,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      
  * 
  * @cfg {Object} disable List of elements to disable..
      
  * 
  * @cfg {Object} disable List of elements to disable..
- * @cfg {Array} btns List of additional buttons.
+ * @cfg {Roo.Toolbar.Item|Roo.Toolbar.Button|Roo.Toolbar.SplitButton|Roo.form.Field} btns[] List of additional buttons.
  * 
  * 
  * NEEDS Extra CSS? 
  * 
  * 
  * NEEDS Extra CSS? 
@@ -46829,7 +51749,7 @@ Roo.form.HtmlEditor.ToolbarStandard = function(config)
     // dont call parent... till later.
 }
 
     // dont call parent... till later.
 }
 
-Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
+Roo.form.HtmlEditor.ToolbarStandard.prototype = {
     
     tb: false,
     
     
     tb: false,
     
@@ -47175,7 +52095,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                     tabIndex:-1
                 });
             }
                     tabIndex:-1
                 });
             }
-             cmenu.menu.items.push({
+            cmenu.menu.items.push({
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
@@ -47227,7 +52147,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
-                    editorcore.doc.body.innerHTML = editorcore.domToHTML();
+                    new Roo.htmleditor.Tidy(editorcore.doc.body);
                     editorcore.syncValue();
                 },
                 tabIndex:-1
                     editorcore.syncValue();
                 },
                 tabIndex:-1
@@ -47264,7 +52184,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
-                var b = Roo.factory(this.btns[i],Roo.form);
+                var b = Roo.factory(this.btns[i],this.btns[i].xns || Roo.form);
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
@@ -47305,11 +52225,45 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
     },
     // private used internally
     createLink : function(){
     },
     // private used internally
     createLink : function(){
-        Roo.log("create link?");
-        var url = prompt(this.createLinkText, this.defaultLinkValue);
-        if(url && url != 'http:/'+'/'){
-            this.editorcore.relayCmd('createlink', url);
+        //Roo.log("create link?");
+        var ec = this.editorcore;
+        var ar = ec.getAllAncestors();
+        var n = false;
+        for(var i = 0;i< ar.length;i++) {
+            if (ar[i] && ar[i].nodeName == 'A') {
+                n = ar[i];
+                break;
+            }
         }
         }
+        
+        (function() {
+            
+            Roo.MessageBox.show({
+                title : "Add / Edit Link URL",
+                msg : "Enter the url for the link",
+                buttons: Roo.MessageBox.OKCANCEL,
+                fn: function(btn, url){
+                    if (btn != 'ok') {
+                        return;
+                    }
+                    if(url && url != 'http:/'+'/'){
+                        if (n) {
+                            n.setAttribute('href', url);
+                        } else {
+                            ec.relayCmd('createlink', url);
+                        }
+                    }
+                },
+                minWidth:250,
+                prompt:true,
+                //multiline: multiline,
+                modal : true,
+                value :  n  ? n.getAttribute('href') : '' 
+            });
+            
+             
+        }).defer(100, this); // we have to defer this , otherwise the mouse click gives focus to the main window.
+        
     },
 
     
     },
 
     
@@ -47422,6 +52376,11 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 this.tb.items.each(function(item){
                     item.enable();
                 });
                 this.tb.items.each(function(item){
                     item.enable();
                 });
+                // initialize 'blocks'
+                Roo.each(Roo.get(this.editorcore.doc.body).query('*[data-block]'), function(e) {
+                    Roo.htmleditor.Block.factory(e).updateElement(e);
+                },this);
+            
             }
             
         }
             }
             
         }
@@ -47548,7 +52507,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
            item.enable();
         });
     }
            item.enable();
         });
     }
-});
+};
 
 
 
 
 
 
@@ -47596,189 +52555,138 @@ Roo.form.HtmlEditor.ToolbarContext = function(config)
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
-    'IMG' : {
-        width : {
+    'IMG' : [
+        {
+            name : 'width',
             title: "Width",
             width: 40
         },
             title: "Width",
             width: 40
         },
-        height:  {
+        {
+            name : 'height',
             title: "Height",
             width: 40
         },
             title: "Height",
             width: 40
         },
-        align: {
+        {
+            name : 'align',
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
-        border: {
+        {
+            name : 'border',
             title: "Border",
             width: 40
         },
             title: "Border",
             width: 40
         },
-        alt: {
+        {
+            name : 'alt',
             title: "Alt",
             width: 120
         },
             title: "Alt",
             width: 120
         },
-        src : {
+        {
+            name : 'src',
             title: "Src",
             width: 220
         }
         
             title: "Src",
             width: 220
         }
         
-    },
-    'A' : {
-        name : {
+    ],
+    
+    'FIGURE' : [
+        {
+            name : 'align',
+            title: "Align",
+            opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
+            width : 80  
+        }
+    ],
+    'A' : [
+        {
+            name : 'name',
             title: "Name",
             width: 50
         },
             title: "Name",
             width: 50
         },
-        target:  {
+        {
+            name : 'target',
             title: "Target",
             width: 120
         },
             title: "Target",
             width: 120
         },
-        href:  {
+        {
+            name : 'href',
             title: "Href",
             width: 220
         } // border?
         
             title: "Href",
             width: 220
         } // border?
         
-    },
-    'TABLE' : {
-        rows : {
-            title: "Rows",
-            width: 20
-        },
-        cols : {
-            title: "Cols",
-            width: 20
-        },
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },
-        border : {
-            title: "Border",
-            width: 20
-        }
-    },
-    'TD' : {
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },   
-        align: {
-            title: "Align",
-            opts : [[""],[ "left"],[ "center"],[ "right"],[ "justify"],[ "char"]],
-            width: 80
-        },
-        valign: {
-            title: "Valign",
-            opts : [[""],[ "top"],[ "middle"],[ "bottom"],[ "baseline"]],
-            width: 80
-        },
-        colspan: {
-            title: "Colspan",
-            width: 20
-            
-        },
-         'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'INPUT' : {
-        name : {
+    ],
+    
+    'INPUT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        value : {
+        {
+            name : 'value',
             title: "Value",
             width: 120
         },
             title: "Value",
             width: 120
         },
-        width : {
+        {
+            name : 'width',
             title: "Width",
             width: 40
         }
             title: "Width",
             width: 40
         }
-    },
-    'LABEL' : {
-        'for' : {
+    ],
+    'LABEL' : [
+         {
+            name : 'for',
             title: "For",
             width: 120
         }
             title: "For",
             width: 120
         }
-    },
-    'TEXTAREA' : {
-          name : {
+    ],
+    'TEXTAREA' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        rows : {
+        {
+            name : 'rows',
             title: "Rows",
             width: 20
         },
             title: "Rows",
             width: 20
         },
-        cols : {
+        {
+            name : 'cols',
             title: "Cols",
             width: 20
         }
             title: "Cols",
             width: 20
         }
-    },
-    'SELECT' : {
-        name : {
+    ],
+    'SELECT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        selectoptions : {
+        {
+            name : 'selectoptions',
             title: "Options",
             width: 200
         }
             title: "Options",
             width: 200
         }
-    },
+    ],
     
     // should we really allow this??
     // should this just be 
     
     // should we really allow this??
     // should this just be 
-    'BODY' : {
-        title : {
+    'BODY' : [
+        
+        {
+            name : 'title',
             title: "Title",
             width: 200,
             disabled : true
         }
             title: "Title",
             width: 200,
             disabled : true
         }
-    },
-    'SPAN' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'DIV' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-     'P' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    
-    '*' : {
-        // empty..
-    }
+    ],
+    '*' : [
+        // empty.
+    ]
 
 };
 
 
 };
 
@@ -47864,9 +52772,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
-           
+        // block toolbars are built in updateToolbar when needed.
         for (var i in  ty) {
         for (var i in  ty) {
-          
+            
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
@@ -47893,8 +52801,13 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
-    updateToolbar: function(editor,ev,sel){
-
+    updateToolbar: function(editor ,ev, sel)
+    {
+        
+        if (ev) {
+            ev.stopEvent(); // se if we can stop this looping with mutiple events.
+        }
+        
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
@@ -47902,38 +52815,40 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
              this.editor.onFirstFocus();
             return;
         }
              this.editor.onFirstFocus();
             return;
         }
-        
+        //Roo.log(ev ? ev.target : 'NOTARGET');
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
+        
+        
+        
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
-            ev.target && ev.target.tagName == 'IMG') {
+            ev.target && ev.target.tagName != 'BODY' ) { // && ev.target.tagName == 'IMG') {
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
-         
-              var nodeRange = sel.ownerDocument.createRange();
-            try {
-                nodeRange.selectNode(sel);
-            } catch (e) {
-                nodeRange.selectNodeContents(sel);
-            }
-            //nodeRange.collapse(true);
-            var s = this.editorcore.win.getSelection();
-            s.removeAllRanges();
-            s.addRange(nodeRange);
-        }  
+            
+            // this triggers looping?
+            //this.editorcore.selectNode(sel);
+             
+        }
         
         
+        // this forces an id..
+        Array.from(this.editorcore.doc.body.querySelectorAll('.roo-ed-selection')).forEach(function(e) {
+             e.classList.remove('roo-ed-selection');
+        });
+        //Roo.select('.roo-ed-selection', false, this.editorcore.doc).removeClass('roo-ed-selection');
+        //Roo.get(node).addClass('roo-ed-selection');
       
       
-        var updateFooter = sel ? false : true;
+        //var updateFooter = sel ? false : true; 
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
-        var ty= Roo.form.HtmlEditor.ToolbarContext.types;
+        var ty = Roo.form.HtmlEditor.ToolbarContext.types;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
@@ -47941,86 +52856,145 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
-        // pick a menu that exists..
-        var tn = sel.tagName.toUpperCase();
-        //sel = typeof(ty[tn]) != 'undefined' ? sel : this.editor.doc.body;
-        
-        tn = sel.tagName.toUpperCase();
         
         
+        var tn = sel.tagName.toUpperCase();
         var lastSel = this.tb.selectedNode;
         var lastSel = this.tb.selectedNode;
-        
         this.tb.selectedNode = sel;
         this.tb.selectedNode = sel;
+        var left_label = tn;
         
         
-        // if current menu does not match..
+        // ok see if we are editing a block?
         
         
-        if ((this.tb.name != tn) || (lastSel != this.tb.selectedNode) || ev === false) {
-                
-            this.tb.el.hide();
-            ///console.log("show: " + tn);
-            this.tb =  typeof(ty[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
-            this.tb.el.show();
-            // update name
-            this.tb.items.first().el.innerHTML = tn + ':&nbsp;';
-            
-            
-            // update attributes
-            if (this.tb.fields) {
-                this.tb.fields.each(function(e) {
-                    if (e.stylename) {
-                        e.setValue(sel.style[e.stylename]);
-                        return;
-                    } 
-                   e.setValue(sel.getAttribute(e.attrname));
-                });
-            }
+        var db = false;
+        // you are not actually selecting the block.
+        if (sel && sel.hasAttribute('data-block')) {
+            db = sel;
+        } else if (sel && sel.closest('[data-block]')) {
             
             
-            var hasStyles = false;
-            for(var i in this.styles) {
-                hasStyles = true;
-                break;
-            }
+            db = sel.closest('[data-block]');
+            //var cepar = sel.closest('[contenteditable=true]');
+            //if (db && cepar && cepar.tagName != 'BODY') {
+            //   db = false; // we are inside an editable block.. = not sure how we are going to handle nested blocks!?
+            //}   
+        }
+        
+        
+        var block = false;
+        //if (db && !sel.hasAttribute('contenteditable') && sel.getAttribute('contenteditable') != 'true' ) {
+        if (db && this.editorcore.enableBlocks) {
+            block = Roo.htmleditor.Block.factory(db);
             
             
-            // update styles
-            if (hasStyles) { 
-                var st = this.tb.fields.item(0);
-                
-                st.store.removeAll();
-               
-                
-                var cn = sel.className.split(/\s+/);
+            
+            if (block) {
+                 db.className = (
+                        db.classList.length > 0  ? db.className + ' ' : ''
+                    )  + 'roo-ed-selection';
+                 
+                 // since we removed it earlier... its not there..
+                tn = 'BLOCK.' + db.getAttribute('data-block');
                 
                 
-                var avs = [];
-                if (this.styles['*']) {
-                    
-                    Roo.each(this.styles['*'], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
-                }
-                if (this.styles[tn]) { 
-                    Roo.each(this.styles[tn], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
+                //this.editorcore.selectNode(db);
+                if (typeof(this.toolbars[tn]) == 'undefined') {
+                   this.toolbars[tn] = this.buildToolbar( false  ,tn ,block.friendly_name, block);
                 }
                 }
-                
-                st.store.loadData(avs);
-                st.collapse();
-                st.setValue(cn);
+                this.toolbars[tn].selectedNode = db;
+                left_label = block.friendly_name;
+                ans = this.editorcore.getAllAncestors();
             }
             }
-            // flag our selected Node.
-            this.tb.selectedNode = sel;
-           
-           
-            Roo.menu.MenuMgr.hideAll();
-
+            
+                
+            
         }
         
         }
         
-        if (!updateFooter) {
-            //this.footDisp.dom.innerHTML = ''; 
-            return;
+        
+        if (this.tb.name == tn && lastSel == this.tb.selectedNode && ev !== false) {
+            return; // no change?
+        }
+        
+        
+          
+        this.tb.el.hide();
+        ///console.log("show: " + tn);
+        this.tb =  typeof(this.toolbars[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
+        
+        this.tb.el.show();
+        // update name
+        this.tb.items.first().el.innerHTML = left_label + ':&nbsp;';
+        
+        
+        // update attributes
+        if (block && this.tb.fields) {
+             
+            this.tb.fields.each(function(e) {
+                e.setValue(block[e.name]);
+            });
+            
+            
+        } else  if (this.tb.fields && this.tb.selectedNode) {
+            this.tb.fields.each( function(e) {
+                if (e.stylename) {
+                    e.setValue(this.tb.selectedNode.style[e.stylename]);
+                    return;
+                } 
+                e.setValue(this.tb.selectedNode.getAttribute(e.attrname));
+            }, this);
+            this.updateToolbarStyles(this.tb.selectedNode);  
         }
         }
+        
+        
+       
+        Roo.menu.MenuMgr.hideAll();
+
+        
+        
+    
         // update the footer
         //
         // update the footer
         //
+        this.updateFooter(ans);
+             
+    },
+    
+    updateToolbarStyles : function(sel)
+    {
+        var hasStyles = false;
+        for(var i in this.styles) {
+            hasStyles = true;
+            break;
+        }
+        
+        // update styles
+        if (hasStyles && this.tb.hasStyles) { 
+            var st = this.tb.fields.item(0);
+            
+            st.store.removeAll();
+            var cn = sel.className.split(/\s+/);
+            
+            var avs = [];
+            if (this.styles['*']) {
+                
+                Roo.each(this.styles['*'], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            if (this.styles[tn]) { 
+                Roo.each(this.styles[tn], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            
+            st.store.loadData(avs);
+            st.collapse();
+            st.setValue(cn);
+        }
+    },
+    
+     
+    updateFooter : function(ans)
+    {
         var html = '';
         var html = '';
+        if (ans === false) {
+            this.footDisp.dom.innerHTML = '';
+            return;
+        }
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
@@ -48040,10 +53014,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         this.footDisp.dom.innerHTML = html;
             
         
         this.footDisp.dom.innerHTML = html;
             
-        //this.editorsyncValue();
+        
     },
     },
-     
-    
    
        
     // private
    
        
     // private
@@ -48068,7 +53040,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
            item.enable();
         });
     },
            item.enable();
         });
     },
-    buildToolbar: function(tlist, nm)
+    buildToolbar: function(tlist, nm, friendly_name, block)
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
@@ -48079,18 +53051,22 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
        
         var tb = new Roo.Toolbar(wdiv);
         
        
         var tb = new Roo.Toolbar(wdiv);
-        // add the name..
+        ///this.tb = tb; // << this sets the active toolbar..
+        if (tlist === false && block) {
+            tlist = block.contextMenu(this);
+        }
         
         
-        tb.add(nm+ ":&nbsp;");
+        tb.hasStyles = false;
+        tb.name = nm;
+        
+        tb.add((typeof(friendly_name) == 'undefined' ? nm : friendly_name) + ":&nbsp;");
+        
+        var styles = Array.from(this.styles);
         
         
-        var styles = [];
-        for(var i in this.styles) {
-            styles.push(i);
-        }
         
         // styles...
         if (styles && styles.length) {
         
         // styles...
         if (styles && styles.length) {
-            
+            tb.hasStyles = true;
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
@@ -48120,9 +53096,18 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
-        var tbops = tbc.options;
         
         
-        for (var i in tlist) {
+        
+        for (var i = 0; i < tlist.length; i++) {
+            
+            // newer versions will use xtype cfg to create menus.
+            if (typeof(tlist[i].xtype) != 'undefined') {
+                
+                tb[typeof(tlist[i].name)== 'undefined' ? 'add' : 'addField'](Roo.factory(tlist[i]));
+                
+                
+                continue;
+            }
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
@@ -48130,8 +53115,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
-            if (item.optname) {
-                opts = tbops[item.optname];
+            if (item.optname) { // use the b
+                opts = Roo.form.HtmlEditor.ToolbarContext.options[item.optname];
            
             }
             
            
             }
             
@@ -48143,13 +53128,15 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                         fields: ['val', 'display'],
                         data : opts  
                     }),
                         fields: ['val', 'display'],
                         data : opts  
                     }),
-                    name : '-roo-edit-' + i,
-                    attrname : i,
+                    name : '-roo-edit-' + tlist[i].name,
+                    
+                    attrname : tlist[i].name,
                     stylename : item.style ? item.style : false,
                     stylename : item.style ? item.style : false,
+                    
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
-                    mode: typeof(tbc.stores[i]) != 'undefined'  ? 'remote' : 'local',
+                    mode: typeof(tbc.stores[tlist[i].name]) != 'undefined'  ? 'remote' : 'local',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
@@ -48157,11 +53144,20 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
+                             
+                            
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
+                                editorcore.syncValue();
+                                return;
+                            }
+                            if (r === false) {
+                                tb.selectedNode.removeAttribute(c.attrname);
+                                editorcore.syncValue();
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
+                            editorcore.syncValue();
                         }
                     }
 
                         }
                     }
 
@@ -48169,7 +53165,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                 continue;
                     
                  
                 continue;
                     
                  
-                
+                /*
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
@@ -48177,16 +53173,19 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     value: ''
                 }));
                 continue;
                     value: ''
                 }));
                 continue;
+                */
             }
             tb.addField( new Roo.form.TextField({
             }
             tb.addField( new Roo.form.TextField({
-                name: '-roo-edit-' + i,
-                attrname : i,
+                name: '-roo-edit-' + tlist[i].name,
+                attrname : tlist[i].name,
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
+                        
+                         
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
@@ -48196,8 +53195,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var _this = this;
         }
         
         var _this = this;
-        
+        var show_delete = !block || block.deleteTitle !== false;
         if(nm == 'BODY'){
         if(nm == 'BODY'){
+            show_delete = false;
             tb.addSeparator();
         
             tb.addButton( {
             tb.addSeparator();
         
             tb.addButton( {
@@ -48213,60 +53213,61 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         tb.addFill();
         }
         
         tb.addFill();
-        tb.addButton( {
-            text: 'Remove Tag',
-    
-            listeners : {
-                click : function ()
-                {
-                    // remove
-                    // undo does not work.
-                     
-                    var sn = tb.selectedNode;
-                    
-                    var pn = sn.parentNode;
-                    
-                    var stn =  sn.childNodes[0];
-                    var en = sn.childNodes[sn.childNodes.length - 1 ];
-                    while (sn.childNodes.length) {
-                        var node = sn.childNodes[0];
-                        sn.removeChild(node);
-                        //Roo.log(node);
-                        pn.insertBefore(node, sn);
+        if (show_delete) {
+            tb.addButton({
+                text: block && block.deleteTitle ? block.deleteTitle  : 'Remove Block or Formating', // remove the tag, and puts the children outside...
+        
+                listeners : {
+                    click : function ()
+                    {
+                        var sn = tb.selectedNode;
+                        if (block) {
+                            sn = Roo.htmleditor.Block.factory(tb.selectedNode).removeNode();
+                            
+                        }
+                        if (!sn) {
+                            return;
+                        }
+                        var stn =  sn.childNodes[0] || sn.nextSibling || sn.previousSibling || sn.parentNode;
+                        if (sn.hasAttribute('data-block')) {
+                            stn =  sn.nextSibling || sn.previousSibling || sn.parentNode;
+                            sn.parentNode.removeChild(sn);
+                            
+                        } else if (sn && sn.tagName != 'BODY') {
+                            // remove and keep parents.
+                            a = new Roo.htmleditor.FilterKeepChildren({tag : false});
+                            a.replaceTag(sn);
+                        }
+                        
+                        
+                        var range = editorcore.createRange();
+            
+                        range.setStart(stn,0);
+                        range.setEnd(stn,0); 
+                        var selection = editorcore.getSelection();
+                        selection.removeAllRanges();
+                        selection.addRange(range);
+                        
+                        
+                        //_this.updateToolbar(null, null, pn);
+                        _this.updateToolbar(null, null, null);
+                        _this.updateFooter(false);
                         
                     }
                         
                     }
-                    pn.removeChild(sn);
-                    var range = editorcore.createRange();
-        
-                    range.setStart(stn,0);
-                    range.setEnd(en,0); //????
-                    //range.selectNode(sel);
-                    
-                    
-                    var selection = editorcore.getSelection();
-                    selection.removeAllRanges();
-                    selection.addRange(range);
-                    
-                    
-                    
-                    //_this.updateToolbar(null, null, pn);
-                    _this.updateToolbar(null, null, null);
-                    _this.footDisp.dom.innerHTML = ''; 
                 }
                 }
-            }
-            
+                
+                        
                     
                 
                     
                 
-            
-        });
-        
+            });
+        }    
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
-        tb.name = nm;
+        
         // dont need to disable them... as they will get hidden
         return tb;
          
         // dont need to disable them... as they will get hidden
         return tb;
          
@@ -48310,6 +53311,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         
     },
         
         
     },
+    // when the footer contect changes
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
@@ -48322,17 +53324,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         var ans = this.footerEls;
         var sel = ans[n];
         
         var ans = this.footerEls;
         var sel = ans[n];
         
-         // pick
-        var range = this.editorcore.createRange();
-        
-        range.selectNodeContents(sel);
-        //range.selectNode(sel);
-        
-        
-        var selection = this.editorcore.getSelection();
-        selection.removeAllRanges();
-        selection.addRange(range);
-        
+        this.editorcore.selectNode(sel);
         
         
         this.updateToolbar(null, null, sel);
         
         
         this.updateToolbar(null, null, sel);
@@ -48901,11 +53893,12 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
      * @param {Boolean} asString
      * @return {Object}
      */
      * @param {Boolean} asString
      * @return {Object}
      */
-    getValues : function(asString){
+    getValues : function(asString)
+    {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues()); // get the full set of data, as we might be copying comboboxes from external into this one.
             }, this);
         }
         
             }, this);
         }
         
@@ -48938,21 +53931,31 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
+     * Normally this will not return readOnly data 
+     * @param {Boolean} with_readonly return readonly field data.
      * @return {Object}
      */
      * @return {Object}
      */
-    getFieldValues : function(with_hidden)
+    getFieldValues : function(with_readonly)
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues());
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
+            
+            if (f.readOnly && with_readonly !== true) {
+                return; // skip read only values. - this is in theory to stop 'old' values being copied over new ones
+                        // if a subform contains a copy of them.
+                        // if you have subforms with the same editable data, you will need to copy the data back
+                        // and forth.
+            }
+            
             if (!f.getName()) {
                 return;
             }
             if (!f.getName()) {
                 return;
             }
@@ -50042,7 +55045,7 @@ Roo.form.Action.ACTION_TYPES = {
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -50193,6 +55196,7 @@ Roo.extend(Roo.form.Layout, Roo.Component, {
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
+ * @children Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -50227,7 +55231,7 @@ Roo.extend(Roo.form.Column, Roo.form.Layout, {
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -55153,7 +60157,7 @@ Roo.LayoutStateManager.prototype = {
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
- * @parent Roo.BorderLayout Roo.LayoutDialog builder-top
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
@@ -55166,7 +60170,7 @@ Roo.LayoutStateManager.prototype = {
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
- * @cfg {String} region [required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)
+ * @cfg {String} region (center|north|south|east|west) [required] which region to put this panel on (when used with xtype constructors)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
@@ -55601,17 +60605,32 @@ layout.addxtype({
     }
 });
 
     }
 });
 
+
+
+
+
+
+
+
+
+
+
+
 /**
  * @class Roo.GridPanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.GridPanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * @constructor
  * Create a new GridPanel.
  * @constructor
  * Create a new GridPanel.
- * @param {Roo.grid.Grid} grid The grid for this panel
- * @param {String/Object} config A string to set only the panel's title, or a config object
+ * @cfg {Roo.grid.Grid} grid The grid for this panel
  */
 Roo.GridPanel = function(grid, config){
     
  */
 Roo.GridPanel = function(grid, config){
     
-  
+    // universal ctor...
+    if (typeof(grid.grid) != 'undefined') {
+        config = grid;
+        grid = config.grid;
+    }
     this.wrapper = Roo.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
         {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
         
     this.wrapper = Roo.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
         {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
         
@@ -55679,6 +60698,10 @@ Roo.extend(Roo.GridPanel, Roo.ContentPanel, {
 /**
  * @class Roo.NestedLayoutPanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.NestedLayoutPanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
+ * @cfg {Roo.BorderLayout} layout   [required] The layout for this panel
+ *
+ * 
  * @constructor
  * Create a new NestedLayoutPanel.
  * 
  * @constructor
  * Create a new NestedLayoutPanel.
  * 
@@ -55715,6 +60738,8 @@ Roo.NestedLayoutPanel = function(layout, config)
 
 Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
 
 
 Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
 
+    layout : false,
+
     setSize : function(width, height){
         if(!this.ignoreResize(width, height)){
             var size = this.adjustForComponents(width, height);
     setSize : function(width, height){
         if(!this.ignoreResize(width, height)){
             var size = this.adjustForComponents(width, height);
@@ -55765,7 +60790,7 @@ Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
     
     /**
      * Returns the nested BorderLayout for this panel
     
     /**
      * Returns the nested BorderLayout for this panel
-     * @return {Roo.BorderLayout} 
+     * @return {Roo.BorderLayout}
      */
     getLayout : function(){
         return this.layout;
      */
     getLayout : function(){
         return this.layout;
@@ -55867,6 +60892,7 @@ Roo.extend(Roo.ScrollPanel, Roo.ContentPanel, {
 /**
  * @class Roo.TreePanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.TreePanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * Treepanel component
  * 
  * @constructor
  * Treepanel component
  * 
  * @constructor
@@ -55921,17 +60947,6 @@ Roo.extend(Roo.TreePanel, Roo.ContentPanel, {
     tree : false
 
 });
     tree : false
 
 });
-
-
-
-
-
-
-
-
-
-
-
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -56480,8 +61495,10 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, {
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
-    
-   
+     /**
+    * @cfg {boolean} sortColMenu Sort the column order menu when it shows (usefull for long lists..) default false
+    */ 
+    sortColMenu : false,
     
     // private
     rendered : false,
     
     // private
     rendered : false,
@@ -58543,13 +63560,28 @@ Roo.extend(Roo.grid.GridView, Roo.grid.AbstractGridView, {
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
+        
+        var items = [];
         for(var i = 0; i < colCount; i++){
         for(var i = 0; i < colCount; i++){
-            this.colMenu.add(new Roo.menu.CheckItem({
+            items.push({
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
-            }));
+            });
+        }
+        
+        if (this.grid.sortColMenu) {
+            items.sort(function(a,b) {
+                if (a.text == b.text) {
+                    return 0;
+                }
+                return a.text.toUpperCase() > b.text.toUpperCase() ? 1 : -1;
+            });
+        }
+        
+        for(var i = 0; i < colCount; i++){
+            this.colMenu.add(new Roo.menu.CheckItem(items[i]));
         }
     },
 
         }
     },
 
index 724119a..ab5d290 100644 (file)
@@ -666,6 +666,16 @@ Roo.extend(Roo.data.Store, Roo.util.Observable, {
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
      * <p>
      * @param {Object} options An object containing properties which control loading options:<ul>
      * <li>params {Object} An object containing properties to pass as HTTP parameters to a remote data source.</li>
+     * <li>params.data {Object} if you are using a MemoryProxy / JsonReader, use this as the data to load stuff..
+     * <pre>
+                {
+                    data : data,  // array of key=>value data like JsonReader
+                    total : data.length,
+                    success : true
+                    
+                }
+        </pre>
+            }.</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
      * <li>callback {Function} A function to be called after the Records have been loaded. The callback is
      * passed the following arguments:<ul>
      * <li>r : Roo.data.Record[]</li>
@@ -7006,7 +7016,7 @@ Roo.MenuButton = Roo.SplitButton;/*
 
 /**
  * @class Roo.Toolbar
 
 /**
  * @class Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field 
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
  * Basic Toolbar class.
  * @constructor
  * Creates a new Toolbar
@@ -7542,7 +7552,23 @@ Roo.extend(Roo.Toolbar.TextItem, Roo.Toolbar.Item, {
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
      
     enable:Roo.emptyFn,
     disable:Roo.emptyFn,
-    focus:Roo.emptyFn
+    focus:Roo.emptyFn,
+     /**
+     * Shows this button
+     */
+    show: function(){
+        this.hidden = false;
+        this.el.style.display = "";
+    },
+    
+    /**
+     * Hides this button
+     */
+    hide: function(){
+        this.hidden = true;
+        this.el.style.display = "none";
+    }
+    
 });
 
 /**
 });
 
 /**
@@ -7665,7 +7691,7 @@ Roo.Toolbar.MenuButton = Roo.Toolbar.SplitButton;/*
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
 /**
  * @class Roo.PagingToolbar
  * @extends Roo.Toolbar
- * @children   Roo.Toolbar.Item Roo.form.Field
+ * @children   Roo.Toolbar.Item Roo.Toolbar.Button Roo.Toolbar.SplitButton Roo.form.Field
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
  * A specialized toolbar that is bound to a {@link Roo.data.Store} and provides automatic paging controls.
  * @constructor
  * Create a new PagingToolbar
@@ -7908,7 +7934,11 @@ Roo.extend(Roo.PagingToolbar, Roo.Toolbar, {
             this.loading.disable();
         }
     },
             this.loading.disable();
         }
     },
-
+    /**
+     * event that occurs when you click on the navigation buttons - can be used to trigger load of a grid.
+     * @param {String} which (first|prev|next|last|refresh)  which button to press.
+     *
+     */
     // private
     onClick : function(which){
         var ds = this.ds;
     // private
     onClick : function(which){
         var ds = this.ds;
@@ -8998,6 +9028,7 @@ Roo.extend(Roo.Editor, Roo.Component, {
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
 /**
  * @class Roo.BasicDialog
  * @extends Roo.util.Observable
+ * @parent none builder
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
  * Lightweight Dialog Class.  The code below shows the creation of a typical dialog using existing HTML markup:
  * <pre><code>
 var dlg = new Roo.BasicDialog("my-dlg", {
@@ -10275,6 +10306,7 @@ Roo.extend(Roo.LayoutDialog, Roo.BasicDialog, {
  
 /**
  * @class Roo.MessageBox
  
 /**
  * @class Roo.MessageBox
+ * @static
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
  * Utility class for generating different styles of message boxes.  The alias Roo.Msg can also be used.
  * Example usage:
  *<pre><code>
@@ -10384,6 +10416,7 @@ Roo.MessageBox = function(){
                         }
                     }
                 });
                         }
                     }
                 });
+              
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
                 dlg.on("hide", handleHide);
                 mask = dlg.mask;
                 dlg.addKeyListener(27, handleEsc);
@@ -10627,6 +10660,7 @@ Roo.Msg.show({
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
                 d.animateTarget = null;
                 d.show(options.animEl);
             }
+            dlg.toFront();
             return this;
         },
 
             return this;
         },
 
@@ -14408,7 +14442,7 @@ Roo.extend(Roo.tree.ColumnTree, Roo.tree.TreePanel, {
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
 /**
  * @class Roo.menu.Menu
  * @extends Roo.util.Observable
- * @children Roo.menu.BaseItem
+ * @children Roo.menu.Item Roo.menu.Separator Roo.menu.TextItem
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
  * A menu object.  This is the container to which you add all other menu items.  Menu can also serve a as a base class
  * when you want a specialzed menu based off of another component (like {@link Roo.menu.DateMenu} for example).
  * @constructor
@@ -15493,7 +15527,7 @@ Roo.extend(Roo.menu.Item, Roo.menu.BaseItem, {
      */
     text: '',
      /**
      */
     text: '',
      /**
-     * @cfg {String} HTML to render in menu
+     * @cfg {String} html to render in menu
      * The text to show on the menu item (HTML version).
      */
     html: '',
      * The text to show on the menu item (HTML version).
      */
     html: '',
@@ -17566,6 +17600,16 @@ Roo.extend(Roo.form.DateField, Roo.form.TriggerField,  {
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
      * The tooltip text to display when the date falls on a disabled date (defaults to 'Disabled')
      */
     disabledDatesText : "Disabled",
+       
+       
+       /**
+     * @cfg {Date/String} zeroValue
+     * if the date is less that this number, then the field is rendered as empty
+     * default is 1800
+     */
+       zeroValue : '1800-01-01',
+       
+       
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
     /**
      * @cfg {Date/String} minValue
      * The minimum allowed date. Can be either a Javascript date object or a string date in a
@@ -17742,6 +17786,15 @@ dateField.setValue('2006-5-4');
 
     // private
     parseDate : function(value){
 
     // private
     parseDate : function(value){
+               
+               if (value instanceof Date) {
+                       if (value < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                               return  '';
+                       }
+                       return value;
+               }
+               
+               
         if(!value || value instanceof Date){
             return value;
         }
         if(!value || value instanceof Date){
             return value;
         }
@@ -17757,6 +17810,9 @@ dateField.setValue('2006-5-4');
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
                 v = Date.parseDate(value, this.altFormatsArray[i]);
             }
         }
+               if (v < Date.parseDate(this.zeroValue, 'Y-m-d') ) {
+                       v = '';
+               }
         return v;
     },
 
         return v;
     },
 
@@ -20541,445 +20597,4884 @@ Roo.extend(Roo.form.Radio, Roo.form.Checkbox, {
     } 
     
     
     } 
     
     
-});//<script type="text/javascript">
-
-/*
- * Based  Ext JS Library 1.1.1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * LGPL
- *
- */
-/**
- * @class Roo.HtmlEditorCore
- * @extends Roo.Component
- * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
- *
- * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
- */
+});Roo.rtf = {}; // namespace
+Roo.rtf.Hex = function(hex)
+{
+    this.hexstr = hex;
+};
+Roo.rtf.Paragraph = function(opts)
+{
+    this.content = []; ///??? is that used?
+};Roo.rtf.Span = function(opts)
+{
+    this.value = opts.value;
+};
 
 
-Roo.HtmlEditorCore = function(config){
-    
-    
-    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
-    
+Roo.rtf.Group = function(parent)
+{
+    // we dont want to acutally store parent - it will make debug a nightmare..
+    this.content = [];
+    this.cn  = [];
+     
+       
     
     
-    this.addEvents({
-        /**
-         * @event initialize
-         * Fires when the editor is fully initialized (including the iframe)
-         * @param {Roo.HtmlEditorCore} this
-         */
-        initialize: true,
-        /**
-         * @event activate
-         * Fires when the editor is first receives the focus. Any insertion must wait
-         * until after this event.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        activate: true,
-         /**
-         * @event beforesync
-         * Fires before the textarea is updated with content from the editor iframe. Return false
-         * to cancel the sync.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforesync: true,
-         /**
-         * @event beforepush
-         * Fires before the iframe editor is updated with content from the textarea. Return false
-         * to cancel the push.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        beforepush: true,
-         /**
-         * @event sync
-         * Fires when the textarea is updated with content from the editor iframe.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        sync: true,
-         /**
-         * @event push
-         * Fires when the iframe editor is updated with content from the textarea.
-         * @param {Roo.HtmlEditorCore} this
-         * @param {String} html
-         */
-        push: true,
+};
+
+Roo.rtf.Group.prototype = {
+    ignorable : false,
+    content: false,
+    cn: false,
+    addContent : function(node) {
+        // could set styles...
+        this.content.push(node);
+    },
+    addChild : function(cn)
+    {
+        this.cn.push(cn);
+    },
+    // only for images really...
+    toDataURL : function()
+    {
+        var mimetype = false;
+        switch(true) {
+            case this.content.filter(function(a) { return a.value == 'pngblip' } ).length > 0: 
+                mimetype = "image/png";
+                break;
+             case this.content.filter(function(a) { return a.value == 'jpegblip' } ).length > 0:
+                mimetype = "image/jpeg";
+                break;
+            default :
+                return 'about:blank'; // ?? error?
+        }
         
         
-        /**
-         * @event editorevent
-         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
-         * @param {Roo.HtmlEditorCore} this
-         */
-        editorevent: true
         
         
-    });
-    
-    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
+        var hexstring = this.content[this.content.length-1].value;
+        
+        return 'data:' + mimetype + ';base64,' + btoa(hexstring.match(/\w{2}/g).map(function(a) {
+            return String.fromCharCode(parseInt(a, 16));
+        }).join(""));
+    }
     
     
-    // defaults : white / black...
-    this.applyBlacklists();
+};
+// this looks like it's normally the {rtf{ .... }}
+Roo.rtf.Document = function()
+{
+    // we dont want to acutally store parent - it will make debug a nightmare..
+    this.rtlch  = [];
+    this.content = [];
+    this.cn = [];
     
     
+};
+Roo.extend(Roo.rtf.Document, Roo.rtf.Group, { 
+    addChild : function(cn)
+    {
+        this.cn.push(cn);
+        switch(cn.type) {
+            case 'rtlch': // most content seems to be inside this??
+            case 'listtext':
+            case 'shpinst':
+                this.rtlch.push(cn);
+                return;
+            default:
+                this[cn.type] = cn;
+        }
+        
+    },
     
     
+    getElementsByType : function(type)
+    {
+        var ret =  [];
+        this._getElementsByType(type, ret, this.cn, 'rtf');
+        return ret;
+    },
+    _getElementsByType : function (type, ret, search_array, path)
+    {
+        search_array.forEach(function(n,i) {
+            if (n.type == type) {
+                n.path = path + '/' + n.type + ':' + i;
+                ret.push(n);
+            }
+            if (n.cn.length > 0) {
+                this._getElementsByType(type, ret, n.cn, path + '/' + n.type+':'+i);
+            }
+        },this);
+    }
     
     
+});
+Roo.rtf.Ctrl = function(opts)
+{
+    this.value = opts.value;
+    this.param = opts.param;
 };
 };
+/**
+ *
+ *
+ * based on this https://github.com/iarna/rtf-parser
+ * it's really only designed to extract pict from pasted RTF 
+ *
+ * usage:
+ *
+ *  var images = new Roo.rtf.Parser().parse(a_string).filter(function(g) { return g.type == 'pict'; });
+ *  
+ *
+ */
 
 
 
 
-Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
 
 
 
-     /**
-     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
-     */
+Roo.rtf.Parser = function(text) {
+    //super({objectMode: true})
+    this.text = '';
+    this.parserState = this.parseText;
     
     
-    owner : false,
+    // these are for interpeter...
+    this.doc = {};
+    ///this.parserState = this.parseTop
+    this.groupStack = [];
+    this.hexStore = [];
+    this.doc = false;
     
     
-     /**
-     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
-     *                        Roo.resizable.
-     */
-    resizable : false,
-     /**
-     * @cfg {Number} height (in pixels)
-     */   
-    height: 300,
-   /**
-     * @cfg {Number} width (in pixels)
-     */   
-    width: 500,
+    this.groups = []; // where we put the return.
     
     
-    /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
-     * 
-     */
-    stylesheets: false,
+    for (var ii = 0; ii < text.length; ++ii) {
+        ++this.cpos;
+        
+        if (text[ii] === '\n') {
+            ++this.row;
+            this.col = 1;
+        } else {
+            ++this.col;
+        }
+        this.parserState(text[ii]);
+    }
     
     
-    /**
-     * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
-     */
-    allowComments: false,
-    // id of frame..
-    frameId: false,
     
     
-    // private properties
-    validationEvent : false,
-    deferHeight: true,
-    initialized : false,
-    activated : false,
-    sourceEditMode : false,
-    onFocus : Roo.emptyFn,
-    iframePad:3,
-    hideMode:'offsets',
     
     
-    clearUp: true,
+};
+Roo.rtf.Parser.prototype = {
+    text : '', // string being parsed..
+    controlWord : '',
+    controlWordParam :  '',
+    hexChar : '',
+    doc : false,
+    group: false,
+    groupStack : false,
+    hexStore : false,
     
     
-    // blacklist + whitelisted elements..
-    black: false,
-    white: false,
-     
-    bodyCls : '',
+    
+    cpos : 0, 
+    row : 1, // reportin?
+    col : 1, //
 
 
-    /**
-     * Protected method that will not generally be called directly. It
-     * is called when the editor initializes the iframe with HTML contents. Override this method if you
-     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
-     */
-    getDocMarkup : function(){
-        // body styles..
-        var st = '';
-        
-        // inherit styels from page...?? 
-        if (this.stylesheets === false) {
-            
-            Roo.get(document.head).select('style').each(function(node) {
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
-            
-            Roo.get(document.head).select('link').each(function(node) { 
-                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
-            });
-            
-        } else if (!this.stylesheets.length) {
-                // simple..
-                st = '<style type="text/css">' +
-                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-                   '</style>';
-        } else {
-            for (var i in this.stylesheets) { 
-                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
-            }
-            
+     
+    push : function (el)
+    {
+        var m = 'cmd'+ el.type;
+        if (typeof(this[m]) == 'undefined') {
+            Roo.log('invalid cmd:' + el.type);
+            return;
         }
         }
+        this[m](el);
+        //Roo.log(el);
+    },
+    flushHexStore : function()
+    {
+        if (this.hexStore.length < 1) {
+            return;
+        }
+        var hexstr = this.hexStore.map(
+            function(cmd) {
+                return cmd.value;
+        }).join('');
         
         
-        st +=  '<style type="text/css">' +
-            'IMG { cursor: pointer } ' +
-        '</style>';
-
-        var cls = 'roo-htmleditor-body';
+        this.group.addContent( new Roo.rtf.Hex( hexstr ));
+              
+            
+        this.hexStore.splice(0)
         
         
-        if(this.bodyCls.length){
-            cls += ' ' + this.bodyCls;
+    },
+    
+    cmdgroupstart : function()
+    {
+        this.flushHexStore();
+        if (this.group) {
+            this.groupStack.push(this.group);
         }
         }
-        
-        return '<html><head>' + st  +
-            //<style type="text/css">' +
-            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
-            //'</style>' +
-            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
+         // parent..
+        if (this.doc === false) {
+            this.group = this.doc = new Roo.rtf.Document();
+            return;
+            
+        }
+        this.group = new Roo.rtf.Group(this.group);
     },
     },
-
-    // private
-    onRender : function(ct, position)
+    cmdignorable : function()
     {
     {
-        var _t = this;
-        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
-        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
-        
-        
-        this.el.dom.style.border = '0 none';
-        this.el.dom.setAttribute('tabIndex', -1);
-        this.el.addClass('x-hidden hide');
-        
+        this.flushHexStore();
+        this.group.ignorable = true;
+    },
+    cmdendparagraph : function()
+    {
+        this.flushHexStore();
+        this.group.addContent(new Roo.rtf.Paragraph());
+    },
+    cmdgroupend : function ()
+    {
+        this.flushHexStore();
+        var endingGroup = this.group;
         
         
         
         
-        if(Roo.isIE){ // fix IE 1px bogus margin
-            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        this.group = this.groupStack.pop();
+        if (this.group) {
+            this.group.addChild(endingGroup);
         }
         }
-       
-        
-        this.frameId = Roo.id();
-        
-         
-        
-        var iframe = this.owner.wrap.createChild({
-            tag: 'iframe',
-            cls: 'form-control', // bootstrap..
-            id: this.frameId,
-            name: this.frameId,
-            frameBorder : 'no',
-            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
-        }, this.el
-        );
-        
         
         
-        this.iframe = iframe.dom;
-
-         this.assignDocWin();
         
         
-        this.doc.designMode = 'on';
-       
-        this.doc.open();
-        this.doc.write(this.getDocMarkup());
-        this.doc.close();
-
         
         
-        var task = { // must defer to wait for browser to be ready
-            run : function(){
-                //console.log("run task?" + this.doc.readyState);
-                this.assignDocWin();
-                if(this.doc.body || this.doc.readyState == 'complete'){
-                    try {
-                        this.doc.designMode="on";
-                    } catch (e) {
-                        return;
-                    }
-                    Roo.TaskMgr.stop(task);
-                    this.initEditor.defer(10, this);
-                }
-            },
-            interval : 10,
-            duration: 10000,
-            scope: this
-        };
-        Roo.TaskMgr.start(task);
-
+        var doc = this.group || this.doc;
+        //if (endingGroup instanceof FontTable) {
+        //  doc.fonts = endingGroup.table
+        //} else if (endingGroup instanceof ColorTable) {
+        //  doc.colors = endingGroup.table
+        //} else if (endingGroup !== this.doc && !endingGroup.get('ignorable')) {
+        if (endingGroup.ignorable === false) {
+            //code
+            this.groups.push(endingGroup);
+           // Roo.log( endingGroup );
+        }
+            //Roo.each(endingGroup.content, function(item)) {
+            //    doc.addContent(item);
+            //}
+            //process.emit('debug', 'GROUP END', endingGroup.type, endingGroup.get('ignorable'))
+        //}
     },
     },
-
-    // private
-    onResize : function(w, h)
+    cmdtext : function (cmd)
     {
     {
-         Roo.log('resize: ' +w + ',' + h );
-        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
-        if(!this.iframe){
-            return;
+        this.flushHexStore();
+        if (!this.group) { // an RTF fragment, missing the {\rtf1 header
+            //this.group = this.doc
         }
         }
-        if(typeof w == 'number'){
-            
-            this.iframe.style.width = w + 'px';
+        this.group.addContent(new Roo.rtf.Span(cmd));
+    },
+    cmdcontrolword : function (cmd)
+    {
+        this.flushHexStore();
+        if (!this.group.type) {
+            this.group.type = cmd.value;
+            return;
         }
         }
-        if(typeof h == 'number'){
-            
-            this.iframe.style.height = h + 'px';
-            if(this.doc){
-                (this.doc.body || this.doc.documentElement).style.height = (h - (this.iframePad*2)) + 'px';
-            }
+        this.group.addContent(new Roo.rtf.Ctrl(cmd));
+        // we actually don't care about ctrl words...
+        return ;
+        /*
+        var method = 'ctrl$' + cmd.value.replace(/-(.)/g, (_, char) => char.toUpperCase())
+        if (this[method]) {
+            this[method](cmd.param)
+        } else {
+            if (!this.group.get('ignorable')) process.emit('debug', method, cmd.param)
         }
         }
-        
+        */
     },
     },
-
-    /**
-     * Toggles the editor between standard and source edit mode.
-     * @param {Boolean} sourceEdit (optional) True for source edit, false for standard
-     */
-    toggleSourceEdit : function(sourceEditMode){
-        
-        this.sourceEditMode = sourceEditMode === true;
-        
-        if(this.sourceEditMode){
-            Roo.get(this.iframe).addClass(['x-hidden','hide']);     //FIXME - what's the BS styles for these
-            
-        }else{
-            Roo.get(this.iframe).removeClass(['x-hidden','hide']);
-            //this.iframe.className = '';
-            this.deferFocus();
-        }
-        //this.setSize(this.owner.wrap.getSize());
-        //this.fireEvent('editmodechange', this, this.sourceEditMode);
+    cmdhexchar : function(cmd) {
+        this.hexStore.push(cmd);
+    },
+    cmderror : function(cmd) {
+        throw new Exception (cmd.value);
     },
     },
-
     
     
-  
-
-    /**
-     * Protected method that will not generally be called directly. If you need/want
-     * custom HTML cleanup, this is the method you should override.
-     * @param {String} html The HTML to be cleaned
-     * return {String} The cleaned HTML
-     */
-    cleanHtml : function(html){
-        html = String(html);
-        if(html.length > 5){
-            if(Roo.isSafari){ // strip safari nonsense
-                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
-            }
+    /*
+      _flush (done) {
+        if (this.text !== '\u0000') this.emitText()
+        done()
+      }
+      */
+      
+      
+    parseText : function(c)
+    {
+        if (c === '\\') {
+            this.parserState = this.parseEscapes;
+        } else if (c === '{') {
+            this.emitStartGroup();
+        } else if (c === '}') {
+            this.emitEndGroup();
+        } else if (c === '\x0A' || c === '\x0D') {
+            // cr/lf are noise chars
+        } else {
+            this.text += c;
         }
         }
-        if(html == '&nbsp;'){
-            html = '';
+    },
+    
+    parseEscapes: function (c)
+    {
+        if (c === '\\' || c === '{' || c === '}') {
+            this.text += c;
+            this.parserState = this.parseText;
+        } else {
+            this.parserState = this.parseControlSymbol;
+            this.parseControlSymbol(c);
         }
         }
-        return html;
     },
     },
-
-    /**
-     * HTML Editor -> Textarea
-     * Protected method that will not generally be called directly. Syncs the contents
-     * of the editor iframe with the textarea.
-     */
-    syncValue : function(){
-        if(this.initialized){
-            var bd = (this.doc.body || this.doc.documentElement);
-            //this.cleanUpPaste(); -- this is done else where and causes havoc..
-            var html = bd.innerHTML;
-            if(Roo.isSafari){
-                var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
-                var m = bs ? bs.match(/text-align:(.*?);/i) : false;
-                if(m && m[1]){
-                    html = '<div style="'+m[0]+'">' + html + '</div>';
-                }
-            }
-            html = this.cleanHtml(html);
-            // fix up the special chars.. normaly like back quotes in word...
-            // however we do not want to do this with chinese..
-            html = html.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, function(match) {
-                
-                var cc = match.charCodeAt();
-
-                // Get the character value, handling surrogate pairs
-                if (match.length == 2) {
-                    // It's a surrogate pair, calculate the Unicode code point
-                    var high = match.charCodeAt(0) - 0xD800;
-                    var low  = match.charCodeAt(1) - 0xDC00;
-                    cc = (high * 0x400) + low + 0x10000;
-                }  else if (
-                    (cc >= 0x4E00 && cc < 0xA000 ) ||
-                    (cc >= 0x3400 && cc < 0x4E00 ) ||
-                    (cc >= 0xf900 && cc < 0xfb00 )
-                ) {
-                        return match;
-                }  
-         
-                // No, use a numeric entity. Here we brazenly (and possibly mistakenly)
-                return "&#" + cc + ";";
-                
-                
-            });
-            
-            
-             
-            if(this.owner.fireEvent('beforesync', this, html) !== false){
-                this.el.dom.value = html;
-                this.owner.fireEvent('sync', this, html);
-            }
+    parseControlSymbol: function(c)
+    {
+        if (c === '~') {
+            this.text += '\u00a0'; // nbsp
+            this.parserState = this.parseText
+        } else if (c === '-') {
+             this.text += '\u00ad'; // soft hyphen
+        } else if (c === '_') {
+            this.text += '\u2011'; // non-breaking hyphen
+        } else if (c === '*') {
+            this.emitIgnorable();
+            this.parserState = this.parseText;
+        } else if (c === "'") {
+            this.parserState = this.parseHexChar;
+        } else if (c === '|') { // formula cacter
+            this.emitFormula();
+            this.parserState = this.parseText;
+        } else if (c === ':') { // subentry in an index entry
+            this.emitIndexSubEntry();
+            this.parserState = this.parseText;
+        } else if (c === '\x0a') {
+            this.emitEndParagraph();
+            this.parserState = this.parseText;
+        } else if (c === '\x0d') {
+            this.emitEndParagraph();
+            this.parserState = this.parseText;
+        } else {
+            this.parserState = this.parseControlWord;
+            this.parseControlWord(c);
         }
     },
         }
     },
-
-    /**
-     * Protected method that will not generally be called directly. Pushes the value of the textarea
-     * into the iframe editor.
-     */
-    pushValue : function(){
-        if(this.initialized){
-            var v = this.el.dom.value.trim();
-            
-//            if(v.length < 1){
-//                v = '&#160;';
-//            }
-            
-            if(this.owner.fireEvent('beforepush', this, v) !== false){
-                var d = (this.doc.body || this.doc.documentElement);
-                d.innerHTML = v;
-                this.cleanUpPaste();
-                this.el.dom.value = d.innerHTML;
-                this.owner.fireEvent('push', this, v);
+    parseHexChar: function (c)
+    {
+        if (/^[A-Fa-f0-9]$/.test(c)) {
+            this.hexChar += c;
+            if (this.hexChar.length >= 2) {
+              this.emitHexChar();
+              this.parserState = this.parseText;
             }
             }
+            return;
         }
         }
+        this.emitError("Invalid character \"" + c + "\" in hex literal.");
+        this.parserState = this.parseText;
+        
     },
     },
-
-    // private
-    deferFocus : function(){
-        this.focus.defer(10, this);
+    parseControlWord : function(c)
+    {
+        if (c === ' ') {
+            this.emitControlWord();
+            this.parserState = this.parseText;
+        } else if (/^[-\d]$/.test(c)) {
+            this.parserState = this.parseControlWordParam;
+            this.controlWordParam += c;
+        } else if (/^[A-Za-z]$/.test(c)) {
+          this.controlWord += c;
+        } else {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+          this.parseText(c);
+        }
     },
     },
-
-    // doc'ed in Field
-    focus : function(){
-        if(this.win && !this.sourceEditMode){
-            this.win.focus();
-        }else{
-            this.el.focus();
+    parseControlWordParam : function (c) {
+        if (/^\d$/.test(c)) {
+          this.controlWordParam += c;
+        } else if (c === ' ') {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+        } else {
+          this.emitControlWord();
+          this.parserState = this.parseText;
+          this.parseText(c);
         }
     },
     
         }
     },
     
-    assignDocWin: function()
+    
+    
+    
+    emitText : function () {
+        if (this.text === '') {
+            return;
+        }
+        this.push({
+            type: 'text',
+            value: this.text,
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+        this.text = ''
+    },
+    emitControlWord : function ()
     {
     {
-        var iframe = this.iframe;
-        
-         if(Roo.isIE){
-            this.doc = iframe.contentWindow.document;
-            this.win = iframe.contentWindow;
+        this.emitText();
+        if (this.controlWord === '') {
+            this.emitError('empty control word');
         } else {
         } else {
-//            if (!Roo.get(this.frameId)) {
-//                return;
-//            }
-//            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
-//            this.win = Roo.get(this.frameId).dom.contentWindow;
-            
-            if (!Roo.get(this.frameId) && !iframe.contentDocument) {
-                return;
-            }
-            
-            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
-            this.win = (iframe.contentWindow || Roo.get(this.frameId).dom.contentWindow);
+            this.push({
+                  type: 'controlword',
+                  value: this.controlWord,
+                  param: this.controlWordParam !== '' && Number(this.controlWordParam),
+                  pos: this.cpos,
+                  row: this.row,
+                  col: this.col
+            });
         }
         }
+        this.controlWord = '';
+        this.controlWordParam = '';
     },
     },
-    
-    // private
-    initEditor : function(){
-        //console.log("INIT EDITOR");
-        this.assignDocWin();
-        
+    emitStartGroup : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'groupstart',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitEndGroup : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'groupend',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitIgnorable : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'ignorable',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    },
+    emitHexChar : function ()
+    {
+        this.emitText();
+        this.push({
+            type: 'hexchar',
+            value: this.hexChar,
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+        this.hexChar = ''
+    },
+    emitError : function (message)
+    {
+      this.emitText();
+      this.push({
+            type: 'error',
+            value: message,
+            row: this.row,
+            col: this.col,
+            char: this.cpos //,
+            //stack: new Error().stack
+        });
+    },
+    emitEndParagraph : function () {
+        this.emitText();
+        this.push({
+            type: 'endparagraph',
+            pos: this.cpos,
+            row: this.row,
+            col: this.col
+        });
+    }
+     
+} ;
+Roo.htmleditor = {};
+/**
+ * @class Roo.htmleditor.Filter
+ * Base Class for filtering htmleditor stuff. - do not use this directly - extend it.
+ * @cfg {DomElement} node The node to iterate and filter
+ * @cfg {boolean|String|Array} tag Tags to replace 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+Roo.htmleditor.Filter = function(cfg) {
+    Roo.apply(this.cfg);
+    // this does not actually call walk as it's really just a abstract class
+}
+
+
+Roo.htmleditor.Filter.prototype = {
+    
+    node: false,
+    
+    tag: false,
+
+    // overrride to do replace comments.
+    replaceComment : false,
+    
+    // overrride to do replace or do stuff with tags..
+    replaceTag : false,
+    
+    walk : function(dom)
+    {
+        Roo.each( Array.from(dom.childNodes), function( e ) {
+            switch(true) {
+                
+                case e.nodeType == 8 &&  this.replaceComment  !== false: // comment
+                    this.replaceComment(e);
+                    return;
+                
+                case e.nodeType != 1: //not a node.
+                    return;
+                
+                case this.tag === true: // everything
+                case typeof(this.tag) == 'object' && this.tag.indexOf(e.tagName) > -1: // array and it matches.
+                case typeof(this.tag) == 'string' && this.tag == e.tagName: // array and it matches.
+                    if (this.replaceTag && false === this.replaceTag(e)) {
+                        return;
+                    }
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+                    return;
+                
+                default:    // tags .. that do not match.
+                    if (e.hasChildNodes()) {
+                        this.walk(e);
+                    }
+            }
+            
+        }, this);
+        
+    }
+}; 
+
+/**
+ * @class Roo.htmleditor.FilterAttributes
+ * clean attributes and  styles including http:// etc.. in attribute
+ * @constructor
+* Run a new Attribute Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterAttributes = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.attrib_black = this.attrib_black || [];
+    this.attrib_white = this.attrib_white || [];
+
+    this.attrib_clean = this.attrib_clean || [];
+    this.style_white = this.style_white || [];
+    this.style_black = this.style_black || [];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterAttributes, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
+    
+    attrib_black : false, // array
+    attrib_clean : false,
+    attrib_white : false,
+
+    style_white : false,
+    style_black : false,
+     
+     
+    replaceTag : function(node)
+    {
+        if (!node.attributes || !node.attributes.length) {
+            return true;
+        }
+        
+        for (var i = node.attributes.length-1; i > -1 ; i--) {
+            var a = node.attributes[i];
+            //console.log(a);
+            if (this.attrib_white.length && this.attrib_white.indexOf(a.name.toLowerCase()) < 0) {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            
+            
+            
+            if (a.name.toLowerCase().substr(0,2)=='on')  {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            
+            
+            if (this.attrib_black.indexOf(a.name.toLowerCase()) > -1) {
+                node.removeAttribute(a.name);
+                continue;
+            }
+            if (this.attrib_clean.indexOf(a.name.toLowerCase()) > -1) {
+                this.cleanAttr(node,a.name,a.value); // fixme..
+                continue;
+            }
+            if (a.name == 'style') {
+                this.cleanStyle(node,a.name,a.value);
+                continue;
+            }
+            /// clean up MS crap..
+            // tecnically this should be a list of valid class'es..
+            
+            
+            if (a.name == 'class') {
+                if (a.value.match(/^Mso/)) {
+                    node.removeAttribute('class');
+                }
+                
+                if (a.value.match(/^body$/)) {
+                    node.removeAttribute('class');
+                }
+                continue;
+            }
+            
+            
+            // style cleanup!?
+            // class cleanup?
+            
+        }
+        return true; // clean children
+    },
+        
+    cleanAttr: function(node, n,v)
+    {
+        
+        if (v.match(/^\./) || v.match(/^\//)) {
+            return;
+        }
+        if (v.match(/^(http|https):\/\//)
+            || v.match(/^mailto:/) 
+            || v.match(/^ftp:/)
+            || v.match(/^data:/)
+            ) {
+            return;
+        }
+        if (v.match(/^#/)) {
+            return;
+        }
+        if (v.match(/^\{/)) { // allow template editing.
+            return;
+        }
+//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
+        node.removeAttribute(n);
+        
+    },
+    cleanStyle : function(node,  n,v)
+    {
+        if (v.match(/expression/)) { //XSS?? should we even bother..
+            node.removeAttribute(n);
+            return;
+        }
+        
+        var parts = v.split(/;/);
+        var clean = [];
+        
+        Roo.each(parts, function(p) {
+            p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            if (!p.length) {
+                return true;
+            }
+            var l = p.split(':').shift().replace(/\s+/g,'');
+            l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
+            
+            if ( this.style_black.length && (this.style_black.indexOf(l) > -1 || this.style_black.indexOf(l.toLowerCase()) > -1)) {
+                return true;
+            }
+            //Roo.log()
+            // only allow 'c whitelisted system attributes'
+            if ( this.style_white.length &&  style_white.indexOf(l) < 0 && style_white.indexOf(l.toLowerCase()) < 0 ) {
+                return true;
+            }
+            
+            
+            clean.push(p);
+            return true;
+        },this);
+        if (clean.length) { 
+            node.setAttribute(n, clean.join(';'));
+        } else {
+            node.removeAttribute(n);
+        }
+        
+    }
+        
+        
+        
+    
+});/**
+ * @class Roo.htmleditor.FilterBlack
+ * remove blacklisted elements.
+ * @constructor
+ * Run a new Blacklisted Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterBlack = function(cfg)
+{
+    Roo.apply(this, cfg);
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterBlack, Roo.htmleditor.Filter,
+{
+    tag : true, // all elements.
+   
+    replaceTag : function(n)
+    {
+        n.parentNode.removeChild(n);
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterComment
+ * remove comments.
+ * @constructor
+* Run a new Comments Filter
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterComment = function(cfg)
+{
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterComment, Roo.htmleditor.Filter,
+{
+  
+    replaceComment : function(n)
+    {
+        n.parentNode.removeChild(n);
+    }
+});/**
+ * @class Roo.htmleditor.FilterKeepChildren
+ * remove tags but keep children
+ * @constructor
+ * Run a new Keep Children Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterKeepChildren = function(cfg)
+{
+    Roo.apply(this, cfg);
+    if (this.tag === false) {
+        return; // dont walk.. (you can use this to use this just to do a child removal on a single tag )
+    }
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterKeepChildren, Roo.htmleditor.FilterBlack,
+{
+    
+  
+    replaceTag : function(node)
+    {
+        // walk children...
+        //Roo.log(node);
+        var ar = Array.from(node.childNodes);
+        //remove first..
+        for (var i = 0; i < ar.length; i++) {
+            if (ar[i].nodeType == 1) {
+                if (
+                    (typeof(this.tag) == 'object' && this.tag.indexOf(ar[i].tagName) > -1)
+                    || // array and it matches
+                    (typeof(this.tag) == 'string' && this.tag == ar[i].tagName)
+                ) {
+                    this.replaceTag(ar[i]); // child is blacklisted as well...
+                    continue;
+                }
+            }
+        }  
+        ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
+         
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+            if (this.tag !== false) {
+                this.walk(ar[i]);
+                
+            }
+        }
+        node.parentNode.removeChild(node);
+        return false; // don't walk children
+        
+        
+    }
+});/**
+ * @class Roo.htmleditor.FilterParagraph
+ * paragraphs cause a nightmare for shared content - this filter is designed to be called ? at various points when editing
+ * like on 'push' to remove the <p> tags and replace them with line breaks.
+ * @constructor
+ * Run a new Paragraph Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterParagraph = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterParagraph, Roo.htmleditor.Filter,
+{
+    
+     
+    tag : 'P',
+    
+     
+    replaceTag : function(node)
+    {
+        
+        if (node.childNodes.length == 1 &&
+            node.childNodes[0].nodeType == 3 &&
+            node.childNodes[0].textContent.trim().length < 1
+            ) {
+            // remove and replace with '<BR>';
+            node.parentNode.replaceChild(node.ownerDocument.createElement('BR'),node);
+            return false; // no need to walk..
+        }
+        var ar = Array.from(node.childNodes);
+        for (var i = 0; i < ar.length; i++) {
+            node.removeChild(ar[i]);
+            // what if we need to walk these???
+            node.parentNode.insertBefore(ar[i], node);
+        }
+        // now what about this?
+        // <p> &nbsp; </p>
+        
+        // double BR.
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.insertBefore(node.ownerDocument.createElement('BR'), node);
+        node.parentNode.removeChild(node);
+        
+        return false;
+
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterSpan
+ * filter span's with no attributes out..
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterSpan = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterSpan, Roo.htmleditor.FilterKeepChildren,
+{
+     
+    tag : 'SPAN',
+     
+    replaceTag : function(node)
+    {
+        if (node.attributes && node.attributes.length > 0) {
+            return true; // walk if there are any.
+        }
+        Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this, node);
+        return false;
+     
+    }
+    
+});/**
+ * @class Roo.htmleditor.FilterTableWidth
+  try and remove table width data - as that frequently messes up other stuff.
+ * 
+ *      was cleanTableWidths.
+ *
+ * Quite often pasting from word etc.. results in tables with column and widths.
+ * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
+ *
+ * @constructor
+ * Run a new Table Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterTableWidth = function(cfg)
+{
+    // no need to apply config.
+    this.tag = ['TABLE', 'TD', 'TR', 'TH', 'THEAD', 'TBODY' ];
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterTableWidth, Roo.htmleditor.Filter,
+{
+     
+     
+    
+    replaceTag: function(node) {
+        
+        
+      
+        if (node.hasAttribute('width')) {
+            node.removeAttribute('width');
+        }
+        
+         
+        if (node.hasAttribute("style")) {
+            // pretty basic...
+            
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
+        }
+        
+        return true; // continue doing children..
+    }
+});/**
+ * @class Roo.htmleditor.FilterWord
+ * try and clean up all the mess that Word generates.
+ * 
+ * This is the 'nice version' - see 'Heavy' that white lists a very short list of elements, and multi-filters 
+ * @constructor
+ * Run a new Span Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterWord = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter,
+{
+    tag: true,
+     
+    
+    /**
+     * Clean up MS wordisms...
+     */
+    replaceTag : function(node)
+    {
+         
+        // no idea what this does - span with text, replaceds with just text.
+        if(
+                node.nodeName == 'SPAN' &&
+                !node.hasAttributes() &&
+                node.childNodes.length == 1 &&
+                node.firstChild.nodeName == "#text"  
+        ) {
+            var textNode = node.firstChild;
+            node.removeChild(textNode);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
+            }
+            node.parentNode.insertBefore(textNode, node);
+            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
+                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
+            }
+            
+            node.parentNode.removeChild(node);
+            return false; // dont do chidren - we have remove our node - so no need to do chdhilren?
+        }
+        
+   
+        
+        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
+            node.parentNode.removeChild(node);
+            return false; // dont do chidlren
+        }
+        //Roo.log(node.tagName);
+        // remove - but keep children..
+        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
+            //Roo.log('-- removed');
+            while (node.childNodes.length) {
+                var cn = node.childNodes[0];
+                node.removeChild(cn);
+                node.parentNode.insertBefore(cn, node);
+                // move node to parent - and clean it..
+                this.replaceTag(cn);
+            }
+            node.parentNode.removeChild(node);
+            /// no need to iterate chidlren = it's got none..
+            //this.iterateChildren(node, this.cleanWord);
+            return false; // no need to iterate children.
+        }
+        // clean styles
+        if (node.className.length) {
+            
+            var cn = node.className.split(/\W+/);
+            var cna = [];
+            Roo.each(cn, function(cls) {
+                if (cls.match(/Mso[a-zA-Z]+/)) {
+                    return;
+                }
+                cna.push(cls);
+            });
+            node.className = cna.length ? cna.join(' ') : '';
+            if (!cna.length) {
+                node.removeAttribute("class");
+            }
+        }
+        
+        if (node.hasAttribute("lang")) {
+            node.removeAttribute("lang");
+        }
+        
+        if (node.hasAttribute("style")) {
+            
+            var styles = node.getAttribute("style").split(";");
+            var nstyle = [];
+            Roo.each(styles, function(s) {
+                if (!s.match(/:/)) {
+                    return;
+                }
+                var kv = s.split(":");
+                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
+                    return;
+                }
+                // what ever is left... we allow.
+                nstyle.push(s);
+            });
+            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
+            if (!nstyle.length) {
+                node.removeAttribute('style');
+            }
+        }
+        return true; // do children
+        
+        
+        
+    }
+});
+/**
+ * @class Roo.htmleditor.FilterStyleToTag
+ * part of the word stuff... - certain 'styles' should be converted to tags.
+ * eg.
+ *   font-weight: bold -> bold
+ *   ?? super / subscrit etc..
+ * 
+ * @constructor
+* Run a new style to tag filter.
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterStyleToTag = function(cfg)
+{
+    
+    this.tags = {
+        B  : [ 'fontWeight' , 'bold'],
+        I :  [ 'fontStyle' , 'italic'],
+        //pre :  [ 'font-style' , 'italic'],
+        // h1.. h6 ?? font-size?
+        SUP : [ 'verticalAlign' , 'super' ],
+        SUB : [ 'verticalAlign' , 'sub' ]
+        
+        
+    };
+    
+    Roo.apply(this, cfg);
+     
+    
+    this.walk(cfg.node);
+    
+    
+    
+}
+
+
+Roo.extend(Roo.htmleditor.FilterStyleToTag, Roo.htmleditor.Filter,
+{
+    tag: true, // all tags
+    
+    tags : false,
+    
+    
+    replaceTag : function(node)
+    {
+        
+        
+        if (node.getAttribute("style") === null) {
+            return true;
+        }
+        var inject = [];
+        for (var k in this.tags) {
+            if (node.style[this.tags[k][0]] == this.tags[k][1]) {
+                inject.push(k);
+                node.style.removeProperty(this.tags[k][0]);
+            }
+        }
+        if (!inject.length) {
+            return true; 
+        }
+        var cn = Array.from(node.childNodes);
+        var nn = node;
+        Roo.each(inject, function(t) {
+            var nc = node.ownerDocument.createElement(t);
+            nn.appendChild(nc);
+            nn = nc;
+        });
+        for(var i = 0;i < cn.length;cn++) {
+            node.removeChild(cn[i]);
+            nn.appendChild(cn[i]);
+        }
+        return true /// iterate thru
+    }
+    
+})/**
+ * @class Roo.htmleditor.FilterLongBr
+ * BR/BR/BR - keep a maximum of 2...
+ * @constructor
+ * Run a new Long BR Filter
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.FilterLongBr = function(cfg)
+{
+    // no need to apply config.
+    this.walk(cfg.node);
+}
+
+Roo.extend(Roo.htmleditor.FilterLongBr, Roo.htmleditor.Filter,
+{
+    
+     
+    tag : 'BR',
+    
+     
+    replaceTag : function(node)
+    {
+        
+        var ps = node.nextSibling;
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.nextSibling;
+        }
+        
+        if (!ps &&  [ 'TD', 'TH', 'LI', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(node.parentNode.tagName) > -1) { 
+            node.parentNode.removeChild(node); // remove last BR inside one fo these tags
+            return false;
+        }
+        
+        if (!ps || ps.nodeType != 1) {
+            return false;
+        }
+        
+        if (!ps || ps.tagName != 'BR') {
+           
+            return false;
+        }
+        
+        
+        
+        
+        
+        if (!node.previousSibling) {
+            return false;
+        }
+        var ps = node.previousSibling;
+        
+        while (ps && ps.nodeType == 3 && ps.nodeValue.trim().length < 1) {
+            ps = ps.previousSibling;
+        }
+        if (!ps || ps.nodeType != 1) {
+            return false;
+        }
+        // if header or BR before.. then it's a candidate for removal.. - as we only want '2' of these..
+        if (!ps || [ 'BR', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' ].indexOf(ps.tagName) < 0) {
+            return false;
+        }
+        
+        node.parentNode.removeChild(node); // remove me...
+        
+        return false; // no need to do children
+
+    }
+    
+}); 
+
+/**
+ * @class Roo.htmleditor.FilterBlock
+ * removes id / data-block and contenteditable that are associated with blocks
+ * usage should be done on a cloned copy of the dom
+ * @constructor
+* Run a new Attribute Filter { node : xxxx }}
+* @param {Object} config Configuration options
+ */
+Roo.htmleditor.FilterBlock = function(cfg)
+{
+    Roo.apply(this, cfg);
+    var qa = cfg.node.querySelectorAll;
+    this.removeAttributes('data-block');
+    this.removeAttributes('contenteditable');
+    this.removeAttributes('id');
+    
+}
+
+Roo.apply(Roo.htmleditor.FilterBlock.prototype,
+{
+    node: true, // all tags
+     
+     
+    removeAttributes : function(attr)
+    {
+        var ar = this.node.querySelectorAll('*[' + attr + ']');
+        for (var i =0;i<ar.length;i++) {
+            ar[i].removeAttribute(attr);
+        }
+    }
+        
+        
+        
+    
+});
+/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidySerializer
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ * @constructor
+ * @method Serializer
+ * @param {Object} settings Name/value settings object.
+ */
+
+
+Roo.htmleditor.TidySerializer = function(settings)
+{
+    Roo.apply(this, settings);
+    
+    this.writer = new Roo.htmleditor.TidyWriter(settings);
+    
+    
+
+};
+Roo.htmleditor.TidySerializer.prototype = {
+    
+    /**
+     * @param {boolean} inner do the inner of the node.
+     */
+    inner : false,
+    
+    writer : false,
+    
+    /**
+    * Serializes the specified node into a string.
+    *
+    * @example
+    * new tinymce.html.Serializer().serialize(new tinymce.html.DomParser().parse('<p>text</p>'));
+    * @method serialize
+    * @param {DomElement} node Node instance to serialize.
+    * @return {String} String with HTML based on DOM tree.
+    */
+    serialize : function(node) {
+        
+        // = settings.validate;
+        var writer = this.writer;
+        var self  = this;
+        this.handlers = {
+            // #text
+            3: function(node) {
+                
+                writer.text(node.nodeValue, node);
+            },
+            // #comment
+            8: function(node) {
+                writer.comment(node.nodeValue);
+            },
+            // Processing instruction
+            7: function(node) {
+                writer.pi(node.name, node.nodeValue);
+            },
+            // Doctype
+            10: function(node) {
+                writer.doctype(node.nodeValue);
+            },
+            // CDATA
+            4: function(node) {
+                writer.cdata(node.nodeValue);
+            },
+            // Document fragment
+            11: function(node) {
+                node = node.firstChild;
+                if (!node) {
+                    return;
+                }
+                while(node) {
+                    self.walk(node);
+                    node = node.nextSibling
+                }
+            }
+        };
+        writer.reset();
+        1 != node.nodeType || this.inner ? this.handlers[11](node) : this.walk(node);
+        return writer.getContent();
+    },
+
+    walk: function(node)
+    {
+        var attrName, attrValue, sortedAttrs, i, l, elementRule,
+            handler = this.handlers[node.nodeType];
+            
+        if (handler) {
+            handler(node);
+            return;
+        }
+    
+        var name = node.nodeName;
+        var isEmpty = node.childNodes.length < 1;
+      
+        var writer = this.writer;
+        var attrs = node.attributes;
+        // Sort attributes
+        
+        writer.start(node.nodeName, attrs, isEmpty, node);
+        if (isEmpty) {
+            return;
+        }
+        node = node.firstChild;
+        if (!node) {
+            writer.end(name);
+            return;
+        }
+        while (node) {
+            this.walk(node);
+            node = node.nextSibling;
+        }
+        writer.end(name);
+        
+    
+    }
+    // Serialize element and treat all non elements as fragments
+   
+}; 
+
+/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidyWriter
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ *
+ * Known issues?
+ * - not tested much with 'PRE' formated elements.
+ * 
+ *
+ *
+ */
+
+Roo.htmleditor.TidyWriter = function(settings)
+{
+    
+    // indent, indentBefore, indentAfter, encode, htmlOutput, html = [];
+    Roo.apply(this, settings);
+    this.html = [];
+    this.state = [];
+     
+    this.encode = Roo.htmleditor.TidyEntities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
+  
+}
+Roo.htmleditor.TidyWriter.prototype = {
+
+    state : false,
+    
+    indent :  '  ',
+    
+    // part of state...
+    indentstr : '',
+    in_pre: false,
+    in_inline : false,
+    last_inline : false,
+    encode : false,
+     
+    
+            /**
+    * Writes the a start element such as <p id="a">.
+    *
+    * @method start
+    * @param {String} name Name of the element.
+    * @param {Array} attrs Optional attribute array or undefined if it hasn't any.
+    * @param {Boolean} empty Optional empty state if the tag should end like <br />.
+    */
+    start: function(name, attrs, empty, node)
+    {
+        var i, l, attr, value;
+        
+        // there are some situations where adding line break && indentation will not work. will not work.
+        // <span / b / i ... formating?
+        
+        var in_inline = this.in_inline || Roo.htmleditor.TidyWriter.inline_elements.indexOf(name) > -1;
+        var in_pre    = this.in_pre    || Roo.htmleditor.TidyWriter.whitespace_elements.indexOf(name) > -1;
+        
+        var is_short   = empty ? Roo.htmleditor.TidyWriter.shortend_elements.indexOf(name) > -1 : false;
+        
+        var add_lb = name == 'BR' ? false : in_inline;
+        
+        if (!add_lb && !this.in_pre && this.lastElementEndsWS()) {
+            i_inline = false;
+        }
+
+        var indentstr =  this.indentstr;
+        
+        // e_inline = elements that can be inline, but still allow \n before and after?
+        // only 'BR' ??? any others?
+        
+        // ADD LINE BEFORE tage
+        if (!this.in_pre) {
+            if (in_inline) {
+                //code
+                if (name == 'BR') {
+                    this.addLine();
+                } else if (this.lastElementEndsWS()) {
+                    this.addLine();
+                } else{
+                    // otherwise - no new line. (and dont indent.)
+                    indentstr = '';
+                }
+                
+            } else {
+                this.addLine();
+            }
+        } else {
+            indentstr = '';
+        }
+        
+        this.html.push(indentstr + '<', name.toLowerCase());
+        
+        if (attrs) {
+            for (i = 0, l = attrs.length; i < l; i++) {
+                attr = attrs[i];
+                this.html.push(' ', attr.name, '="', this.encode(attr.value, true), '"');
+            }
+        }
+     
+        if (empty) {
+            if (is_short) {
+                this.html[this.html.length] = '/>';
+            } else {
+                this.html[this.html.length] = '></' + name.toLowerCase() + '>';
+            }
+            var e_inline = name == 'BR' ? false : this.in_inline;
+            
+            if (!e_inline && !this.in_pre) {
+                this.addLine();
+            }
+            return;
+        
+        }
+        // not empty..
+        this.html[this.html.length] = '>';
+        
+        // there is a special situation, where we need to turn on in_inline - if any of the imediate chidlren are one of these.
+        /*
+        if (!in_inline && !in_pre) {
+            var cn = node.firstChild;
+            while(cn) {
+                if (Roo.htmleditor.TidyWriter.inline_elements.indexOf(cn.nodeName) > -1) {
+                    in_inline = true
+                    break;
+                }
+                cn = cn.nextSibling;
+            }
+             
+        }
+        */
+        
+        
+        this.pushState({
+            indentstr : in_pre   ? '' : (this.indentstr + this.indent),
+            in_pre : in_pre,
+            in_inline :  in_inline
+        });
+        // add a line after if we are not in a
+        
+        if (!in_inline && !in_pre) {
+            this.addLine();
+        }
+        
+            
+         
+        
+    },
+    
+    lastElementEndsWS : function()
+    {
+        var value = this.html.length > 0 ? this.html[this.html.length-1] : false;
+        if (value === false) {
+            return true;
+        }
+        return value.match(/\s+$/);
+        
+    },
+    
+    /**
+     * Writes the a end element such as </p>.
+     *
+     * @method end
+     * @param {String} name Name of the element.
+     */
+    end: function(name) {
+        var value;
+        this.popState();
+        var indentstr = '';
+        var in_inline = this.in_inline || Roo.htmleditor.TidyWriter.inline_elements.indexOf(name) > -1;
+        
+        if (!this.in_pre && !in_inline) {
+            this.addLine();
+            indentstr  = this.indentstr;
+        }
+        this.html.push(indentstr + '</', name.toLowerCase(), '>');
+        this.last_inline = in_inline;
+        
+        // pop the indent state..
+    },
+    /**
+     * Writes a text node.
+     *
+     * In pre - we should not mess with the contents.
+     * 
+     *
+     * @method text
+     * @param {String} text String to write out.
+     * @param {Boolean} raw Optional raw state if true the contents wont get encoded.
+     */
+    text: function(text, node)
+    {
+        // if not in whitespace critical
+        if (text.length < 1) {
+            return;
+        }
+        if (this.in_pre) {
+            this.html[this.html.length] =  text;
+            return;   
+        }
+        
+        if (this.in_inline) {
+            text = text.replace(/\s+/g,' '); // all white space inc line breaks to a slingle' '
+            if (text != ' ') {
+                text = text.replace(/\s+/,' ');  // all white space to single white space
+                
+                    
+                // if next tag is '<BR>', then we can trim right..
+                if (node.nextSibling &&
+                    node.nextSibling.nodeType == 1 &&
+                    node.nextSibling.nodeName == 'BR' )
+                {
+                    text = text.replace(/\s+$/g,'');
+                }
+                // if previous tag was a BR, we can also trim..
+                if (node.previousSibling &&
+                    node.previousSibling.nodeType == 1 &&
+                    node.previousSibling.nodeName == 'BR' )
+                {
+                    text = this.indentstr +  text.replace(/^\s+/g,'');
+                }
+                if (text.match(/\n/)) {
+                    text = text.replace(
+                        /(?![^\n]{1,64}$)([^\n]{1,64})\s/g, '$1\n' + this.indentstr
+                    );
+                    // remoeve the last whitespace / line break.
+                    text = text.replace(/\n\s+$/,'');
+                }
+                // repace long lines
+                
+            }
+             
+            this.html[this.html.length] =  text;
+            return;   
+        }
+        // see if previous element was a inline element.
+        var indentstr = this.indentstr;
+   
+        text = text.replace(/\s+/g," "); // all whitespace into single white space.
+        
+        // should trim left?
+        if (node.previousSibling &&
+            node.previousSibling.nodeType == 1 &&
+            Roo.htmleditor.TidyWriter.inline_elements.indexOf(node.previousSibling.nodeName) > -1)
+        {
+            indentstr = '';
+            
+        } else {
+            this.addLine();
+            text = text.replace(/^\s+/,''); // trim left
+          
+        }
+        // should trim right?
+        if (node.nextSibling &&
+            node.nextSibling.nodeType == 1 &&
+            Roo.htmleditor.TidyWriter.inline_elements.indexOf(node.nextSibling.nodeName) > -1)
+        {
+          // noop
+            
+        }  else {
+            text = text.replace(/\s+$/,''); // trim right
+        }
+         
+              
+        
+        
+        
+        if (text.length < 1) {
+            return;
+        }
+        if (!text.match(/\n/)) {
+            this.html.push(indentstr + text);
+            return;
+        }
+        
+        text = this.indentstr + text.replace(
+            /(?![^\n]{1,64}$)([^\n]{1,64})\s/g, '$1\n' + this.indentstr
+        );
+        // remoeve the last whitespace / line break.
+        text = text.replace(/\s+$/,''); 
+        
+        this.html.push(text);
+        
+        // split and indent..
+        
+        
+    },
+    /**
+     * Writes a cdata node such as <![CDATA[data]]>.
+     *
+     * @method cdata
+     * @param {String} text String to write out inside the cdata.
+     */
+    cdata: function(text) {
+        this.html.push('<![CDATA[', text, ']]>');
+    },
+    /**
+    * Writes a comment node such as <!-- Comment -->.
+    *
+    * @method cdata
+    * @param {String} text String to write out inside the comment.
+    */
+   comment: function(text) {
+       this.html.push('<!--', text, '-->');
+   },
+    /**
+     * Writes a PI node such as <?xml attr="value" ?>.
+     *
+     * @method pi
+     * @param {String} name Name of the pi.
+     * @param {String} text String to write out inside the pi.
+     */
+    pi: function(name, text) {
+        text ? this.html.push('<?', name, ' ', this.encode(text), '?>') : this.html.push('<?', name, '?>');
+        this.indent != '' && this.html.push('\n');
+    },
+    /**
+     * Writes a doctype node such as <!DOCTYPE data>.
+     *
+     * @method doctype
+     * @param {String} text String to write out inside the doctype.
+     */
+    doctype: function(text) {
+        this.html.push('<!DOCTYPE', text, '>', this.indent != '' ? '\n' : '');
+    },
+    /**
+     * Resets the internal buffer if one wants to reuse the writer.
+     *
+     * @method reset
+     */
+    reset: function() {
+        this.html.length = 0;
+        this.state = [];
+        this.pushState({
+            indentstr : '',
+            in_pre : false, 
+            in_inline : false
+        })
+    },
+    /**
+     * Returns the contents that got serialized.
+     *
+     * @method getContent
+     * @return {String} HTML contents that got written down.
+     */
+    getContent: function() {
+        return this.html.join('').replace(/\n$/, '');
+    },
+    
+    pushState : function(cfg)
+    {
+        this.state.push(cfg);
+        Roo.apply(this, cfg);
+    },
+    
+    popState : function()
+    {
+        if (this.state.length < 1) {
+            return; // nothing to push
+        }
+        var cfg = {
+            in_pre: false,
+            indentstr : ''
+        };
+        this.state.pop();
+        if (this.state.length > 0) {
+            cfg = this.state[this.state.length-1]; 
+        }
+        Roo.apply(this, cfg);
+    },
+    
+    addLine: function()
+    {
+        if (this.html.length < 1) {
+            return;
+        }
+        
+        
+        var value = this.html[this.html.length - 1];
+        if (value.length > 0 && '\n' !== value) {
+            this.html.push('\n');
+        }
+    }
+    
+    
+//'pre script noscript style textarea video audio iframe object code'
+// shortended... 'area base basefont br col frame hr img input isindex link  meta param embed source wbr track');
+// inline 
+};
+
+Roo.htmleditor.TidyWriter.inline_elements = [
+        'SPAN','STRONG','B','EM','I','FONT','STRIKE','U','VAR',
+        'CITE','DFN','CODE','MARK','Q','SUP','SUB','SAMP', 'A'
+];
+Roo.htmleditor.TidyWriter.shortend_elements = [
+    'AREA','BASE','BASEFONT','BR','COL','FRAME','HR','IMG','INPUT',
+    'ISINDEX','LINK','','META','PARAM','EMBED','SOURCE','WBR','TRACK'
+];
+
+Roo.htmleditor.TidyWriter.whitespace_elements = [
+    'PRE','SCRIPT','NOSCRIPT','STYLE','TEXTAREA','VIDEO','AUDIO','IFRAME','OBJECT','CODE'
+];/***
+ * This is based loosely on tinymce 
+ * @class Roo.htmleditor.TidyEntities
+ * @static
+ * https://github.com/thorn0/tinymce.html/blob/master/tinymce.html.js
+ *
+ * Not 100% sure this is actually used or needed.
+ */
+
+Roo.htmleditor.TidyEntities = {
+    
+    /**
+     * initialize data..
+     */
+    init : function (){
+     
+        this.namedEntities = this.buildEntitiesLookup(this.namedEntitiesData, 32);
+       
+    },
+
+
+    buildEntitiesLookup: function(items, radix) {
+        var i, chr, entity, lookup = {};
+        if (!items) {
+            return {};
+        }
+        items = typeof(items) == 'string' ? items.split(',') : items;
+        radix = radix || 10;
+        // Build entities lookup table
+        for (i = 0; i < items.length; i += 2) {
+            chr = String.fromCharCode(parseInt(items[i], radix));
+            // Only add non base entities
+            if (!this.baseEntities[chr]) {
+                entity = '&' + items[i + 1] + ';';
+                lookup[chr] = entity;
+                lookup[entity] = chr;
+            }
+        }
+        return lookup;
+        
+    },
+    
+    asciiMap : {
+            128: '€',
+            130: '‚',
+            131: 'ƒ',
+            132: '„',
+            133: '…',
+            134: '†',
+            135: '‡',
+            136: 'ˆ',
+            137: '‰',
+            138: 'Š',
+            139: '‹',
+            140: 'Œ',
+            142: 'Ž',
+            145: '‘',
+            146: '’',
+            147: '“',
+            148: '”',
+            149: '•',
+            150: '–',
+            151: '—',
+            152: '˜',
+            153: '™',
+            154: 'š',
+            155: '›',
+            156: 'œ',
+            158: 'ž',
+            159: 'Ÿ'
+    },
+    // Raw entities
+    baseEntities : {
+        '"': '&quot;',
+        // Needs to be escaped since the YUI compressor would otherwise break the code
+        '\'': '&#39;',
+        '<': '&lt;',
+        '>': '&gt;',
+        '&': '&amp;',
+        '`': '&#96;'
+    },
+    // Reverse lookup table for raw entities
+    reverseEntities : {
+        '&lt;': '<',
+        '&gt;': '>',
+        '&amp;': '&',
+        '&quot;': '"',
+        '&apos;': '\''
+    },
+    
+    attrsCharsRegExp : /[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+    textCharsRegExp : /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+    rawCharsRegExp : /[<>&\"\']/g,
+    entityRegExp : /&#([a-z0-9]+);?|&([a-z0-9]+);/gi,
+    namedEntities  : false,
+    namedEntitiesData : [ 
+        '50',
+        'nbsp',
+        '51',
+        'iexcl',
+        '52',
+        'cent',
+        '53',
+        'pound',
+        '54',
+        'curren',
+        '55',
+        'yen',
+        '56',
+        'brvbar',
+        '57',
+        'sect',
+        '58',
+        'uml',
+        '59',
+        'copy',
+        '5a',
+        'ordf',
+        '5b',
+        'laquo',
+        '5c',
+        'not',
+        '5d',
+        'shy',
+        '5e',
+        'reg',
+        '5f',
+        'macr',
+        '5g',
+        'deg',
+        '5h',
+        'plusmn',
+        '5i',
+        'sup2',
+        '5j',
+        'sup3',
+        '5k',
+        'acute',
+        '5l',
+        'micro',
+        '5m',
+        'para',
+        '5n',
+        'middot',
+        '5o',
+        'cedil',
+        '5p',
+        'sup1',
+        '5q',
+        'ordm',
+        '5r',
+        'raquo',
+        '5s',
+        'frac14',
+        '5t',
+        'frac12',
+        '5u',
+        'frac34',
+        '5v',
+        'iquest',
+        '60',
+        'Agrave',
+        '61',
+        'Aacute',
+        '62',
+        'Acirc',
+        '63',
+        'Atilde',
+        '64',
+        'Auml',
+        '65',
+        'Aring',
+        '66',
+        'AElig',
+        '67',
+        'Ccedil',
+        '68',
+        'Egrave',
+        '69',
+        'Eacute',
+        '6a',
+        'Ecirc',
+        '6b',
+        'Euml',
+        '6c',
+        'Igrave',
+        '6d',
+        'Iacute',
+        '6e',
+        'Icirc',
+        '6f',
+        'Iuml',
+        '6g',
+        'ETH',
+        '6h',
+        'Ntilde',
+        '6i',
+        'Ograve',
+        '6j',
+        'Oacute',
+        '6k',
+        'Ocirc',
+        '6l',
+        'Otilde',
+        '6m',
+        'Ouml',
+        '6n',
+        'times',
+        '6o',
+        'Oslash',
+        '6p',
+        'Ugrave',
+        '6q',
+        'Uacute',
+        '6r',
+        'Ucirc',
+        '6s',
+        'Uuml',
+        '6t',
+        'Yacute',
+        '6u',
+        'THORN',
+        '6v',
+        'szlig',
+        '70',
+        'agrave',
+        '71',
+        'aacute',
+        '72',
+        'acirc',
+        '73',
+        'atilde',
+        '74',
+        'auml',
+        '75',
+        'aring',
+        '76',
+        'aelig',
+        '77',
+        'ccedil',
+        '78',
+        'egrave',
+        '79',
+        'eacute',
+        '7a',
+        'ecirc',
+        '7b',
+        'euml',
+        '7c',
+        'igrave',
+        '7d',
+        'iacute',
+        '7e',
+        'icirc',
+        '7f',
+        'iuml',
+        '7g',
+        'eth',
+        '7h',
+        'ntilde',
+        '7i',
+        'ograve',
+        '7j',
+        'oacute',
+        '7k',
+        'ocirc',
+        '7l',
+        'otilde',
+        '7m',
+        'ouml',
+        '7n',
+        'divide',
+        '7o',
+        'oslash',
+        '7p',
+        'ugrave',
+        '7q',
+        'uacute',
+        '7r',
+        'ucirc',
+        '7s',
+        'uuml',
+        '7t',
+        'yacute',
+        '7u',
+        'thorn',
+        '7v',
+        'yuml',
+        'ci',
+        'fnof',
+        'sh',
+        'Alpha',
+        'si',
+        'Beta',
+        'sj',
+        'Gamma',
+        'sk',
+        'Delta',
+        'sl',
+        'Epsilon',
+        'sm',
+        'Zeta',
+        'sn',
+        'Eta',
+        'so',
+        'Theta',
+        'sp',
+        'Iota',
+        'sq',
+        'Kappa',
+        'sr',
+        'Lambda',
+        'ss',
+        'Mu',
+        'st',
+        'Nu',
+        'su',
+        'Xi',
+        'sv',
+        'Omicron',
+        't0',
+        'Pi',
+        't1',
+        'Rho',
+        't3',
+        'Sigma',
+        't4',
+        'Tau',
+        't5',
+        'Upsilon',
+        't6',
+        'Phi',
+        't7',
+        'Chi',
+        't8',
+        'Psi',
+        't9',
+        'Omega',
+        'th',
+        'alpha',
+        'ti',
+        'beta',
+        'tj',
+        'gamma',
+        'tk',
+        'delta',
+        'tl',
+        'epsilon',
+        'tm',
+        'zeta',
+        'tn',
+        'eta',
+        'to',
+        'theta',
+        'tp',
+        'iota',
+        'tq',
+        'kappa',
+        'tr',
+        'lambda',
+        'ts',
+        'mu',
+        'tt',
+        'nu',
+        'tu',
+        'xi',
+        'tv',
+        'omicron',
+        'u0',
+        'pi',
+        'u1',
+        'rho',
+        'u2',
+        'sigmaf',
+        'u3',
+        'sigma',
+        'u4',
+        'tau',
+        'u5',
+        'upsilon',
+        'u6',
+        'phi',
+        'u7',
+        'chi',
+        'u8',
+        'psi',
+        'u9',
+        'omega',
+        'uh',
+        'thetasym',
+        'ui',
+        'upsih',
+        'um',
+        'piv',
+        '812',
+        'bull',
+        '816',
+        'hellip',
+        '81i',
+        'prime',
+        '81j',
+        'Prime',
+        '81u',
+        'oline',
+        '824',
+        'frasl',
+        '88o',
+        'weierp',
+        '88h',
+        'image',
+        '88s',
+        'real',
+        '892',
+        'trade',
+        '89l',
+        'alefsym',
+        '8cg',
+        'larr',
+        '8ch',
+        'uarr',
+        '8ci',
+        'rarr',
+        '8cj',
+        'darr',
+        '8ck',
+        'harr',
+        '8dl',
+        'crarr',
+        '8eg',
+        'lArr',
+        '8eh',
+        'uArr',
+        '8ei',
+        'rArr',
+        '8ej',
+        'dArr',
+        '8ek',
+        'hArr',
+        '8g0',
+        'forall',
+        '8g2',
+        'part',
+        '8g3',
+        'exist',
+        '8g5',
+        'empty',
+        '8g7',
+        'nabla',
+        '8g8',
+        'isin',
+        '8g9',
+        'notin',
+        '8gb',
+        'ni',
+        '8gf',
+        'prod',
+        '8gh',
+        'sum',
+        '8gi',
+        'minus',
+        '8gn',
+        'lowast',
+        '8gq',
+        'radic',
+        '8gt',
+        'prop',
+        '8gu',
+        'infin',
+        '8h0',
+        'ang',
+        '8h7',
+        'and',
+        '8h8',
+        'or',
+        '8h9',
+        'cap',
+        '8ha',
+        'cup',
+        '8hb',
+        'int',
+        '8hk',
+        'there4',
+        '8hs',
+        'sim',
+        '8i5',
+        'cong',
+        '8i8',
+        'asymp',
+        '8j0',
+        'ne',
+        '8j1',
+        'equiv',
+        '8j4',
+        'le',
+        '8j5',
+        'ge',
+        '8k2',
+        'sub',
+        '8k3',
+        'sup',
+        '8k4',
+        'nsub',
+        '8k6',
+        'sube',
+        '8k7',
+        'supe',
+        '8kl',
+        'oplus',
+        '8kn',
+        'otimes',
+        '8l5',
+        'perp',
+        '8m5',
+        'sdot',
+        '8o8',
+        'lceil',
+        '8o9',
+        'rceil',
+        '8oa',
+        'lfloor',
+        '8ob',
+        'rfloor',
+        '8p9',
+        'lang',
+        '8pa',
+        'rang',
+        '9ea',
+        'loz',
+        '9j0',
+        'spades',
+        '9j3',
+        'clubs',
+        '9j5',
+        'hearts',
+        '9j6',
+        'diams',
+        'ai',
+        'OElig',
+        'aj',
+        'oelig',
+        'b0',
+        'Scaron',
+        'b1',
+        'scaron',
+        'bo',
+        'Yuml',
+        'm6',
+        'circ',
+        'ms',
+        'tilde',
+        '802',
+        'ensp',
+        '803',
+        'emsp',
+        '809',
+        'thinsp',
+        '80c',
+        'zwnj',
+        '80d',
+        'zwj',
+        '80e',
+        'lrm',
+        '80f',
+        'rlm',
+        '80j',
+        'ndash',
+        '80k',
+        'mdash',
+        '80o',
+        'lsquo',
+        '80p',
+        'rsquo',
+        '80q',
+        'sbquo',
+        '80s',
+        'ldquo',
+        '80t',
+        'rdquo',
+        '80u',
+        'bdquo',
+        '810',
+        'dagger',
+        '811',
+        'Dagger',
+        '81g',
+        'permil',
+        '81p',
+        'lsaquo',
+        '81q',
+        'rsaquo',
+        '85c',
+        'euro'
+    ],
+
+         
+    /**
+     * Encodes the specified string using raw entities. This means only the required XML base entities will be encoded.
+     *
+     * @method encodeRaw
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @return {String} Entity encoded text.
+     */
+    encodeRaw: function(text, attr)
+    {
+        var t = this;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || chr;
+        });
+    },
+    /**
+     * Encoded the specified text with both the attributes and text entities. This function will produce larger text contents
+     * since it doesn't know if the context is within a attribute or text node. This was added for compatibility
+     * and is exposed as the DOMUtils.encode function.
+     *
+     * @method encodeAllRaw
+     * @param {String} text Text to encode.
+     * @return {String} Entity encoded text.
+     */
+    encodeAllRaw: function(text) {
+        var t = this;
+        return ('' + text).replace(this.rawCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || chr;
+        });
+    },
+    /**
+     * Encodes the specified string using numeric entities. The core entities will be
+     * encoded as named ones but all non lower ascii characters will be encoded into numeric entities.
+     *
+     * @method encodeNumeric
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @return {String} Entity encoded text.
+     */
+    encodeNumeric: function(text, attr) {
+        var t = this;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            // Multi byte sequence convert it to a single entity
+            if (chr.length > 1) {
+                return '&#' + (1024 * (chr.charCodeAt(0) - 55296) + (chr.charCodeAt(1) - 56320) + 65536) + ';';
+            }
+            return t.baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';
+        });
+    },
+    /**
+     * Encodes the specified string using named entities. The core entities will be encoded
+     * as named ones but all non lower ascii characters will be encoded into named entities.
+     *
+     * @method encodeNamed
+     * @param {String} text Text to encode.
+     * @param {Boolean} attr Optional flag to specify if the text is attribute contents.
+     * @param {Object} entities Optional parameter with entities to use.
+     * @return {String} Entity encoded text.
+     */
+    encodeNamed: function(text, attr, entities) {
+        var t = this;
+        entities = entities || this.namedEntities;
+        return text.replace(attr ? this.attrsCharsRegExp : this.textCharsRegExp, function(chr) {
+            return t.baseEntities[chr] || entities[chr] || chr;
+        });
+    },
+    /**
+     * Returns an encode function based on the name(s) and it's optional entities.
+     *
+     * @method getEncodeFunc
+     * @param {String} name Comma separated list of encoders for example named,numeric.
+     * @param {String} entities Optional parameter with entities to use instead of the built in set.
+     * @return {function} Encode function to be used.
+     */
+    getEncodeFunc: function(name, entities) {
+        entities = this.buildEntitiesLookup(entities) || this.namedEntities;
+        var t = this;
+        function encodeNamedAndNumeric(text, attr) {
+            return text.replace(attr ? t.attrsCharsRegExp : t.textCharsRegExp, function(chr) {
+                return t.baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;
+            });
+        }
+
+        function encodeCustomNamed(text, attr) {
+            return t.encodeNamed(text, attr, entities);
+        }
+        // Replace + with , to be compatible with previous TinyMCE versions
+        name = this.makeMap(name.replace(/\+/g, ','));
+        // Named and numeric encoder
+        if (name.named && name.numeric) {
+            return this.encodeNamedAndNumeric;
+        }
+        // Named encoder
+        if (name.named) {
+            // Custom names
+            if (entities) {
+                return encodeCustomNamed;
+            }
+            return this.encodeNamed;
+        }
+        // Numeric
+        if (name.numeric) {
+            return this.encodeNumeric;
+        }
+        // Raw encoder
+        return this.encodeRaw;
+    },
+    /**
+     * Decodes the specified string, this will replace entities with raw UTF characters.
+     *
+     * @method decode
+     * @param {String} text Text to entity decode.
+     * @return {String} Entity decoded string.
+     */
+    decode: function(text)
+    {
+        var  t = this;
+        return text.replace(this.entityRegExp, function(all, numeric) {
+            if (numeric) {
+                numeric = 'x' === numeric.charAt(0).toLowerCase() ? parseInt(numeric.substr(1), 16) : parseInt(numeric, 10);
+                // Support upper UTF
+                if (numeric > 65535) {
+                    numeric -= 65536;
+                    return String.fromCharCode(55296 + (numeric >> 10), 56320 + (1023 & numeric));
+                }
+                return t.asciiMap[numeric] || String.fromCharCode(numeric);
+            }
+            return t.reverseEntities[all] || t.namedEntities[all] || t.nativeDecode(all);
+        });
+    },
+    nativeDecode : function (text) {
+        return text;
+    },
+    makeMap : function (items, delim, map) {
+               var i;
+               items = items || [];
+               delim = delim || ',';
+               if (typeof items == "string") {
+                       items = items.split(delim);
+               }
+               map = map || {};
+               i = items.length;
+               while (i--) {
+                       map[items[i]] = {};
+               }
+               return map;
+       }
+};
+    
+    
+    
+Roo.htmleditor.TidyEntities.init();
+/**
+ * @class Roo.htmleditor.KeyEnter
+ * Handle Enter press..
+ * @cfg {Roo.HtmlEditorCore} core the editor.
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+
+
+
+
+Roo.htmleditor.KeyEnter = function(cfg) {
+    Roo.apply(this, cfg);
+    // this does not actually call walk as it's really just a abstract class
+    Roo.get(this.core.doc.body).on('keypress', this.keypress, this);
+}
+
+//Roo.htmleditor.KeyEnter.i = 0;
+
+
+Roo.htmleditor.KeyEnter.prototype = {
+    
+    core : false,
+    
+    keypress : function(e)
+    {
+        if (e.charCode != 13 && e.charCode != 10) {
+            Roo.log([e.charCode,e]);
+            return true;
+        }
+        e.preventDefault();
+        // https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome
+        var doc = this.core.doc;
+          //add a new line
+       
+    
+        var sel = this.core.getSelection();
+        var range = sel.getRangeAt(0);
+        var n = range.commonAncestorContainer;
+        var pc = range.closest([ 'ol', 'ul']);
+        var pli = range.closest('li');
+        if (!pc || e.ctrlKey) {
+            sel.insertNode('br', 'after'); 
+         
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+        
+        // deal with <li> insetion
+        if (pli.innerText.trim() == '' &&
+            pli.previousSibling &&
+            pli.previousSibling.nodeName == 'LI' &&
+            pli.previousSibling.innerText.trim() ==  '') {
+            pli.parentNode.removeChild(pli.previousSibling);
+            sel.cursorAfter(pc);
+            this.core.undoManager.addEvent();
+            this.core.fireEditorEvent(e);
+            return false;
+        }
+    
+        var li = doc.createElement('LI');
+        li.innerHTML = '&nbsp;';
+        if (!pli || !pli.firstSibling) {
+            pc.appendChild(li);
+        } else {
+            pli.parentNode.insertBefore(li, pli.firstSibling);
+        }
+        sel.cursorText (li.firstChild);
+      
+        this.core.undoManager.addEvent();
+        this.core.fireEditorEvent(e);
+
+        return false;
+        
+    
+        
+        
+         
+    }
+};
+     
+/**
+ * @class Roo.htmleditor.Block
+ * Base class for html editor blocks - do not use it directly .. extend it..
+ * @cfg {DomElement} node The node to apply stuff to.
+ * @cfg {String} friendly_name the name that appears in the context bar about this block
+ * @cfg {Object} Context menu - see Roo.form.HtmlEditor.ToolbarContext
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.Block  = function(cfg)
+{
+    // do nothing .. should not be called really.
+}
+/**
+ * factory method to get the block from an element (using cache if necessary)
+ * @static
+ * @param {HtmlElement} the dom element
+ */
+Roo.htmleditor.Block.factory = function(node)
+{
+    var cc = Roo.htmleditor.Block.cache;
+    var id = Roo.get(node).id;
+    if (typeof(cc[id]) != 'undefined' && (!cc[id].node || cc[id].node.closest('body'))) {
+        Roo.htmleditor.Block.cache[id].readElement(node);
+        return Roo.htmleditor.Block.cache[id];
+    }
+    var db  = node.getAttribute('data-block');
+    if (!db) {
+        db = node.nodeName.toLowerCase().toUpperCaseFirst();
+    }
+    var cls = Roo.htmleditor['Block' + db];
+    if (typeof(cls) == 'undefined') {
+        //Roo.log(node.getAttribute('data-block'));
+        Roo.log("OOps missing block : " + 'Block' + db);
+        return false;
+    }
+    Roo.htmleditor.Block.cache[id] = new cls({ node: node });
+    return Roo.htmleditor.Block.cache[id];  /// should trigger update element
+};
+
+/**
+ * initalize all Elements from content that are 'blockable'
+ * @static
+ * @param the body element
+ */
+Roo.htmleditor.Block.initAll = function(body, type)
+{
+    if (typeof(type) == 'undefined') {
+        var ia = Roo.htmleditor.Block.initAll;
+        ia(body,'table');
+        ia(body,'td');
+        ia(body,'figure');
+        return;
+    }
+    Roo.each(Roo.get(body).query(type), function(e) {
+        Roo.htmleditor.Block.factory(e);    
+    },this);
+};
+// question goes here... do we need to clear out this cache sometimes?
+// or show we make it relivant to the htmleditor.
+Roo.htmleditor.Block.cache = {};
+
+Roo.htmleditor.Block.prototype = {
+    
+    node : false,
+    
+     // used by context menu
+    friendly_name : 'Based Block',
+    
+    // text for button to delete this element
+    deleteTitle : false,
+    
+    context : false,
+    /**
+     * Update a node with values from this object
+     * @param {DomElement} node
+     */
+    updateElement : function(node)
+    {
+        Roo.DomHelper.update(node === undefined ? this.node : node, this.toObject());
+    },
+     /**
+     * convert to plain HTML for calling insertAtCursor..
+     */
+    toHTML : function()
+    {
+        return Roo.DomHelper.markup(this.toObject());
+    },
+    /**
+     * used by readEleemnt to extract data from a node
+     * may need improving as it's pretty basic
+     
+     * @param {DomElement} node
+     * @param {String} tag - tag to find, eg. IMG ?? might be better to use DomQuery ?
+     * @param {String} attribute (use html - for contents, or style for using next param as style)
+     * @param {String} style the style property - eg. text-align
+     */
+    getVal : function(node, tag, attr, style)
+    {
+        var n = node;
+        if (tag !== true && n.tagName != tag.toUpperCase()) {
+            // in theory we could do figure[3] << 3rd figure? or some more complex search..?
+            // but kiss for now.
+            n = node.getElementsByTagName(tag).item(0);
+        }
+        if (!n) {
+            return '';
+        }
+        if (attr == 'html') {
+            return n.innerHTML;
+        }
+        if (attr == 'style') {
+            return n.style[style]; 
+        }
+        
+        return n.hasAttribute(attr) ? n.getAttribute(attr) : '';
+            
+    },
+    /**
+     * create a DomHelper friendly object - for use with 
+     * Roo.DomHelper.markup / overwrite / etc..
+     * (override this)
+     */
+    toObject : function()
+    {
+        return {};
+    },
+      /**
+     * Read a node that has a 'data-block' property - and extract the values from it.
+     * @param {DomElement} node - the node
+     */
+    readElement : function(node)
+    {
+        
+    } 
+    
+    
+};
+
+
+/**
+ * @class Roo.htmleditor.BlockFigure
+ * Block that has an image and a figcaption
+ * @cfg {String} image_src the url for the image
+ * @cfg {String} align (left|right) alignment for the block default left
+ * @cfg {String} caption the text to appear below  (and in the alt tag)
+ * @cfg {String} caption_display (block|none) display or not the caption
+ * @cfg {String|number} image_width the width of the image number or %?
+ * @cfg {String|number} image_height the height of the image number or %?
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockFigure = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+}
+Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, {
+    
+    // setable values.
+    image_src: '',
+    align: 'center',
+    caption : '',
+    caption_display : 'block',
+    width : '100%',
+    cls : '',
+    href: '',
+    video_url : '',
+    
+    // margin: '2%', not used
+    
+    text_align: 'left', //   (left|right) alignment for the text caption default left. - not used at present
+
+    
+    // used by context menu
+    friendly_name : 'Image with caption',
+    deleteTitle : "Delete Image and Caption",
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+             {
+                xtype : 'TextItem',
+                text : "Source: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'Button',
+                text: 'Change Image URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Image Source URL",
+                            msg : "Enter the url for the image",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.image_src = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.image_src
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+         
+            {
+                xtype : 'Button',
+                text: 'Change Link URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        var b = block();
+                        
+                        Roo.MessageBox.show({
+                            title : "Link URL",
+                            msg : "Enter the url for the link - leave blank to have no link",
+                            buttons: Roo.MessageBox.OKCANCEL,
+                            fn: function(btn, val){
+                                if (btn != 'ok') {
+                                    return;
+                                }
+                                b.href = val;
+                                b.updateElement();
+                                syncValue();
+                                toolbar.editorcore.onEditorEvent();
+                            },
+                            minWidth:250,
+                            prompt:true,
+                            //multiline: multiline,
+                            modal : true,
+                            value : b.href
+                        });
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: 'Show Video URL',
+                 
+                listeners : {
+                    click: function (btn, state)
+                    {
+                        Roo.MessageBox.alert("Video URL",
+                            block().video_url == '' ? 'This image is not linked ot a video' :
+                                'The image is linked to: <a target="_new" href="' + block().video_url + '">' + block().video_url + '</a>');
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['auto'],
+                        ['50%'],
+                        ['100%']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            {
+                xtype : 'TextItem',
+                text : "Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 70,
+                name : 'align',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.align = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['left'],
+                        ['right'],
+                        ['center']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Hide Caption',
+                name : 'caption_display',
+                pressed : false,
+                enableToggle : true,
+                setValue : function(v) {
+                    this.toggle(v == 'block' ? false : true);
+                },
+                listeners : {
+                    toggle: function (btn, state)
+                    {
+                        var b  = block();
+                        b.caption_display = b.caption_display == 'block' ? 'none' : 'block';
+                        this.setText(b.caption_display == 'block' ? "Hide Caption" : "Show Caption");
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            }
+        ];
+        
+    },
+    /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     */
+    toObject : function()
+    {
+        var d = document.createElement('div');
+        d.innerHTML = this.caption;
+        
+        var m = this.width == '50%' && this.align == 'center' ? '0 auto' : 0; 
+        
+        var img =   {
+            tag : 'img',
+            contenteditable : 'false',
+            src : this.image_src,
+            alt : d.innerText.replace(/\n/g, " ").replace(/\s+/g, ' ').trim(), // removeHTML and reduce spaces..
+            style: {
+                width : 'auto',
+                'max-width': '100%',
+                margin : '0px' 
+                
+                
+            }
+        };
+        /*
+        '<div class="{0}" width="420" height="315" src="{1}" frameborder="0" allowfullscreen>' +
+                    '<a href="{2}">' + 
+                        '<img class="{0}-thumbnail" src="{3}/Images/{4}/{5}#image-{4}" />' + 
+                    '</a>' + 
+                '</div>',
+        */
+                
+        if (this.href.length > 0) {
+            img = {
+                tag : 'a',
+                href: this.href,
+                contenteditable : 'true',
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        
+        if (this.video_url.length > 0) {
+            img = {
+                tag : 'div',
+                cls : this.cls,
+                frameborder : 0,
+                allowfullscreen : true,
+                width : 420,  // these are for video tricks - that we replace the outer
+                height : 315,
+                src : this.video_url,
+                cn : [
+                    img
+                ]
+            };
+        }
+        
+        var captionhtml = this.caption_display == 'hidden' ? this.caption : (this.caption.length ? this.caption : "Caption");
+        
+        return  {
+            tag: 'figure',
+            'data-block' : 'Figure',
+            contenteditable : 'false',
+            style : {
+                display: 'block',
+                float :  this.align ,
+                'max-width':  this.width,
+                width : 'auto',
+                margin:  m,
+                padding: '10px'
+                
+            },
+           
+            
+            align : this.align,
+            cn : [
+                img,
+              
+                {
+                    tag: 'figcaption',
+                    
+                    style : {
+                        'text-align': 'left',
+                        'margin-top' : '16px',
+                        'font-size' : '16px',
+                        'line-height' : '24px',
+                         display : this.caption_display
+                    },
+                    cls : this.cls.length > 0 ? (this.cls  + '-thumbnail' ) : '',
+                    cn : [
+                        {
+                            // we can not rely on yahoo syndication to use CSS elements - so have to use  '<i>' to encase stuff.
+                            tag : 'i',
+                            contenteditable : true,
+                            html : captionhtml
+                        }
+                    ]
+                    
+                }
+            ]
+        };
+         
+    },
+    
+    readElement : function(node)
+    {
+        // this should not really come from the link...
+        this.video_url = this.getVal(node, 'div', 'src');
+        this.cls = this.getVal(node, 'div', 'class');
+        this.href = this.getVal(node, 'a', 'href');
+        
+        this.image_src = this.getVal(node, 'img', 'src');
+         
+        this.align = this.getVal(node, 'figure', 'align');
+        this.caption = this.getVal(node, 'figcaption', 'html');
+        // remove '<i>
+        if (this.caption.trim().match(/^<i[^>]*>/i)) {
+            this.caption = this.caption.trim().replace(/^<i[^>]*>/i, '').replace(/^<\/i>$/i, '');
+        }
+        //this.text_align = this.getVal(node, 'figcaption', 'style','text-align');
+        this.width = this.getVal(node, 'figure', 'style', 'max-width');
+        //this.margin = this.getVal(node, 'figure', 'style', 'margin');
+        
+    },
+    removeNode : function()
+    {
+        return this.node;
+    }
+    
+  
+   
+     
+    
+    
+    
+    
+})
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTable = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+    if (!cfg.node) {
+        this.rows = [];
+        for(var r = 0; r < this.no_row; r++) {
+            this.rows[r] = [];
+            for(var c = 0; c < this.no_col; c++) {
+                this.rows[r][c] = this.emptyCell();
+            }
+        }
+    }
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTable, Roo.htmleditor.Block, {
+    rows : false,
+    no_col : 1,
+    no_row : 1,
+    
+    
+    width: '100%',
+    
+    // used by context menu
+    friendly_name : 'Table',
+    deleteTitle : 'Delete Table',
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var block = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'TextItem',
+                text : "Width: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'width',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = block();
+                        b.width = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['100%'],
+                        ['auto']
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            // -------- Cols
+            
+            {
+                xtype : 'TextItem',
+                text : "Columns: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().addColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'TextItem',
+                text : "Rows: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+         
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        block().removeRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        block().addRow();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            // -------- ROWS
+            {
+                xtype : 'Button',
+                text: 'Reset Column Widths',
+                listeners : {
+                    
+                    click : function (_self, e)
+                    {
+                        block().resetWidths();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            } 
+            
+            
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'table',
+            contenteditable : 'false', // this stops cell selection from picking the table.
+            'data-block' : 'Table',
+            style : {
+                width:  this.width,
+                border : 'solid 1px #000', // ??? hard coded?
+                'border-collapse' : 'collapse' 
+            },
+            cn : [
+                { tag : 'tbody' , cn : [] }
+            ]
+        };
+        
+        // do we have a head = not really 
+        var ncols = 0;
+        Roo.each(this.rows, function( row ) {
+            var tr = {
+                tag: 'tr',
+                style : {
+                    margin: '6px',
+                    border : 'solid 1px #000',
+                    textAlign : 'left' 
+                },
+                cn : [ ]
+            };
+            
+            ret.cn[0].cn.push(tr);
+            // does the row have any properties? ?? height?
+            var nc = 0;
+            Roo.each(row, function( cell ) {
+                
+                var td = {
+                    tag : 'td',
+                    contenteditable :  'true',
+                    'data-block' : 'Td',
+                    html : cell.html,
+                    style : cell.style
+                };
+                if (cell.colspan > 1) {
+                    td.colspan = cell.colspan ;
+                    nc += cell.colspan;
+                } else {
+                    nc++;
+                }
+                if (cell.rowspan > 1) {
+                    td.rowspan = cell.rowspan ;
+                }
+                
+                
+                // widths ?
+                tr.cn.push(td);
+                    
+                
+            }, this);
+            ncols = Math.max(nc, ncols);
+            
+            
+        }, this);
+        // add the header row..
+        
+        ncols++;
+         
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = this.getVal(node, true, 'style', 'width') || '100%';
+        
+        this.rows = [];
+        this.no_row = 0;
+        var trs = Array.from(node.rows);
+        trs.forEach(function(tr) {
+            var row =  [];
+            this.rows.push(row);
+            
+            this.no_row++;
+            var no_column = 0;
+            Array.from(tr.cells).forEach(function(td) {
+                
+                var add = {
+                    colspan : td.hasAttribute('colspan') ? td.getAttribute('colspan')*1 : 1,
+                    rowspan : td.hasAttribute('rowspan') ? td.getAttribute('rowspan')*1 : 1,
+                    style : td.hasAttribute('style') ? td.getAttribute('style') : '',
+                    html : td.innerHTML
+                };
+                no_column += add.colspan;
+                     
+                
+                row.push(add);
+                
+                
+            },this);
+            this.no_col = Math.max(this.no_col, no_column);
+            
+            
+        },this);
+        
+        
+    },
+    normalizeRows: function()
+    {
+        var ret= [];
+        var rid = -1;
+        this.rows.forEach(function(row) {
+            rid++;
+            ret[rid] = [];
+            row = this.normalizeRow(row);
+            var cid = 0;
+            row.forEach(function(c) {
+                while (typeof(ret[rid][cid]) != 'undefined') {
+                    cid++;
+                }
+                if (typeof(ret[rid]) == 'undefined') {
+                    ret[rid] = [];
+                }
+                ret[rid][cid] = c;
+                c.row = rid;
+                c.col = cid;
+                if (c.rowspan < 2) {
+                    return;
+                }
+                
+                for(var i = 1 ;i < c.rowspan; i++) {
+                    if (typeof(ret[rid+i]) == 'undefined') {
+                        ret[rid+i] = [];
+                    }
+                    ret[rid+i][cid] = c;
+                }
+            });
+        }, this);
+        return ret;
+    
+    },
+    
+    normalizeRow: function(row)
+    {
+        var ret= [];
+        row.forEach(function(c) {
+            if (c.colspan < 2) {
+                ret.push(c);
+                return;
+            }
+            for(var i =0 ;i < c.colspan; i++) {
+                ret.push(c);
+            }
+        });
+        return ret;
+    
+    },
+    
+    deleteColumn : function(sel)
+    {
+        if (!sel || sel.type != 'col') {
+            return;
+        }
+        if (this.no_col < 2) {
+            return;
+        }
+        
+        this.rows.forEach(function(row) {
+            var cols = this.normalizeRow(row);
+            var col = cols[sel.col];
+            if (col.colspan > 1) {
+                col.colspan --;
+            } else {
+                row.remove(col);
+            }
+            
+        }, this);
+        this.no_col--;
+        
+    },
+    removeColumn : function()
+    {
+        this.deleteColumn({
+            type: 'col',
+            col : this.no_col-1
+        });
+        this.updateElement();
+    },
+    
+     
+    addColumn : function()
+    {
+        
+        this.rows.forEach(function(row) {
+            row.push(this.emptyCell());
+           
+        }, this);
+        this.updateElement();
+    },
+    
+    deleteRow : function(sel)
+    {
+        if (!sel || sel.type != 'row') {
+            return;
+        }
+        
+        if (this.no_row < 2) {
+            return;
+        }
+        
+        var rows = this.normalizeRows();
+        
+        
+        rows[sel.row].forEach(function(col) {
+            if (col.rowspan > 1) {
+                col.rowspan--;
+            } else {
+                col.remove = 1; // flage it as removed.
+            }
+            
+        }, this);
+        var newrows = [];
+        this.rows.forEach(function(row) {
+            newrow = [];
+            row.forEach(function(c) {
+                if (typeof(c.remove) == 'undefined') {
+                    newrow.push(c);
+                }
+                
+            });
+            if (newrow.length > 0) {
+                newrows.push(row);
+            }
+        });
+        this.rows =  newrows;
+        
+        
+        
+        this.no_row--;
+        this.updateElement();
+        
+    },
+    removeRow : function()
+    {
+        this.deleteRow({
+            type: 'row',
+            row : this.no_row-1
+        });
+        
+    },
+    
+     
+    addRow : function()
+    {
+        
+        var row = [];
+        for (var i = 0; i < this.no_col; i++ ) {
+            
+            row.push(this.emptyCell());
+           
+        }
+        this.rows.push(row);
+        this.updateElement();
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return (new Roo.htmleditor.BlockTd({})).toObject();
+        
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node;
+    },
+    
+    
+    
+    resetWidths : function()
+    {
+        Array.from(this.node.getElementsByTagName('td')).forEach(function(n) {
+            var nn = Roo.htmleditor.Block.factory(n);
+            nn.width = '';
+            nn.updateElement(n);
+        });
+    }
+    
+    
+    
+    
+})
+
+/**
+ *
+ * editing a TD?
+ *
+ * since selections really work on the table cell, then editing really should work from there
+ *
+ * The original plan was to support merging etc... - but that may not be needed yet..
+ *
+ * So this simple version will support:
+ *   add/remove cols
+ *   adjust the width +/-
+ *   reset the width...
+ *   
+ *
+ */
+
+
+
+/**
+ * @class Roo.htmleditor.BlockTable
+ * Block that manages a table
+ * 
+ * @constructor
+ * Create a new Filter.
+ * @param {Object} config Configuration options
+ */
+
+Roo.htmleditor.BlockTd = function(cfg)
+{
+    if (cfg.node) {
+        this.readElement(cfg.node);
+        this.updateElement(cfg.node);
+    }
+    Roo.apply(this, cfg);
+     
+    
+    
+}
+Roo.extend(Roo.htmleditor.BlockTd, Roo.htmleditor.Block, {
+    node : false,
+    
+    width: '',
+    textAlign : 'left',
+    valign : 'top',
+    
+    colspan : 1,
+    rowspan : 1,
+    
+    
+    // used by context menu
+    friendly_name : 'Table Cell',
+    deleteTitle : false, // use our customer delete
+    
+    // context menu is drawn once..
+    
+    contextMenu : function(toolbar)
+    {
+        
+        var cell = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode);
+        };
+        
+        var table = function() {
+            return Roo.htmleditor.Block.factory(toolbar.tb.selectedNode.closest('table'));
+        };
+        
+        var lr = false;
+        var saveSel = function()
+        {
+            lr = toolbar.editorcore.getSelection().getRangeAt(0);
+        }
+        var restoreSel = function()
+        {
+            if (lr) {
+                (function() {
+                    toolbar.editorcore.focus();
+                    var cr = toolbar.editorcore.getSelection();
+                    cr.removeAllRanges();
+                    cr.addRange(lr);
+                    toolbar.editorcore.onEditorEvent();
+                }).defer(10, this);
+                
+                
+            }
+        }
+        
+        var rooui =  typeof(Roo.bootstrap) == 'undefined' ? Roo : Roo.bootstrap;
+        
+        var syncValue = toolbar.editorcore.syncValue;
+        
+        var fields = {};
+        
+        return [
+            {
+                xtype : 'Button',
+                text : 'Edit Table',
+                listeners : {
+                    click : function() {
+                        var t = toolbar.tb.selectedNode.closest('table');
+                        toolbar.editorcore.selectNode(t);
+                        toolbar.editorcore.onEditorEvent();                        
+                    }
+                }
+                
+            },
+              
+           
+             
+            {
+                xtype : 'TextItem',
+                text : "Column Width: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            {
+                xtype : 'Button',
+                text: '-',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().shrinkColumn();
+                        syncValue();
+                         toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Button',
+                text: '+',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Vertical Align: ",
+                xns : rooui.Toolbar  //Boostrap?
+            },
+            {
+                xtype : 'ComboBox',
+                allowBlank : false,
+                displayField : 'val',
+                editable : true,
+                listWidth : 100,
+                triggerAction : 'all',
+                typeAhead : true,
+                valueField : 'val',
+                width : 100,
+                name : 'valign',
+                listeners : {
+                    select : function (combo, r, index)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        var b = cell();
+                        b.valign = r.get('val');
+                        b.updateElement();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.form,
+                store : {
+                    xtype : 'SimpleStore',
+                    data : [
+                        ['top'],
+                        ['middle'],
+                        ['bottom'] // there are afew more... 
+                    ],
+                    fields : [ 'val'],
+                    xns : Roo.data
+                }
+            },
+            
+            {
+                xtype : 'TextItem',
+                text : "Merge Cells: ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            
+            {
+                xtype : 'Button',
+                text: 'Right',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeRight();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+             
+            {
+                xtype : 'Button',
+                text: 'Below',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().mergeBelow();
+                        //block().growColumn();
+                        syncValue();
+                        toolbar.editorcore.onEditorEvent();
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'TextItem',
+                text : "| ",
+                 xns : rooui.Toolbar 
+               
+            },
+            
+            {
+                xtype : 'Button',
+                text: 'Split',
+                listeners : {
+                    click : function (_self, e)
+                    {
+                        //toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        cell().split();
+                        syncValue();
+                        toolbar.editorcore.selectNode(toolbar.tb.selectedNode);
+                        toolbar.editorcore.onEditorEvent();
+                                             
+                    }
+                },
+                xns : rooui.Toolbar
+            },
+            {
+                xtype : 'Fill',
+                xns : rooui.Toolbar 
+               
+            },
+        
+          
+            {
+                xtype : 'Button',
+                text: 'Delete',
+                 
+                xns : rooui.Toolbar,
+                menu : {
+                    xtype : 'Menu',
+                    xns : rooui.menu,
+                    items : [
+                        {
+                            xtype : 'Item',
+                            html: 'Column',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    
+                                    cell().deleteColumn();
+                                    syncValue();
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Row',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    cell().deleteRow();
+                                    syncValue();
+                                    
+                                    toolbar.editorcore.selectNode(t.node);
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        },
+                       {
+                            xtype : 'Separator',
+                            xns : rooui.menu
+                        },
+                        {
+                            xtype : 'Item',
+                            html: 'Table',
+                            listeners : {
+                                click : function (_self, e)
+                                {
+                                    var t = table();
+                                    var nn = t.node.nextSibling || t.node.previousSibling;
+                                    t.node.parentNode.removeChild(t.node);
+                                    if (nn) { 
+                                        toolbar.editorcore.selectNode(nn, true);
+                                    }
+                                    toolbar.editorcore.onEditorEvent();   
+                                                         
+                                }
+                            },
+                            xns : rooui.menu
+                        }
+                    ]
+                }
+            }
+            
+            // align... << fixme
+            
+        ];
+        
+    },
+    
+    
+  /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+ /**
+     * create a DomHelper friendly object - for use with
+     * Roo.DomHelper.markup / overwrite / etc..
+     * ?? should it be called with option to hide all editing features?
+     */
+    toObject : function()
+    {
+        
+        var ret = {
+            tag : 'td',
+            contenteditable : 'true', // this stops cell selection from picking the table.
+            'data-block' : 'Td',
+            valign : this.valign,
+            style : {  
+                'text-align' :  this.textAlign,
+                border : 'solid 1px rgb(0, 0, 0)', // ??? hard coded?
+                'border-collapse' : 'collapse',
+                padding : '6px', // 8 for desktop / 4 for mobile
+                'vertical-align': this.valign
+            },
+            html : this.html
+        };
+        if (this.width != '') {
+            ret.width = this.width;
+            ret.style.width = this.width;
+        }
+        
+        
+        if (this.colspan > 1) {
+            ret.colspan = this.colspan ;
+        } 
+        if (this.rowspan > 1) {
+            ret.rowspan = this.rowspan ;
+        }
+        
+           
+        
+        return ret;
+         
+    },
+    
+    readElement : function(node)
+    {
+        node  = node ? node : this.node ;
+        this.width = node.style.width;
+        this.colspan = Math.max(1,1*node.getAttribute('colspan'));
+        this.rowspan = Math.max(1,1*node.getAttribute('rowspan'));
+        this.html = node.innerHTML;
+        
+        
+    },
+     
+    // the default cell object... at present...
+    emptyCell : function() {
+        return {
+            colspan :  1,
+            rowspan :  1,
+            textAlign : 'left',
+            html : "&nbsp;" // is this going to be editable now?
+        };
+     
+    },
+    
+    removeNode : function()
+    {
+        return this.node.closest('table');
+         
+    },
+    
+    cellData : false,
+    
+    colWidths : false,
+    
+    toTableArray  : function()
+    {
+        var ret = [];
+        var tab = this.node.closest('tr').closest('table');
+        Array.from(tab.rows).forEach(function(r, ri){
+            ret[ri] = [];
+        });
+        var rn = 0;
+        this.colWidths = [];
+        var all_auto = true;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            var cn = 0;
+            Array.from(r.cells).forEach(function(ce, ci){
+                var c =  {
+                    cell : ce,
+                    row : rn,
+                    col: cn,
+                    colspan : ce.colSpan,
+                    rowspan : ce.rowSpan
+                };
+                if (ce.isEqualNode(this.node)) {
+                    this.cellData = c;
+                }
+                // if we have been filled up by a row?
+                if (typeof(ret[rn][cn]) != 'undefined') {
+                    while(typeof(ret[rn][cn]) != 'undefined') {
+                        cn++;
+                    }
+                    c.col = cn;
+                }
+                
+                if (typeof(this.colWidths[cn]) == 'undefined') {
+                    this.colWidths[cn] =   ce.style.width;
+                    if (this.colWidths[cn] != '') {
+                        all_auto = false;
+                    }
+                }
+                
+                
+                if (c.colspan < 2 && c.rowspan < 2 ) {
+                    ret[rn][cn] = c;
+                    cn++;
+                    return;
+                }
+                for(var j = 0; j < c.rowspan; j++) {
+                    if (typeof(ret[rn+j]) == 'undefined') {
+                        continue; // we have a problem..
+                    }
+                    ret[rn+j][cn] = c;
+                    for(var i = 0; i < c.colspan; i++) {
+                        ret[rn+j][cn+i] = c;
+                    }
+                }
+                
+                cn += c.colspan;
+            }, this);
+            rn++;
+        }, this);
+        
+        // initalize widths.?
+        // either all widths or no widths..
+        if (all_auto) {
+            this.colWidths[0] = false; // no widths flag.
+        }
+        
+        
+        return ret;
+        
+    },
+    
+    
+    
+    
+    mergeRight: function()
+    {
+         
+        // get the contents of the next cell along..
+        var tr = this.node.closest('tr');
+        var i = Array.prototype.indexOf.call(tr.childNodes, this.node);
+        if (i >= tr.childNodes.length - 1) {
+            return; // no cells on right to merge with.
+        }
+        var table = this.toTableArray();
+        
+        if (typeof(table[this.cellData.row][this.cellData.col+this.cellData.colspan]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row][this.cellData.col+this.cellData.colspan];
+        // right cell - must be same rowspan and on the same row.
+        if (rc.rowspan != this.cellData.rowspan || rc.row != this.cellData.row) {
+            return; // right hand side is not same rowspan.
+        }
+        
+        
+        
+        this.node.innerHTML += ' ' + rc.cell.innerHTML;
+        tr.removeChild(rc.cell);
+        this.colspan += rc.colspan;
+        this.node.setAttribute('colspan', this.colspan);
+
+    },
+    
+    
+    mergeBelow : function()
+    {
+        var table = this.toTableArray();
+        if (typeof(table[this.cellData.row+this.cellData.rowspan]) == 'undefined') {
+            return; // no row below
+        }
+        if (typeof(table[this.cellData.row+this.cellData.rowspan][this.cellData.col]) == 'undefined') {
+            return; // nothing right?
+        }
+        var rc = table[this.cellData.row+this.cellData.rowspan][this.cellData.col];
+        
+        if (rc.colspan != this.cellData.colspan || rc.col != this.cellData.col) {
+            return; // right hand side is not same rowspan.
+        }
+        this.node.innerHTML =  this.node.innerHTML + rc.cell.innerHTML ;
+        rc.cell.parentNode.removeChild(rc.cell);
+        this.rowspan += rc.rowspan;
+        this.node.setAttribute('rowspan', this.rowspan);
+    },
+    
+    split: function()
+    {
+        if (this.node.rowSpan < 2 && this.node.colSpan < 2) {
+            return;
+        }
+        var table = this.toTableArray();
+        var cd = this.cellData;
+        this.rowspan = 1;
+        this.colspan = 1;
+        
+        for(var r = cd.row; r < cd.row + cd.rowspan; r++) {
+            
+            
+            
+            for(var c = cd.col; c < cd.col + cd.colspan; c++) {
+                if (r == cd.row && c == cd.col) {
+                    this.node.removeAttribute('rowspan');
+                    this.node.removeAttribute('colspan');
+                    continue;
+                }
+                 
+                var ntd = this.node.cloneNode(); // which col/row should be 0..
+                ntd.removeAttribute('id'); //
+                //ntd.style.width  = '';
+                ntd.innerHTML = '';
+                table[r][c] = { cell : ntd, col : c, row: r , colspan : 1 , rowspan : 1   };
+            }
+            
+        }
+        this.redrawAllCells(table);
+        
+         
+        
+    },
+    
+    
+    
+    redrawAllCells: function(table)
+    {
+        
+         
+        var tab = this.node.closest('tr').closest('table');
+        var ctr = tab.rows[0].parentNode;
+        Array.from(tab.rows).forEach(function(r, ri){
+            
+            Array.from(r.cells).forEach(function(ce, ci){
+                ce.parentNode.removeChild(ce);
+            });
+            r.parentNode.removeChild(r);
+        });
+        for(var r = 0 ; r < table.length; r++) {
+            var re = tab.rows[r];
+            
+            var re = tab.ownerDocument.createElement('tr');
+            ctr.appendChild(re);
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                re.appendChild(table[r][c].cell);
+                 
+                table[r][c].cell = false;
+            }
+        }
+        
+    },
+    updateWidths : function(table)
+    {
+        for(var r = 0 ; r < table.length; r++) {
+           
+            for(var c = 0 ; c < table[r].length; c++) {
+                if (table[r][c].cell === false) {
+                    continue;
+                }
+                
+                if (this.colWidths[0] != false && table[r][c].colspan < 2) {
+                    var el = Roo.htmleditor.Block.factory(table[r][c].cell);
+                    el.width = Math.floor(this.colWidths[c])  +'%';
+                    el.updateElement(el.node);
+                }
+                table[r][c].cell = false; // done
+            }
+        }
+    },
+    normalizeWidths : function(table)
+    {
+    
+        if (this.colWidths[0] === false) {
+            var nw = 100.0 / this.colWidths.length;
+            this.colWidths.forEach(function(w,i) {
+                this.colWidths[i] = nw;
+            },this);
+            return;
+        }
+    
+        var t = 0, missing = [];
+        
+        this.colWidths.forEach(function(w,i) {
+            //if you mix % and
+            this.colWidths[i] = this.colWidths[i] == '' ? 0 : (this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+            var add =  this.colWidths[i];
+            if (add > 0) {
+                t+=add;
+                return;
+            }
+            missing.push(i);
+            
+            
+        },this);
+        var nc = this.colWidths.length;
+        if (missing.length) {
+            var mult = (nc - missing.length) / (1.0 * nc);
+            var t = mult * t;
+            var ew = (100 -t) / (1.0 * missing.length);
+            this.colWidths.forEach(function(w,i) {
+                if (w > 0) {
+                    this.colWidths[i] = w * mult;
+                    return;
+                }
+                
+                this.colWidths[i] = ew;
+            }, this);
+            // have to make up numbers..
+             
+        }
+        // now we should have all the widths..
+        
+    
+    },
+    
+    shrinkColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 0.8;
+        if (nw < 5) {
+            return;
+        }
+        var otherAdd = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                 this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] += otherAdd
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    growColumn : function()
+    {
+        var table = this.toTableArray();
+        this.normalizeWidths(table);
+        var col = this.cellData.col;
+        var nw = this.colWidths[col] * 1.2;
+        if (nw > 90) {
+            return;
+        }
+        var otherSub = (this.colWidths[col]  * 0.2) / (this.colWidths.length -1);
+        this.colWidths.forEach(function(w,i) {
+            if (i == col) {
+                this.colWidths[i] = nw;
+                return;
+            }
+            this.colWidths[i] -= otherSub
+        }, this);
+        this.updateWidths(table);
+         
+    },
+    deleteRow : function()
+    {
+        // delete this rows 'tr'
+        // if any of the cells in this row have a rowspan > 1 && row!= this row..
+        // then reduce the rowspan.
+        var table = this.toTableArray();
+        // this.cellData.row;
+        for (var i =0;i< table[this.cellData.row].length ; i++) {
+            var c = table[this.cellData.row][i];
+            if (c.row != this.cellData.row) {
+                
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+                continue;
+            }
+            if (c.rowspan > 1) {
+                c.rowspan--;
+                c.cell.setAttribute('rowspan', c.rowspan);
+            }
+        }
+        table.splice(this.cellData.row,1);
+        this.redrawAllCells(table);
+        
+    },
+    deleteColumn : function()
+    {
+        var table = this.toTableArray();
+        
+        for (var i =0;i< table.length ; i++) {
+            var c = table[i][this.cellData.col];
+            if (c.col != this.cellData.col) {
+                table[i][this.cellData.col].colspan--;
+            } else if (c.colspan > 1) {
+                c.colspan--;
+                c.cell.setAttribute('colspan', c.colspan);
+            }
+            table[i].splice(this.cellData.col,1);
+        }
+        
+        this.redrawAllCells(table);
+    }
+    
+    
+    
+    
+})
+
+//<script type="text/javascript">
+
+/*
+ * Based  Ext JS Library 1.1.1
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ * LGPL
+ *
+ */
+/**
+ * @class Roo.HtmlEditorCore
+ * @extends Roo.Component
+ * Provides a the editing component for the HTML editors in Roo. (bootstrap and Roo.form)
+ *
+ * any element that has display set to 'none' can cause problems in Safari and Firefox.<br/><br/>
+ */
+
+Roo.HtmlEditorCore = function(config){
+    
+    
+    Roo.HtmlEditorCore.superclass.constructor.call(this, config);
+    
+    
+    this.addEvents({
+        /**
+         * @event initialize
+         * Fires when the editor is fully initialized (including the iframe)
+         * @param {Roo.HtmlEditorCore} this
+         */
+        initialize: true,
+        /**
+         * @event activate
+         * Fires when the editor is first receives the focus. Any insertion must wait
+         * until after this event.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        activate: true,
+         /**
+         * @event beforesync
+         * Fires before the textarea is updated with content from the editor iframe. Return false
+         * to cancel the sync.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforesync: true,
+         /**
+         * @event beforepush
+         * Fires before the iframe editor is updated with content from the textarea. Return false
+         * to cancel the push.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        beforepush: true,
+         /**
+         * @event sync
+         * Fires when the textarea is updated with content from the editor iframe.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        sync: true,
+         /**
+         * @event push
+         * Fires when the iframe editor is updated with content from the textarea.
+         * @param {Roo.HtmlEditorCore} this
+         * @param {String} html
+         */
+        push: true,
+        
+        /**
+         * @event editorevent
+         * Fires when on any editor (mouse up/down cursor movement etc.) - used for toolbar hooks.
+         * @param {Roo.HtmlEditorCore} this
+         */
+        editorevent: true 
+         
+        
+    });
+    
+    // at this point this.owner is set, so we can start working out the whitelisted / blacklisted elements
+    
+    // defaults : white / black...
+    this.applyBlacklists();
+    
+    
+    
+};
+
+
+Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
+
+
+     /**
+     * @cfg {Roo.form.HtmlEditor|Roo.bootstrap.HtmlEditor} the owner field 
+     */
+    
+    owner : false,
+    
+     /**
+     * @cfg {String} resizable  's' or 'se' or 'e' - wrapps the element in a
+     *                        Roo.resizable.
+     */
+    resizable : false,
+     /**
+     * @cfg {Number} height (in pixels)
+     */   
+    height: 300,
+   /**
+     * @cfg {Number} width (in pixels)
+     */   
+    width: 500,
+     /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
+    /**
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * 
+     */
+    stylesheets: false,
+     /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
+    
+    /**
+     * @cfg {boolean} allowComments - default false - allow comments in HTML source
+     *          - by default they are stripped - if you are editing email you may need this.
+     */
+    allowComments: false,
+    // id of frame..
+    frameId: false,
+    
+    // private properties
+    validationEvent : false,
+    deferHeight: true,
+    initialized : false,
+    activated : false,
+    sourceEditMode : false,
+    onFocus : Roo.emptyFn,
+    iframePad:3,
+    hideMode:'offsets',
+    
+    clearUp: true,
+    
+    // blacklist + whitelisted elements..
+    black: false,
+    white: false,
+     
+    bodyCls : '',
+
+    
+    undoManager : false,
+    /**
+     * Protected method that will not generally be called directly. It
+     * is called when the editor initializes the iframe with HTML contents. Override this method if you
+     * want to change the initialization markup of the iframe (e.g. to add stylesheets).
+     */
+    getDocMarkup : function(){
+        // body styles..
+        var st = '';
+        
+        // inherit styels from page...?? 
+        if (this.stylesheets === false) {
+            
+            Roo.get(document.head).select('style').each(function(node) {
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+            Roo.get(document.head).select('link').each(function(node) { 
+                st += node.dom.outerHTML || new XMLSerializer().serializeToString(node.dom);
+            });
+            
+        } else if (!this.stylesheets.length) {
+                // simple..
+                st = '<style type="text/css">' +
+                    'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+                   '</style>';
+        } else {
+            for (var i in this.stylesheets) {
+                if (typeof(this.stylesheets[i]) != 'string') {
+                    continue;
+                }
+                st += '<link rel="stylesheet" href="' + this.stylesheets[i] +'" type="text/css">';
+            }
+            
+        }
+        
+        st +=  '<style type="text/css">' +
+            'IMG { cursor: pointer } ' +
+        '</style>';
+        
+        st += '<meta name="google" content="notranslate">';
+        
+        var cls = 'notranslate roo-htmleditor-body';
+        
+        if(this.bodyCls.length){
+            cls += ' ' + this.bodyCls;
+        }
+        
+        return '<html  class="notranslate" translate="no"><head>' + st  +
+            //<style type="text/css">' +
+            //'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' +
+            //'</style>' +
+            ' </head><body contenteditable="true" data-enable-grammerly="true" class="' +  cls + '"></body></html>';
+    },
+
+    // private
+    onRender : function(ct, position)
+    {
+        var _t = this;
+        //Roo.HtmlEditorCore.superclass.onRender.call(this, ct, position);
+        this.el = this.owner.inputEl ? this.owner.inputEl() : this.owner.el;
+        
+        
+        this.el.dom.style.border = '0 none';
+        this.el.dom.setAttribute('tabIndex', -1);
+        this.el.addClass('x-hidden hide');
+        
+        
+        
+        if(Roo.isIE){ // fix IE 1px bogus margin
+            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
+        }
+       
+        
+        this.frameId = Roo.id();
+        
+         
+        
+        var iframe = this.owner.wrap.createChild({
+            tag: 'iframe',
+            cls: 'form-control', // bootstrap..
+            id: this.frameId,
+            name: this.frameId,
+            frameBorder : 'no',
+            'src' : Roo.SSL_SECURE_URL ? Roo.SSL_SECURE_URL  :  "javascript:false"
+        }, this.el
+        );
+        
+        
+        this.iframe = iframe.dom;
+
+        this.assignDocWin();
+        
+        this.doc.designMode = 'on';
+       
+        this.doc.open();
+        this.doc.write(this.getDocMarkup());
+        this.doc.close();
+
+        
+        var task = { // must defer to wait for browser to be ready
+            run : function(){
+                //console.log("run task?" + this.doc.readyState);
+                this.assignDocWin();
+                if(this.doc.body || this.doc.readyState == 'complete'){
+                    try {
+                        this.doc.designMode="on";
+                        
+                    } catch (e) {
+                        return;
+                    }
+                    Roo.TaskMgr.stop(task);
+                    this.initEditor.defer(10, this);
+                }
+            },
+            interval : 10,
+            duration: 10000,
+            scope: this
+        };
+        Roo.TaskMgr.start(task);
+
+    },
+
+    // private
+    onResize : function(w, h)
+    {
+         Roo.log('resize: ' +w + ',' + h );
+        //Roo.HtmlEditorCore.superclass.onResize.apply(this, arguments);
+        if(!this.iframe){
+            return;
+        }
+        if(typeof w == 'number'){
+            
+            this.iframe.style.width = w + 'px';
+        }
+        if(typeof h == 'number'){
+            
+            this.iframe.style.height = h + 'px';
+            if(this.doc){
+                (this.doc.body || this.doc.documentElement).style.height = (h - (this.iframePad*2)) + 'px';
+            }
+        }
+        
+    },
+
+    /**
+     * Toggles the editor between standard and source edit mode.
+     * @param {Boolean} sourceEdit (optional) True for source edit, false for standard
+     */
+    toggleSourceEdit : function(sourceEditMode){
+        
+        this.sourceEditMode = sourceEditMode === true;
+        
+        if(this.sourceEditMode){
+            Roo.get(this.iframe).addClass(['x-hidden','hide', 'd-none']);     //FIXME - what's the BS styles for these
+            
+        }else{
+            Roo.get(this.iframe).removeClass(['x-hidden','hide', 'd-none']);
+            //this.iframe.className = '';
+            this.deferFocus();
+        }
+        //this.setSize(this.owner.wrap.getSize());
+        //this.fireEvent('editmodechange', this, this.sourceEditMode);
+    },
+
+    
+  
+
+    /**
+     * Protected method that will not generally be called directly. If you need/want
+     * custom HTML cleanup, this is the method you should override.
+     * @param {String} html The HTML to be cleaned
+     * return {String} The cleaned HTML
+     */
+    cleanHtml : function(html)
+    {
+        html = String(html);
+        if(html.length > 5){
+            if(Roo.isSafari){ // strip safari nonsense
+                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
+            }
+        }
+        if(html == '&nbsp;'){
+            html = '';
+        }
+        return html;
+    },
+
+    /**
+     * HTML Editor -> Textarea
+     * Protected method that will not generally be called directly. Syncs the contents
+     * of the editor iframe with the textarea.
+     */
+    syncValue : function()
+    {
+        //Roo.log("HtmlEditorCore:syncValue (EDITOR->TEXT)");
+        if(this.initialized){
+            
+            this.undoManager.addEvent();
+
+            
+            var bd = (this.doc.body || this.doc.documentElement);
+           
+            
+            var sel = this.win.getSelection();
+            
+            var div = document.createElement('div');
+            div.innerHTML = bd.innerHTML;
+            var gtx = div.getElementsByClassName('gtx-trans-icon'); // google translate - really annoying and difficult to get rid of.
+            if (gtx.length > 0) {
+                var rm = gtx.item(0).parentNode;
+                rm.parentNode.removeChild(rm);
+            }
+            
+           
+            if (this.enableBlocks) {
+                new Roo.htmleditor.FilterBlock({ node : div });
+            }
+            //?? tidy?
+            var tidy = new Roo.htmleditor.TidySerializer({
+                inner:  true
+            });
+            var html  = tidy.serialize(div);
+            
+            
+            if(Roo.isSafari){
+                var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
+                var m = bs ? bs.match(/text-align:(.*?);/i) : false;
+                if(m && m[1]){
+                    html = '<div style="'+m[0]+'">' + html + '</div>';
+                }
+            }
+            html = this.cleanHtml(html);
+            // fix up the special chars.. normaly like back quotes in word...
+            // however we do not want to do this with chinese..
+            html = html.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, function(match) {
+                
+                var cc = match.charCodeAt();
+
+                // Get the character value, handling surrogate pairs
+                if (match.length == 2) {
+                    // It's a surrogate pair, calculate the Unicode code point
+                    var high = match.charCodeAt(0) - 0xD800;
+                    var low  = match.charCodeAt(1) - 0xDC00;
+                    cc = (high * 0x400) + low + 0x10000;
+                }  else if (
+                    (cc >= 0x4E00 && cc < 0xA000 ) ||
+                    (cc >= 0x3400 && cc < 0x4E00 ) ||
+                    (cc >= 0xf900 && cc < 0xfb00 )
+                ) {
+                        return match;
+                }  
+         
+                // No, use a numeric entity. Here we brazenly (and possibly mistakenly)
+                return "&#" + cc + ";";
+                
+                
+            });
+            
+            
+             
+            if(this.owner.fireEvent('beforesync', this, html) !== false){
+                this.el.dom.value = html;
+                this.owner.fireEvent('sync', this, html);
+            }
+        }
+    },
+
+    /**
+     * TEXTAREA -> EDITABLE
+     * Protected method that will not generally be called directly. Pushes the value of the textarea
+     * into the iframe editor.
+     */
+    pushValue : function()
+    {
+        //Roo.log("HtmlEditorCore:pushValue (TEXT->EDITOR)");
+        if(this.initialized){
+            var v = this.el.dom.value.trim();
+            
+            
+            if(this.owner.fireEvent('beforepush', this, v) !== false){
+                var d = (this.doc.body || this.doc.documentElement);
+                d.innerHTML = v;
+                 
+                this.el.dom.value = d.innerHTML;
+                this.owner.fireEvent('push', this, v);
+            }
+            if (this.autoClean) {
+                new Roo.htmleditor.FilterParagraph({node : this.doc.body}); // paragraphs
+                new Roo.htmleditor.FilterSpan({node : this.doc.body}); // empty spans
+            }
+            if (this.enableBlocks) {
+                Roo.htmleditor.Block.initAll(this.doc.body);
+            }
+            
+            this.updateLanguage();
+            
+            var lc = this.doc.body.lastChild;
+            if (lc && lc.nodeType == 1 && lc.getAttribute("contenteditable") == "false") {
+                // add an extra line at the end.
+                this.doc.body.appendChild(this.doc.createElement('br'));
+            }
+            
+            
+        }
+    },
+
+    // private
+    deferFocus : function(){
+        this.focus.defer(10, this);
+    },
+
+    // doc'ed in Field
+    focus : function(){
+        if(this.win && !this.sourceEditMode){
+            this.win.focus();
+        }else{
+            this.el.focus();
+        }
+    },
+    
+    assignDocWin: function()
+    {
+        var iframe = this.iframe;
+        
+         if(Roo.isIE){
+            this.doc = iframe.contentWindow.document;
+            this.win = iframe.contentWindow;
+        } else {
+//            if (!Roo.get(this.frameId)) {
+//                return;
+//            }
+//            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
+//            this.win = Roo.get(this.frameId).dom.contentWindow;
+            
+            if (!Roo.get(this.frameId) && !iframe.contentDocument) {
+                return;
+            }
+            
+            this.doc = (iframe.contentDocument || Roo.get(this.frameId).dom.document);
+            this.win = (iframe.contentWindow || Roo.get(this.frameId).dom.contentWindow);
+        }
+    },
+    
+    // private
+    initEditor : function(){
+        //console.log("INIT EDITOR");
+        this.assignDocWin();
+        
         
         
         this.doc.designMode="on";
         
         
         this.doc.designMode="on";
@@ -20996,28 +25491,136 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
         //var ss = this.el.getStyles( 'background-image', 'background-repeat');
         //ss['background-attachment'] = 'fixed'; // w3c
         dbody.bgProperties = 'fixed'; // ie
+        dbody.setAttribute("translate", "no");
+        
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
         //Roo.DomHelper.applyStyles(dbody, ss);
         Roo.EventManager.on(this.doc, {
-            //'mousedown': this.onEditorEvent,
+             
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
             'mouseup': this.onEditorEvent,
             'dblclick': this.onEditorEvent,
             'click': this.onEditorEvent,
             'keyup': this.onEditorEvent,
+            
             buffer:100,
             scope: this
         });
             buffer:100,
             scope: this
         });
+        Roo.EventManager.on(this.doc, {
+            'paste': this.onPasteEvent,
+            scope : this
+        });
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
         if(Roo.isGecko){
             Roo.EventManager.on(this.doc, 'keypress', this.mozKeyPress, this);
         }
+        //??? needed???
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
         if(Roo.isIE || Roo.isSafari || Roo.isOpera){
             Roo.EventManager.on(this.doc, 'keydown', this.fixKeys, this);
         }
         this.initialized = true;
 
+        
+        // initialize special key events - enter
+        new Roo.htmleditor.KeyEnter({core : this});
+        
+         
+        
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
         this.owner.fireEvent('initialize', this);
         this.pushValue();
     },
-
+    // this is to prevent a href clicks resulting in a redirect?
+   
+    onPasteEvent : function(e,v)
+    {
+        // I think we better assume paste is going to be a dirty load of rubish from word..
+        
+        // even pasting into a 'email version' of this widget will have to clean up that mess.
+        var cd = (e.browserEvent.clipboardData || window.clipboardData);
+        
+        // check what type of paste - if it's an image, then handle it differently.
+        if (cd.files.length > 0) {
+            // pasting images?
+            var urlAPI = (window.createObjectURL && window) || 
+                (window.URL && URL.revokeObjectURL && URL) || 
+                (window.webkitURL && webkitURL);
+    
+            var url = urlAPI.createObjectURL( cd.files[0]);
+            this.insertAtCursor('<img src=" + url + ">');
+            return false;
+        }
+        
+        var html = cd.getData('text/html'); // clipboard event
+        var parser = new Roo.rtf.Parser(cd.getData('text/rtf'));
+        var images = parser.doc ? parser.doc.getElementsByType('pict') : [];
+        Roo.log(images);
+        //Roo.log(imgs);
+        // fixme..
+        images = images.filter(function(g) { return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/); }) // ignore headers
+                       .map(function(g) { return g.toDataURL(); })
+                       .filter(function(g) { return g != 'about:blank'; });
+        
+        
+        html = this.cleanWordChars(html);
+        
+        var d = (new DOMParser().parseFromString(html, 'text/html')).body;
+        
+        
+        var sn = this.getParentElement();
+        // check if d contains a table, and prevent nesting??
+        //Roo.log(d.getElementsByTagName('table'));
+        //Roo.log(sn);
+        //Roo.log(sn.closest('table'));
+        if (d.getElementsByTagName('table').length && sn && sn.closest('table')) {
+            e.preventDefault();
+            this.insertAtCursor("You can not nest tables");
+            //Roo.log("prevent?"); // fixme - 
+            return false;
+        }
+        
+        if (images.length > 0) {
+            Roo.each(d.getElementsByTagName('img'), function(img, i) {
+                img.setAttribute('src', images[i]);
+            });
+        }
+        if (this.autoClean) {
+            new Roo.htmleditor.FilterStyleToTag({ node : d });
+            new Roo.htmleditor.FilterAttributes({
+                node : d,
+                attrib_white : ['href', 'src', 'name', 'align'],
+                attrib_clean : ['href', 'src' ] 
+            });
+            new Roo.htmleditor.FilterBlack({ node : d, tag : this.black});
+            // should be fonts..
+            new Roo.htmleditor.FilterKeepChildren({node : d, tag : [ 'FONT', 'O:P' ]} );
+            new Roo.htmleditor.FilterParagraph({ node : d });
+            new Roo.htmleditor.FilterSpan({ node : d });
+            new Roo.htmleditor.FilterLongBr({ node : d });
+        }
+        if (this.enableBlocks) {
+                
+            Array.from(d.getElementsByTagName('img')).forEach(function(img) {
+                if (img.closest('figure')) { // assume!! that it's aready
+                    return;
+                }
+                var fig  = new Roo.htmleditor.BlockFigure({
+                    image_src  : img.src
+                });
+                fig.updateElement(img); // replace it..
+                
+            });
+        }
+        
+        
+        this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));
+        if (this.enableBlocks) {
+            Roo.htmleditor.Block.initAll(this.doc.body);
+        }
+        
+        
+        e.preventDefault();
+        return false;
+        // default behaveiour should be our local cleanup paste? (optional?)
+        // for simple editor - we want to hammer the paste and get rid of everything... - so over-rideable..
+        //this.owner.fireEvent('paste', e, v);
+    },
     // private
     onDestroy : function(){
         
     // private
     onDestroy : function(){
         
@@ -21039,7 +25642,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     onFirstFocus : function(){
         
         this.assignDocWin();
     onFirstFocus : function(){
         
         this.assignDocWin();
-        
+        this.undoManager = new Roo.lib.UndoManager(100,(this.doc.body || this.doc.documentElement));
         
         this.activated = true;
          
         
         this.activated = true;
          
@@ -21084,10 +25687,48 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     onEditorEvent : function(e)
     {
 
     onEditorEvent : function(e)
     {
-        this.owner.fireEvent('editorevent', this, e);
+         
+        
+        if (e && (e.ctrlKey || e.metaKey) && e.keyCode === 90) {
+            return; // we do not handle this.. (undo manager does..)
+        }
+        // in theory this detects if the last element is not a br, then we try and do that.
+        // its so clicking in space at bottom triggers adding a br and moving the cursor.
+        if (e &&
+            e.target.nodeName == 'BODY' &&
+            e.type == "mouseup" &&
+            this.doc.body.lastChild
+           ) {
+            var lc = this.doc.body.lastChild;
+            // gtx-trans is google translate plugin adding crap.
+            while ((lc.nodeType == 3 && lc.nodeValue == '') || lc.id == 'gtx-trans') {
+                lc = lc.previousSibling;
+            }
+            if (lc.nodeType == 1 && lc.nodeName != 'BR') {
+            // if last element is <BR> - then dont do anything.
+            
+                var ns = this.doc.createElement('br');
+                this.doc.body.appendChild(ns);
+                range = this.doc.createRange();
+                range.setStartAfter(ns);
+                range.collapse(true);
+                var sel = this.win.getSelection();
+                sel.removeAllRanges();
+                sel.addRange(range);
+            }
+        }
+        
+        
+        
+        this.fireEditorEvent(e);
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
       //  this.updateToolbar();
         this.syncValue(); //we can not sync so often.. sync cleans, so this breaks stuff
     },
+    
+    fireEditorEvent: function(e)
+    {
+        this.owner.fireEvent('editorevent', this, e);
+    },
 
     insertTag : function(tg)
     {
 
     insertTag : function(tg)
     {
@@ -21109,7 +25750,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             
         }
         this.execCmd("formatblock",   tg);
             
         }
         this.execCmd("formatblock",   tg);
-        
+        this.undoManager.addEvent(); 
     },
     
     insertText : function(txt)
     },
     
     insertText : function(txt)
@@ -21121,6 +25762,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
                //alert(Sender.getAttribute('label'));
                
         range.insertNode(this.doc.createTextNode(txt));
+        this.undoManager.addEvent();
     } ,
     
      
     } ,
     
      
@@ -21131,7 +25773,37 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
      * @param {String} cmd The Midas command
      * @param {String/Boolean} value (optional) The value to pass to the command (defaults to null)
      */
-    relayCmd : function(cmd, value){
+    relayCmd : function(cmd, value)
+    {
+        
+        switch (cmd) {
+            case 'justifyleft':
+            case 'justifyright':
+            case 'justifycenter':
+                // if we are in a cell, then we will adjust the
+                var n = this.getParentElement();
+                var td = n.closest('td');
+                if (td) {
+                    var bl = Roo.htmleditor.Block.factory(td);
+                    bl.textAlign = cmd.replace('justify','');
+                    bl.updateElement();
+                    this.owner.fireEvent('editorevent', this);
+                    return;
+                }
+                this.execCmd('styleWithCSS', true); // 
+                break;
+            case 'bold':
+            case 'italic':
+                // if there is no selection, then we insert, and set the curson inside it..
+                this.execCmd('styleWithCSS', false); 
+                break;
+                
+        
+            default:
+                break;
+        }
+        
+        
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
         this.win.focus();
         this.execCmd(cmd, value);
         this.owner.fireEvent('editorevent', this);
@@ -21164,20 +25836,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         if(!this.activated){
             return;
         }
         if(!this.activated){
             return;
         }
-        /*
-        if(Roo.isIE){
-            this.win.focus();
-            var r = this.doc.selection.createRange();
-            if(r){
-                r.collapse(true);
-                r.pasteHTML(text);
-                this.syncValue();
-                this.deferFocus();
-            
-            }
-            return;
-        }
-        */
+         
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
         if(Roo.isGecko || Roo.isOpera || Roo.isSafari){
             this.win.focus();
             
@@ -21187,19 +25846,31 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
             var win = this.win;
             
             if (win.getSelection && win.getSelection().getRangeAt) {
+                
+                // delete the existing?
+                
+                this.createRange(this.getSelection()).deleteContents();
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
                 range = win.getSelection().getRangeAt(0);
                 node = typeof(text) == 'string' ? range.createContextualFragment(text) : text;
                 range.insertNode(node);
+                range = range.cloneRange();
+                range.collapse(false);
+                 
+                win.getSelection().removeAllRanges();
+                win.getSelection().addRange(range);
+                
+                
+                
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
             } else if (win.document.selection && win.document.selection.createRange) {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 win.document.selection.createRange().pasteHTML(txt);
+            
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
             } else {
                 // no firefox support
                 var txt = typeof(text) == 'string' ? text : text.outerHTML;
                 this.execCmd('InsertHTML', txt);
             } 
-            
             this.syncValue();
             
             this.deferFocus();
             this.syncValue();
             
             this.deferFocus();
@@ -21224,15 +25895,17 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                         cmd = 'underline';
                         break;
                     
                         cmd = 'underline';
                         break;
                     
-                    case 'v':
-                        this.cleanUpPaste.defer(100, this);
-                        return;
+                    //case 'v':
+                      //  this.cleanUpPaste.defer(100, this);
+                      //  return;
                         
                 }
                 if(cmd){
                         
                 }
                 if(cmd){
-                    this.win.focus();
-                    this.execCmd(cmd);
-                    this.deferFocus();
+                    
+                    this.relayCmd(cmd);
+                    //this.win.focus();
+                    //this.execCmd(cmd);
+                    //this.deferFocus();
                     e.preventDefault();
                 }
                 
                     e.preventDefault();
                 }
                 
@@ -21242,6 +25915,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
 
     // private
     fixKeys : function(){ // load time branching for fastest keydown performance
+        
+        
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
         if(Roo.isIE){
             return function(e){
                 var k = e.getKey(), r;
@@ -21255,23 +25930,25 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     }
                     return;
                 }
                     }
                     return;
                 }
-                
+                /// this is handled by Roo.htmleditor.KeyEnter
+                 /*
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
                 if(k == e.ENTER){
                     r = this.doc.selection.createRange();
                     if(r){
                         var target = r.parentElement();
                         if(!target || target.tagName.toLowerCase() != 'li'){
                             e.stopEvent();
-                            r.pasteHTML('<br />');
+                            r.pasteHTML('<br/>');
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
                             r.collapse(false);
                             r.select();
                         }
                     }
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                */
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                //    return;
+                //}
                 
                 
             };
                 
                 
             };
@@ -21284,10 +25961,11 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
                     this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
                     this.deferFocus();
                 }
-                if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+               
+                //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                //    this.cleanUpPaste.defer(100, this);
+                 //   return;
+                //}
                 
             };
         }else if(Roo.isSafari){
                 
             };
         }else if(Roo.isSafari){
@@ -21300,10 +25978,12 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
                     this.deferFocus();
                     return;
                 }
                     this.deferFocus();
                     return;
                 }
-               if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
-                    this.cleanUpPaste.defer(100, this);
-                    return;
-                }
+                 this.mozKeyPress(e);
+                
+               //if (String.fromCharCode(k).toLowerCase() == 'v') { // paste
+                 //   this.cleanUpPaste.defer(100, this);
+                 //   return;
+               // }
                 
              };
         }
                 
              };
         }
@@ -21333,7 +26013,27 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
     getSelection : function() 
     {
         this.assignDocWin();
     getSelection : function() 
     {
         this.assignDocWin();
-        return Roo.isIE ? this.doc.selection : this.win.getSelection();
+        return Roo.lib.Selection.wrap(Roo.isIE ? this.doc.selection : this.win.getSelection(), this.doc);
+    },
+    /**
+     * Select a dom node
+     * @param {DomElement} node the node to select
+     */
+    selectNode : function(node, collapse)
+    {
+        var nodeRange = node.ownerDocument.createRange();
+        try {
+            nodeRange.selectNode(node);
+        } catch (e) {
+            nodeRange.selectNodeContents(node);
+        }
+        if (collapse === true) {
+            nodeRange.collapse(true);
+        }
+        //
+        var s = this.win.getSelection();
+        s.removeAllRanges();
+        s.addRange(nodeRange);
     },
     
     getSelectedNode: function() 
     },
     
     getSelectedNode: function() 
@@ -21342,8 +26042,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         // should we cache this!!!!
         
         
         // should we cache this!!!!
         
-        
-        
+         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
          
         var range = this.createRange(this.getSelection()).cloneRange();
         
@@ -21407,6 +26106,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
         return nodes[0];
     },
         
         return nodes[0];
     },
+    
+    
     createRange: function(sel)
     {
         // this has strange effects when using with 
     createRange: function(sel)
     {
         // this has strange effects when using with 
@@ -21524,26 +26225,21 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         // fully contined.
         return 3;
     },
         // fully contined.
         return 3;
     },
-
-    // private? - in a new class?
-    cleanUpPaste :  function()
-    {
-        // cleans up the whole document..
-        Roo.log('cleanuppaste');
-        
-        this.cleanUpChildren(this.doc.body);
-        var clean = this.cleanWordChars(this.doc.body.innerHTML);
-        if (clean != this.doc.body.innerHTML) {
-            this.doc.body.innerHTML = clean;
-        }
-        
-    },
-    
     cleanWordChars : function(input) {// change the chars to hex code
     cleanWordChars : function(input) {// change the chars to hex code
-        var he = Roo.HtmlEditorCore;
         
         
+       var swapCodes  = [ 
+            [    8211, "&#8211;" ], 
+            [    8212, "&#8212;" ], 
+            [    8216,  "'" ],  
+            [    8217, "'" ],  
+            [    8220, '"' ],  
+            [    8221, '"' ],  
+            [    8226, "*" ],  
+            [    8230, "..." ]
+        ]; 
         var output = input;
         var output = input;
-        Roo.each(he.swapCodes, function(sw) { 
+        Roo.each(swapCodes, function(sw) { 
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
             var swapper = new RegExp("\\u" + sw[0].toString(16), "g"); // hex codes
             
             output = output.replace(swapper, sw[1]);
@@ -21552,487 +26248,60 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         return output;
     },
     
         return output;
     },
     
-    
-    cleanUpChildren : function (n)
-    {
-        if (!n.childNodes.length) {
-            return;
-        }
-        for (var i = n.childNodes.length-1; i > -1 ; i--) {
-           this.cleanUpChild(n.childNodes[i]);
-        }
-    },
-    
+     
     
         
     
     cleanUpChild : function (node)
     {
     
         
     
     cleanUpChild : function (node)
     {
-        var ed = this;
-        //console.log(node);
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            if (!this.allowComments) {
-                node.parentNode.removeChild(node);
-            }
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        var lcname = node.tagName.toLowerCase();
-        // we ignore whitelists... ?? = not really the way to go, but we probably have not got a full
-        // whitelist of tags..
-        
-        if (this.black.indexOf(lcname) > -1 && this.clearUp ) {
-            // remove node.
-            node.parentNode.removeChild(node);
-            return;
-            
-        }
-        
-        var remove_keep_children= Roo.HtmlEditorCore.remove.indexOf(node.tagName.toLowerCase()) > -1;
-        
-        // spans with no attributes - just remove them..
-        if ((!node.attributes || !node.attributes.length) && lcname == 'span') { 
-            remove_keep_children = true;
-        }
-        
-        // remove <a name=....> as rendering on yahoo mailer is borked with this.
-        // this will have to be flaged elsewhere - perhaps ablack=name... on the mailer..
-        
-        //if (node.tagName.toLowerCase() == 'a' && !node.hasAttribute('href')) {
-        //    remove_keep_children = true;
-        //}
-        
-        if (remove_keep_children) {
-            this.cleanUpChildren(node);
-            // inserts everything just before this node...
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-            }
-            node.parentNode.removeChild(node);
-            return;
-        }
-        
-        if (!node.attributes || !node.attributes.length) {
-            
-          
-            
-            
-            this.cleanUpChildren(node);
-            return;
-        }
-        
-        function cleanAttr(n,v)
-        {
-            
-            if (v.match(/^\./) || v.match(/^\//)) {
-                return;
-            }
-            if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/) || v.match(/^ftp:/)) {
-                return;
-            }
-            if (v.match(/^#/)) {
-                return;
-            }
-            if (v.match(/^\{/)) { // allow template editing.
-                return;
-            }
-//            Roo.log("(REMOVE TAG)"+ node.tagName +'.' + n + '=' + v);
-            node.removeAttribute(n);
-            
-        }
-        
-        var cwhite = this.cwhite;
-        var cblack = this.cblack;
-            
-        function cleanStyle(n,v)
-        {
-            if (v.match(/expression/)) { //XSS?? should we even bother..
-                node.removeAttribute(n);
-                return;
-            }
-            
-            var parts = v.split(/;/);
-            var clean = [];
-            
-            Roo.each(parts, function(p) {
-                p = p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                if (!p.length) {
-                    return true;
-                }
-                var l = p.split(':').shift().replace(/\s+/g,'');
-                l = l.replace(/^\s+/g,'').replace(/\s+$/g,'');
-                
-                if ( cwhite.length && cblack.indexOf(l) > -1) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                //Roo.log()
-                // only allow 'c whitelisted system attributes'
-                if ( cwhite.length &&  cwhite.indexOf(l) < 0 && cwhite.indexOf(l.toLowerCase()) < 0 ) {
-//                    Roo.log('(REMOVE CSS)' + node.tagName +'.' + n + ':'+l + '=' + v);
-                    //node.removeAttribute(n);
-                    return true;
-                }
-                
-                
-                 
-                
-                clean.push(p);
-                return true;
-            });
-            if (clean.length) { 
-                node.setAttribute(n, clean.join(';'));
-            } else {
-                node.removeAttribute(n);
-            }
-            
-        }
-        
-        
-        for (var i = node.attributes.length-1; i > -1 ; i--) {
-            var a = node.attributes[i];
-            //console.log(a);
-            
-            if (a.name.toLowerCase().substr(0,2)=='on')  {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase()) > -1) {
-                node.removeAttribute(a.name);
-                continue;
-            }
-            if (Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase()) > -1) {
-                cleanAttr(a.name,a.value); // fixme..
-                continue;
-            }
-            if (a.name == 'style') {
-                cleanStyle(a.name,a.value);
-                continue;
-            }
-            /// clean up MS crap..
-            // tecnically this should be a list of valid class'es..
-            
-            
-            if (a.name == 'class') {
-                if (a.value.match(/^Mso/)) {
-                    node.removeAttribute('class');
-                }
-                
-                if (a.value.match(/^body$/)) {
-                    node.removeAttribute('class');
-                }
-                continue;
-            }
-            
-            // style cleanup!?
-            // class cleanup?
-            
-        }
-        
-        
-        this.cleanUpChildren(node);
         
         
+        new Roo.htmleditor.FilterComment({node : node});
+        new Roo.htmleditor.FilterAttributes({
+                node : node,
+                attrib_black : this.ablack,
+                attrib_clean : this.aclean,
+                style_white : this.cwhite,
+                style_black : this.cblack
+        });
+        new Roo.htmleditor.FilterBlack({ node : node, tag : this.black});
+        new Roo.htmleditor.FilterKeepChildren({node : node, tag : this.tag_remove} );
+         
         
     },
     
     /**
      * Clean up MS wordisms...
         
     },
     
     /**
      * Clean up MS wordisms...
+     * @deprecated - use filter directly
      */
     cleanWord : function(node)
     {
      */
     cleanWord : function(node)
     {
-        if (!node) {
-            this.cleanWord(this.doc.body);
-            return;
-        }
-        
-        if(
-                node.nodeName == 'SPAN' &&
-                !node.hasAttributes() &&
-                node.childNodes.length == 1 &&
-                node.firstChild.nodeName == "#text"  
-        ) {
-            var textNode = node.firstChild;
-            node.removeChild(textNode);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node);
-            }
-            node.parentNode.insertBefore(textNode, node);
-            if (node.getAttribute('lang') != 'zh-CN') {   // do not space pad on chinese characters..
-                node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node);
-            }
-            node.parentNode.removeChild(node);
-        }
-        
-        if (node.nodeName == "#text") {
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        if (node.nodeName == "#comment") {
-            node.parentNode.removeChild(node);
-            // clean up silly Windows -- stuff?
-            return; 
-        }
-        
-        if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) {
-            node.parentNode.removeChild(node);
-            return;
-        }
-        //Roo.log(node.tagName);
-        // remove - but keep children..
-        if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)) {
-            //Roo.log('-- removed');
-            while (node.childNodes.length) {
-                var cn = node.childNodes[0];
-                node.removeChild(cn);
-                node.parentNode.insertBefore(cn, node);
-                // move node to parent - and clean it..
-                this.cleanWord(cn);
-            }
-            node.parentNode.removeChild(node);
-            /// no need to iterate chidlren = it's got none..
-            //this.iterateChildren(node, this.cleanWord);
-            return;
-        }
-        // clean styles
-        if (node.className.length) {
-            
-            var cn = node.className.split(/\W+/);
-            var cna = [];
-            Roo.each(cn, function(cls) {
-                if (cls.match(/Mso[a-zA-Z]+/)) {
-                    return;
-                }
-                cna.push(cls);
-            });
-            node.className = cna.length ? cna.join(' ') : '';
-            if (!cna.length) {
-                node.removeAttribute("class");
-            }
-        }
+        new Roo.htmleditor.FilterWord({ node : node ? node : this.doc.body });
         
         
-        if (node.hasAttribute("lang")) {
-            node.removeAttribute("lang");
-        }
-        
-        if (node.hasAttribute("style")) {
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        this.iterateChildren(node, this.cleanWord);
-        
-        
-        
-    },
-    /**
-     * iterateChildren of a Node, calling fn each time, using this as the scole..
-     * @param {DomNode} node node to iterate children of.
-     * @param {Function} fn method of this class to call on each item.
-     */
-    iterateChildren : function(node, fn)
-    {
-        if (!node.childNodes.length) {
-                return;
-        }
-        for (var i = node.childNodes.length-1; i > -1 ; i--) {
-           fn.call(this, node.childNodes[i])
-        }
     },
     },
-    
+   
     
     /**
     
     /**
-     * cleanTableWidths.
-     *
-     * Quite often pasting from word etc.. results in tables with column and widths.
-     * This does not work well on fluid HTML layouts - like emails. - so this code should hunt an destroy them..
-     *
+
+     * @deprecated - use filters
      */
     cleanTableWidths : function(node)
     {
      */
     cleanTableWidths : function(node)
     {
-         
-         
-        if (!node) {
-            this.cleanTableWidths(this.doc.body);
-            return;
-        }
-        
-        // ignore list...
-        if (node.nodeName == "#text" || node.nodeName == "#comment") {
-            return; 
-        }
-        Roo.log(node.tagName);
-        if (!node.tagName.toLowerCase().match(/^(table|td|tr)$/)) {
-            this.iterateChildren(node, this.cleanTableWidths);
-            return;
-        }
-        if (node.hasAttribute('width')) {
-            node.removeAttribute('width');
-        }
-        
-         
-        if (node.hasAttribute("style")) {
-            // pretty basic...
-            
-            var styles = node.getAttribute("style").split(";");
-            var nstyle = [];
-            Roo.each(styles, function(s) {
-                if (!s.match(/:/)) {
-                    return;
-                }
-                var kv = s.split(":");
-                if (kv[0].match(/^\s*(width|min-width)\s*$/)) {
-                    return;
-                }
-                // what ever is left... we allow.
-                nstyle.push(s);
-            });
-            node.setAttribute("style", nstyle.length ? nstyle.join(';') : '');
-            if (!nstyle.length) {
-                node.removeAttribute('style');
-            }
-        }
-        
-        this.iterateChildren(node, this.cleanTableWidths);
-        
+        new Roo.htmleditor.FilterTableWidth({ node : node ? node : this.doc.body});
         
         
     },
     
     },
     
-    
-    
-    
-    domToHTML : function(currentElement, depth, nopadtext) {
-        
-        depth = depth || 0;
-        nopadtext = nopadtext || false;
-    
-        if (!currentElement) {
-            return this.domToHTML(this.doc.body);
-        }
-        
-        //Roo.log(currentElement);
-        var j;
-        var allText = false;
-        var nodeName = currentElement.nodeName;
-        var tagName = Roo.util.Format.htmlEncode(currentElement.tagName);
-        
-        if  (nodeName == '#text') {
-            
-            return nopadtext ? currentElement.nodeValue : currentElement.nodeValue.trim();
-        }
-        
-        
-        var ret = '';
-        if (nodeName != 'BODY') {
-             
-            var i = 0;
-            // Prints the node tagName, such as <A>, <IMG>, etc
-            if (tagName) {
-                var attr = [];
-                for(i = 0; i < currentElement.attributes.length;i++) {
-                    // quoting?
-                    var aname = currentElement.attributes.item(i).name;
-                    if (!currentElement.attributes.item(i).value.length) {
-                        continue;
-                    }
-                    attr.push(aname + '="' + Roo.util.Format.htmlEncode(currentElement.attributes.item(i).value) + '"' );
-                }
-                
-                ret = "<"+currentElement.tagName+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">";
-            } 
-            else {
-                
-                // eack
-            }
-        } else {
-            tagName = false;
-        }
-        if (['IMG', 'BR', 'HR', 'INPUT'].indexOf(tagName) > -1) {
-            return ret;
-        }
-        if (['PRE', 'TEXTAREA', 'TD', 'A', 'SPAN'].indexOf(tagName) > -1) { // or code?
-            nopadtext = true;
-        }
-        
-        
-        // Traverse the tree
-        i = 0;
-        var currentElementChild = currentElement.childNodes.item(i);
-        var allText = true;
-        var innerHTML  = '';
-        lastnode = '';
-        while (currentElementChild) {
-            // Formatting code (indent the tree so it looks nice on the screen)
-            var nopad = nopadtext;
-            if (lastnode == 'SPAN') {
-                nopad  = true;
-            }
-            // text
-            if  (currentElementChild.nodeName == '#text') {
-                var toadd = Roo.util.Format.htmlEncode(currentElementChild.nodeValue);
-                toadd = nopadtext ? toadd : toadd.trim();
-                if (!nopad && toadd.length > 80) {
-                    innerHTML  += "\n" + (new Array( depth + 1 )).join( "  "  );
-                }
-                innerHTML  += toadd;
-                
-                i++;
-                currentElementChild = currentElement.childNodes.item(i);
-                lastNode = '';
-                continue;
-            }
-            allText = false;
-            
-            innerHTML  += nopad ? '' : "\n" + (new Array( depth + 1 )).join( "  "  );
-                
-            // Recursively traverse the tree structure of the child node
-            innerHTML   += this.domToHTML(currentElementChild, depth+1, nopadtext);
-            lastnode = currentElementChild.nodeName;
-            i++;
-            currentElementChild=currentElement.childNodes.item(i);
-        }
-        
-        ret += innerHTML;
-        
-        if (!allText) {
-                // The remaining code is mostly for formatting the tree
-            ret+= nopadtext ? '' : "\n" + (new Array( depth  )).join( "  "  );
-        }
-        
-        
-        if (tagName) {
-            ret+= "</"+tagName+">";
-        }
-        return ret;
-        
-    },
+     
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
         
     applyBlacklists : function()
     {
         var w = typeof(this.owner.white) != 'undefined' && this.owner.white ? this.owner.white  : [];
         var b = typeof(this.owner.black) != 'undefined' && this.owner.black ? this.owner.black :  [];
         
+        this.aclean = typeof(this.owner.aclean) != 'undefined' && this.owner.aclean ? this.owner.aclean :  Roo.HtmlEditorCore.aclean;
+        this.ablack = typeof(this.owner.ablack) != 'undefined' && this.owner.ablack ? this.owner.ablack :  Roo.HtmlEditorCore.ablack;
+        this.tag_remove = typeof(this.owner.tag_remove) != 'undefined' && this.owner.tag_remove ? this.owner.tag_remove :  Roo.HtmlEditorCore.tag_remove;
+        
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
         this.white = [];
         this.black = [];
         Roo.each(Roo.HtmlEditorCore.white, function(tag) {
@@ -22150,6 +26419,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
         
     },
     
         
     },
     
+    
+    updateLanguage : function()
+    {
+        if (!this.iframe || !this.iframe.contentDocument) {
+            return;
+        }
+        Roo.get(this.iframe.contentDocument.body).attr("lang", this.language);
+    },
+    
+    
     removeStylesheets : function()
     {
         var _this = this;
     removeStylesheets : function()
     {
         var _this = this;
@@ -22214,36 +26493,40 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component,  {
 });
 
 Roo.HtmlEditorCore.white = [
 });
 
 Roo.HtmlEditorCore.white = [
-        'area', 'br', 'img', 'input', 'hr', 'wbr',
+        'AREA', 'BR', 'IMG', 'INPUT', 'HR', 'WBR',
         
         
-       'address', 'blockquote', 'center', 'dd',      'dir',       'div', 
-       'dl',      'dt',         'h1',     'h2',      'h3',        'h4', 
-       'h5',      'h6',         'hr',     'isindex', 'listing',   'marquee', 
-       'menu',    'multicol',   'ol',     'p',       'plaintext', 'pre', 
-       'table',   'ul',         'xmp', 
+       'ADDRESS', 'BLOCKQUOTE', 'CENTER', 'DD',      'DIR',       'DIV', 
+       'DL',      'DT',         'H1',     'H2',      'H3',        'H4', 
+       'H5',      'H6',         'HR',     'ISINDEX', 'LISTING',   'MARQUEE', 
+       'MENU',    'MULTICOL',   'OL',     'P',       'PLAINTEXT', 'PRE', 
+       'TABLE',   'UL',         'XMP', 
        
        
-       'caption', 'col', 'colgroup', 'tbody', 'td', 'tfoot', 'th', 
-      'thead',   'tr', 
+       'CAPTION', 'COL', 'COLGROUP', 'TBODY', 'TD', 'TFOOT', 'TH', 
+      'THEAD',   'TR', 
      
      
-      'dir', 'menu', 'ol', 'ul', 'dl',
+      'DIR', 'MENU', 'OL', 'UL', 'DL',
        
        
-      'embed',  'object'
+      'EMBED',  'OBJECT'
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
 ];
 
 
 Roo.HtmlEditorCore.black = [
     //    'embed',  'object', // enable - backend responsiblity to clean thiese
-        'applet', // 
-        'base',   'basefont', 'bgsound', 'blink',  'body', 
-        'frame',  'frameset', 'head',    'html',   'ilayer', 
-        'iframe', 'layer',  'link',     'meta',    'object',   
-        'script', 'style' ,'title',  'xml' // clean later..
+        'APPLET', // 
+        'BASE',   'BASEFONT', 'BGSOUND', 'BLINK',  'BODY', 
+        'FRAME',  'FRAMESET', 'HEAD',    'HTML',   'ILAYER', 
+        'IFRAME', 'LAYER',  'LINK',     'META',    'OBJECT',   
+        'SCRIPT', 'STYLE' ,'TITLE',  'XML',
+        //'FONT' // CLEAN LATER..
+        'COLGROUP', 'COL'   // messy tables.
+        
+        
 ];
 ];
-Roo.HtmlEditorCore.clean = [
-    'script', 'style', 'title', 'xml'
+Roo.HtmlEditorCore.clean = [ // ?? needed???
+     'SCRIPT', 'STYLE', 'TITLE', 'XML'
 ];
 ];
-Roo.HtmlEditorCore.remove = [
-    'font'
+Roo.HtmlEditorCore.tag_remove = [
+    'FONT', 'TBODY'  
 ];
 // attributes..
 
 ];
 // attributes..
 
@@ -22274,16 +26557,7 @@ Roo.HtmlEditorCore.cblack= [
 ];
 
 
 ];
 
 
-Roo.HtmlEditorCore.swapCodes   =[ 
-    [    8211, "&#8211;" ], 
-    [    8212, "&#8212;" ], 
-    [    8216,  "'" ],  
-    [    8217, "'" ],  
-    [    8220, '"' ],  
-    [    8221, '"' ],  
-    [    8226, "*" ],  
-    [    8230, "..." ]
-]; 
+
 
     //<script type="text/javascript">
 
 
     //<script type="text/javascript">
 
@@ -22346,7 +26620,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
     width: 500,
     
     /**
     width: 500,
     
     /**
-     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets.
+     * @cfg {Array} stylesheets url of stylesheets. set to [] to disable stylesheets - this is usally a good idea  rootURL + '/roojs1/css/undoreset.css',   .
      * 
      */
     stylesheets: false,
      * 
      */
     stylesheets: false,
@@ -22377,7 +26651,27 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
      * @cfg {boolean} allowComments - default false - allow comments in HTML source - by default they are stripped - if you are editing email you may need this.
      */
     allowComments: false,
+    /**
+     * @cfg {boolean} enableBlocks - default true - if the block editor (table and figure should be enabled)
+     */
+    enableBlocks : true,
+    
+    /**
+     * @cfg {boolean} autoClean - default true - loading and saving will remove quite a bit of formating,
+     *         if you are doing an email editor, this probably needs disabling, it's designed
+     */
+    autoClean: true,
+    /**
+     * @cfg {string} bodyCls default '' default classes to add to body of editable area - usually undoreset is a good start..
+     */
+    bodyCls : '',
+    /**
+     * @cfg {String} language default en - language of text (usefull for rtl languages)
+     * 
+     */
+    language: 'en',
     
     
+     
     // id of frame..
     frameId: false,
     
     // id of frame..
     frameId: false,
     
@@ -22482,7 +26776,13 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
             * Fires when press the Sytlesheets button
             * @param {Roo.HtmlEditorCore} this
             */
-            stylesheetsclick: true
+            stylesheetsclick: true,
+            /**
+            * @event paste
+            * Fires when press user pastes into the editor
+            * @param {Roo.HtmlEditorCore} this
+            */
+            paste: true 
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
         });
         this.defaultAutoCreate =  {
             tag: "textarea",
@@ -22513,8 +26813,19 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
          
         
     },
          
         
     },
-
-     
+    /**
+     * get the Context selected node
+     * @returns {DomElement|boolean} selected node if active or false if none
+     * 
+     */
+    getSelectedNode : function()
+    {
+        if (this.toolbars.length < 2 || !this.toolbars[1].tb) {
+            return false;
+        }
+        return this.toolbars[1].tb.selectedNode;
+    
+    },
     // private
     onRender : function(ct, position)
     {
     // private
     onRender : function(ct, position)
     {
@@ -22735,6 +27046,8 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
             this.el.removeClass('x-hidden');
             this.el.dom.removeAttribute('tabIndex');
             this.el.focus();
+            this.el.dom.scrollTop = 0;
+            
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
             
             for (var i = 0; i < this.toolbars.length; i++) {
                 if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){
@@ -22802,7 +27115,17 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
         this.editorcore.pushValue();
     },
 
         this.editorcore.pushValue();
     },
 
+    /**
+     * update the language in the body - really done by core
+     * @param {String} language - eg. en / ar / zh-CN etc..
+     */
+    updateLanguage : function(lang)
+    {
+        this.language = lang;
+        this.editorcore.language = lang;
+        this.editorcore.updateLanguage();
      
      
+    },
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
     // private
     deferFocus : function(){
         this.focus.defer(10, this);
@@ -22907,8 +27230,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      */
 });
  
      */
 });
  
-    // <script type="text/javascript">
-/*
+    /*
  * Based on
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
  * Based on
  * Ext JS Library 1.1.1
  * Copyright(c) 2006-2007, Ext JS, LLC.
@@ -22917,9 +27239,9 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
  */
 
 /**
  */
 
 /**
- * @class Roo.form.HtmlEditorToolbar1
+ * @class Roo.form.HtmlEditor.ToolbarStandard
  * Basic Toolbar
  * Basic Toolbar
- * 
+
  * Usage:
  *
  new Roo.form.HtmlEditor({
  * Usage:
  *
  new Roo.form.HtmlEditor({
@@ -22933,7 +27255,7 @@ Roo.extend(Roo.form.HtmlEditor, Roo.form.Field, {
      
  * 
  * @cfg {Object} disable List of elements to disable..
      
  * 
  * @cfg {Object} disable List of elements to disable..
- * @cfg {Array} btns List of additional buttons.
+ * @cfg {Roo.Toolbar.Item|Roo.Toolbar.Button|Roo.Toolbar.SplitButton|Roo.form.Field} btns[] List of additional buttons.
  * 
  * 
  * NEEDS Extra CSS? 
  * 
  * 
  * NEEDS Extra CSS? 
@@ -22958,7 +27280,7 @@ Roo.form.HtmlEditor.ToolbarStandard = function(config)
     // dont call parent... till later.
 }
 
     // dont call parent... till later.
 }
 
-Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
+Roo.form.HtmlEditor.ToolbarStandard.prototype = {
     
     tb: false,
     
     
     tb: false,
     
@@ -23304,7 +27626,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                     tabIndex:-1
                 });
             }
                     tabIndex:-1
                 });
             }
-             cmenu.menu.items.push({
+            cmenu.menu.items.push({
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
                 actiontype : 'tablewidths',
                 html: 'Remove Table Widths',
                 handler: function(a,b) {
@@ -23356,7 +27678,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
                 actiontype : 'tidy',
                 html: 'Tidy HTML Source',
                 handler: function(a,b) {
-                    editorcore.doc.body.innerHTML = editorcore.domToHTML();
+                    new Roo.htmleditor.Tidy(editorcore.doc.body);
                     editorcore.syncValue();
                 },
                 tabIndex:-1
                     editorcore.syncValue();
                 },
                 tabIndex:-1
@@ -23393,7 +27715,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
         
         if (this.btns) {
             for(var i =0; i< this.btns.length;i++) {
-                var b = Roo.factory(this.btns[i],Roo.form);
+                var b = Roo.factory(this.btns[i],this.btns[i].xns || Roo.form);
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
                 b.cls =  'x-edit-none';
                 
                 if(typeof(this.btns[i].cls) != 'undefined' && this.btns[i].cls.indexOf('x-init-enable') !== -1){
@@ -23434,11 +27756,45 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
     },
     // private used internally
     createLink : function(){
     },
     // private used internally
     createLink : function(){
-        Roo.log("create link?");
-        var url = prompt(this.createLinkText, this.defaultLinkValue);
-        if(url && url != 'http:/'+'/'){
-            this.editorcore.relayCmd('createlink', url);
+        //Roo.log("create link?");
+        var ec = this.editorcore;
+        var ar = ec.getAllAncestors();
+        var n = false;
+        for(var i = 0;i< ar.length;i++) {
+            if (ar[i] && ar[i].nodeName == 'A') {
+                n = ar[i];
+                break;
+            }
         }
         }
+        
+        (function() {
+            
+            Roo.MessageBox.show({
+                title : "Add / Edit Link URL",
+                msg : "Enter the url for the link",
+                buttons: Roo.MessageBox.OKCANCEL,
+                fn: function(btn, url){
+                    if (btn != 'ok') {
+                        return;
+                    }
+                    if(url && url != 'http:/'+'/'){
+                        if (n) {
+                            n.setAttribute('href', url);
+                        } else {
+                            ec.relayCmd('createlink', url);
+                        }
+                    }
+                },
+                minWidth:250,
+                prompt:true,
+                //multiline: multiline,
+                modal : true,
+                value :  n  ? n.getAttribute('href') : '' 
+            });
+            
+             
+        }).defer(100, this); // we have to defer this , otherwise the mouse click gives focus to the main window.
+        
     },
 
     
     },
 
     
@@ -23551,6 +27907,11 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
                 this.tb.items.each(function(item){
                     item.enable();
                 });
                 this.tb.items.each(function(item){
                     item.enable();
                 });
+                // initialize 'blocks'
+                Roo.each(Roo.get(this.editorcore.doc.body).query('*[data-block]'), function(e) {
+                    Roo.htmleditor.Block.factory(e).updateElement(e);
+                },this);
+            
             }
             
         }
             }
             
         }
@@ -23677,7 +28038,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,  {
            item.enable();
         });
     }
            item.enable();
         });
     }
-});
+};
 
 
 
 
 
 
@@ -23725,189 +28086,138 @@ Roo.form.HtmlEditor.ToolbarContext = function(config)
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
  
 
 Roo.form.HtmlEditor.ToolbarContext.types = {
-    'IMG' : {
-        width : {
+    'IMG' : [
+        {
+            name : 'width',
             title: "Width",
             width: 40
         },
             title: "Width",
             width: 40
         },
-        height:  {
+        {
+            name : 'height',
             title: "Height",
             width: 40
         },
             title: "Height",
             width: 40
         },
-        align: {
+        {
+            name : 'align',
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
             title: "Align",
             opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
             width : 80
             
         },
-        border: {
+        {
+            name : 'border',
             title: "Border",
             width: 40
         },
             title: "Border",
             width: 40
         },
-        alt: {
+        {
+            name : 'alt',
             title: "Alt",
             width: 120
         },
             title: "Alt",
             width: 120
         },
-        src : {
+        {
+            name : 'src',
             title: "Src",
             width: 220
         }
         
             title: "Src",
             width: 220
         }
         
-    },
-    'A' : {
-        name : {
+    ],
+    
+    'FIGURE' : [
+        {
+            name : 'align',
+            title: "Align",
+            opts : [ [""],[ "left"],[ "right"],[ "center"],[ "top"]],
+            width : 80  
+        }
+    ],
+    'A' : [
+        {
+            name : 'name',
             title: "Name",
             width: 50
         },
             title: "Name",
             width: 50
         },
-        target:  {
+        {
+            name : 'target',
             title: "Target",
             width: 120
         },
             title: "Target",
             width: 120
         },
-        href:  {
+        {
+            name : 'href',
             title: "Href",
             width: 220
         } // border?
         
             title: "Href",
             width: 220
         } // border?
         
-    },
-    'TABLE' : {
-        rows : {
-            title: "Rows",
-            width: 20
-        },
-        cols : {
-            title: "Cols",
-            width: 20
-        },
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },
-        border : {
-            title: "Border",
-            width: 20
-        }
-    },
-    'TD' : {
-        width : {
-            title: "Width",
-            width: 40
-        },
-        height : {
-            title: "Height",
-            width: 40
-        },   
-        align: {
-            title: "Align",
-            opts : [[""],[ "left"],[ "center"],[ "right"],[ "justify"],[ "char"]],
-            width: 80
-        },
-        valign: {
-            title: "Valign",
-            opts : [[""],[ "top"],[ "middle"],[ "bottom"],[ "baseline"]],
-            width: 80
-        },
-        colspan: {
-            title: "Colspan",
-            width: 20
-            
-        },
-         'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'INPUT' : {
-        name : {
+    ],
+    
+    'INPUT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        value : {
+        {
+            name : 'value',
             title: "Value",
             width: 120
         },
             title: "Value",
             width: 120
         },
-        width : {
+        {
+            name : 'width',
             title: "Width",
             width: 40
         }
             title: "Width",
             width: 40
         }
-    },
-    'LABEL' : {
-        'for' : {
+    ],
+    'LABEL' : [
+         {
+            name : 'for',
             title: "For",
             width: 120
         }
             title: "For",
             width: 120
         }
-    },
-    'TEXTAREA' : {
-          name : {
+    ],
+    'TEXTAREA' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        rows : {
+        {
+            name : 'rows',
             title: "Rows",
             width: 20
         },
             title: "Rows",
             width: 20
         },
-        cols : {
+        {
+            name : 'cols',
             title: "Cols",
             width: 20
         }
             title: "Cols",
             width: 20
         }
-    },
-    'SELECT' : {
-        name : {
+    ],
+    'SELECT' : [
+        {
+            name : 'name',
             title: "name",
             width: 120
         },
             title: "name",
             width: 120
         },
-        selectoptions : {
+        {
+            name : 'selectoptions',
             title: "Options",
             width: 200
         }
             title: "Options",
             width: 200
         }
-    },
+    ],
     
     // should we really allow this??
     // should this just be 
     
     // should we really allow this??
     // should this just be 
-    'BODY' : {
-        title : {
+    'BODY' : [
+        
+        {
+            name : 'title',
             title: "Title",
             width: 200,
             disabled : true
         }
             title: "Title",
             width: 200,
             disabled : true
         }
-    },
-    'SPAN' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    'DIV' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-     'P' : {
-        'font-family'  : {
-            title : "Font",
-            style : 'fontFamily',
-            displayField: 'display',
-            optname : 'font-family',
-            width: 140
-        }
-    },
-    
-    '*' : {
-        // empty..
-    }
+    ],
+    '*' : [
+        // empty.
+    ]
 
 };
 
 
 };
 
@@ -23993,9 +28303,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
         // disable everything...
         var ty= Roo.form.HtmlEditor.ToolbarContext.types;
         this.toolbars = {};
-           
+        // block toolbars are built in updateToolbar when needed.
         for (var i in  ty) {
         for (var i in  ty) {
-          
+            
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
             this.toolbars[i] = this.buildToolbar(ty[i],i);
         }
         this.tb = this.toolbars.BODY;
@@ -24022,8 +28332,13 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
      *
      * Note you can force an update by calling on('editorevent', scope, false)
      */
-    updateToolbar: function(editor,ev,sel){
-
+    updateToolbar: function(editor ,ev, sel)
+    {
+        
+        if (ev) {
+            ev.stopEvent(); // se if we can stop this looping with mutiple events.
+        }
+        
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
         //Roo.log(ev);
         // capture mouse up - this is handy for selecting images..
         // perhaps should go somewhere else...
@@ -24031,38 +28346,40 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
              this.editor.onFirstFocus();
             return;
         }
              this.editor.onFirstFocus();
             return;
         }
-        
+        //Roo.log(ev ? ev.target : 'NOTARGET');
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
         
         
         // http://developer.yahoo.com/yui/docs/simple-editor.js.html
         // selectNode - might want to handle IE?
+        
+        
+        
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
         if (ev &&
             (ev.type == 'mouseup' || ev.type == 'click' ) &&
-            ev.target && ev.target.tagName == 'IMG') {
+            ev.target && ev.target.tagName != 'BODY' ) { // && ev.target.tagName == 'IMG') {
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
             // they have click on an image...
             // let's see if we can change the selection...
             sel = ev.target;
-         
-              var nodeRange = sel.ownerDocument.createRange();
-            try {
-                nodeRange.selectNode(sel);
-            } catch (e) {
-                nodeRange.selectNodeContents(sel);
-            }
-            //nodeRange.collapse(true);
-            var s = this.editorcore.win.getSelection();
-            s.removeAllRanges();
-            s.addRange(nodeRange);
-        }  
+            
+            // this triggers looping?
+            //this.editorcore.selectNode(sel);
+             
+        }
         
         
+        // this forces an id..
+        Array.from(this.editorcore.doc.body.querySelectorAll('.roo-ed-selection')).forEach(function(e) {
+             e.classList.remove('roo-ed-selection');
+        });
+        //Roo.select('.roo-ed-selection', false, this.editorcore.doc).removeClass('roo-ed-selection');
+        //Roo.get(node).addClass('roo-ed-selection');
       
       
-        var updateFooter = sel ? false : true;
+        //var updateFooter = sel ? false : true; 
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
         
         
         var ans = this.editorcore.getAllAncestors();
         
         // pick
-        var ty= Roo.form.HtmlEditor.ToolbarContext.types;
+        var ty = Roo.form.HtmlEditor.ToolbarContext.types;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
         
         if (!sel) { 
             sel = ans.length ? (ans[0] ?  ans[0]  : ans[1]) : this.editorcore.doc.body;
@@ -24070,86 +28387,145 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
             sel = sel.tagName.length ? sel : this.editorcore.doc.body;
             
         }
-        // pick a menu that exists..
-        var tn = sel.tagName.toUpperCase();
-        //sel = typeof(ty[tn]) != 'undefined' ? sel : this.editor.doc.body;
-        
-        tn = sel.tagName.toUpperCase();
         
         
+        var tn = sel.tagName.toUpperCase();
         var lastSel = this.tb.selectedNode;
         var lastSel = this.tb.selectedNode;
-        
         this.tb.selectedNode = sel;
         this.tb.selectedNode = sel;
+        var left_label = tn;
         
         
-        // if current menu does not match..
+        // ok see if we are editing a block?
         
         
-        if ((this.tb.name != tn) || (lastSel != this.tb.selectedNode) || ev === false) {
-                
-            this.tb.el.hide();
-            ///console.log("show: " + tn);
-            this.tb =  typeof(ty[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
-            this.tb.el.show();
-            // update name
-            this.tb.items.first().el.innerHTML = tn + ':&nbsp;';
-            
-            
-            // update attributes
-            if (this.tb.fields) {
-                this.tb.fields.each(function(e) {
-                    if (e.stylename) {
-                        e.setValue(sel.style[e.stylename]);
-                        return;
-                    } 
-                   e.setValue(sel.getAttribute(e.attrname));
-                });
-            }
+        var db = false;
+        // you are not actually selecting the block.
+        if (sel && sel.hasAttribute('data-block')) {
+            db = sel;
+        } else if (sel && sel.closest('[data-block]')) {
             
             
-            var hasStyles = false;
-            for(var i in this.styles) {
-                hasStyles = true;
-                break;
-            }
+            db = sel.closest('[data-block]');
+            //var cepar = sel.closest('[contenteditable=true]');
+            //if (db && cepar && cepar.tagName != 'BODY') {
+            //   db = false; // we are inside an editable block.. = not sure how we are going to handle nested blocks!?
+            //}   
+        }
+        
+        
+        var block = false;
+        //if (db && !sel.hasAttribute('contenteditable') && sel.getAttribute('contenteditable') != 'true' ) {
+        if (db && this.editorcore.enableBlocks) {
+            block = Roo.htmleditor.Block.factory(db);
             
             
-            // update styles
-            if (hasStyles) { 
-                var st = this.tb.fields.item(0);
-                
-                st.store.removeAll();
-               
-                
-                var cn = sel.className.split(/\s+/);
+            
+            if (block) {
+                 db.className = (
+                        db.classList.length > 0  ? db.className + ' ' : ''
+                    )  + 'roo-ed-selection';
+                 
+                 // since we removed it earlier... its not there..
+                tn = 'BLOCK.' + db.getAttribute('data-block');
                 
                 
-                var avs = [];
-                if (this.styles['*']) {
-                    
-                    Roo.each(this.styles['*'], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
-                }
-                if (this.styles[tn]) { 
-                    Roo.each(this.styles[tn], function(v) {
-                        avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
-                    });
+                //this.editorcore.selectNode(db);
+                if (typeof(this.toolbars[tn]) == 'undefined') {
+                   this.toolbars[tn] = this.buildToolbar( false  ,tn ,block.friendly_name, block);
                 }
                 }
-                
-                st.store.loadData(avs);
-                st.collapse();
-                st.setValue(cn);
+                this.toolbars[tn].selectedNode = db;
+                left_label = block.friendly_name;
+                ans = this.editorcore.getAllAncestors();
             }
             }
-            // flag our selected Node.
-            this.tb.selectedNode = sel;
-           
-           
-            Roo.menu.MenuMgr.hideAll();
-
+            
+                
+            
         }
         
         }
         
-        if (!updateFooter) {
-            //this.footDisp.dom.innerHTML = ''; 
-            return;
+        
+        if (this.tb.name == tn && lastSel == this.tb.selectedNode && ev !== false) {
+            return; // no change?
+        }
+        
+        
+          
+        this.tb.el.hide();
+        ///console.log("show: " + tn);
+        this.tb =  typeof(this.toolbars[tn]) != 'undefined' ? this.toolbars[tn] : this.toolbars['*'];
+        
+        this.tb.el.show();
+        // update name
+        this.tb.items.first().el.innerHTML = left_label + ':&nbsp;';
+        
+        
+        // update attributes
+        if (block && this.tb.fields) {
+             
+            this.tb.fields.each(function(e) {
+                e.setValue(block[e.name]);
+            });
+            
+            
+        } else  if (this.tb.fields && this.tb.selectedNode) {
+            this.tb.fields.each( function(e) {
+                if (e.stylename) {
+                    e.setValue(this.tb.selectedNode.style[e.stylename]);
+                    return;
+                } 
+                e.setValue(this.tb.selectedNode.getAttribute(e.attrname));
+            }, this);
+            this.updateToolbarStyles(this.tb.selectedNode);  
         }
         }
+        
+        
+       
+        Roo.menu.MenuMgr.hideAll();
+
+        
+        
+    
         // update the footer
         //
         // update the footer
         //
+        this.updateFooter(ans);
+             
+    },
+    
+    updateToolbarStyles : function(sel)
+    {
+        var hasStyles = false;
+        for(var i in this.styles) {
+            hasStyles = true;
+            break;
+        }
+        
+        // update styles
+        if (hasStyles && this.tb.hasStyles) { 
+            var st = this.tb.fields.item(0);
+            
+            st.store.removeAll();
+            var cn = sel.className.split(/\s+/);
+            
+            var avs = [];
+            if (this.styles['*']) {
+                
+                Roo.each(this.styles['*'], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            if (this.styles[tn]) { 
+                Roo.each(this.styles[tn], function(v) {
+                    avs.push( [ v , cn.indexOf(v) > -1 ? 1 : 0 ] );         
+                });
+            }
+            
+            st.store.loadData(avs);
+            st.collapse();
+            st.setValue(cn);
+        }
+    },
+    
+     
+    updateFooter : function(ans)
+    {
         var html = '';
         var html = '';
+        if (ans === false) {
+            this.footDisp.dom.innerHTML = '';
+            return;
+        }
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
         
         this.footerEls = ans.reverse();
         Roo.each(this.footerEls, function(a,i) {
@@ -24169,10 +28545,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         this.footDisp.dom.innerHTML = html;
             
         
         this.footDisp.dom.innerHTML = html;
             
-        //this.editorsyncValue();
+        
     },
     },
-     
-    
    
        
     // private
    
        
     // private
@@ -24197,7 +28571,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
            item.enable();
         });
     },
            item.enable();
         });
     },
-    buildToolbar: function(tlist, nm)
+    buildToolbar: function(tlist, nm, friendly_name, block)
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
     {
         var editor = this.editor;
         var editorcore = this.editorcore;
@@ -24208,18 +28582,22 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
        
         var tb = new Roo.Toolbar(wdiv);
         
        
         var tb = new Roo.Toolbar(wdiv);
-        // add the name..
+        ///this.tb = tb; // << this sets the active toolbar..
+        if (tlist === false && block) {
+            tlist = block.contextMenu(this);
+        }
         
         
-        tb.add(nm+ ":&nbsp;");
+        tb.hasStyles = false;
+        tb.name = nm;
+        
+        tb.add((typeof(friendly_name) == 'undefined' ? nm : friendly_name) + ":&nbsp;");
+        
+        var styles = Array.from(this.styles);
         
         
-        var styles = [];
-        for(var i in this.styles) {
-            styles.push(i);
-        }
         
         // styles...
         if (styles && styles.length) {
         
         // styles...
         if (styles && styles.length) {
-            
+            tb.hasStyles = true;
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
             // this needs a multi-select checkbox...
             tb.addField( new Roo.form.ComboBox({
                 store: new Roo.data.SimpleStore({
@@ -24249,9 +28627,18 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
         }
         
         var tbc = Roo.form.HtmlEditor.ToolbarContext;
-        var tbops = tbc.options;
         
         
-        for (var i in tlist) {
+        
+        for (var i = 0; i < tlist.length; i++) {
+            
+            // newer versions will use xtype cfg to create menus.
+            if (typeof(tlist[i].xtype) != 'undefined') {
+                
+                tb[typeof(tlist[i].name)== 'undefined' ? 'add' : 'addField'](Roo.factory(tlist[i]));
+                
+                
+                continue;
+            }
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
             
             var item = tlist[i];
             tb.add(item.title + ":&nbsp;");
@@ -24259,8 +28646,8 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
             
             //optname == used so you can configure the options available..
             var opts = item.opts ? item.opts : false;
-            if (item.optname) {
-                opts = tbops[item.optname];
+            if (item.optname) { // use the b
+                opts = Roo.form.HtmlEditor.ToolbarContext.options[item.optname];
            
             }
             
            
             }
             
@@ -24272,13 +28659,15 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                         fields: ['val', 'display'],
                         data : opts  
                     }),
                         fields: ['val', 'display'],
                         data : opts  
                     }),
-                    name : '-roo-edit-' + i,
-                    attrname : i,
+                    name : '-roo-edit-' + tlist[i].name,
+                    
+                    attrname : tlist[i].name,
                     stylename : item.style ? item.style : false,
                     stylename : item.style ? item.style : false,
+                    
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
                     displayField: item.displayField ? item.displayField : 'val',
                     valueField :  'val',
                     typeAhead: false,
-                    mode: typeof(tbc.stores[i]) != 'undefined'  ? 'remote' : 'local',
+                    mode: typeof(tbc.stores[tlist[i].name]) != 'undefined'  ? 'remote' : 'local',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
                     editable : false,
                     triggerAction: 'all',
                     emptyText:'Select',
@@ -24286,11 +28675,20 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
                     width: item.width ? item.width  : 130,
                     listeners : {
                         'select': function(c, r, i) {
+                             
+                            
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
                             if (c.stylename) {
                                 tb.selectedNode.style[c.stylename] =  r.get('val');
+                                editorcore.syncValue();
+                                return;
+                            }
+                            if (r === false) {
+                                tb.selectedNode.removeAttribute(c.attrname);
+                                editorcore.syncValue();
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
                                 return;
                             }
                             tb.selectedNode.setAttribute(c.attrname, r.get('val'));
+                            editorcore.syncValue();
                         }
                     }
 
                         }
                     }
 
@@ -24298,7 +28696,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                 continue;
                     
                  
                 continue;
                     
                  
-                
+                /*
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
                 tb.addField( new Roo.form.TextField({
                     name: i,
                     width: 100,
@@ -24306,16 +28704,19 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
                     value: ''
                 }));
                 continue;
                     value: ''
                 }));
                 continue;
+                */
             }
             tb.addField( new Roo.form.TextField({
             }
             tb.addField( new Roo.form.TextField({
-                name: '-roo-edit-' + i,
-                attrname : i,
+                name: '-roo-edit-' + tlist[i].name,
+                attrname : tlist[i].name,
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
                 
                 width: item.width,
                 //allowBlank:true,
                 value: '',
                 listeners: {
                     'change' : function(f, nv, ov) {
+                        
+                         
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
                         tb.selectedNode.setAttribute(f.attrname, nv);
                         editorcore.syncValue();
                     }
@@ -24325,8 +28726,9 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         var _this = this;
         }
         
         var _this = this;
-        
+        var show_delete = !block || block.deleteTitle !== false;
         if(nm == 'BODY'){
         if(nm == 'BODY'){
+            show_delete = false;
             tb.addSeparator();
         
             tb.addButton( {
             tb.addSeparator();
         
             tb.addButton( {
@@ -24342,60 +28744,61 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         }
         
         tb.addFill();
         }
         
         tb.addFill();
-        tb.addButton( {
-            text: 'Remove Tag',
-    
-            listeners : {
-                click : function ()
-                {
-                    // remove
-                    // undo does not work.
-                     
-                    var sn = tb.selectedNode;
-                    
-                    var pn = sn.parentNode;
-                    
-                    var stn =  sn.childNodes[0];
-                    var en = sn.childNodes[sn.childNodes.length - 1 ];
-                    while (sn.childNodes.length) {
-                        var node = sn.childNodes[0];
-                        sn.removeChild(node);
-                        //Roo.log(node);
-                        pn.insertBefore(node, sn);
+        if (show_delete) {
+            tb.addButton({
+                text: block && block.deleteTitle ? block.deleteTitle  : 'Remove Block or Formating', // remove the tag, and puts the children outside...
+        
+                listeners : {
+                    click : function ()
+                    {
+                        var sn = tb.selectedNode;
+                        if (block) {
+                            sn = Roo.htmleditor.Block.factory(tb.selectedNode).removeNode();
+                            
+                        }
+                        if (!sn) {
+                            return;
+                        }
+                        var stn =  sn.childNodes[0] || sn.nextSibling || sn.previousSibling || sn.parentNode;
+                        if (sn.hasAttribute('data-block')) {
+                            stn =  sn.nextSibling || sn.previousSibling || sn.parentNode;
+                            sn.parentNode.removeChild(sn);
+                            
+                        } else if (sn && sn.tagName != 'BODY') {
+                            // remove and keep parents.
+                            a = new Roo.htmleditor.FilterKeepChildren({tag : false});
+                            a.replaceTag(sn);
+                        }
+                        
+                        
+                        var range = editorcore.createRange();
+            
+                        range.setStart(stn,0);
+                        range.setEnd(stn,0); 
+                        var selection = editorcore.getSelection();
+                        selection.removeAllRanges();
+                        selection.addRange(range);
+                        
+                        
+                        //_this.updateToolbar(null, null, pn);
+                        _this.updateToolbar(null, null, null);
+                        _this.updateFooter(false);
                         
                     }
                         
                     }
-                    pn.removeChild(sn);
-                    var range = editorcore.createRange();
-        
-                    range.setStart(stn,0);
-                    range.setEnd(en,0); //????
-                    //range.selectNode(sel);
-                    
-                    
-                    var selection = editorcore.getSelection();
-                    selection.removeAllRanges();
-                    selection.addRange(range);
-                    
-                    
-                    
-                    //_this.updateToolbar(null, null, pn);
-                    _this.updateToolbar(null, null, null);
-                    _this.footDisp.dom.innerHTML = ''; 
                 }
                 }
-            }
-            
+                
+                        
                     
                 
                     
                 
-            
-        });
-        
+            });
+        }    
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
         
         tb.el.on('click', function(e){
             e.preventDefault(); // what does this do?
         });
         tb.el.setVisibilityMode( Roo.Element.DISPLAY);
         tb.el.hide();
-        tb.name = nm;
+        
         // dont need to disable them... as they will get hidden
         return tb;
          
         // dont need to disable them... as they will get hidden
         return tb;
          
@@ -24439,6 +28842,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         
         
     },
         
         
     },
+    // when the footer contect changes
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
     onContextClick : function (ev,dom)
     {
         ev.preventDefault();
@@ -24451,17 +28855,7 @@ Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,  {
         var ans = this.footerEls;
         var sel = ans[n];
         
         var ans = this.footerEls;
         var sel = ans[n];
         
-         // pick
-        var range = this.editorcore.createRange();
-        
-        range.selectNodeContents(sel);
-        //range.selectNode(sel);
-        
-        
-        var selection = this.editorcore.getSelection();
-        selection.removeAllRanges();
-        selection.addRange(range);
-        
+        this.editorcore.selectNode(sel);
         
         
         this.updateToolbar(null, null, sel);
         
         
         this.updateToolbar(null, null, sel);
@@ -25030,11 +29424,12 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
      * @param {Boolean} asString
      * @return {Object}
      */
      * @param {Boolean} asString
      * @return {Object}
      */
-    getValues : function(asString){
+    getValues : function(asString)
+    {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
         if (this.childForms) {
             // copy values from the child forms
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues()); // get the full set of data, as we might be copying comboboxes from external into this one.
             }, this);
         }
         
             }, this);
         }
         
@@ -25067,21 +29462,31 @@ clientValidation  Boolean          Applies to submit only.  Pass true to call fo
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
     /**
      * Returns the fields in this form as an object with key/value pairs. 
      * This differs from getValues as it calls getValue on each child item, rather than using dom data.
+     * Normally this will not return readOnly data 
+     * @param {Boolean} with_readonly return readonly field data.
      * @return {Object}
      */
      * @return {Object}
      */
-    getFieldValues : function(with_hidden)
+    getFieldValues : function(with_readonly)
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
     {
         if (this.childForms) {
             // copy values from the child forms
             // should this call getFieldValues - probably not as we do not currently copy
             // hidden fields when we generate..
             Roo.each(this.childForms, function (f) {
-                this.setValues(f.getValues());
+                this.setValues(f.getFieldValues());
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
             }, this);
         }
         
         var ret = {};
         this.items.each(function(f){
+            
+            if (f.readOnly && with_readonly !== true) {
+                return; // skip read only values. - this is in theory to stop 'old' values being copied over new ones
+                        // if a subform contains a copy of them.
+                        // if you have subforms with the same editable data, you will need to copy the data back
+                        // and forth.
+            }
+            
             if (!f.getName()) {
                 return;
             }
             if (!f.getName()) {
                 return;
             }
@@ -26171,7 +30576,7 @@ Roo.form.Action.ACTION_TYPES = {
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
 /**
  * @class Roo.form.Layout
  * @extends Roo.Component
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -26322,6 +30727,7 @@ Roo.extend(Roo.form.Layout, Roo.Component, {
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Column
  * @extends Roo.form.Layout
+ * @children Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a column container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -26356,7 +30762,7 @@ Roo.extend(Roo.form.Column, Roo.form.Layout, {
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
 /**
  * @class Roo.form.Row
  * @extends Roo.form.Layout
- * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem
+ * @children Roo.form.Column Roo.form.Row Roo.form.Field Roo.Button Roo.form.TextItem Roo.form.FieldSet
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
  * Creates a row container for layout and rendering of fields in an {@link Roo.form.Form}.
  * @constructor
  * @param {Object} config Configuration options
@@ -31282,7 +35688,7 @@ Roo.LayoutStateManager.prototype = {
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
  * @class Roo.ContentPanel
  * @extends Roo.util.Observable
  * @children Roo.form.Form Roo.JsonView Roo.View
- * @parent Roo.BorderLayout Roo.LayoutDialog builder-top
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
  * A basic ContentPanel element.
  * @cfg {Boolean}   fitToFrame    True for this panel to adjust its size to fit when the region resizes  (defaults to false)
  * @cfg {Boolean}   fitContainer   When using {@link #fitToFrame} and {@link #resizeEl}, you can also fit the parent container  (defaults to false)
@@ -31295,7 +35701,7 @@ Roo.LayoutStateManager.prototype = {
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
  * @cfg {String} title          The title for this panel
  * @cfg {Array} adjustments     Values to <b>add</b> to the width/height when doing a {@link #fitToFrame} (default is [0, 0])
  * @cfg {String} url            Calls {@link #setUrl} with this value
- * @cfg {String} region [required]   (center|north|south|east|west) which region to put this panel on (when used with xtype constructors)
+ * @cfg {String} region (center|north|south|east|west) [required] which region to put this panel on (when used with xtype constructors)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
  * @cfg {String|Object} params  When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {Boolean} loadOnce      When used with {@link #url}, calls {@link #setUrl} with this value
  * @cfg {String}    content        Raw content to fill content panel with (uses setContent on construction.)
@@ -31730,17 +36136,32 @@ layout.addxtype({
     }
 });
 
     }
 });
 
+
+
+
+
+
+
+
+
+
+
+
 /**
  * @class Roo.GridPanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.GridPanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * @constructor
  * Create a new GridPanel.
  * @constructor
  * Create a new GridPanel.
- * @param {Roo.grid.Grid} grid The grid for this panel
- * @param {String/Object} config A string to set only the panel's title, or a config object
+ * @cfg {Roo.grid.Grid} grid The grid for this panel
  */
 Roo.GridPanel = function(grid, config){
     
  */
 Roo.GridPanel = function(grid, config){
     
-  
+    // universal ctor...
+    if (typeof(grid.grid) != 'undefined') {
+        config = grid;
+        grid = config.grid;
+    }
     this.wrapper = Roo.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
         {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
         
     this.wrapper = Roo.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
         {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
         
@@ -31808,6 +36229,10 @@ Roo.extend(Roo.GridPanel, Roo.ContentPanel, {
 /**
  * @class Roo.NestedLayoutPanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.NestedLayoutPanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
+ * @cfg {Roo.BorderLayout} layout   [required] The layout for this panel
+ *
+ * 
  * @constructor
  * Create a new NestedLayoutPanel.
  * 
  * @constructor
  * Create a new NestedLayoutPanel.
  * 
@@ -31844,6 +36269,8 @@ Roo.NestedLayoutPanel = function(layout, config)
 
 Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
 
 
 Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
 
+    layout : false,
+
     setSize : function(width, height){
         if(!this.ignoreResize(width, height)){
             var size = this.adjustForComponents(width, height);
     setSize : function(width, height){
         if(!this.ignoreResize(width, height)){
             var size = this.adjustForComponents(width, height);
@@ -31894,7 +36321,7 @@ Roo.extend(Roo.NestedLayoutPanel, Roo.ContentPanel, {
     
     /**
      * Returns the nested BorderLayout for this panel
     
     /**
      * Returns the nested BorderLayout for this panel
-     * @return {Roo.BorderLayout} 
+     * @return {Roo.BorderLayout}
      */
     getLayout : function(){
         return this.layout;
      */
     getLayout : function(){
         return this.layout;
@@ -31996,6 +36423,7 @@ Roo.extend(Roo.ScrollPanel, Roo.ContentPanel, {
 /**
  * @class Roo.TreePanel
  * @extends Roo.ContentPanel
 /**
  * @class Roo.TreePanel
  * @extends Roo.ContentPanel
+ * @parent Roo.BorderLayout Roo.LayoutDialog builder
  * Treepanel component
  * 
  * @constructor
  * Treepanel component
  * 
  * @constructor
@@ -32050,17 +36478,6 @@ Roo.extend(Roo.TreePanel, Roo.ContentPanel, {
     tree : false
 
 });
     tree : false
 
 });
-
-
-
-
-
-
-
-
-
-
-
 /*
  * Based on:
  * Ext JS Library 1.1.1
 /*
  * Based on:
  * Ext JS Library 1.1.1
@@ -32609,8 +37026,10 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, {
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
     * @cfg {Roo.dd.DropTarget} dropTarget An {@link Roo.dd.DropTarget} config
     */
     dropTarget: false,
-    
-   
+     /**
+    * @cfg {boolean} sortColMenu Sort the column order menu when it shows (usefull for long lists..) default false
+    */ 
+    sortColMenu : false,
     
     // private
     rendered : false,
     
     // private
     rendered : false,
@@ -34672,13 +39091,28 @@ Roo.extend(Roo.grid.GridView, Roo.grid.AbstractGridView, {
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
     beforeColMenuShow : function(){
         var cm = this.cm,  colCount = cm.getColumnCount();
         this.colMenu.removeAll();
+        
+        var items = [];
         for(var i = 0; i < colCount; i++){
         for(var i = 0; i < colCount; i++){
-            this.colMenu.add(new Roo.menu.CheckItem({
+            items.push({
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
                 id: "col-"+cm.getColumnId(i),
                 text: cm.getColumnHeader(i),
                 checked: !cm.isHidden(i),
                 hideOnClick:false
-            }));
+            });
+        }
+        
+        if (this.grid.sortColMenu) {
+            items.sort(function(a,b) {
+                if (a.text == b.text) {
+                    return 0;
+                }
+                return a.text.toUpperCase() > b.text.toUpperCase() ? 1 : -1;
+            });
+        }
+        
+        for(var i = 0; i < colCount; i++){
+            this.colMenu.add(new Roo.menu.CheckItem(items[i]));
         }
     },
 
         }
     },
 
index 2480ad2..fc04b21 100644 (file)
@@ -305,12 +305,12 @@ A.render(td);var ti=new Roo.Toolbar.Item(td.firstChild);ti.render(td);this.items
 this.disabled=false;this.el.disabled=false;}});Roo.Toolbar.Separator=function(A){var s=document.createElement("span");s.className="ytb-sep";if(A){A.el=s;}Roo.Toolbar.Separator.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Separator,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Spacer=function(A){var s=document.createElement("div");s.className="ytb-spacer";if(A){A.el=s;}Roo.Toolbar.Spacer.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Spacer,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Fill=Roo.extend(Roo.Toolbar.Spacer,{render:function(td){td.style.width='100%';Roo.Toolbar.Fill.superclass.render.call(this,td);}});Roo.Toolbar.TextItem=function(A){var B=A||"";if(typeof(A)=='object'){B=A.text||"";}else{A=null;}var s=document.createElement("span");
 this.disabled=false;this.el.disabled=false;}});Roo.Toolbar.Separator=function(A){var s=document.createElement("span");s.className="ytb-sep";if(A){A.el=s;}Roo.Toolbar.Separator.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Separator,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Spacer=function(A){var s=document.createElement("div");s.className="ytb-spacer";if(A){A.el=s;}Roo.Toolbar.Spacer.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.Spacer,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn}
 );Roo.Toolbar.Fill=Roo.extend(Roo.Toolbar.Spacer,{render:function(td){td.style.width='100%';Roo.Toolbar.Fill.superclass.render.call(this,td);}});Roo.Toolbar.TextItem=function(A){var B=A||"";if(typeof(A)=='object'){B=A.text||"";}else{A=null;}var s=document.createElement("span");
-s.className="ytb-text";s.innerHTML=B;if(A){A.el=s;}Roo.Toolbar.TextItem.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.TextItem,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn});Roo.Toolbar.Button=function(A){Roo.Toolbar.Button.superclass.constructor.call(this,null,A);
-};Roo.extend(Roo.Toolbar.Button,Roo.Button,{render:function(td){this.td=td;Roo.Toolbar.Button.superclass.render.call(this,td);},destroy:function(){Roo.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;
-this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Roo.fly(this.td).addClass("x-item-disabled");this.disabled=true;},enable:function(){Roo.fly(this.td).removeClass("x-item-disabled");this.disabled=false;
-}});Roo.ToolbarButton=Roo.Toolbar.Button;Roo.Toolbar.SplitButton=function(A){Roo.Toolbar.SplitButton.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.SplitButton,Roo.SplitButton,{render:function(td){this.td=td;Roo.Toolbar.SplitButton.superclass.render.call(this,td);
-},destroy:function(){Roo.Toolbar.SplitButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";}});Roo.Toolbar.MenuButton=Roo.Toolbar.SplitButton;
-
+s.className="ytb-text";s.innerHTML=B;if(A){A.el=s;}Roo.Toolbar.TextItem.superclass.constructor.call(this,A||s);};Roo.extend(Roo.Toolbar.TextItem,Roo.Toolbar.Item,{enable:Roo.emptyFn,disable:Roo.emptyFn,focus:Roo.emptyFn,show:function(){this.hidden=false;this.el.style.display="";
+},hide:function(){this.hidden=true;this.el.style.display="none";}});Roo.Toolbar.Button=function(A){Roo.Toolbar.Button.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.Button,Roo.Button,{render:function(td){this.td=td;Roo.Toolbar.Button.superclass.render.call(this,td);
+},destroy:function(){Roo.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Roo.fly(this.td).addClass("x-item-disabled");
+this.disabled=true;},enable:function(){Roo.fly(this.td).removeClass("x-item-disabled");this.disabled=false;}});Roo.ToolbarButton=Roo.Toolbar.Button;Roo.Toolbar.SplitButton=function(A){Roo.Toolbar.SplitButton.superclass.constructor.call(this,null,A);};Roo.extend(Roo.Toolbar.SplitButton,Roo.SplitButton,{render:function(td){this.td=td;
+Roo.Toolbar.SplitButton.superclass.render.call(this,td);},destroy:function(){Roo.Toolbar.SplitButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;
+this.td.style.display="none";}});Roo.Toolbar.MenuButton=Roo.Toolbar.SplitButton;
 // Roo/PagingToolbar.js
 Roo.PagingToolbar=function(el,ds,A){if(typeof(el)=='object'&&el.xtype){A=el;ds=el.dataSource;el=A.container;}var B=[];if(A.items){B=A.items;A.items=[];}Roo.PagingToolbar.superclass.constructor.call(this,el,null,A);this.ds=ds;this.cursor=0;this.renderButtons(this.el);
 this.bind(ds);Roo.each(B,function(e){this.add(Roo.factory(e));},this);};Roo.extend(Roo.PagingToolbar,Roo.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Roo.PagingToolbar.superclass.render.call(this,el);
 // Roo/PagingToolbar.js
 Roo.PagingToolbar=function(el,ds,A){if(typeof(el)=='object'&&el.xtype){A=el;ds=el.dataSource;el=A.container;}var B=[];if(A.items){B=A.items;A.items=[];}Roo.PagingToolbar.superclass.constructor.call(this,el,null,A);this.ds=ds;this.cursor=0;this.renderButtons(this.el);
 this.bind(ds);Roo.each(B,function(e){this.add(Roo.factory(e));},this);};Roo.extend(Roo.PagingToolbar,Roo.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Roo.PagingToolbar.superclass.render.call(this,el);
@@ -447,7 +447,7 @@ E.dom.style.overflowY='auto'+(Roo.isIE?'':' !important');}else{E.dom.style.heigh
 Roo.log("[Roo.Messagebox] Show called while message displayed:");Roo.log("Old Dialog Message:"+F.innerHTML);Roo.log("New Dialog Message:"+Q.msg)}var d=this.getDialog();B=Q;d.setTitle(B.title||"&#160;");d.close.setDisplayed(B.closable!==false);K=G;B.prompt=B.prompt||(B.multiline?true:false);
 if(B.prompt){if(B.multiline){G.hide();H.show();H.setHeight(typeof B.multiline=="number"?B.multiline:this.defaultTextHeight);K=H;}else{G.show();H.hide();}}else{G.hide();H.hide();}I.setDisplayed(B.progress===true);this.updateProgress(0);K.dom.value=B.value||"";
 if(B.prompt){A.setDefaultButton(K);}else{var bs=B.buttons;var db=null;if(bs&&bs.ok){db=J["ok"];}else if(bs&&bs.yes){db=J["yes"];}A.setDefaultButton(db);}L=O(B.buttons);this.updateText(B.msg);if(B.cls){d.el.addClass(B.cls);}d.proxyDrag=B.proxyDrag===true;d.modal=B.modal!==false;
 Roo.log("[Roo.Messagebox] Show called while message displayed:");Roo.log("Old Dialog Message:"+F.innerHTML);Roo.log("New Dialog Message:"+Q.msg)}var d=this.getDialog();B=Q;d.setTitle(B.title||"&#160;");d.close.setDisplayed(B.closable!==false);K=G;B.prompt=B.prompt||(B.multiline?true:false);
 if(B.prompt){if(B.multiline){G.hide();H.show();H.setHeight(typeof B.multiline=="number"?B.multiline:this.defaultTextHeight);K=H;}else{G.show();H.hide();}}else{G.hide();H.hide();}I.setDisplayed(B.progress===true);this.updateProgress(0);K.dom.value=B.value||"";
 if(B.prompt){A.setDefaultButton(K);}else{var bs=B.buttons;var db=null;if(bs&&bs.ok){db=J["ok"];}else if(bs&&bs.yes){db=J["yes"];}A.setDefaultButton(db);}L=O(B.buttons);this.updateText(B.msg);if(B.cls){d.el.addClass(B.cls);}d.proxyDrag=B.proxyDrag===true;d.modal=B.modal!==false;
-d.mask=B.modal!==false?C:false;if(!d.isVisible()){document.body.appendChild(A.el.dom);d.animateTarget=null;d.show(Q.animEl);}return this;},progress:function(Q,R){this.show({title:Q,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,modal:true}
+d.mask=B.modal!==false?C:false;if(!d.isVisible()){document.body.appendChild(A.el.dom);d.animateTarget=null;d.show(Q.animEl);}A.toFront();return this;},progress:function(Q,R){this.show({title:Q,msg:R,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth,modal:true}
 );return this;},alert:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.OK,fn:fn,scope:S,modal:true});return this;},wait:function(Q,R){this.show({title:R,msg:Q,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});D=Roo.TaskMgr.start({run:function(i){Roo.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
 },interval:1000});return this;},confirm:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.YESNO,fn:fn,scope:S,modal:true});return this;},prompt:function(Q,R,fn,S,T){this.show({title:Q,msg:R,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:S,prompt:true,multiline:T,modal:true}
 );return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();
 );return this;},alert:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.OK,fn:fn,scope:S,modal:true});return this;},wait:function(Q,R){this.show({title:R,msg:Q,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});D=Roo.TaskMgr.start({run:function(i){Roo.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
 },interval:1000});return this;},confirm:function(Q,R,fn,S){this.show({title:Q,msg:R,buttons:this.YESNO,fn:fn,scope:S,modal:true});return this;},prompt:function(Q,R,fn,S,T){this.show({title:Q,msg:R,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:S,prompt:true,multiline:T,modal:true}
 );return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();
@@ -767,17 +767,18 @@ return false;}if(B<this.minValue){this.markInvalid(String.format(this.minText,th
 if(v){this.setValue(v);}}});
 // Roo/form/DateField.js
 Roo.form.DateField=function(A){Roo.form.DateField.superclass.constructor.call(this,A);this.addEvents({'select':true});if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);
 if(v){this.setValue(v);}}});
 // Roo/form/DateField.js
 Roo.form.DateField=function(A){Roo.form.DateField.superclass.constructor.call(this,A);this.addEvents({'select':true});if(typeof this.minValue=="string"){this.minValue=this.parseDate(this.minValue);}if(typeof this.maxValue=="string"){this.maxValue=this.parseDate(this.maxValue);
-}this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1){re+="|";}}this.ddMatch=new RegExp(re+")");}};Roo.extend(Roo.form.DateField,Roo.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",minValue:null,maxValue:null,minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',useIso:false,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"}
+}this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1){re+="|";}}this.ddMatch=new RegExp(re+")");}};Roo.extend(Roo.form.DateField,Roo.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",zeroValue:'1800-01-01',minValue:null,maxValue:null,minText:"The date in this field must be equal to or after {0}",maxText:"The date in this field must be equal to or before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',useIso:false,defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"}
 ,hiddenField:false,onRender:function(ct,A){Roo.form.DateField.superclass.onRender.call(this,ct,A);if(this.useIso){Roo.log("Changing name?");this.el.dom.setAttribute('name',this.name+'____hidden___');this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.name}
 ,'before',true);this.hiddenField.value=this.value?this.formatDate(this.value,'Y-m-d'):'';this.hiddenName=this.name;}},validateValue:function(A){A=this.formatDate(A);if(!Roo.form.DateField.superclass.validateValue.call(this,A)){Roo.log('super failed');return false;
 }if(A.length<1){return true;}var B=A;A=this.parseDate(A);if(!A){Roo.log('parse date failed'+B);this.markInvalid(String.format(this.invalidText,B,this.format));return false;}var C=A.getTime();if(this.minValue&&C<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));
 return false;}if(this.maxValue&&C>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}if(this.disabledDays){var D=A.getDay();for(var i=0;i<this.disabledDays.length;i++){if(D===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);
 return false;}}}var E=this.formatDate(A);if(this.ddMatch&&this.ddMatch.test(E)){this.markInvalid(String.format(this.disabledDatesText,E));return false;}return true;},validateBlur:function(){return !this.menu||!this.menu.isVisible();},getName:function(){if(!this.rendered){return ''}
 ;return !this.hiddenName&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},getValue:function(){return this.hiddenField?this.hiddenField.value:this.parseDate(Roo.form.DateField.superclass.getValue.call(this))||"";},setValue:function(A){if(this.hiddenField){this.hiddenField.value=this.formatDate(this.parseDate(A),'Y-m-d');
 ,hiddenField:false,onRender:function(ct,A){Roo.form.DateField.superclass.onRender.call(this,ct,A);if(this.useIso){Roo.log("Changing name?");this.el.dom.setAttribute('name',this.name+'____hidden___');this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.name}
 ,'before',true);this.hiddenField.value=this.value?this.formatDate(this.value,'Y-m-d'):'';this.hiddenName=this.name;}},validateValue:function(A){A=this.formatDate(A);if(!Roo.form.DateField.superclass.validateValue.call(this,A)){Roo.log('super failed');return false;
 }if(A.length<1){return true;}var B=A;A=this.parseDate(A);if(!A){Roo.log('parse date failed'+B);this.markInvalid(String.format(this.invalidText,B,this.format));return false;}var C=A.getTime();if(this.minValue&&C<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));
 return false;}if(this.maxValue&&C>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}if(this.disabledDays){var D=A.getDay();for(var i=0;i<this.disabledDays.length;i++){if(D===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);
 return false;}}}var E=this.formatDate(A);if(this.ddMatch&&this.ddMatch.test(E)){this.markInvalid(String.format(this.disabledDatesText,E));return false;}return true;},validateBlur:function(){return !this.menu||!this.menu.isVisible();},getName:function(){if(!this.rendered){return ''}
 ;return !this.hiddenName&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},getValue:function(){return this.hiddenField?this.hiddenField.value:this.parseDate(Roo.form.DateField.superclass.getValue.call(this))||"";},setValue:function(A){if(this.hiddenField){this.hiddenField.value=this.formatDate(this.parseDate(A),'Y-m-d');
-}Roo.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(A)));this.value=this.parseDate(A);},parseDate:function(A){if(!A||A instanceof Date){return A;}var v=Date.parseDate(A,this.format);if(!v&&this.useIso){v=Date.parseDate(A,'Y-m-d');
-}if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}for(var i=0,B=this.altFormatsArray.length;i<B&&!v;i++){v=Date.parseDate(A,this.altFormatsArray[i]);}}return v;},formatDate:function(A,B){return (!A||!(A instanceof Date))?A:A.dateFormat(B||this.format);
-},menuListeners:{select:function(m,d){this.setValue(d);this.fireEvent('select',this,d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);
-this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}if(this.menu==null){this.menu=new Roo.menu.DateMenu();}Roo.apply(this.menu.picker,{showClear:this.allowBlank,minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.useIso?'Y-m-d':this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))}
+}Roo.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(A)));this.value=this.parseDate(A);},parseDate:function(A){if(A instanceof Date){if(A<Date.parseDate(this.zeroValue,'Y-m-d')){return '';}return A;}if(!A||A instanceof Date){return A;
+}var v=Date.parseDate(A,this.format);if(!v&&this.useIso){v=Date.parseDate(A,'Y-m-d');}if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}for(var i=0,B=this.altFormatsArray.length;i<B&&!v;i++){v=Date.parseDate(A,this.altFormatsArray[i]);
+}}if(v<Date.parseDate(this.zeroValue,'Y-m-d')){v='';}return v;},formatDate:function(A,B){return (!A||!(A instanceof Date))?A:A.dateFormat(B||this.format);},menuListeners:{select:function(m,d){this.setValue(d);this.fireEvent('select',this,d);},show:function(){this.onFocus();
+},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}if(this.menu==null){this.menu=new Roo.menu.DateMenu();
+}Roo.apply(this.menu.picker,{showClear:this.allowBlank,minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.useIso?'Y-m-d':this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))}
 );this.menu.on(Roo.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}},isDirty:function(){if(this.disabled){return false;
 }if(typeof(this.startValue)==='undefined'){return false;}return String(this.getValue())!==String(this.startValue);},cleanLeadingSpace:function(e){return;}});
 // Roo/form/MonthField.js
 );this.menu.on(Roo.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}},isDirty:function(){if(this.disabled){return false;
 }if(typeof(this.startValue)==='undefined'){return false;}return String(this.getValue())!==String(this.startValue);},cleanLeadingSpace:function(e){return;}});
 // Roo/form/MonthField.js
@@ -904,98 +905,295 @@ this.el.on('DOMAttrModified',this.setFromHidden,this);this.el.on('propertychange
 Roo.form.Radio=function(){Roo.form.Radio.superclass.constructor.apply(this,arguments);};Roo.extend(Roo.form.Radio,Roo.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;
 },onRender:function(ct,A){Roo.form.Checkbox.superclass.onRender.call(this,ct,A);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel}
 );}if(this.checked){this.el.dom.checked='checked';}}});
 Roo.form.Radio=function(){Roo.form.Radio.superclass.constructor.apply(this,arguments);};Roo.extend(Roo.form.Radio,Roo.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;
 },onRender:function(ct,A){Roo.form.Checkbox.superclass.onRender.call(this,ct,A);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel}
 );}if(this.checked){this.el.dom.checked='checked';}}});
+// Roo/rtf/namespace.js
+Roo.rtf={};
+// Roo/rtf/Hex.js
+Roo.rtf.Hex=function(A){this.hexstr=A;};
+// Roo/rtf/Paragraph.js
+Roo.rtf.Paragraph=function(A){this.content=[];};
+// Roo/rtf/Span.js
+Roo.rtf.Span=function(A){this.value=A.value;};
+// Roo/rtf/Group.js
+Roo.rtf.Group=function(A){this.content=[];this.cn=[];};Roo.rtf.Group.prototype={ignorable:false,content:false,cn:false,addContent:function(A){this.content.push(A);},addChild:function(cn){this.cn.push(cn);},toDataURL:function(){var A=false;switch(true){case this.content.filter(function(a){return a.value=='pngblip'}
+).length>0:A="image/png";break;case this.content.filter(function(a){return a.value=='jpegblip'}).length>0:A="image/jpeg";break;default:return 'about:blank';}var B=this.content[this.content.length-1].value;return 'data:'+A+';base64,'+btoa(B.match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a,16));
+}).join(""));}};
+// Roo/rtf/Document.js
+Roo.rtf.Document=function(){this.rtlch=[];this.content=[];this.cn=[];};Roo.extend(Roo.rtf.Document,Roo.rtf.Group,{addChild:function(cn){this.cn.push(cn);switch(cn.type){case 'rtlch':case 'listtext':case 'shpinst':this.rtlch.push(cn);return;default:this[cn.type]=cn;
+}},getElementsByType:function(A){var B=[];this._getElementsByType(A,B,this.cn,'rtf');return B;},_getElementsByType:function(A,B,C,D){C.forEach(function(n,i){if(n.type==A){n.path=D+'/'+n.type+':'+i;B.push(n);}if(n.cn.length>0){this._getElementsByType(A,B,n.cn,D+'/'+n.type+':'+i);
+}},this);}});
+// Roo/rtf/Ctrl.js
+Roo.rtf.Ctrl=function(A){this.value=A.value;this.param=A.param;};
+// Roo/rtf/Parser.js
+Roo.rtf.Parser=function(A){this.text='';this.parserState=this.parseText;this.doc={};this.groupStack=[];this.hexStore=[];this.doc=false;this.groups=[];for(var ii=0;ii<A.length;++ii){++this.cpos;if(A[ii]==='\n'){++this.row;this.col=1;}else{++this.col;}this.parserState(A[ii]);
+}};Roo.rtf.Parser.prototype={text:'',controlWord:'',controlWordParam:'',hexChar:'',doc:false,group:false,groupStack:false,hexStore:false,cpos:0,row:1,col:1,push:function(el){var m='cmd'+el.type;if(typeof(this[m])=='undefined'){Roo.log('invalid cmd:'+el.type);
+return;}this[m](el);},flushHexStore:function(){if(this.hexStore.length<1){return;}var A=this.hexStore.map(function(B){return B.value;}).join('');this.group.addContent(new Roo.rtf.Hex(A));this.hexStore.splice(0)},cmdgroupstart:function(){this.flushHexStore();
+if(this.group){this.groupStack.push(this.group);}if(this.doc===false){this.group=this.doc=new Roo.rtf.Document();return;}this.group=new Roo.rtf.Group(this.group);},cmdignorable:function(){this.flushHexStore();this.group.ignorable=true;},cmdendparagraph:function(){this.flushHexStore();
+this.group.addContent(new Roo.rtf.Paragraph());},cmdgroupend:function(){this.flushHexStore();var A=this.group;this.group=this.groupStack.pop();if(this.group){this.group.addChild(A);}var B=this.group||this.doc;if(A.ignorable===false){this.groups.push(A);}}
+,cmdtext:function(A){this.flushHexStore();if(!this.group){}this.group.addContent(new Roo.rtf.Span(A));},cmdcontrolword:function(A){this.flushHexStore();if(!this.group.type){this.group.type=A.value;return;}this.group.addContent(new Roo.rtf.Ctrl(A));return;
+},cmdhexchar:function(A){this.hexStore.push(A);},cmderror:function(A){throw new Exception(A.value);},parseText:function(c){if(c==='\\'){this.parserState=this.parseEscapes;}else if(c==='{'){this.emitStartGroup();}else if(c==='}'){this.emitEndGroup();}else if(c==='\x0A'||c==='\x0D'){}
+else{this.text+=c;}},parseEscapes:function(c){if(c==='\\'||c==='{'||c==='}'){this.text+=c;this.parserState=this.parseText;}else{this.parserState=this.parseControlSymbol;this.parseControlSymbol(c);}},parseControlSymbol:function(c){if(c==='~'){this.text+='\u00a0';
+this.parserState=this.parseText}else if(c==='-'){this.text+='\u00ad';}else if(c==='_'){this.text+='\u2011';}else if(c==='*'){this.emitIgnorable();this.parserState=this.parseText;}else if(c==="'"){this.parserState=this.parseHexChar;}else if(c==='|'){this.emitFormula();
+this.parserState=this.parseText;}else if(c===':'){this.emitIndexSubEntry();this.parserState=this.parseText;}else if(c==='\x0a'){this.emitEndParagraph();this.parserState=this.parseText;}else if(c==='\x0d'){this.emitEndParagraph();this.parserState=this.parseText;
+}else{this.parserState=this.parseControlWord;this.parseControlWord(c);}},parseHexChar:function(c){if(/^[A-Fa-f0-9]$/.test(c)){this.hexChar+=c;if(this.hexChar.length>=2){this.emitHexChar();this.parserState=this.parseText;}return;}this.emitError("Invalid character \""+c+"\" in hex literal.");
+this.parserState=this.parseText;},parseControlWord:function(c){if(c===' '){this.emitControlWord();this.parserState=this.parseText;}else if(/^[-\d]$/.test(c)){this.parserState=this.parseControlWordParam;this.controlWordParam+=c;}else if(/^[A-Za-z]$/.test(c)){this.controlWord+=c;
+}else{this.emitControlWord();this.parserState=this.parseText;this.parseText(c);}},parseControlWordParam:function(c){if(/^\d$/.test(c)){this.controlWordParam+=c;}else if(c===' '){this.emitControlWord();this.parserState=this.parseText;}else{this.emitControlWord();
+this.parserState=this.parseText;this.parseText(c);}},emitText:function(){if(this.text===''){return;}this.push({type:'text',value:this.text,pos:this.cpos,row:this.row,col:this.col});this.text=''},emitControlWord:function(){this.emitText();if(this.controlWord===''){this.emitError('empty control word');
+}else{this.push({type:'controlword',value:this.controlWord,param:this.controlWordParam!==''&&Number(this.controlWordParam),pos:this.cpos,row:this.row,col:this.col});}this.controlWord='';this.controlWordParam='';},emitStartGroup:function(){this.emitText();
+this.push({type:'groupstart',pos:this.cpos,row:this.row,col:this.col});},emitEndGroup:function(){this.emitText();this.push({type:'groupend',pos:this.cpos,row:this.row,col:this.col});},emitIgnorable:function(){this.emitText();this.push({type:'ignorable',pos:this.cpos,row:this.row,col:this.col}
+);},emitHexChar:function(){this.emitText();this.push({type:'hexchar',value:this.hexChar,pos:this.cpos,row:this.row,col:this.col});this.hexChar=''},emitError:function(A){this.emitText();this.push({type:'error',value:A,row:this.row,col:this.col,char:this.cpos}
+);},emitEndParagraph:function(){this.emitText();this.push({type:'endparagraph',pos:this.cpos,row:this.row,col:this.col});}};
+// Roo/htmleditor/namespace.js
+Roo.htmleditor={};
+// Roo/htmleditor/Filter.js
+Roo.htmleditor.Filter=function(A){Roo.apply(this.cfg);};Roo.htmleditor.Filter.prototype={node:false,tag:false,replaceComment:false,replaceTag:false,walk:function(A){Roo.each(Array.from(A.childNodes),function(e){switch(true){case e.nodeType==8&&this.replaceComment!==false:this.replaceComment(e);
+return;case e.nodeType!=1:return;case this.tag===true:case typeof(this.tag)=='object'&&this.tag.indexOf(e.tagName)>-1:case typeof(this.tag)=='string'&&this.tag==e.tagName:if(this.replaceTag&&false===this.replaceTag(e)){return;}if(e.hasChildNodes()){this.walk(e);
+}return;default:if(e.hasChildNodes()){this.walk(e);}}},this);}};
+// Roo/htmleditor/FilterAttributes.js
+Roo.htmleditor.FilterAttributes=function(A){Roo.apply(this,A);this.attrib_black=this.attrib_black||[];this.attrib_white=this.attrib_white||[];this.attrib_clean=this.attrib_clean||[];this.style_white=this.style_white||[];this.style_black=this.style_black||[];
+this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterAttributes,Roo.htmleditor.Filter,{tag:true,attrib_black:false,attrib_clean:false,attrib_white:false,style_white:false,style_black:false,replaceTag:function(A){if(!A.attributes||!A.attributes.length){return true;
+}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(this.attrib_white.length&&this.attrib_white.indexOf(a.name.toLowerCase())<0){A.removeAttribute(a.name);continue;}if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;
+}if(this.attrib_black.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);continue;}if(this.attrib_clean.indexOf(a.name.toLowerCase())>-1){this.cleanAttr(A,a.name,a.value);continue;}if(a.name=='style'){this.cleanStyle(A,a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');
+}if(a.value.match(/^body$/)){A.removeAttribute('class');}continue;}}return true;},cleanAttr:function(A,n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)||v.match(/^data:/)){return;}if(v.match(/^#/)){return;
+}if(v.match(/^\{/)){return;}A.removeAttribute(n);},cleanStyle:function(A,n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var B=v.split(/;/);var C=[];Roo.each(B,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');if(!p.length){return true;}
+var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(this.style_black.length&&(this.style_black.indexOf(l)>-1||this.style_black.indexOf(l.toLowerCase())>-1)){return true;}if(this.style_white.length&&style_white.indexOf(l)<0&&style_white.indexOf(l.toLowerCase())<0){return true;
+}C.push(p);return true;},this);if(C.length){A.setAttribute(n,C.join(';'));}else{A.removeAttribute(n);}}});
+// Roo/htmleditor/FilterBlack.js
+Roo.htmleditor.FilterBlack=function(A){Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterBlack,Roo.htmleditor.Filter,{tag:true,replaceTag:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterComment.js
+Roo.htmleditor.FilterComment=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterComment,Roo.htmleditor.Filter,{replaceComment:function(n){n.parentNode.removeChild(n);}});
+// Roo/htmleditor/FilterKeepChildren.js
+Roo.htmleditor.FilterKeepChildren=function(A){Roo.apply(this,A);if(this.tag===false){return;}this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterKeepChildren,Roo.htmleditor.FilterBlack,{replaceTag:function(A){var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;
+i++){if(ar[i].nodeType==1){if((typeof(this.tag)=='object'&&this.tag.indexOf(ar[i].tagName)>-1)||(typeof(this.tag)=='string'&&this.tag==ar[i].tagName)){this.replaceTag(ar[i]);continue;}}}ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);
+A.parentNode.insertBefore(ar[i],A);if(this.tag!==false){this.walk(ar[i]);}}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterParagraph.js
+Roo.htmleditor.FilterParagraph=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterParagraph,Roo.htmleditor.Filter,{tag:'P',replaceTag:function(A){if(A.childNodes.length==1&&A.childNodes[0].nodeType==3&&A.childNodes[0].textContent.trim().length<1){A.parentNode.replaceChild(A.ownerDocument.createElement('BR'),A);
+return false;}var ar=Array.from(A.childNodes);for(var i=0;i<ar.length;i++){A.removeChild(ar[i]);A.parentNode.insertBefore(ar[i],A);}A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);A.parentNode.insertBefore(A.ownerDocument.createElement('BR'),A);
+A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterSpan.js
+Roo.htmleditor.FilterSpan=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterSpan,Roo.htmleditor.FilterKeepChildren,{tag:'SPAN',replaceTag:function(A){if(A.attributes&&A.attributes.length>0){return true;}Roo.htmleditor.FilterKeepChildren.prototype.replaceTag.call(this,A);
+return false;}});
+// Roo/htmleditor/FilterTableWidth.js
+Roo.htmleditor.FilterTableWidth=function(A){this.tag=['TABLE','TD','TR','TH','THEAD','TBODY'];this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterTableWidth,Roo.htmleditor.Filter,{replaceTag:function(A){if(A.hasAttribute('width')){A.removeAttribute('width');
+}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');
+if(!C.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterWord.js
+Roo.htmleditor.FilterWord=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterWord,Roo.htmleditor.Filter,{tag:true,replaceTag:function(A){if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;
+A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);
+return false;}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return false;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];
+A.removeChild(cn);A.parentNode.insertBefore(cn,A);this.replaceTag(cn);}A.parentNode.removeChild(A);return false;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
+if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
+}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}return true;}});
+// Roo/htmleditor/FilterStyleToTag.js
+Roo.htmleditor.FilterStyleToTag=function(A){this.tags={B:['fontWeight','bold'],I:['fontStyle','italic'],SUP:['verticalAlign','super'],SUB:['verticalAlign','sub']};Roo.apply(this,A);this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterStyleToTag,Roo.htmleditor.Filter,{tag:true,tags:false,replaceTag:function(A){if(A.getAttribute("style")===null){return true;
+}var B=[];for(var k in this.tags){if(A.style[this.tags[k][0]]==this.tags[k][1]){B.push(k);A.style.removeProperty(this.tags[k][0]);}}if(!B.length){return true;}var cn=Array.from(A.childNodes);var nn=A;Roo.each(B,function(t){var nc=A.ownerDocument.createElement(t);
+nn.appendChild(nc);nn=nc;});for(var i=0;i<cn.length;cn++){A.removeChild(cn[i]);nn.appendChild(cn[i]);}return true}})
+// Roo/htmleditor/FilterLongBr.js
+Roo.htmleditor.FilterLongBr=function(A){this.walk(A.node);};Roo.extend(Roo.htmleditor.FilterLongBr,Roo.htmleditor.Filter,{tag:'BR',replaceTag:function(A){var ps=A.nextSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.nextSibling;}if(!ps&&['TD','TH','LI','H1','H2','H3','H4','H5','H6'].indexOf(A.parentNode.tagName)>-1){A.parentNode.removeChild(A);
+return false;}if(!ps||ps.nodeType!=1){return false;}if(!ps||ps.tagName!='BR'){return false;}if(!A.previousSibling){return false;}var ps=A.previousSibling;while(ps&&ps.nodeType==3&&ps.nodeValue.trim().length<1){ps=ps.previousSibling;}if(!ps||ps.nodeType!=1){return false;
+}if(!ps||['BR','H1','H2','H3','H4','H5','H6'].indexOf(ps.tagName)<0){return false;}A.parentNode.removeChild(A);return false;}});
+// Roo/htmleditor/FilterBlock.js
+Roo.htmleditor.FilterBlock=function(A){Roo.apply(this,A);var qa=A.node.querySelectorAll;this.removeAttributes('data-block');this.removeAttributes('contenteditable');this.removeAttributes('id');};Roo.apply(Roo.htmleditor.FilterBlock.prototype,{node:true,removeAttributes:function(A){var ar=this.node.querySelectorAll('*['+A+']');
+for(var i=0;i<ar.length;i++){ar[i].removeAttribute(A);}}});
+// Roo/htmleditor/TidySerializer.js
+Roo.htmleditor.TidySerializer=function(A){Roo.apply(this,A);this.writer=new Roo.htmleditor.TidyWriter(A);};Roo.htmleditor.TidySerializer.prototype={inner:false,writer:false,serialize:function(A){var B=this.writer;var C=this;this.handlers={3:function(D){B.text(D.nodeValue,D);
+},8:function(D){B.comment(D.nodeValue);},7:function(D){B.pi(D.name,D.nodeValue);},10:function(D){B.doctype(D.nodeValue);},4:function(D){B.cdata(D.nodeValue);},11:function(D){D=D.firstChild;if(!D){return;}while(D){C.walk(D);D=D.nextSibling}}};B.reset();1!=A.nodeType||this.inner?this.handlers[11](A):this.walk(A);
+return B.getContent();},walk:function(A){var B,C,D,i,l,E,F=this.handlers[A.nodeType];if(F){F(A);return;}var G=A.nodeName;var H=A.childNodes.length<1;var I=this.writer;var J=A.attributes;I.start(A.nodeName,J,H,A);if(H){return;}A=A.firstChild;if(!A){I.end(G);
+return;}while(A){this.walk(A);A=A.nextSibling;}I.end(G);}};
+// Roo/htmleditor/TidyWriter.js
+Roo.htmleditor.TidyWriter=function(A){Roo.apply(this,A);this.html=[];this.state=[];this.encode=Roo.htmleditor.TidyEntities.getEncodeFunc(A.entity_encoding||'raw',A.entities);};Roo.htmleditor.TidyWriter.prototype={state:false,indent:'  ',indentstr:'',in_pre:false,in_inline:false,last_inline:false,encode:false,start:function(A,B,C,D){var i,l,E,F;
+var G=this.in_inline||Roo.htmleditor.TidyWriter.inline_elements.indexOf(A)>-1;var H=this.in_pre||Roo.htmleditor.TidyWriter.whitespace_elements.indexOf(A)>-1;var I=C?Roo.htmleditor.TidyWriter.shortend_elements.indexOf(A)>-1:false;var J=A=='BR'?false:G;if(!J&&!this.in_pre&&this.lastElementEndsWS()){i_inline=false;
+}var K=this.indentstr;if(!this.in_pre){if(G){if(A=='BR'){this.addLine();}else if(this.lastElementEndsWS()){this.addLine();}else{K='';}}else{this.addLine();}}else{K='';}this.html.push(K+'<',A.toLowerCase());if(B){for(i=0,l=B.length;i<l;i++){E=B[i];this.html.push(' ',E.name,'="',this.encode(E.value,true),'"');
+}}if(C){if(I){this.html[this.html.length]='/>';}else{this.html[this.html.length]='></'+A.toLowerCase()+'>';}var L=A=='BR'?false:this.in_inline;if(!L&&!this.in_pre){this.addLine();}return;}this.html[this.html.length]='>';this.pushState({indentstr:H?'':(this.indentstr+this.indent),in_pre:H,in_inline:G}
+);if(!G&&!H){this.addLine();}},lastElementEndsWS:function(){var A=this.html.length>0?this.html[this.html.length-1]:false;if(A===false){return true;}return A.match(/\s+$/);},end:function(A){var B;this.popState();var C='';var D=this.in_inline||Roo.htmleditor.TidyWriter.inline_elements.indexOf(A)>-1;
+if(!this.in_pre&&!D){this.addLine();C=this.indentstr;}this.html.push(C+'</',A.toLowerCase(),'>');this.last_inline=D;},text:function(A,B){if(A.length<1){return;}if(this.in_pre){this.html[this.html.length]=A;return;}if(this.in_inline){A=A.replace(/\s+/g,' ');
+if(A!=' '){A=A.replace(/\s+/,' ');if(B.nextSibling&&B.nextSibling.nodeType==1&&B.nextSibling.nodeName=='BR'){A=A.replace(/\s+$/g,'');}if(B.previousSibling&&B.previousSibling.nodeType==1&&B.previousSibling.nodeName=='BR'){A=this.indentstr+A.replace(/^\s+/g,'');
+}if(A.match(/\n/)){A=A.replace(/(?![^\n]{1,64}$)([^\n]{1,64})\s/g,'$1\n'+this.indentstr);A=A.replace(/\n\s+$/,'');}}this.html[this.html.length]=A;return;}var C=this.indentstr;A=A.replace(/\s+/g," ");if(B.previousSibling&&B.previousSibling.nodeType==1&&Roo.htmleditor.TidyWriter.inline_elements.indexOf(B.previousSibling.nodeName)>-1){C='';
+}else{this.addLine();A=A.replace(/^\s+/,'');}if(B.nextSibling&&B.nextSibling.nodeType==1&&Roo.htmleditor.TidyWriter.inline_elements.indexOf(B.nextSibling.nodeName)>-1){}else{A=A.replace(/\s+$/,'');}if(A.length<1){return;}if(!A.match(/\n/)){this.html.push(C+A);
+return;}A=this.indentstr+A.replace(/(?![^\n]{1,64}$)([^\n]{1,64})\s/g,'$1\n'+this.indentstr);A=A.replace(/\s+$/,'');this.html.push(A);},cdata:function(A){this.html.push('<![CDATA[',A,']]>');},comment:function(A){this.html.push('<!--',A,'-->');},pi:function(A,B){B?this.html.push('<?',A,' ',this.encode(B),'?>'):this.html.push('<?',A,'?>');
+this.indent!=''&&this.html.push('\n');},doctype:function(A){this.html.push('<!DOCTYPE',A,'>',this.indent!=''?'\n':'');},reset:function(){this.html.length=0;this.state=[];this.pushState({indentstr:'',in_pre:false,in_inline:false})},getContent:function(){return this.html.join('').replace(/\n$/,'');
+},pushState:function(A){this.state.push(A);Roo.apply(this,A);},popState:function(){if(this.state.length<1){return;}var A={in_pre:false,indentstr:''};this.state.pop();if(this.state.length>0){A=this.state[this.state.length-1];}Roo.apply(this,A);},addLine:function(){if(this.html.length<1){return;
+}var A=this.html[this.html.length-1];if(A.length>0&&'\n'!==A){this.html.push('\n');}}};Roo.htmleditor.TidyWriter.inline_elements=['SPAN','STRONG','B','EM','I','FONT','STRIKE','U','VAR','CITE','DFN','CODE','MARK','Q','SUP','SUB','SAMP','A'];Roo.htmleditor.TidyWriter.shortend_elements=['AREA','BASE','BASEFONT','BR','COL','FRAME','HR','IMG','INPUT','ISINDEX','LINK','','META','PARAM','EMBED','SOURCE','WBR','TRACK'];
+Roo.htmleditor.TidyWriter.whitespace_elements=['PRE','SCRIPT','NOSCRIPT','STYLE','TEXTAREA','VIDEO','AUDIO','IFRAME','OBJECT','CODE'];
+// Roo/htmleditor/TidyEntities.js
+Roo.htmleditor.TidyEntities={init:function(){this.namedEntities=this.buildEntitiesLookup(this.namedEntitiesData,32);},buildEntitiesLookup:function(A,B){var i,C,D,E={};if(!A){return {};}A=typeof(A)=='string'?A.split(','):A;B=B||10;for(i=0;i<A.length;i+=2){C=String.fromCharCode(parseInt(A[i],B));
+if(!this.baseEntities[C]){D='&'+A[i+1]+';';E[C]=D;E[D]=C;}}return E;},asciiMap:{128:'€',130:'‚',131:'ƒ',132:'„',133:'…',134:'†',135:'‡',136:'ˆ',137:'‰',138:'Š',139:'‹',140:'Œ',142:'Ž',145:'‘',146:'’',147:'“',148:'”',149:'•',150:'–',151:'—',152:'˜',153:'™',154:'š',155:'›',156:'œ',158:'ž',159:'Ÿ'}
+,baseEntities:{'"':'&quot;','\'':'&#39;','<':'&lt;','>':'&gt;','&':'&amp;','`':'&#96;'},reverseEntities:{'&lt;':'<','&gt;':'>','&amp;':'&','&quot;':'"','&apos;':'\''},attrsCharsRegExp:/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,textCharsRegExp:/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,rawCharsRegExp:/[<>&\"\']/g,entityRegExp:/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,namedEntities:false,namedEntitiesData:['50','nbsp','51','iexcl','52','cent','53','pound','54','curren','55','yen','56','brvbar','57','sect','58','uml','59','copy','5a','ordf','5b','laquo','5c','not','5d','shy','5e','reg','5f','macr','5g','deg','5h','plusmn','5i','sup2','5j','sup3','5k','acute','5l','micro','5m','para','5n','middot','5o','cedil','5p','sup1','5q','ordm','5r','raquo','5s','frac14','5t','frac12','5u','frac34','5v','iquest','60','Agrave','61','Aacute','62','Acirc','63','Atilde','64','Auml','65','Aring','66','AElig','67','Ccedil','68','Egrave','69','Eacute','6a','Ecirc','6b','Euml','6c','Igrave','6d','Iacute','6e','Icirc','6f','Iuml','6g','ETH','6h','Ntilde','6i','Ograve','6j','Oacute','6k','Ocirc','6l','Otilde','6m','Ouml','6n','times','6o','Oslash','6p','Ugrave','6q','Uacute','6r','Ucirc','6s','Uuml','6t','Yacute','6u','THORN','6v','szlig','70','agrave','71','aacute','72','acirc','73','atilde','74','auml','75','aring','76','aelig','77','ccedil','78','egrave','79','eacute','7a','ecirc','7b','euml','7c','igrave','7d','iacute','7e','icirc','7f','iuml','7g','eth','7h','ntilde','7i','ograve','7j','oacute','7k','ocirc','7l','otilde','7m','ouml','7n','divide','7o','oslash','7p','ugrave','7q','uacute','7r','ucirc','7s','uuml','7t','yacute','7u','thorn','7v','yuml','ci','fnof','sh','Alpha','si','Beta','sj','Gamma','sk','Delta','sl','Epsilon','sm','Zeta','sn','Eta','so','Theta','sp','Iota','sq','Kappa','sr','Lambda','ss','Mu','st','Nu','su','Xi','sv','Omicron','t0','Pi','t1','Rho','t3','Sigma','t4','Tau','t5','Upsilon','t6','Phi','t7','Chi','t8','Psi','t9','Omega','th','alpha','ti','beta','tj','gamma','tk','delta','tl','epsilon','tm','zeta','tn','eta','to','theta','tp','iota','tq','kappa','tr','lambda','ts','mu','tt','nu','tu','xi','tv','omicron','u0','pi','u1','rho','u2','sigmaf','u3','sigma','u4','tau','u5','upsilon','u6','phi','u7','chi','u8','psi','u9','omega','uh','thetasym','ui','upsih','um','piv','812','bull','816','hellip','81i','prime','81j','Prime','81u','oline','824','frasl','88o','weierp','88h','image','88s','real','892','trade','89l','alefsym','8cg','larr','8ch','uarr','8ci','rarr','8cj','darr','8ck','harr','8dl','crarr','8eg','lArr','8eh','uArr','8ei','rArr','8ej','dArr','8ek','hArr','8g0','forall','8g2','part','8g3','exist','8g5','empty','8g7','nabla','8g8','isin','8g9','notin','8gb','ni','8gf','prod','8gh','sum','8gi','minus','8gn','lowast','8gq','radic','8gt','prop','8gu','infin','8h0','ang','8h7','and','8h8','or','8h9','cap','8ha','cup','8hb','int','8hk','there4','8hs','sim','8i5','cong','8i8','asymp','8j0','ne','8j1','equiv','8j4','le','8j5','ge','8k2','sub','8k3','sup','8k4','nsub','8k6','sube','8k7','supe','8kl','oplus','8kn','otimes','8l5','perp','8m5','sdot','8o8','lceil','8o9','rceil','8oa','lfloor','8ob','rfloor','8p9','lang','8pa','rang','9ea','loz','9j0','spades','9j3','clubs','9j5','hearts','9j6','diams','ai','OElig','aj','oelig','b0','Scaron','b1','scaron','bo','Yuml','m6','circ','ms','tilde','802','ensp','803','emsp','809','thinsp','80c','zwnj','80d','zwj','80e','lrm','80f','rlm','80j','ndash','80k','mdash','80o','lsquo','80p','rsquo','80q','sbquo','80s','ldquo','80t','rdquo','80u','bdquo','810','dagger','811','Dagger','81g','permil','81p','lsaquo','81q','rsaquo','85c','euro'],encodeRaw:function(A,B){var t=this;
+return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(C){return t.baseEntities[C]||C;});},encodeAllRaw:function(A){var t=this;return (''+A).replace(this.rawCharsRegExp,function(B){return t.baseEntities[B]||B;});},encodeNumeric:function(A,B){var t=this;
+return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(C){if(C.length>1){return '&#'+(1024*(C.charCodeAt(0)-55296)+(C.charCodeAt(1)-56320)+65536)+';';}return t.baseEntities[C]||'&#'+C.charCodeAt(0)+';';});},encodeNamed:function(A,B,C){var t=this;
+C=C||this.namedEntities;return A.replace(B?this.attrsCharsRegExp:this.textCharsRegExp,function(D){return t.baseEntities[D]||C[D]||D;});},getEncodeFunc:function(A,B){B=this.buildEntitiesLookup(B)||this.namedEntities;var t=this;function encodeNamedAndNumeric(C,D){return C.replace(D?t.attrsCharsRegExp:t.textCharsRegExp,function(E){return t.baseEntities[E]||B[E]||'&#'+E.charCodeAt(0)+';'||E;
+});}function encodeCustomNamed(C,D){return t.encodeNamed(C,D,B);}A=this.makeMap(A.replace(/\+/g,','));if(A.named&&A.numeric){return this.encodeNamedAndNumeric;}if(A.named){if(B){return encodeCustomNamed;}return this.encodeNamed;}if(A.numeric){return this.encodeNumeric;
+}return this.encodeRaw;},decode:function(A){var t=this;return A.replace(this.entityRegExp,function(B,C){if(C){C='x'===C.charAt(0).toLowerCase()?parseInt(C.substr(1),16):parseInt(C,10);if(C>65535){C-=65536;return String.fromCharCode(55296+(C>>10),56320+(1023&C));
+}return t.asciiMap[C]||String.fromCharCode(C);}return t.reverseEntities[B]||t.namedEntities[B]||t.nativeDecode(B);});},nativeDecode:function(A){return A;},makeMap:function(A,B,C){var i;A=A||[];B=B||',';if(typeof A=="string"){A=A.split(B);}C=C||{};i=A.length;
+while(i--){C[A[i]]={};}return C;}};Roo.htmleditor.TidyEntities.init();
+// Roo/htmleditor/KeyEnter.js
+Roo.htmleditor.KeyEnter=function(A){Roo.apply(this,A);Roo.get(this.core.doc.body).on('keypress',this.keypress,this);};Roo.htmleditor.KeyEnter.prototype={core:false,keypress:function(e){if(e.charCode!=13&&e.charCode!=10){Roo.log([e.charCode,e]);return true;
+}e.preventDefault();var A=this.core.doc;var B=this.core.getSelection();var C=B.getRangeAt(0);var n=C.commonAncestorContainer;var pc=C.closest(['ol','ul']);var D=C.closest('li');if(!pc||e.ctrlKey){B.insertNode('br','after');this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}if(D.innerText.trim()==''&&D.previousSibling&&D.previousSibling.nodeName=='LI'&&D.previousSibling.innerText.trim()==''){D.parentNode.removeChild(D.previousSibling);B.cursorAfter(pc);this.core.undoManager.addEvent();
+this.core.fireEditorEvent(e);return false;}var li=A.createElement('LI');li.innerHTML='&nbsp;';if(!D||!D.firstSibling){pc.appendChild(li);}else{D.parentNode.insertBefore(li,D.firstSibling);}B.cursorText(li.firstChild);this.core.undoManager.addEvent();this.core.fireEditorEvent(e);
+return false;}};
+// Roo/htmleditor/Block.js
+Roo.htmleditor.Block=function(A){};Roo.htmleditor.Block.factory=function(A){var cc=Roo.htmleditor.Block.cache;var id=Roo.get(A).id;if(typeof(cc[id])!='undefined'&&(!cc[id].node||cc[id].node.closest('body'))){Roo.htmleditor.Block.cache[id].readElement(A);return Roo.htmleditor.Block.cache[id];
+}var db=A.getAttribute('data-block');if(!db){db=A.nodeName.toLowerCase().toUpperCaseFirst();}var B=Roo.htmleditor['Block'+db];if(typeof(B)=='undefined'){Roo.log("OOps missing block : "+'Block'+db);return false;}Roo.htmleditor.Block.cache[id]=new B({node:A}
+);return Roo.htmleditor.Block.cache[id];};Roo.htmleditor.Block.initAll=function(A,B){if(typeof(B)=='undefined'){var ia=Roo.htmleditor.Block.initAll;ia(A,'table');ia(A,'td');ia(A,'figure');return;}Roo.each(Roo.get(A).query(B),function(e){Roo.htmleditor.Block.factory(e);
+},this);};Roo.htmleditor.Block.cache={};Roo.htmleditor.Block.prototype={node:false,friendly_name:'Based Block',deleteTitle:false,context:false,updateElement:function(A){Roo.DomHelper.update(A===undefined?this.node:A,this.toObject());},toHTML:function(){return Roo.DomHelper.markup(this.toObject());
+},getVal:function(A,B,C,D){var n=A;if(B!==true&&n.tagName!=B.toUpperCase()){n=A.getElementsByTagName(B).item(0);}if(!n){return '';}if(C=='html'){return n.innerHTML;}if(C=='style'){return n.style[D];}return n.hasAttribute(C)?n.getAttribute(C):'';},toObject:function(){return {}
+;},readElement:function(A){}};
+// Roo/htmleditor/BlockFigure.js
+Roo.htmleditor.BlockFigure=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockFigure,Roo.htmleditor.Block,{image_src:'',align:'center',caption:'',caption_display:'block',width:'100%',cls:'',href:'',video_url:'',text_align:'left',friendly_name:'Image with caption',deleteTitle:"Delete Image and Caption",contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Source: ",xns:C.Toolbar},{xtype:'Button',text:'Change Image URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Image Source URL",msg:"Enter the url for the image",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.image_src=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.image_src});}},xns:C.Toolbar},{xtype:'Button',text:'Change Link URL',listeners:{click:function(F,G){var b=B();Roo.MessageBox.show({title:"Link URL",msg:"Enter the url for the link - leave blank to have no link",buttons:Roo.MessageBox.OKCANCEL,fn:function(H,I){if(H!='ok'){return;
+}b.href=I;b.updateElement();D();A.editorcore.onEditorEvent();},minWidth:250,prompt:true,modal:true,value:b.href});}},xns:C.Toolbar},{xtype:'Button',text:'Show Video URL',listeners:{click:function(F,G){Roo.MessageBox.alert("Video URL",B().video_url==''?'This image is not linked ot a video':'The image is linked to: <a target="_new" href="'+B().video_url+'">'+B().video_url+'</a>');
+}},xns:C.Toolbar},{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['auto'],['50%'],['100%']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Align: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:70,name:'align',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.align=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['left'],['right'],['center']],fields:['val'],xns:Roo.data}},{xtype:'Button',text:'Hide Caption',name:'caption_display',pressed:false,enableToggle:true,setValue:function(v){this.toggle(v=='block'?false:true);
+},listeners:{toggle:function(F,G){var b=B();b.caption_display=b.caption_display=='block'?'none':'block';this.setText(b.caption_display=='block'?"Hide Caption":"Show Caption");b.updateElement();D();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();
+}},xns:C.Toolbar}];},toObject:function(){var d=document.createElement('div');d.innerHTML=this.caption;var m=this.width=='50%'&&this.align=='center'?'0 auto':0;var A={tag:'img',contenteditable:'false',src:this.image_src,alt:d.innerText.replace(/\n/g," ").replace(/\s+/g,' ').trim(),style:{width:'auto','max-width':'100%',margin:'0px'}
+};if(this.href.length>0){A={tag:'a',href:this.href,contenteditable:'true',cn:[A]};}if(this.video_url.length>0){A={tag:'div',cls:this.cls,frameborder:0,allowfullscreen:true,width:420,height:315,src:this.video_url,cn:[A]};}var B=this.caption_display=='hidden'?this.caption:(this.caption.length?this.caption:"Caption");
+return {tag:'figure','data-block':'Figure',contenteditable:'false',style:{display:'block',float:this.align,'max-width':this.width,width:'auto',margin:m,padding:'10px'},align:this.align,cn:[A,{tag:'figcaption',style:{'text-align':'left','margin-top':'16px','font-size':'16px','line-height':'24px',display:this.caption_display}
+,cls:this.cls.length>0?(this.cls+'-thumbnail'):'',cn:[{tag:'i',contenteditable:true,html:B}]}]};},readElement:function(A){this.video_url=this.getVal(A,'div','src');this.cls=this.getVal(A,'div','class');this.href=this.getVal(A,'a','href');this.image_src=this.getVal(A,'img','src');
+this.align=this.getVal(A,'figure','align');this.caption=this.getVal(A,'figcaption','html');if(this.caption.trim().match(/^<i[^>]*>/i)){this.caption=this.caption.trim().replace(/^<i[^>]*>/i,'').replace(/^<\/i>$/i,'');}this.width=this.getVal(A,'figure','style','max-width');
+},removeNode:function(){return this.node;}})
+// Roo/htmleditor/BlockTable.js
+Roo.htmleditor.BlockTable=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);if(!A.node){this.rows=[];for(var r=0;r<this.no_row;r++){this.rows[r]=[];for(var c=0;c<this.no_col;c++){this.rows[r][c]=this.emptyCell();
+}}}};Roo.extend(Roo.htmleditor.BlockTable,Roo.htmleditor.Block,{rows:false,no_col:1,no_row:1,width:'100%',friendly_name:'Table',deleteTitle:'Delete Table',contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);};var C=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;
+var D=A.editorcore.syncValue;var E={};return [{xtype:'TextItem',text:"Width: ",xns:C.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'width',listeners:{select:function(F,r,G){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.width=r.get('val');b.updateElement();D();A.editorcore.onEditorEvent();}},xns:C.form,store:{xtype:'SimpleStore',data:[['100%'],['auto']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Columns: ",xns:C.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().removeColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().addColumn();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'TextItem',text:"Rows: ",xns:C.Toolbar}
+,{xtype:'Button',text:'-',listeners:{click:function(F,e){A.editorcore.selectNode(A.tb.selectedNode);B().removeRow();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(F,e){B().addRow();D();A.editorcore.onEditorEvent();
+}},xns:C.Toolbar},{xtype:'Button',text:'Reset Column Widths',listeners:{click:function(F,e){B().resetWidths();D();A.editorcore.onEditorEvent();}},xns:C.Toolbar}];},toObject:function(){var A={tag:'table',contenteditable:'false','data-block':'Table',style:{width:this.width,border:'solid 1px #000','border-collapse':'collapse'}
+,cn:[{tag:'tbody',cn:[]}]};var B=0;Roo.each(this.rows,function(C){var tr={tag:'tr',style:{margin:'6px',border:'solid 1px #000',textAlign:'left'},cn:[]};A.cn[0].cn.push(tr);var nc=0;Roo.each(C,function(D){var td={tag:'td',contenteditable:'true','data-block':'Td',html:D.html,style:D.style}
+;if(D.colspan>1){td.colspan=D.colspan;nc+=D.colspan;}else{nc++;}if(D.rowspan>1){td.rowspan=D.rowspan;}tr.cn.push(td);},this);B=Math.max(nc,B);},this);B++;return A;},readElement:function(A){A=A?A:this.node;this.width=this.getVal(A,true,'style','width')||'100%';
+this.rows=[];this.no_row=0;var B=Array.from(A.rows);B.forEach(function(tr){var C=[];this.rows.push(C);this.no_row++;var D=0;Array.from(tr.cells).forEach(function(td){var E={colspan:td.hasAttribute('colspan')?td.getAttribute('colspan')*1:1,rowspan:td.hasAttribute('rowspan')?td.getAttribute('rowspan')*1:1,style:td.hasAttribute('style')?td.getAttribute('style'):'',html:td.innerHTML}
+;D+=E.colspan;C.push(E);},this);this.no_col=Math.max(this.no_col,D);},this);},normalizeRows:function(){var A=[];var B=-1;this.rows.forEach(function(C){B++;A[B]=[];C=this.normalizeRow(C);var D=0;C.forEach(function(c){while(typeof(A[B][D])!='undefined'){D++;
+}if(typeof(A[B])=='undefined'){A[B]=[];}A[B][D]=c;c.row=B;c.col=D;if(c.rowspan<2){return;}for(var i=1;i<c.rowspan;i++){if(typeof(A[B+i])=='undefined'){A[B+i]=[];}A[B+i][D]=c;}});},this);return A;},normalizeRow:function(A){var B=[];A.forEach(function(c){if(c.colspan<2){B.push(c);
+return;}for(var i=0;i<c.colspan;i++){B.push(c);}});return B;},deleteColumn:function(A){if(!A||A.type!='col'){return;}if(this.no_col<2){return;}this.rows.forEach(function(B){var C=this.normalizeRow(B);var D=C[A.col];if(D.colspan>1){D.colspan--;}else{B.remove(D);
+}},this);this.no_col--;},removeColumn:function(){this.deleteColumn({type:'col',col:this.no_col-1});this.updateElement();},addColumn:function(){this.rows.forEach(function(A){A.push(this.emptyCell());},this);this.updateElement();},deleteRow:function(A){if(!A||A.type!='row'){return;
+}if(this.no_row<2){return;}var B=this.normalizeRows();B[A.row].forEach(function(D){if(D.rowspan>1){D.rowspan--;}else{D.remove=1;}},this);var C=[];this.rows.forEach(function(D){newrow=[];D.forEach(function(c){if(typeof(c.remove)=='undefined'){newrow.push(c);
+}});if(newrow.length>0){C.push(D);}});this.rows=C;this.no_row--;this.updateElement();},removeRow:function(){this.deleteRow({type:'row',row:this.no_row-1});},addRow:function(){var A=[];for(var i=0;i<this.no_col;i++){A.push(this.emptyCell());}this.rows.push(A);
+this.updateElement();},emptyCell:function(){return (new Roo.htmleditor.BlockTd({})).toObject();},removeNode:function(){return this.node;},resetWidths:function(){Array.from(this.node.getElementsByTagName('td')).forEach(function(n){var nn=Roo.htmleditor.Block.factory(n);
+nn.width='';nn.updateElement(n);});}})
+// Roo/htmleditor/BlockTd.js
+Roo.htmleditor.BlockTd=function(A){if(A.node){this.readElement(A.node);this.updateElement(A.node);}Roo.apply(this,A);};Roo.extend(Roo.htmleditor.BlockTd,Roo.htmleditor.Block,{node:false,width:'',textAlign:'left',valign:'top',colspan:1,rowspan:1,friendly_name:'Table Cell',deleteTitle:false,contextMenu:function(A){var B=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode);
+};var C=function(){return Roo.htmleditor.Block.factory(A.tb.selectedNode.closest('table'));};var lr=false;var D=function(){lr=A.editorcore.getSelection().getRangeAt(0);};var restoreSel=function(){if(lr){(function(){A.editorcore.focus();var cr=A.editorcore.getSelection();
+cr.removeAllRanges();cr.addRange(lr);A.editorcore.onEditorEvent();}).defer(10,this);}};var rooui=typeof(Roo.bootstrap)=='undefined'?Roo:Roo.bootstrap;var E=A.editorcore.syncValue;var F={};return [{xtype:'Button',text:'Edit Table',listeners:{click:function(){var t=A.tb.selectedNode.closest('table');
+A.editorcore.selectNode(t);A.editorcore.onEditorEvent();}}},{xtype:'TextItem',text:"Column Width: ",xns:rooui.Toolbar},{xtype:'Button',text:'-',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().shrinkColumn();E();A.editorcore.onEditorEvent();
+}},xns:rooui.Toolbar},{xtype:'Button',text:'+',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().growColumn();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"Vertical Align: ",xns:rooui.Toolbar},{xtype:'ComboBox',allowBlank:false,displayField:'val',editable:true,listWidth:100,triggerAction:'all',typeAhead:true,valueField:'val',width:100,name:'valign',listeners:{select:function(G,r,H){A.editorcore.selectNode(A.tb.selectedNode);
+var b=B();b.valign=r.get('val');b.updateElement();E();A.editorcore.onEditorEvent();}},xns:rooui.form,store:{xtype:'SimpleStore',data:[['top'],['middle'],['bottom']],fields:['val'],xns:Roo.data}},{xtype:'TextItem',text:"Merge Cells: ",xns:rooui.Toolbar},{xtype:'Button',text:'Right',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);
+B().mergeRight();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Button',text:'Below',listeners:{click:function(G,e){A.editorcore.selectNode(A.tb.selectedNode);B().mergeBelow();E();A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'TextItem',text:"| ",xns:rooui.Toolbar}
+,{xtype:'Button',text:'Split',listeners:{click:function(G,e){B().split();E();A.editorcore.selectNode(A.tb.selectedNode);A.editorcore.onEditorEvent();}},xns:rooui.Toolbar},{xtype:'Fill',xns:rooui.Toolbar},{xtype:'Button',text:'Delete',xns:rooui.Toolbar,menu:{xtype:'Menu',xns:rooui.menu,items:[{xtype:'Item',html:'Column',listeners:{click:function(G,e){var t=C();
+B().deleteColumn();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu},{xtype:'Item',html:'Row',listeners:{click:function(G,e){var t=C();B().deleteRow();E();A.editorcore.selectNode(t.node);A.editorcore.onEditorEvent();}},xns:rooui.menu}
+,{xtype:'Separator',xns:rooui.menu},{xtype:'Item',html:'Table',listeners:{click:function(G,e){var t=C();var nn=t.node.nextSibling||t.node.previousSibling;t.node.parentNode.removeChild(t.node);if(nn){A.editorcore.selectNode(nn,true);}A.editorcore.onEditorEvent();
+}},xns:rooui.menu}]}}];},toObject:function(){var A={tag:'td',contenteditable:'true','data-block':'Td',valign:this.valign,style:{'text-align':this.textAlign,border:'solid 1px rgb(0, 0, 0)','border-collapse':'collapse',padding:'6px','vertical-align':this.valign}
+,html:this.html};if(this.width!=''){A.width=this.width;A.style.width=this.width;}if(this.colspan>1){A.colspan=this.colspan;}if(this.rowspan>1){A.rowspan=this.rowspan;}return A;},readElement:function(A){A=A?A:this.node;this.width=A.style.width;this.colspan=Math.max(1,1*A.getAttribute('colspan'));
+this.rowspan=Math.max(1,1*A.getAttribute('rowspan'));this.html=A.innerHTML;},emptyCell:function(){return {colspan:1,rowspan:1,textAlign:'left',html:"&nbsp;"};},removeNode:function(){return this.node.closest('table');},cellData:false,colWidths:false,toTableArray:function(){var A=[];
+var B=this.node.closest('tr').closest('table');Array.from(B.rows).forEach(function(r,ri){A[ri]=[];});var rn=0;this.colWidths=[];var C=true;Array.from(B.rows).forEach(function(r,ri){var cn=0;Array.from(r.cells).forEach(function(ce,ci){var c={cell:ce,row:rn,col:cn,colspan:ce.colSpan,rowspan:ce.rowSpan}
+;if(ce.isEqualNode(this.node)){this.cellData=c;}if(typeof(A[rn][cn])!='undefined'){while(typeof(A[rn][cn])!='undefined'){cn++;}c.col=cn;}if(typeof(this.colWidths[cn])=='undefined'){this.colWidths[cn]=ce.style.width;if(this.colWidths[cn]!=''){C=false;}}if(c.colspan<2&&c.rowspan<2){A[rn][cn]=c;
+cn++;return;}for(var j=0;j<c.rowspan;j++){if(typeof(A[rn+j])=='undefined'){continue;}A[rn+j][cn]=c;for(var i=0;i<c.colspan;i++){A[rn+j][cn+i]=c;}}cn+=c.colspan;},this);rn++;},this);if(C){this.colWidths[0]=false;}return A;},mergeRight:function(){var tr=this.node.closest('tr');
+var i=Array.prototype.indexOf.call(tr.childNodes,this.node);if(i>=tr.childNodes.length-1){return;}var A=this.toTableArray();if(typeof(A[this.cellData.row][this.cellData.col+this.cellData.colspan])=='undefined'){return;}var rc=A[this.cellData.row][this.cellData.col+this.cellData.colspan];
+if(rc.rowspan!=this.cellData.rowspan||rc.row!=this.cellData.row){return;}this.node.innerHTML+=' '+rc.cell.innerHTML;tr.removeChild(rc.cell);this.colspan+=rc.colspan;this.node.setAttribute('colspan',this.colspan);},mergeBelow:function(){var A=this.toTableArray();
+if(typeof(A[this.cellData.row+this.cellData.rowspan])=='undefined'){return;}if(typeof(A[this.cellData.row+this.cellData.rowspan][this.cellData.col])=='undefined'){return;}var rc=A[this.cellData.row+this.cellData.rowspan][this.cellData.col];if(rc.colspan!=this.cellData.colspan||rc.col!=this.cellData.col){return;
+}this.node.innerHTML=this.node.innerHTML+rc.cell.innerHTML;rc.cell.parentNode.removeChild(rc.cell);this.rowspan+=rc.rowspan;this.node.setAttribute('rowspan',this.rowspan);},split:function(){if(this.node.rowSpan<2&&this.node.colSpan<2){return;}var A=this.toTableArray();
+var cd=this.cellData;this.rowspan=1;this.colspan=1;for(var r=cd.row;r<cd.row+cd.rowspan;r++){for(var c=cd.col;c<cd.col+cd.colspan;c++){if(r==cd.row&&c==cd.col){this.node.removeAttribute('rowspan');this.node.removeAttribute('colspan');continue;}var B=this.node.cloneNode();
+B.removeAttribute('id');B.innerHTML='';A[r][c]={cell:B,col:c,row:r,colspan:1,rowspan:1};}}this.redrawAllCells(A);},redrawAllCells:function(A){var B=this.node.closest('tr').closest('table');var C=B.rows[0].parentNode;Array.from(B.rows).forEach(function(r,ri){Array.from(r.cells).forEach(function(ce,ci){ce.parentNode.removeChild(ce);
+});r.parentNode.removeChild(r);});for(var r=0;r<A.length;r++){var re=B.rows[r];var re=B.ownerDocument.createElement('tr');C.appendChild(re);for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}re.appendChild(A[r][c].cell);A[r][c].cell=false;}
+}},updateWidths:function(A){for(var r=0;r<A.length;r++){for(var c=0;c<A[r].length;c++){if(A[r][c].cell===false){continue;}if(this.colWidths[0]!=false&&A[r][c].colspan<2){var el=Roo.htmleditor.Block.factory(A[r][c].cell);el.width=Math.floor(this.colWidths[c])+'%';
+el.updateElement(el.node);}A[r][c].cell=false;}}},normalizeWidths:function(A){if(this.colWidths[0]===false){var nw=100.0/this.colWidths.length;this.colWidths.forEach(function(w,i){this.colWidths[i]=nw;},this);return;}var t=0,B=[];this.colWidths.forEach(function(w,i){this.colWidths[i]=this.colWidths[i]==''?0:(this.colWidths[i]+'').replace(/[^0-9]+/g,'')*1;
+var D=this.colWidths[i];if(D>0){t+=D;return;}B.push(i);},this);var nc=this.colWidths.length;if(B.length){var C=(nc-B.length)/(1.0*nc);var t=C*t;var ew=(100-t)/(1.0*B.length);this.colWidths.forEach(function(w,i){if(w>0){this.colWidths[i]=w*C;return;}this.colWidths[i]=ew;
+},this);}},shrinkColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*0.8;if(nw<5){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;
+return;}this.colWidths[i]+=C},this);this.updateWidths(A);},growColumn:function(){var A=this.toTableArray();this.normalizeWidths(A);var B=this.cellData.col;var nw=this.colWidths[B]*1.2;if(nw>90){return;}var C=(this.colWidths[B]*0.2)/(this.colWidths.length-1);
+this.colWidths.forEach(function(w,i){if(i==B){this.colWidths[i]=nw;return;}this.colWidths[i]-=C},this);this.updateWidths(A);},deleteRow:function(){var A=this.toTableArray();for(var i=0;i<A[this.cellData.row].length;i++){var c=A[this.cellData.row][i];if(c.row!=this.cellData.row){c.rowspan--;
+c.cell.setAttribute('rowspan',c.rowspan);continue;}if(c.rowspan>1){c.rowspan--;c.cell.setAttribute('rowspan',c.rowspan);}}A.splice(this.cellData.row,1);this.redrawAllCells(A);},deleteColumn:function(){var A=this.toTableArray();for(var i=0;i<A.length;i++){var c=A[i][this.cellData.col];
+if(c.col!=this.cellData.col){A[i][this.cellData.col].colspan--;}else if(c.colspan>1){c.colspan--;c.cell.setAttribute('colspan',c.colspan);}A[i].splice(this.cellData.col,1);}this.redrawAllCells(A);}})
 // Roo/HtmlEditorCore.js
 // Roo/HtmlEditorCore.js
-Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,stylesheets:false,allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',getDocMarkup:function(){var st='';
+Roo.HtmlEditorCore=function(A){Roo.HtmlEditorCore.superclass.constructor.call(this,A);this.addEvents({initialize:true,activate:true,beforesync:true,beforepush:true,sync:true,push:true,editorevent:true});this.applyBlacklists();};Roo.extend(Roo.HtmlEditorCore,Roo.Component,{owner:false,resizable:false,height:300,width:500,autoClean:true,enableBlocks:true,stylesheets:false,language:'en',allowComments:false,frameId:false,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Roo.emptyFn,iframePad:3,hideMode:'offsets',clearUp:true,black:false,white:false,bodyCls:'',undoManager:false,getDocMarkup:function(){var st='';
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
 if(this.stylesheets===false){Roo.get(document.head).select('style').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);});Roo.get(document.head).select('link').each(function(B){st+=B.dom.outerHTML||new XMLSerializer().serializeToString(B.dom);
-});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';}
-}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';var A='roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
+});}else if(!this.stylesheets.length){st='<style type="text/css">'+'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}'+'</style>';}else{for(var i in this.stylesheets){if(typeof(this.stylesheets[i])!='string'){continue;}st+='<link rel="stylesheet" href="'+this.stylesheets[i]+'" type="text/css">';
+}}st+='<style type="text/css">'+'IMG { cursor: pointer } '+'</style>';st+='<meta name="google" content="notranslate">';var A='notranslate roo-htmleditor-body';if(this.bodyCls.length){A+=' '+this.bodyCls;}return '<html  class="notranslate" translate="no"><head>'+st+' </head><body contenteditable="true" data-enable-grammerly="true" class="'+A+'"></body></html>';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
 },onRender:function(ct,A){var _t=this;this.el=this.owner.inputEl?this.owner.inputEl():this.owner.el;this.el.dom.style.border='0 none';this.el.dom.setAttribute('tabIndex',-1);this.el.addClass('x-hidden hide');if(Roo.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
 this.frameId=Roo.id();var B=this.owner.wrap.createChild({tag:'iframe',cls:'form-control',id:this.frameId,name:this.frameId,frameBorder:'no','src':Roo.SSL_SECURE_URL?Roo.SSL_SECURE_URL:"javascript:false"},this.el);this.iframe=B.dom;this.assignDocWin();this.doc.designMode='on';
 this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var C={run:function(){this.assignDocWin();if(this.doc.body||this.doc.readyState=='complete'){try{this.doc.designMode="on";}catch(e){return;}Roo.TaskMgr.stop(C);this.initEditor.defer(10,this);
 }},interval:10,duration:10000,scope:this};Roo.TaskMgr.start(C);},onResize:function(w,h){Roo.log('resize: '+w+','+h);if(!this.iframe){return;}if(typeof w=='number'){this.iframe.style.width=w+'px';}if(typeof h=='number'){this.iframe.style.height=h+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(h-(this.iframePad*2))+'px';
-}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide']);this.deferFocus();}},cleanHtml:function(A){A=String(A);if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');
-}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){var bd=(this.doc.body||this.doc.documentElement);var A=bd.innerHTML;if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){A='<div style="'+m[0]+'">'+A+'</div>';
-}}A=this.cleanHtml(A);A=A.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(B){var cc=B.charCodeAt();if(B.length==2){var C=B.charCodeAt(0)-0xD800;var D=B.charCodeAt(1)-0xDC00;cc=(C*0x400)+D+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return B;
-}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,A)!==false){this.el.dom.value=A;this.owner.fireEvent('sync',this,A);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);
-d.innerHTML=v;this.cleanUpPaste();this.el.dom.value=d.innerHTML;this.owner.fireEvent('push',this,v);}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;
-if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);
-}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);A.bgProperties='fixed';Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this}
-);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;this.owner.fireEvent('initialize',this);this.pushValue();
-},onDestroy:function(){if(this.rendered){}},onFirstFocus:function(){this.assignDocWin();this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));
-r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);
-if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);this.syncValue();
+}}},toggleSourceEdit:function(A){this.sourceEditMode=A===true;if(this.sourceEditMode){Roo.get(this.iframe).addClass(['x-hidden','hide','d-none']);}else{Roo.get(this.iframe).removeClass(['x-hidden','hide','d-none']);this.deferFocus();}},cleanHtml:function(A){A=String(A);
+if(A.length>5){if(Roo.isSafari){A=A.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');}}if(A=='&nbsp;'){A='';}return A;},syncValue:function(){if(this.initialized){this.undoManager.addEvent();var bd=(this.doc.body||this.doc.documentElement);
+var A=this.win.getSelection();var B=document.createElement('div');B.innerHTML=bd.innerHTML;var C=B.getElementsByClassName('gtx-trans-icon');if(C.length>0){var rm=C.item(0).parentNode;rm.parentNode.removeChild(rm);}if(this.enableBlocks){new Roo.htmleditor.FilterBlock({node:B}
+);}var D=new Roo.htmleditor.TidySerializer({inner:true});var E=D.serialize(B);if(Roo.isSafari){var bs=bd.getAttribute('style');var m=bs?bs.match(/text-align:(.*?);/i):false;if(m&&m[1]){E='<div style="'+m[0]+'">'+E+'</div>';}}E=this.cleanHtml(E);E=E.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g,function(F){var cc=F.charCodeAt();
+if(F.length==2){var G=F.charCodeAt(0)-0xD800;var H=F.charCodeAt(1)-0xDC00;cc=(G*0x400)+H+0x10000;}else if((cc>=0x4E00&&cc<0xA000)||(cc>=0x3400&&cc<0x4E00)||(cc>=0xf900&&cc<0xfb00)){return F;}return "&#"+cc+";";});if(this.owner.fireEvent('beforesync',this,E)!==false){this.el.dom.value=E;
+this.owner.fireEvent('sync',this,E);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value.trim();if(this.owner.fireEvent('beforepush',this,v)!==false){var d=(this.doc.body||this.doc.documentElement);d.innerHTML=v;this.el.dom.value=d.innerHTML;
+this.owner.fireEvent('push',this,v);}if(this.autoClean){new Roo.htmleditor.FilterParagraph({node:this.doc.body});new Roo.htmleditor.FilterSpan({node:this.doc.body});}if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}this.updateLanguage();
+var lc=this.doc.body.lastChild;if(lc&&lc.nodeType==1&&lc.getAttribute("contenteditable")=="false"){this.doc.body.appendChild(this.doc.createElement('br'));}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();
+}else{this.el.focus();}},assignDocWin:function(){var A=this.iframe;if(Roo.isIE){this.doc=A.contentWindow.document;this.win=A.contentWindow;}else{if(!Roo.get(this.frameId)&&!A.contentDocument){return;}this.doc=(A.contentDocument||Roo.get(this.frameId).dom.document);
+this.win=(A.contentWindow||Roo.get(this.frameId).dom.contentWindow);}},initEditor:function(){this.assignDocWin();this.doc.designMode="on";this.doc.open();this.doc.write(this.getDocMarkup());this.doc.close();var A=(this.doc.body||this.doc.documentElement);
+A.bgProperties='fixed';A.setAttribute("translate","no");Roo.EventManager.on(this.doc,{'mouseup':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this});Roo.EventManager.on(this.doc,{'paste':this.onPasteEvent,scope:this}
+);if(Roo.isGecko){Roo.EventManager.on(this.doc,'keypress',this.mozKeyPress,this);}if(Roo.isIE||Roo.isSafari||Roo.isOpera){Roo.EventManager.on(this.doc,'keydown',this.fixKeys,this);}this.initialized=true;new Roo.htmleditor.KeyEnter({core:this});this.owner.fireEvent('initialize',this);
+this.pushValue();},onPasteEvent:function(e,v){var cd=(e.browserEvent.clipboardData||window.clipboardData);if(cd.files.length>0){var A=(window.createObjectURL&&window)||(window.URL&&URL.revokeObjectURL&&URL)||(window.webkitURL&&webkitURL);var B=A.createObjectURL(cd.files[0]);
+this.insertAtCursor('<img src=" + url + ">');return false;}var C=cd.getData('text/html');var D=new Roo.rtf.Parser(cd.getData('text/rtf'));var E=D.doc?D.doc.getElementsByType('pict'):[];Roo.log(E);E=E.filter(function(g){return !g.path.match(/^rtf\/(head|pgdsctbl|listtable)/);
+}).map(function(g){return g.toDataURL();}).filter(function(g){return g!='about:blank';});C=this.cleanWordChars(C);var d=(new DOMParser().parseFromString(C,'text/html')).body;var sn=this.getParentElement();if(d.getElementsByTagName('table').length&&sn&&sn.closest('table')){e.preventDefault();
+this.insertAtCursor("You can not nest tables");return false;}if(E.length>0){Roo.each(d.getElementsByTagName('img'),function(F,i){F.setAttribute('src',E[i]);});}if(this.autoClean){new Roo.htmleditor.FilterStyleToTag({node:d});new Roo.htmleditor.FilterAttributes({node:d,attrib_white:['href','src','name','align'],attrib_clean:['href','src']}
+);new Roo.htmleditor.FilterBlack({node:d,tag:this.black});new Roo.htmleditor.FilterKeepChildren({node:d,tag:['FONT','O:P']});new Roo.htmleditor.FilterParagraph({node:d});new Roo.htmleditor.FilterSpan({node:d});new Roo.htmleditor.FilterLongBr({node:d});}if(this.enableBlocks){Array.from(d.getElementsByTagName('img')).forEach(function(F){if(F.closest('figure')){return;
+}var G=new Roo.htmleditor.BlockFigure({image_src:F.src});G.updateElement(F);});}this.insertAtCursor(d.innerHTML.replace(/&nbsp;/g,' '));if(this.enableBlocks){Roo.htmleditor.Block.initAll(this.doc.body);}e.preventDefault();return false;},onDestroy:function(){if(this.rendered){}
+},onFirstFocus:function(){this.assignDocWin();this.undoManager=new Roo.lib.UndoManager(100,(this.doc.body||this.doc.documentElement));this.activated=true;if(Roo.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);
+r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}this.owner.fireEvent('activate',this);},adjustFont:function(A){var B=A.cmd=='increasefontsize'?1:-1;
+var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);if(Roo.isSafari){var sm={10:1,13:2,16:3,18:4,24:5,32:6,48:7};v=(v<10)?10:v;v=(v>48)?48:v;v=typeof(sm[v])=='undefined'?1:sm[v];}v=Math.max(1,v+B);this.execCmd('FontSize',v);},onEditorEvent:function(e){if(e&&(e.ctrlKey||e.metaKey)&&e.keyCode===90){return;
+}if(e&&e.target.nodeName=='BODY'&&e.type=="mouseup"&&this.doc.body.lastChild){var lc=this.doc.body.lastChild;while((lc.nodeType==3&&lc.nodeValue=='')||lc.id=='gtx-trans'){lc=lc.previousSibling;}if(lc.nodeType==1&&lc.nodeName!='BR'){var ns=this.doc.createElement('br');
+this.doc.body.appendChild(ns);range=this.doc.createRange();range.setStartAfter(ns);range.collapse(true);var A=this.win.getSelection();A.removeAllRanges();A.addRange(range);}}this.fireEditorEvent(e);this.syncValue();},fireEditorEvent:function(e){this.owner.fireEvent('editorevent',this,e);
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
 },insertTag:function(tg){if(tg.toLowerCase()=='span'||tg.toLowerCase()=='code'||tg.toLowerCase()=='sup'||tg.toLowerCase()=='sub'){range=this.createRange(this.getSelection());var A=this.doc.createElement(tg.toLowerCase());A.appendChild(range.extractContents());
-range.insertNode(A);return;}this.execCmd("formatblock",tg);},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));},relayCmd:function(A,B){this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);
-this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;
-if(D.getSelection&&D.getSelection().getRangeAt){B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;B.insertNode(C);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;
-D.document.selection.createRange().pasteHTML(E);}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();
-switch(c){case 'b':A='bold';break;case 'i':A='italic';break;case 'u':A='underline';break;case 'v':this.cleanUpPaste.defer(100,this);return;}if(A){this.win.focus();this.execCmd(A);this.deferFocus();e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;
-if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}if(k==e.ENTER){r=this.doc.selection.createRange();if(r){var A=r.parentElement();if(!A||A.tagName.toLowerCase()!='li'){e.stopEvent();
-r.pasteHTML('<br />');r.collapse(false);r.select();}}}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');
-this.deferFocus();}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);return;}};}else if(Roo.isSafari){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}if(String.fromCharCode(k).toLowerCase()=='v'){this.cleanUpPaste.defer(100,this);
-return;}};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();
-return Roo.isIE?this.doc.selection:this.win.getSelection();},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;
-}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;
-}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;
-}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();
-}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();
-try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;
-},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);
-var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;}return 3;},cleanUpPaste:function(){Roo.log('cleanuppaste');this.cleanUpChildren(this.doc.body);var A=this.cleanWordChars(this.doc.body.innerHTML);if(A!=this.doc.body.innerHTML){this.doc.body.innerHTML=A;
-}},cleanWordChars:function(A){var he=Roo.HtmlEditorCore;var B=A;Roo.each(he.swapCodes,function(sw){var C=new RegExp("\\u"+sw[0].toString(16),"g");B=B.replace(C,sw[1]);});return B;},cleanUpChildren:function(n){if(!n.childNodes.length){return;}for(var i=n.childNodes.length-1;
-i>-1;i--){this.cleanUpChild(n.childNodes[i]);}},cleanUpChild:function(A){var ed=this;if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){if(!this.allowComments){A.parentNode.removeChild(A);}return;}var B=A.tagName.toLowerCase();if(this.black.indexOf(B)>-1&&this.clearUp){A.parentNode.removeChild(A);
-return;}var C=Roo.HtmlEditorCore.remove.indexOf(A.tagName.toLowerCase())>-1;if((!A.attributes||!A.attributes.length)&&B=='span'){C=true;}if(C){this.cleanUpChildren(A);while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);A.parentNode.insertBefore(cn,A);
-}A.parentNode.removeChild(A);return;}if(!A.attributes||!A.attributes.length){this.cleanUpChildren(A);return;}function cleanAttr(n,v){if(v.match(/^\./)||v.match(/^\//)){return;}if(v.match(/^(http|https):\/\//)||v.match(/^mailto:/)||v.match(/^ftp:/)){return;
-}if(v.match(/^#/)){return;}if(v.match(/^\{/)){return;}A.removeAttribute(n);}var D=this.cwhite;var E=this.cblack;function cleanStyle(n,v){if(v.match(/expression/)){A.removeAttribute(n);return;}var F=v.split(/;/);var G=[];Roo.each(F,function(p){p=p.replace(/^\s+/g,'').replace(/\s+$/g,'');
-if(!p.length){return true;}var l=p.split(':').shift().replace(/\s+/g,'');l=l.replace(/^\s+/g,'').replace(/\s+$/g,'');if(D.length&&E.indexOf(l)>-1){return true;}if(D.length&&D.indexOf(l)<0&&D.indexOf(l.toLowerCase())<0){return true;}G.push(p);return true;}
-);if(G.length){A.setAttribute(n,G.join(';'));}else{A.removeAttribute(n);}}for(var i=A.attributes.length-1;i>-1;i--){var a=A.attributes[i];if(a.name.toLowerCase().substr(0,2)=='on'){A.removeAttribute(a.name);continue;}if(Roo.HtmlEditorCore.ablack.indexOf(a.name.toLowerCase())>-1){A.removeAttribute(a.name);
-continue;}if(Roo.HtmlEditorCore.aclean.indexOf(a.name.toLowerCase())>-1){cleanAttr(a.name,a.value);continue;}if(a.name=='style'){cleanStyle(a.name,a.value);continue;}if(a.name=='class'){if(a.value.match(/^Mso/)){A.removeAttribute('class');}if(a.value.match(/^body$/)){A.removeAttribute('class');
-}continue;}}this.cleanUpChildren(A);},cleanWord:function(A){if(!A){this.cleanWord(this.doc.body);return;}if(A.nodeName=='SPAN'&&!A.hasAttributes()&&A.childNodes.length==1&&A.firstChild.nodeName=="#text"){var B=A.firstChild;A.removeChild(B);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);
-}A.parentNode.insertBefore(B,A);if(A.getAttribute('lang')!='zh-CN'){A.parentNode.insertBefore(A.ownerDocument.createTextNode(" "),A);}A.parentNode.removeChild(A);}if(A.nodeName=="#text"){return;}if(A.nodeName=="#comment"){A.parentNode.removeChild(A);return;
-}if(A.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)){A.parentNode.removeChild(A);return;}if(A.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|v:|font)/)){while(A.childNodes.length){var cn=A.childNodes[0];A.removeChild(cn);
-A.parentNode.insertBefore(cn,A);this.cleanWord(cn);}A.parentNode.removeChild(A);return;}if(A.className.length){var cn=A.className.split(/\W+/);var C=[];Roo.each(cn,function(F){if(F.match(/Mso[a-zA-Z]+/)){return;}C.push(F);});A.className=C.length?C.join(' '):'';
-if(!C.length){A.removeAttribute("class");}}if(A.hasAttribute("lang")){A.removeAttribute("lang");}if(A.hasAttribute("style")){var D=A.getAttribute("style").split(";");var E=[];Roo.each(D,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)){return;
-}E.push(s);});A.setAttribute("style",E.length?E.join(';'):'');if(!E.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanWord);},iterateChildren:function(A,fn){if(!A.childNodes.length){return;}for(var i=A.childNodes.length-1;i>-1;i--){fn.call(this,A.childNodes[i])}
-},cleanTableWidths:function(A){if(!A){this.cleanTableWidths(this.doc.body);return;}if(A.nodeName=="#text"||A.nodeName=="#comment"){return;}Roo.log(A.tagName);if(!A.tagName.toLowerCase().match(/^(table|td|tr)$/)){this.iterateChildren(A,this.cleanTableWidths);
-return;}if(A.hasAttribute('width')){A.removeAttribute('width');}if(A.hasAttribute("style")){var B=A.getAttribute("style").split(";");var C=[];Roo.each(B,function(s){if(!s.match(/:/)){return;}var kv=s.split(":");if(kv[0].match(/^\s*(width|min-width)\s*$/)){return;
-}C.push(s);});A.setAttribute("style",C.length?C.join(';'):'');if(!C.length){A.removeAttribute('style');}}this.iterateChildren(A,this.cleanTableWidths);},domToHTML:function(A,B,C){B=B||0;C=C||false;if(!A){return this.domToHTML(this.doc.body);}var j;var D=false;
-var E=A.nodeName;var F=Roo.util.Format.htmlEncode(A.tagName);if(E=='#text'){return C?A.nodeValue:A.nodeValue.trim();}var G='';if(E!='BODY'){var i=0;if(F){var H=[];for(i=0;i<A.attributes.length;i++){var I=A.attributes.item(i).name;if(!A.attributes.item(i).value.length){continue;
-}H.push(I+'="'+Roo.util.Format.htmlEncode(A.attributes.item(i).value)+'"');}G="<"+A.tagName+(H.length?(' '+H.join(' ')):'')+">";}else{}}else{F=false;}if(['IMG','BR','HR','INPUT'].indexOf(F)>-1){return G;}if(['PRE','TEXTAREA','TD','A','SPAN'].indexOf(F)>-1){C=true;
-}i=0;var J=A.childNodes.item(i);var D=true;var K='';lastnode='';while(J){var L=C;if(lastnode=='SPAN'){L=true;}if(J.nodeName=='#text'){var M=Roo.util.Format.htmlEncode(J.nodeValue);M=C?M:M.trim();if(!L&&M.length>80){K+="\n"+(new Array(B+1)).join("  ");}K+=M;
-i++;J=A.childNodes.item(i);lastNode='';continue;}D=false;K+=L?'':"\n"+(new Array(B+1)).join("  ");K+=this.domToHTML(J,B+1,C);lastnode=J.nodeName;i++;J=A.childNodes.item(i);}G+=K;if(!D){G+=C?'':"\n"+(new Array(B)).join("  ");}if(F){G+="</"+F+">";}return G;
-},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;
-}this.white.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
+range.insertNode(A);return;}this.execCmd("formatblock",tg);this.undoManager.addEvent();},insertText:function(A){var B=this.createRange();B.deleteContents();B.insertNode(this.doc.createTextNode(A));this.undoManager.addEvent();},relayCmd:function(A,B){switch(A){case 'justifyleft':case 'justifyright':case 'justifycenter':var n=this.getParentElement();
+var td=n.closest('td');if(td){var bl=Roo.htmleditor.Block.factory(td);bl.textAlign=A.replace('justify','');bl.updateElement();this.owner.fireEvent('editorevent',this);return;}this.execCmd('styleWithCSS',true);break;case 'bold':case 'italic':this.execCmd('styleWithCSS',false);
+break;default:break;}this.win.focus();this.execCmd(A,B);this.owner.fireEvent('editorevent',this);this.owner.deferFocus();},execCmd:function(A,B){this.doc.execCommand(A,false,B===undefined?null:B);this.syncValue();},insertAtCursor:function(A){if(!this.activated){return;
+}if(Roo.isGecko||Roo.isOpera||Roo.isSafari){this.win.focus();var B,C;var D=this.win;if(D.getSelection&&D.getSelection().getRangeAt){this.createRange(this.getSelection()).deleteContents();B=D.getSelection().getRangeAt(0);C=typeof(A)=='string'?B.createContextualFragment(A):A;
+B.insertNode(C);B=B.cloneRange();B.collapse(false);D.getSelection().removeAllRanges();D.getSelection().addRange(B);}else if(D.document.selection&&D.document.selection.createRange){var E=typeof(A)=='string'?A:A.outerHTML;D.document.selection.createRange().pasteHTML(E);
+}else{var E=typeof(A)=='string'?A:A.outerHTML;this.execCmd('InsertHTML',E);}this.syncValue();this.deferFocus();}},mozKeyPress:function(e){if(e.ctrlKey){var c=e.getCharCode(),A;if(c>0){c=String.fromCharCode(c).toLowerCase();switch(c){case 'b':A='bold';break;
+case 'i':A='italic';break;case 'u':A='underline';break;}if(A){this.relayCmd(A);e.preventDefault();}}}},fixKeys:function(){if(Roo.isIE){return function(e){var k=e.getKey(),r;if(k==e.TAB){e.stopEvent();r=this.doc.selection.createRange();if(r){r.collapse(true);
+r.pasteHTML('&#160;&#160;&#160;&#160;');this.deferFocus();}return;}};}else if(Roo.isOpera){return function(e){var k=e.getKey();if(k==e.TAB){e.stopEvent();this.win.focus();this.execCmd('InsertHTML','&#160;&#160;&#160;&#160;');this.deferFocus();}};}else if(Roo.isSafari){return function(e){var k=e.getKey();
+if(k==e.TAB){e.stopEvent();this.execCmd('InsertText','\t');this.deferFocus();return;}this.mozKeyPress(e);};}}(),getAllAncestors:function(){var p=this.getSelectedNode();var a=[];if(!p){a.push(p);p=this.getParentElement();}while(p&&(p.nodeType==1)&&(p.tagName.toLowerCase()!='body')){a.push(p);
+p=p.parentNode;}a.push(this.doc.body);return a;},lastSel:false,lastSelNode:false,getSelection:function(){this.assignDocWin();return Roo.lib.Selection.wrap(Roo.isIE?this.doc.selection:this.win.getSelection(),this.doc);},selectNode:function(A,B){var C=A.ownerDocument.createRange();
+try{C.selectNode(A);}catch(e){C.selectNodeContents(A);}if(B===true){C.collapse(true);}var s=this.win.getSelection();s.removeAllRanges();s.addRange(C);},getSelectedNode:function(){var A=this.createRange(this.getSelection()).cloneRange();if(Roo.isIE){var B=A.parentElement();
+while(true){var C=A.duplicate();C.moveToElementText(B);if(C.inRange(A)){break;}if((B.nodeType!=1)||(B.tagName.toLowerCase()=='body')){break;}B=B.parentElement;}return B;}var ac=A.commonAncestorContainer;if(ac.nodeType==3){ac=ac.parentNode;}var ar=ac.childNodes;
+var D=[];var E=[];var F=false;for(var i=0;i<ar.length;i++){if((ar[i].nodeType==3)&&(!ar[i].data.length)){continue;}if(this.rangeIntersectsNode(A,ar[i])&&this.rangeCompareNode(A,ar[i])==3){D.push(ar[i]);continue;}if((ar[i].nodeType==1)&&this.rangeIntersectsNode(A,ar[i])&&(this.rangeCompareNode(A,ar[i])>0)){E.push(ar[i]);
+continue;}if(!this.rangeIntersectsNode(A,ar[i])||(this.rangeCompareNode(A,ar[i])==0)){continue;}F=true;}if(!D.length&&E.length){D=E;}if(F||!D.length||(D.length>1)){return false;}return D[0];},createRange:function(A){if(typeof A!="undefined"){try{return A.getRangeAt?A.getRangeAt(0):A.createRange();
+}catch(e){return this.doc.createRange();}}else{return this.doc.createRange();}},getParentElement:function(){this.assignDocWin();var A=Roo.isIE?this.doc.selection:this.win.getSelection();var B=this.createRange(A);try{var p=B.commonAncestorContainer;while(p.nodeType==3){p=p.parentNode;
+}return p;}catch(e){return null;}},rangeIntersectsNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var D=A.cloneRange();D.collapse(true);var E=A.cloneRange();E.collapse(false);var F=C.cloneRange();
+F.collapse(true);var G=C.cloneRange();G.collapse(false);return D.compareBoundaryPoints(Range.START_TO_START,G)==-1&&E.compareBoundaryPoints(Range.START_TO_START,F)==1;},rangeCompareNode:function(A,B){var C=B.ownerDocument.createRange();try{C.selectNode(B);
+}catch(e){C.selectNodeContents(B);}A.collapse(true);C.collapse(true);var ss=A.compareBoundaryPoints(Range.START_TO_START,C);var ee=A.compareBoundaryPoints(Range.END_TO_END,C);var D=ss==1;var E=ee==-1;if(D&&E){return 0;}if(!D&&E){return 1;}if(D&&!E){return 2;
+}return 3;},cleanWordChars:function(A){var B=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];var C=A;Roo.each(B,function(sw){var D=new RegExp("\\u"+sw[0].toString(16),"g");C=C.replace(D,sw[1]);});return C;
+},cleanUpChild:function(A){new Roo.htmleditor.FilterComment({node:A});new Roo.htmleditor.FilterAttributes({node:A,attrib_black:this.ablack,attrib_clean:this.aclean,style_white:this.cwhite,style_black:this.cblack});new Roo.htmleditor.FilterBlack({node:A,tag:this.black}
+);new Roo.htmleditor.FilterKeepChildren({node:A,tag:this.tag_remove});},cleanWord:function(A){new Roo.htmleditor.FilterWord({node:A?A:this.doc.body});},cleanTableWidths:function(A){new Roo.htmleditor.FilterTableWidth({node:A?A:this.doc.body});},applyBlacklists:function(){var w=typeof(this.owner.white)!='undefined'&&this.owner.white?this.owner.white:[];
+var b=typeof(this.owner.black)!='undefined'&&this.owner.black?this.owner.black:[];this.aclean=typeof(this.owner.aclean)!='undefined'&&this.owner.aclean?this.owner.aclean:Roo.HtmlEditorCore.aclean;this.ablack=typeof(this.owner.ablack)!='undefined'&&this.owner.ablack?this.owner.ablack:Roo.HtmlEditorCore.ablack;
+this.tag_remove=typeof(this.owner.tag_remove)!='undefined'&&this.owner.tag_remove?this.owner.tag_remove:Roo.HtmlEditorCore.tag_remove;this.white=[];this.black=[];Roo.each(Roo.HtmlEditorCore.white,function(A){if(b.indexOf(A)>-1){return;}this.white.push(A);
+},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.white.indexOf(A)>-1){return;}this.white.push(A);},this);Roo.each(Roo.HtmlEditorCore.black,function(A){if(w.indexOf(A)>-1){return;}this.black.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
 }if(this.black.indexOf(A)>-1){return;}this.black.push(A);},this);w=typeof(this.owner.cwhite)!='undefined'&&this.owner.cwhite?this.owner.cwhite:[];b=typeof(this.owner.cblack)!='undefined'&&this.owner.cblack?this.owner.cblack:[];this.cwhite=[];this.cblack=[];
 Roo.each(Roo.HtmlEditorCore.cwhite,function(A){if(b.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(w,function(A){if(b.indexOf(A)>-1){return;}if(this.cwhite.indexOf(A)>-1){return;}this.cwhite.push(A);},this);Roo.each(Roo.HtmlEditorCore.cblack,function(A){if(w.indexOf(A)>-1){return;
 }this.cblack.push(A);},this);Roo.each(b,function(A){if(w.indexOf(A)>-1){return;}if(this.cblack.indexOf(A)>-1){return;}this.cblack.push(A);},this);},setStylesheets:function(A){if(typeof(A)=='string'){Roo.get(this.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:A}
-);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();
-});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A});return;}});Roo.HtmlEditorCore.white=['area','br','img','input','hr','wbr','address','blockquote','center','dd','dir','div','dl','dt','h1','h2','h3','h4','h5','h6','hr','isindex','listing','marquee','menu','multicol','ol','p','plaintext','pre','table','ul','xmp','caption','col','colgroup','tbody','td','tfoot','th','thead','tr','dir','menu','ol','ul','dl','embed','object'];
-Roo.HtmlEditorCore.black=['applet','base','basefont','bgsound','blink','body','frame','frameset','head','html','ilayer','iframe','layer','link','meta','object','script','style','title','xml'];Roo.HtmlEditorCore.clean=['script','style','title','xml'];Roo.HtmlEditorCore.remove=['font'];
-Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];Roo.HtmlEditorCore.swapCodes=[[8211,"&#8211;"],[8212,"&#8212;"],[8216,"'"],[8217,"'"],[8220,'"'],[8221,'"'],[8226,"*"],[8230,"..."]];
+);return;}var B=this;Roo.each(A,function(s){if(!s.length){return;}Roo.get(B.iframe.contentDocument.head).createChild({tag:'link',rel:'stylesheet',type:'text/css',href:s});});},updateLanguage:function(){if(!this.iframe||!this.iframe.contentDocument){return;
+}Roo.get(this.iframe.contentDocument.body).attr("lang",this.language);},removeStylesheets:function(){var A=this;Roo.each(Roo.get(A.iframe.contentDocument.head).select('link[rel=stylesheet]',true).elements,function(s){s.remove();});},setStyle:function(A){Roo.get(this.iframe.contentDocument.head).createChild({tag:'style',type:'text/css',html:A}
+);return;}});Roo.HtmlEditorCore.white=['AREA','BR','IMG','INPUT','HR','WBR','ADDRESS','BLOCKQUOTE','CENTER','DD','DIR','DIV','DL','DT','H1','H2','H3','H4','H5','H6','HR','ISINDEX','LISTING','MARQUEE','MENU','MULTICOL','OL','P','PLAINTEXT','PRE','TABLE','UL','XMP','CAPTION','COL','COLGROUP','TBODY','TD','TFOOT','TH','THEAD','TR','DIR','MENU','OL','UL','DL','EMBED','OBJECT'];
+Roo.HtmlEditorCore.black=['APPLET','BASE','BASEFONT','BGSOUND','BLINK','BODY','FRAME','FRAMESET','HEAD','HTML','ILAYER','IFRAME','LAYER','LINK','META','OBJECT','SCRIPT','STYLE','TITLE','XML','COLGROUP','COL'];Roo.HtmlEditorCore.clean=['SCRIPT','STYLE','TITLE','XML'];
+Roo.HtmlEditorCore.tag_remove=['FONT','TBODY'];Roo.HtmlEditorCore.ablack=['on'];Roo.HtmlEditorCore.aclean=['action','background','codebase','dynsrc','href','lowsrc'];Roo.HtmlEditorCore.pwhite=['http','https','mailto'];Roo.HtmlEditorCore.cwhite=[];Roo.HtmlEditorCore.cblack=[];
 
 // Roo/form/HtmlEditor.js
 
 // 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,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});this.defaultAutoCreate={tag:"textarea",style:'width: '+this.width+'px;height: '+this.height+'px;',autocomplete:"new-password"}
+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]}
 ;},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);}},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;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;
-}D-=C[i].length;break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=D;this.el.dom.selectionEnd=B;},"end":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(this.getValue().length,this.getValue().length);return;}var D=0;for(var i=0;i<C.length;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=B;
-this.el.dom.selectionEnd=D;},scope:this,doRelay:function(B,C,D){return Roo.KeyNav.prototype.doRelay.apply(this,arguments);},forceKeyDown:true});},onResize:function(w,h){Roo.form.HtmlEditor.superclass.onResize.apply(this,arguments);var ew=false;var eh=false;
-if(this.el){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));ew=aw;}if(typeof h=='number'){var A=0;for(var i=0;i<this.toolbars.length;i++){A+=this.toolbars[i].tb.el.getHeight();if(this.toolbars[i].footer){A+=this.toolbars[i].footer.el.getHeight();
-}}var ah=h-this.wrap.getFrameWidth('tb')-A;ah-=5;this.el.setHeight(this.adjustWidth('textarea',ah));var eh=ah;}}Roo.log('onResize:'+[w,h,ew,eh].join(','));this.editorcore.onResize(ew,eh);},toggleSourceEdit:function(A){this.editorcore.toggleSourceEdit(A);if(this.editorcore.sourceEditMode){Roo.log('editor - showing textarea');
-this.editorcore.syncValue();this.el.removeClass('x-hidden');this.el.dom.removeAttribute('tabIndex');this.el.focus();for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.hide();this.toolbars[i].footer.hide();
-}}}else{Roo.log('editor - hiding textarea');this.editorcore.pushValue();this.el.addClass('x-hidden');this.el.dom.setAttribute('tabIndex',-1);for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.show();
-this.toolbars[i].footer.show();}}}this.setSize(this.wrap.getSize());this.onResize(this.wrap.getSize().width,this.wrap.getSize().height);this.fireEvent('editmodechange',this,this.editorcore.sourceEditMode);},adjustSize:Roo.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;
-},getPositionEl:function(){return this.wrap;},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Roo.emptyFn,clearInvalid:Roo.emptyFn,setValue:function(v){Roo.form.HtmlEditor.superclass.setValue.call(this,v);this.editorcore.pushValue();
-},deferFocus:function(){this.focus.defer(10,this);},focus:function(){this.editorcore.focus();},onDestroy:function(){if(this.rendered){for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onDestroy();}this.wrap.dom.innerHTML='';this.wrap.remove();}},onFirstFocus:function(){this.editorcore.onFirstFocus();
-for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onFirstFocus();}},syncValue:function(){this.editorcore.syncValue();},pushValue:function(){this.editorcore.pushValue();},setStylesheets:function(A){this.editorcore.setStylesheets(A);},removeStylesheets:function(){this.editorcore.removeStylesheets();
-}});
+: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;
+i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}D-=C[i].length;break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);return;}this.el.dom.selectionStart=D;this.el.dom.selectionEnd=B;},"end":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(this.getValue().length,this.getValue().length);return;}var D=0;for(var i=0;i<C.length;i++){D+=C[i].length;if(i!=0){D+=1;}if(D<B){continue;}break;}if(!e.shiftKey){this.el.dom.setSelectionRange(D,D);
+return;}this.el.dom.selectionStart=B;this.el.dom.selectionEnd=D;},scope:this,doRelay:function(B,C,D){return Roo.KeyNav.prototype.doRelay.apply(this,arguments);},forceKeyDown:true});},onResize:function(w,h){Roo.form.HtmlEditor.superclass.onResize.apply(this,arguments);
+var ew=false;var eh=false;if(this.el){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));ew=aw;}if(typeof h=='number'){var A=0;for(var i=0;i<this.toolbars.length;i++){A+=this.toolbars[i].tb.el.getHeight();
+if(this.toolbars[i].footer){A+=this.toolbars[i].footer.el.getHeight();}}var ah=h-this.wrap.getFrameWidth('tb')-A;ah-=5;this.el.setHeight(this.adjustWidth('textarea',ah));var eh=ah;}}Roo.log('onResize:'+[w,h,ew,eh].join(','));this.editorcore.onResize(ew,eh);
+},toggleSourceEdit:function(A){this.editorcore.toggleSourceEdit(A);if(this.editorcore.sourceEditMode){Roo.log('editor - showing textarea');this.editorcore.syncValue();this.el.removeClass('x-hidden');this.el.dom.removeAttribute('tabIndex');this.el.focus();
+this.el.dom.scrollTop=0;for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.hide();this.toolbars[i].footer.hide();}}}else{Roo.log('editor - hiding textarea');this.editorcore.pushValue();
+this.el.addClass('x-hidden');this.el.dom.setAttribute('tabIndex',-1);for(var i=0;i<this.toolbars.length;i++){if(this.toolbars[i] instanceof Roo.form.HtmlEditor.ToolbarContext){this.toolbars[i].tb.show();this.toolbars[i].footer.show();}}}this.setSize(this.wrap.getSize());
+this.onResize(this.wrap.getSize().width,this.wrap.getSize().height);this.fireEvent('editmodechange',this,this.editorcore.sourceEditMode);},adjustSize:Roo.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;
+},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Roo.emptyFn,clearInvalid:Roo.emptyFn,setValue:function(v){Roo.form.HtmlEditor.superclass.setValue.call(this,v);this.editorcore.pushValue();},updateLanguage:function(A){this.language=A;
+this.editorcore.language=A;this.editorcore.updateLanguage();},deferFocus:function(){this.focus.defer(10,this);},focus:function(){this.editorcore.focus();},onDestroy:function(){if(this.rendered){for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onDestroy();
+}this.wrap.dom.innerHTML='';this.wrap.remove();}},onFirstFocus:function(){this.editorcore.onFirstFocus();for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].onFirstFocus();}},syncValue:function(){this.editorcore.syncValue();},pushValue:function(){this.editorcore.pushValue();
+},setStylesheets:function(A){this.editorcore.setStylesheets(A);},removeStylesheets:function(){this.editorcore.removeStylesheets();}});
 // Roo/form/HtmlEditor/ToolbarStandard.js
 // Roo/form/HtmlEditor/ToolbarStandard.js
-Roo.form.HtmlEditor.ToolbarStandard=function(A){Roo.apply(this,A);this.disable=this.disable||{};Roo.applyIf(this.disable,{fontSize:true,colors:true,specialElements:true});};Roo.apply(Roo.form.HtmlEditor.ToolbarStandard.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,createLinkText:'Please enter the URL for the link:',defaultLinkValue:'http:/'+'/',fontFamilies:['Arial','Courier New','Tahoma','Times New Roman','Verdana'],specialChars:["&#169;","&#174;","&#8482;","&#163;","&#8230;","&#247;","&#8364;","&#176;"],specialElements:[{text:"Insert Table",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<table><tr><td>Cell</td></tr></table>'}
+Roo.form.HtmlEditor.ToolbarStandard=function(A){Roo.apply(this,A);this.disable=this.disable||{};Roo.applyIf(this.disable,{fontSize:true,colors:true,specialElements:true});};Roo.form.HtmlEditor.ToolbarStandard.prototype={tb:false,rendered:false,editor:false,editorcore:false,disable:false,createLinkText:'Please enter the URL for the link:',defaultLinkValue:'http:/'+'/',fontFamilies:['Arial','Courier New','Tahoma','Times New Roman','Verdana'],specialChars:["&#169;","&#174;","&#8482;","&#163;","&#8230;","&#247;","&#8364;","&#176;"],specialElements:[{text:"Insert Table",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<table><tr><td>Cell</td></tr></table>'}
 ,{text:"Insert Image",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<img src="about:blank"/>'}],inputElements:["form","input:text","input:hidden","input:checkbox","input:radio","input:password","input:submit","input:button","select","textarea","label"],formats:[["p"],["h1"],["h2"],["h3"],["h4"],["h5"],["h6"],["pre"],["code"],["abbr"],["acronym"],["address"],["cite"],["samp"],["var"],['div'],['span'],['sup'],['sub']],cleanStyles:["font-size"],defaultFont:'tahoma',fontSelect:false,formatCombo:false,init:function(A){this.editor=A;
 this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var _t=this;var C=B.frameId;var D=this;function btn(id,H,I){var J=C+'-'+id;return {id:J,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:H!==false,scope:_t,handler:I||_t.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
 ;}var tb=new Roo.Toolbar(A.wrap.dom.firstChild);this.tb=tb;tb.el.on('click',function(e){e.preventDefault();});if(!this.disable.font){};if(!this.disable.formats){this.formatCombo=new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'tag',fields:['tag'],data:this.formats}
 ,{text:"Insert Image",xtype:'MenuItem',xns:Roo.Menu,ihtml:'<img src="about:blank"/>'}],inputElements:["form","input:text","input:hidden","input:checkbox","input:radio","input:password","input:submit","input:button","select","textarea","label"],formats:[["p"],["h1"],["h2"],["h3"],["h4"],["h5"],["h6"],["pre"],["code"],["abbr"],["acronym"],["address"],["cite"],["samp"],["var"],['div'],['span'],['sup'],['sub']],cleanStyles:["font-size"],defaultFont:'tahoma',fontSelect:false,formatCombo:false,init:function(A){this.editor=A;
 this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var _t=this;var C=B.frameId;var D=this;function btn(id,H,I){var J=C+'-'+id;return {id:J,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:H!==false,scope:_t,handler:I||_t.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
 ;}var tb=new Roo.Toolbar(A.wrap.dom.firstChild);this.tb=tb;tb.el.on('click',function(e){e.preventDefault();});if(!this.disable.font){};if(!this.disable.formats){this.formatCombo=new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'tag',fields:['tag'],data:this.formats}
@@ -1009,54 +1207,56 @@ B.execCmd('hilitecolor',H);B.execCmd('useCSS',true);A.deferFocus();}else{B.execC
 c.select('[style]').each(function(s){s.dom.style.removeProperty(a.actiontype);});B.syncValue();},tabIndex:-1});}F.menu.items.push({actiontype:'tablewidths',html:'Remove Table Widths',handler:function(a,b){B.cleanTableWidths();B.syncValue();},tabIndex:-1});
 F.menu.items.push({actiontype:'word',html:'Remove MS Word Formating',handler:function(a,b){B.cleanWord();B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All Styles',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[style]').each(function(s){s.dom.removeAttribute('style');
 });B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All CSS Classes',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[class]').each(function(s){s.dom.removeAttribute('class');});B.cleanWord();B.syncValue();},tabIndex:-1}
 c.select('[style]').each(function(s){s.dom.style.removeProperty(a.actiontype);});B.syncValue();},tabIndex:-1});}F.menu.items.push({actiontype:'tablewidths',html:'Remove Table Widths',handler:function(a,b){B.cleanTableWidths();B.syncValue();},tabIndex:-1});
 F.menu.items.push({actiontype:'word',html:'Remove MS Word Formating',handler:function(a,b){B.cleanWord();B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All Styles',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[style]').each(function(s){s.dom.removeAttribute('style');
 });B.syncValue();},tabIndex:-1});F.menu.items.push({actiontype:'all',html:'Remove All CSS Classes',handler:function(a,b){var c=Roo.get(B.doc.body);c.select('[class]').each(function(s){s.dom.removeAttribute('class');});B.cleanWord();B.syncValue();},tabIndex:-1}
-);F.menu.items.push({actiontype:'tidy',html:'Tidy HTML Source',handler:function(a,b){B.doc.body.innerHTML=B.domToHTML();B.syncValue();},tabIndex:-1});tb.add(F);}if(!this.disable.specialElements){var G={text:"Other;",cls:'x-edit-none',menu:{items:[]}};for(var i=0;
-i<this.specialElements.length;i++){G.menu.items.push(Roo.apply({handler:function(a,b){A.insertAtCursor(this.ihtml);}},this.specialElements[i]));}tb.add(G);}if(this.btns){for(var i=0;i<this.btns.length;i++){var b=Roo.factory(this.btns[i],Roo.form);b.cls='x-edit-none';
-if(typeof(this.btns[i].cls)!='undefined'&&this.btns[i].cls.indexOf('x-init-enable')!==-1){b.cls+=' x-init-enable';}b.scope=B;tb.add(b);}}this.tb.items.each(function(H){if(H.id!=B.frameId+'-sourceedit'&&(typeof(H.cls)!='undefined'&&H.cls.indexOf('x-init-enable')===-1)){H.disable();
-}});this.rendered=true;A.on('editorevent',this.updateToolbar,this);},relayBtnCmd:function(A){this.editorcore.relayCmd(A.cmd);},createLink:function(){Roo.log("create link?");var A=prompt(this.createLinkText,this.defaultLinkValue);if(A&&A!='http:/'+'/'){this.editorcore.relayCmd('createlink',A);
-}},updateToolbar:function(){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}var A=this.tb.items.map,B=this.editorcore.doc,C=this.editorcore.frameId;if(!this.disable.font&&!Roo.isSafari){}if(!this.disable.format){A[C+'-bold'].toggle(B.queryCommandState('bold'));
-A[C+'-italic'].toggle(B.queryCommandState('italic'));A[C+'-underline'].toggle(B.queryCommandState('underline'));A[C+'-strikethrough'].toggle(B.queryCommandState('strikethrough'));}if(!this.disable.alignments){A[C+'-justifyleft'].toggle(B.queryCommandState('justifyleft'));
-A[C+'-justifycenter'].toggle(B.queryCommandState('justifycenter'));A[C+'-justifyright'].toggle(B.queryCommandState('justifyright'));}if(!Roo.isSafari&&!this.disable.lists){A[C+'-insertorderedlist'].toggle(B.queryCommandState('insertorderedlist'));A[C+'-insertunorderedlist'].toggle(B.queryCommandState('insertunorderedlist'));
-}var D=this.editorcore.getAllAncestors();if(this.formatCombo){var E=this.formatCombo.store;this.formatCombo.setValue("");for(var i=0;i<D.length;i++){if(D[i]&&E.query('tag',D[i].tagName.toLowerCase(),false).length){this.formatCombo.setValue(D[i].tagName.toLowerCase());
+);F.menu.items.push({actiontype:'tidy',html:'Tidy HTML Source',handler:function(a,b){new Roo.htmleditor.Tidy(B.doc.body);B.syncValue();},tabIndex:-1});tb.add(F);}if(!this.disable.specialElements){var G={text:"Other;",cls:'x-edit-none',menu:{items:[]}};for(var i=0;
+i<this.specialElements.length;i++){G.menu.items.push(Roo.apply({handler:function(a,b){A.insertAtCursor(this.ihtml);}},this.specialElements[i]));}tb.add(G);}if(this.btns){for(var i=0;i<this.btns.length;i++){var b=Roo.factory(this.btns[i],this.btns[i].xns||Roo.form);
+b.cls='x-edit-none';if(typeof(this.btns[i].cls)!='undefined'&&this.btns[i].cls.indexOf('x-init-enable')!==-1){b.cls+=' x-init-enable';}b.scope=B;tb.add(b);}}this.tb.items.each(function(H){if(H.id!=B.frameId+'-sourceedit'&&(typeof(H.cls)!='undefined'&&H.cls.indexOf('x-init-enable')===-1)){H.disable();
+}});this.rendered=true;A.on('editorevent',this.updateToolbar,this);},relayBtnCmd:function(A){this.editorcore.relayCmd(A.cmd);},createLink:function(){var ec=this.editorcore;var ar=ec.getAllAncestors();var n=false;for(var i=0;i<ar.length;i++){if(ar[i]&&ar[i].nodeName=='A'){n=ar[i];
+break;}}(function(){Roo.MessageBox.show({title:"Add / Edit Link URL",msg:"Enter the url for the link",buttons:Roo.MessageBox.OKCANCEL,fn:function(A,B){if(A!='ok'){return;}if(B&&B!='http:/'+'/'){if(n){n.setAttribute('href',B);}else{ec.relayCmd('createlink',B);
+}}},minWidth:250,prompt:true,modal:true,value:n?n.getAttribute('href'):''});}).defer(100,this);},updateToolbar:function(){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}var A=this.tb.items.map,B=this.editorcore.doc,C=this.editorcore.frameId;
+if(!this.disable.font&&!Roo.isSafari){}if(!this.disable.format){A[C+'-bold'].toggle(B.queryCommandState('bold'));A[C+'-italic'].toggle(B.queryCommandState('italic'));A[C+'-underline'].toggle(B.queryCommandState('underline'));A[C+'-strikethrough'].toggle(B.queryCommandState('strikethrough'));
+}if(!this.disable.alignments){A[C+'-justifyleft'].toggle(B.queryCommandState('justifyleft'));A[C+'-justifycenter'].toggle(B.queryCommandState('justifycenter'));A[C+'-justifyright'].toggle(B.queryCommandState('justifyright'));}if(!Roo.isSafari&&!this.disable.lists){A[C+'-insertorderedlist'].toggle(B.queryCommandState('insertorderedlist'));
+A[C+'-insertunorderedlist'].toggle(B.queryCommandState('insertunorderedlist'));}var D=this.editorcore.getAllAncestors();if(this.formatCombo){var E=this.formatCombo.store;this.formatCombo.setValue("");for(var i=0;i<D.length;i++){if(D[i]&&E.query('tag',D[i].tagName.toLowerCase(),false).length){this.formatCombo.setValue(D[i].tagName.toLowerCase());
 break;}}}Roo.menu.MenuMgr.hideAll();},createFontOptions:function(){var A=[],fs=this.fontFamilies,ff,lc;for(var i=0,B=fs.length;i<B;i++){ff=fs[i];lc=ff.toLowerCase();A.push('<option value="',lc,'" style="font-family:',ff,';"',(this.defaultFont==lc?' selected="true">':'>'),ff,'</option>');
 }return A.join('');},toggleSourceEdit:function(A){Roo.log("toolbar toogle");if(A===undefined){A=!this.sourceEditMode;}this.sourceEditMode=A===true;var B=this.tb.items.get(this.editorcore.frameId+'-sourceedit');if(B.pressed!==this.sourceEditMode){B.toggle(this.sourceEditMode);
 return;}if(A){Roo.log("disabling buttons");this.tb.items.each(function(C){if(C.cmd!='sourceedit'&&(typeof(C.cls)!='undefined'&&C.cls.indexOf('x-init-enable')===-1)){C.disable();}});}else{Roo.log("enabling buttons");if(this.editorcore.initialized){this.tb.items.each(function(C){C.enable();
 break;}}}Roo.menu.MenuMgr.hideAll();},createFontOptions:function(){var A=[],fs=this.fontFamilies,ff,lc;for(var i=0,B=fs.length;i<B;i++){ff=fs[i];lc=ff.toLowerCase();A.push('<option value="',lc,'" style="font-family:',ff,';"',(this.defaultFont==lc?' selected="true">':'>'),ff,'</option>');
 }return A.join('');},toggleSourceEdit:function(A){Roo.log("toolbar toogle");if(A===undefined){A=!this.sourceEditMode;}this.sourceEditMode=A===true;var B=this.tb.items.get(this.editorcore.frameId+'-sourceedit');if(B.pressed!==this.sourceEditMode){B.toggle(this.sourceEditMode);
 return;}if(A){Roo.log("disabling buttons");this.tb.items.each(function(C){if(C.cmd!='sourceedit'&&(typeof(C.cls)!='undefined'&&C.cls.indexOf('x-init-enable')===-1)){C.disable();}});}else{Roo.log("enabling buttons");if(this.editorcore.initialized){this.tb.items.each(function(C){C.enable();
-});}}Roo.log("calling toggole on editor");this.editor.toggleSourceEdit(A);},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'},italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'}
-,underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},strikethrough:{title:'Strikethrough',text:'Strikethrough the selected text.',cls:'x-html-editor-tip'},increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'}
-,decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'},forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'}
-,justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'},justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'}
-,insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'},createlink:{title:'Hyperlink',text:'Make the selected text a hyperlink.',cls:'x-html-editor-tip'}
-,sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();
-});}});
+});Roo.each(Roo.get(this.editorcore.doc.body).query('*[data-block]'),function(e){Roo.htmleditor.Block.factory(e).updateElement(e);},this);}}Roo.log("calling toggole on editor");this.editor.toggleSourceEdit(A);},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'}
+,italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'},underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},strikethrough:{title:'Strikethrough',text:'Strikethrough the selected text.',cls:'x-html-editor-tip'}
+,increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'}
+,forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'},justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'}
+,justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'}
+,createlink:{title:'Hyperlink',text:'Make the selected text a hyperlink.',cls:'x-html-editor-tip'},sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
+if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});}};
 // Roo/form/HtmlEditor/ToolbarContext.js
 // Roo/form/HtmlEditor/ToolbarContext.js
-Roo.form.HtmlEditor.ToolbarContext=function(A){Roo.apply(this,A);this.styles=this.styles||{};};Roo.form.HtmlEditor.ToolbarContext.types={'IMG':{width:{title:"Width",width:40},height:{title:"Height",width:40},align:{title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}
-,border:{title:"Border",width:40},alt:{title:"Alt",width:120},src:{title:"Src",width:220}},'A':{name:{title:"Name",width:50},target:{title:"Target",width:120},href:{title:"Href",width:220}},'TABLE':{rows:{title:"Rows",width:20},cols:{title:"Cols",width:20}
-,width:{title:"Width",width:40},height:{title:"Height",width:40},border:{title:"Border",width:20}},'TD':{width:{title:"Width",width:40},height:{title:"Height",width:40},align:{title:"Align",opts:[[""],["left"],["center"],["right"],["justify"],["char"]],width:80}
-,valign:{title:"Valign",opts:[[""],["top"],["middle"],["bottom"],["baseline"]],width:80},colspan:{title:"Colspan",width:20},'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'INPUT':{name:{title:"name",width:120}
-,value:{title:"Value",width:120},width:{title:"Width",width:40}},'LABEL':{'for':{title:"For",width:120}},'TEXTAREA':{name:{title:"name",width:120},rows:{title:"Rows",width:20},cols:{title:"Cols",width:20}},'SELECT':{name:{title:"name",width:120},selectoptions:{title:"Options",width:200}
-},'BODY':{title:{title:"Title",width:200,disabled:true}},'SPAN':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'DIV':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}
-},'P':{'font-family':{title:"Font",style:'fontFamily',displayField:'display',optname:'font-family',width:140}},'*':{}};Roo.form.HtmlEditor.ToolbarContext.stores=false;Roo.form.HtmlEditor.ToolbarContext.options={'font-family':[['Helvetica,Arial,sans-serif','Helvetica'],['Courier New','Courier New'],['Tahoma','Tahoma'],['Times New Roman,serif','Times'],['Verdana','Verdana']]}
-;Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,styles:false,options:false,toolbars:false,init:function(A){this.editor=A;this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;
-var C=B.frameId;var D=this;function btn(id,F,G){var H=C+'-'+id;return {id:H,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:F!==false,scope:B,handler:G||B.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1};}var E=A.wrap.createChild({tag:'div'}
-,A.wrap.dom.firstChild.nextSibling,true);var ty=Roo.form.HtmlEditor.ToolbarContext.types;this.toolbars={};for(var i in ty){this.toolbars[i]=this.buildToolbar(ty[i],i);}this.tb=this.toolbars.BODY;this.tb.el.show();this.buildFooter();this.footer.show();A.on('hide',function(){this.footer.hide()}
-,this);A.on('show',function(){this.footer.show()},this);this.rendered=true;A.on('editorevent',this.updateToolbar,this);},updateToolbar:function(A,ev,B){if(!this.editorcore.activated){this.editor.onFirstFocus();return;}if(ev&&(ev.type=='mouseup'||ev.type=='click')&&ev.target&&ev.target.tagName=='IMG'){B=ev.target;
-var C=B.ownerDocument.createRange();try{C.selectNode(B);}catch(e){C.selectNodeContents(B);}var s=this.editorcore.win.getSelection();s.removeAllRanges();s.addRange(C);}var D=B?false:true;var E=this.editorcore.getAllAncestors();var ty=Roo.form.HtmlEditor.ToolbarContext.types;
-if(!B){B=E.length?(E[0]?E[0]:E[1]):this.editorcore.doc.body;B=B?B:this.editorcore.doc.body;B=B.tagName.length?B:this.editorcore.doc.body;}var tn=B.tagName.toUpperCase();tn=B.tagName.toUpperCase();var F=this.tb.selectedNode;this.tb.selectedNode=B;if((this.tb.name!=tn)||(F!=this.tb.selectedNode)||ev===false){this.tb.el.hide();
-this.tb=typeof(ty[tn])!='undefined'?this.toolbars[tn]:this.toolbars['*'];this.tb.el.show();this.tb.items.first().el.innerHTML=tn+':&nbsp;';if(this.tb.fields){this.tb.fields.each(function(e){if(e.stylename){e.setValue(B.style[e.stylename]);return;}e.setValue(B.getAttribute(e.attrname));
-});}var G=false;for(var i in this.styles){G=true;break;}if(G){var st=this.tb.fields.item(0);st.store.removeAll();var cn=B.className.split(/\s+/);var H=[];if(this.styles['*']){Roo.each(this.styles['*'],function(v){H.push([v,cn.indexOf(v)>-1?1:0]);});}if(this.styles[tn]){Roo.each(this.styles[tn],function(v){H.push([v,cn.indexOf(v)>-1?1:0]);
-});}st.store.loadData(H);st.collapse();st.setValue(cn);}this.tb.selectedNode=B;Roo.menu.MenuMgr.hideAll();}if(!D){return;}var I='';this.footerEls=E.reverse();Roo.each(this.footerEls,function(a,i){if(!a){return;}I+=I.length?' &gt; ':'';I+='<span class="x-ed-loc-'+i+'">'+a.tagName+'</span>';
-});var sz=this.footDisp.up('td').getSize();this.footDisp.dom.style.width=(sz.width-10)+'px';this.footDisp.dom.style.marginLeft='5px';this.footDisp.dom.style.overflow='hidden';this.footDisp.dom.innerHTML=I;},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
-if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});},buildToolbar:function(A,nm){var B=this.editor;var C=this.editorcore;var D=B.wrap.createChild({tag:'div'},B.wrap.dom.firstChild.nextSibling,true);
-var tb=new Roo.Toolbar(D);tb.add(nm+":&nbsp;");var E=[];for(var i in this.styles){E.push(i);}if(E&&E.length){tb.addField(new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'val',fields:['val','selected'],data:[]}),name:'-roo-edit-className',attrname:'className',displayField:'val',typeAhead:false,mode:'local',editable:false,triggerAction:'all',emptyText:'Select Style',selectOnFocus:true,width:130,listeners:{'select':function(c,r,i){tb.selectedNode.className=r?r.get('val'):'';
-C.syncValue();}}}));}var F=Roo.form.HtmlEditor.ToolbarContext;var G=F.options;for(var i in A){var H=A[i];tb.add(H.title+":&nbsp;");var I=H.opts?H.opts:false;if(H.optname){I=G[H.optname];}if(I){tb.addField(new Roo.form.ComboBox({store:typeof(F.stores[i])!='undefined'?Roo.factory(F.stores[i],Roo.data):new Roo.data.SimpleStore({id:'val',fields:['val','display'],data:I}
-),name:'-roo-edit-'+i,attrname:i,stylename:H.style?H.style:false,displayField:H.displayField?H.displayField:'val',valueField:'val',typeAhead:false,mode:typeof(F.stores[i])!='undefined'?'remote':'local',editable:false,triggerAction:'all',emptyText:'Select',selectOnFocus:true,width:H.width?H.width:130,listeners:{'select':function(c,r,i){if(c.stylename){tb.selectedNode.style[c.stylename]=r.get('val');
-return;}tb.selectedNode.setAttribute(c.attrname,r.get('val'));}}}));continue;tb.addField(new Roo.form.TextField({name:i,width:100,value:''}));continue;}tb.addField(new Roo.form.TextField({name:'-roo-edit-'+i,attrname:i,width:H.width,value:'',listeners:{'change':function(f,nv,ov){tb.selectedNode.setAttribute(f.attrname,nv);
-C.syncValue();}}}));}var J=this;if(nm=='BODY'){tb.addSeparator();tb.addButton({text:'Stylesheets',listeners:{click:function(){J.editor.fireEvent('stylesheetsclick',J.editor);}}});}tb.addFill();tb.addButton({text:'Remove Tag',listeners:{click:function(){var sn=tb.selectedNode;
-var pn=sn.parentNode;var K=sn.childNodes[0];var en=sn.childNodes[sn.childNodes.length-1];while(sn.childNodes.length){var L=sn.childNodes[0];sn.removeChild(L);pn.insertBefore(L,sn);}pn.removeChild(sn);var M=C.createRange();M.setStart(K,0);M.setEnd(en,0);var N=C.getSelection();
-N.removeAllRanges();N.addRange(M);J.updateToolbar(null,null,null);J.footDisp.dom.innerHTML='';}}});tb.el.on('click',function(e){e.preventDefault();});tb.el.setVisibilityMode(Roo.Element.DISPLAY);tb.el.hide();tb.name=nm;return tb;},buildFooter:function(){var A=this.editor.wrap.createChild();
-this.footer=new Roo.Toolbar(A);var B=new Roo.Toolbar.Fill();var _t=this;this.footer.add({text:'&lt;',xtype:'Button',handler:function(){_t.footDisp.scrollTo('left',0,true)}});this.footer.add(B);this.footer.add({text:'&gt;',xtype:'Button',handler:function(){_t.footDisp.select('span').last().scrollIntoView(_t.footDisp,true);
-}});var A=Roo.get(B.el);A.addClass('x-editor-context');this.footDispWrap=A;this.footDispWrap.overflow='hidden';this.footDisp=A.createChild();this.footDispWrap.on('click',this.onContextClick,this)},onContextClick:function(ev,A){ev.preventDefault();var cn=A.className;
-if(!cn.match(/x-ed-loc-/)){return;}var n=cn.split('-').pop();var B=this.footerEls;var C=B[n];var D=this.editorcore.createRange();D.selectNodeContents(C);var E=this.editorcore.getSelection();E.removeAllRanges();E.addRange(D);this.updateToolbar(null,null,C);
-}});
+Roo.form.HtmlEditor.ToolbarContext=function(A){Roo.apply(this,A);this.styles=this.styles||{};};Roo.form.HtmlEditor.ToolbarContext.types={'IMG':[{name:'width',title:"Width",width:40},{name:'height',title:"Height",width:40},{name:'align',title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}
+,{name:'border',title:"Border",width:40},{name:'alt',title:"Alt",width:120},{name:'src',title:"Src",width:220}],'FIGURE':[{name:'align',title:"Align",opts:[[""],["left"],["right"],["center"],["top"]],width:80}],'A':[{name:'name',title:"Name",width:50},{name:'target',title:"Target",width:120}
+,{name:'href',title:"Href",width:220}],'INPUT':[{name:'name',title:"name",width:120},{name:'value',title:"Value",width:120},{name:'width',title:"Width",width:40}],'LABEL':[{name:'for',title:"For",width:120}],'TEXTAREA':[{name:'name',title:"name",width:120}
+,{name:'rows',title:"Rows",width:20},{name:'cols',title:"Cols",width:20}],'SELECT':[{name:'name',title:"name",width:120},{name:'selectoptions',title:"Options",width:200}],'BODY':[{name:'title',title:"Title",width:200,disabled:true}],'*':[]};Roo.form.HtmlEditor.ToolbarContext.stores=false;
+Roo.form.HtmlEditor.ToolbarContext.options={'font-family':[['Helvetica,Arial,sans-serif','Helvetica'],['Courier New','Courier New'],['Tahoma','Tahoma'],['Times New Roman,serif','Times'],['Verdana','Verdana']]};Roo.apply(Roo.form.HtmlEditor.ToolbarContext.prototype,{tb:false,rendered:false,editor:false,editorcore:false,disable:false,styles:false,options:false,toolbars:false,init:function(A){this.editor=A;
+this.editorcore=A.editorcore?A.editorcore:A;var B=this.editorcore;var C=B.frameId;var D=this;function btn(id,F,G){var H=C+'-'+id;return {id:H,cmd:id,cls:'x-btn-icon x-edit-'+id,enableToggle:F!==false,scope:B,handler:G||B.relayBtnCmd,clickEvent:'mousedown',tooltip:D.buttonTips[id]||undefined,tabIndex:-1}
+;}var E=A.wrap.createChild({tag:'div'},A.wrap.dom.firstChild.nextSibling,true);var ty=Roo.form.HtmlEditor.ToolbarContext.types;this.toolbars={};for(var i in ty){this.toolbars[i]=this.buildToolbar(ty[i],i);}this.tb=this.toolbars.BODY;this.tb.el.show();this.buildFooter();
+this.footer.show();A.on('hide',function(){this.footer.hide()},this);A.on('show',function(){this.footer.show()},this);this.rendered=true;A.on('editorevent',this.updateToolbar,this);},updateToolbar:function(A,ev,B){if(ev){ev.stopEvent();}if(!this.editorcore.activated){this.editor.onFirstFocus();
+return;}if(ev&&(ev.type=='mouseup'||ev.type=='click')&&ev.target&&ev.target.tagName!='BODY'){B=ev.target;}Array.from(this.editorcore.doc.body.querySelectorAll('.roo-ed-selection')).forEach(function(e){e.classList.remove('roo-ed-selection');});var C=this.editorcore.getAllAncestors();
+var ty=Roo.form.HtmlEditor.ToolbarContext.types;if(!B){B=C.length?(C[0]?C[0]:C[1]):this.editorcore.doc.body;B=B?B:this.editorcore.doc.body;B=B.tagName.length?B:this.editorcore.doc.body;}var tn=B.tagName.toUpperCase();var D=this.tb.selectedNode;this.tb.selectedNode=B;
+var E=tn;var db=false;if(B&&B.hasAttribute('data-block')){db=B;}else if(B&&B.closest('[data-block]')){db=B.closest('[data-block]');}var F=false;if(db&&this.editorcore.enableBlocks){F=Roo.htmleditor.Block.factory(db);if(F){db.className=(db.classList.length>0?db.className+' ':'')+'roo-ed-selection';
+tn='BLOCK.'+db.getAttribute('data-block');if(typeof(this.toolbars[tn])=='undefined'){this.toolbars[tn]=this.buildToolbar(false,tn,F.friendly_name,F);}this.toolbars[tn].selectedNode=db;E=F.friendly_name;C=this.editorcore.getAllAncestors();}}if(this.tb.name==tn&&D==this.tb.selectedNode&&ev!==false){return;
+}this.tb.el.hide();this.tb=typeof(this.toolbars[tn])!='undefined'?this.toolbars[tn]:this.toolbars['*'];this.tb.el.show();this.tb.items.first().el.innerHTML=E+':&nbsp;';if(F&&this.tb.fields){this.tb.fields.each(function(e){e.setValue(F[e.name]);});}else if(this.tb.fields&&this.tb.selectedNode){this.tb.fields.each(function(e){if(e.stylename){e.setValue(this.tb.selectedNode.style[e.stylename]);
+return;}e.setValue(this.tb.selectedNode.getAttribute(e.attrname));},this);this.updateToolbarStyles(this.tb.selectedNode);}Roo.menu.MenuMgr.hideAll();this.updateFooter(C);},updateToolbarStyles:function(A){var B=false;for(var i in this.styles){B=true;break;
+}if(B&&this.tb.hasStyles){var st=this.tb.fields.item(0);st.store.removeAll();var cn=A.className.split(/\s+/);var C=[];if(this.styles['*']){Roo.each(this.styles['*'],function(v){C.push([v,cn.indexOf(v)>-1?1:0]);});}if(this.styles[tn]){Roo.each(this.styles[tn],function(v){C.push([v,cn.indexOf(v)>-1?1:0]);
+});}st.store.loadData(C);st.collapse();st.setValue(cn);}},updateFooter:function(A){var B='';if(A===false){this.footDisp.dom.innerHTML='';return;}this.footerEls=A.reverse();Roo.each(this.footerEls,function(a,i){if(!a){return;}B+=B.length?' &gt; ':'';B+='<span class="x-ed-loc-'+i+'">'+a.tagName+'</span>';
+});var sz=this.footDisp.up('td').getSize();this.footDisp.dom.style.width=(sz.width-10)+'px';this.footDisp.dom.style.marginLeft='5px';this.footDisp.dom.style.overflow='hidden';this.footDisp.dom.innerHTML=B;},onDestroy:function(){if(this.rendered){this.tb.items.each(function(A){if(A.menu){A.menu.removeAll();
+if(A.menu.el){A.menu.el.destroy();}}A.destroy();});}},onFirstFocus:function(){this.tb.items.each(function(A){A.enable();});},buildToolbar:function(A,nm,B,C){var D=this.editor;var E=this.editorcore;var F=D.wrap.createChild({tag:'div'},D.wrap.dom.firstChild.nextSibling,true);
+var tb=new Roo.Toolbar(F);if(A===false&&C){A=C.contextMenu(this);}tb.hasStyles=false;tb.name=nm;tb.add((typeof(B)=='undefined'?nm:B)+":&nbsp;");var G=Array.from(this.styles);if(G&&G.length){tb.hasStyles=true;tb.addField(new Roo.form.ComboBox({store:new Roo.data.SimpleStore({id:'val',fields:['val','selected'],data:[]}
+),name:'-roo-edit-className',attrname:'className',displayField:'val',typeAhead:false,mode:'local',editable:false,triggerAction:'all',emptyText:'Select Style',selectOnFocus:true,width:130,listeners:{'select':function(c,r,i){tb.selectedNode.className=r?r.get('val'):'';
+E.syncValue();}}}));}var H=Roo.form.HtmlEditor.ToolbarContext;for(var i=0;i<A.length;i++){if(typeof(A[i].xtype)!='undefined'){tb[typeof(A[i].name)=='undefined'?'add':'addField'](Roo.factory(A[i]));continue;}var I=A[i];tb.add(I.title+":&nbsp;");var J=I.opts?I.opts:false;
+if(I.optname){J=Roo.form.HtmlEditor.ToolbarContext.options[I.optname];}if(J){tb.addField(new Roo.form.ComboBox({store:typeof(H.stores[i])!='undefined'?Roo.factory(H.stores[i],Roo.data):new Roo.data.SimpleStore({id:'val',fields:['val','display'],data:J}),name:'-roo-edit-'+A[i].name,attrname:A[i].name,stylename:I.style?I.style:false,displayField:I.displayField?I.displayField:'val',valueField:'val',typeAhead:false,mode:typeof(H.stores[A[i].name])!='undefined'?'remote':'local',editable:false,triggerAction:'all',emptyText:'Select',selectOnFocus:true,width:I.width?I.width:130,listeners:{'select':function(c,r,i){if(c.stylename){tb.selectedNode.style[c.stylename]=r.get('val');
+E.syncValue();return;}if(r===false){tb.selectedNode.removeAttribute(c.attrname);E.syncValue();return;}tb.selectedNode.setAttribute(c.attrname,r.get('val'));E.syncValue();}}}));continue;}tb.addField(new Roo.form.TextField({name:'-roo-edit-'+A[i].name,attrname:A[i].name,width:I.width,value:'',listeners:{'change':function(f,nv,ov){tb.selectedNode.setAttribute(f.attrname,nv);
+E.syncValue();}}}));}var K=this;var L=!C||C.deleteTitle!==false;if(nm=='BODY'){L=false;tb.addSeparator();tb.addButton({text:'Stylesheets',listeners:{click:function(){K.editor.fireEvent('stylesheetsclick',K.editor);}}});}tb.addFill();if(L){tb.addButton({text:C&&C.deleteTitle?C.deleteTitle:'Remove Block or Formating',listeners:{click:function(){var sn=tb.selectedNode;
+if(C){sn=Roo.htmleditor.Block.factory(tb.selectedNode).removeNode();}if(!sn){return;}var M=sn.childNodes[0]||sn.nextSibling||sn.previousSibling||sn.parentNode;if(sn.hasAttribute('data-block')){M=sn.nextSibling||sn.previousSibling||sn.parentNode;sn.parentNode.removeChild(sn);
+}else if(sn&&sn.tagName!='BODY'){a=new Roo.htmleditor.FilterKeepChildren({tag:false});a.replaceTag(sn);}var N=E.createRange();N.setStart(M,0);N.setEnd(M,0);var O=E.getSelection();O.removeAllRanges();O.addRange(N);K.updateToolbar(null,null,null);K.updateFooter(false);
+}}});}tb.el.on('click',function(e){e.preventDefault();});tb.el.setVisibilityMode(Roo.Element.DISPLAY);tb.el.hide();return tb;},buildFooter:function(){var A=this.editor.wrap.createChild();this.footer=new Roo.Toolbar(A);var B=new Roo.Toolbar.Fill();var _t=this;
+this.footer.add({text:'&lt;',xtype:'Button',handler:function(){_t.footDisp.scrollTo('left',0,true)}});this.footer.add(B);this.footer.add({text:'&gt;',xtype:'Button',handler:function(){_t.footDisp.select('span').last().scrollIntoView(_t.footDisp,true);}});
+var A=Roo.get(B.el);A.addClass('x-editor-context');this.footDispWrap=A;this.footDispWrap.overflow='hidden';this.footDisp=A.createChild();this.footDispWrap.on('click',this.onContextClick,this)},onContextClick:function(ev,A){ev.preventDefault();var cn=A.className;
+if(!cn.match(/x-ed-loc-/)){return;}var n=cn.split('-').pop();var B=this.footerEls;var C=B[n];this.editorcore.selectNode(C);this.updateToolbar(null,null,C);}});
 // Roo/form/BasicForm.js
 Roo.form.BasicForm=function(el,A){this.allItems=[];this.childForms=[];Roo.apply(this,A);this.items=new Roo.util.MixedCollection(false,function(o){return o.id||(o.id=Roo.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);
 }Roo.form.BasicForm.superclass.constructor.call(this);Roo.form.BasicForm.popover.apply();};Roo.extend(Roo.form.BasicForm,Roo.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,childForms:false,allItems:false,waitMsgTarget:false,disableMask:false,errorMask:false,maskOffset:100,initEl:function(el){this.el=Roo.get(el);
 // Roo/form/BasicForm.js
 Roo.form.BasicForm=function(el,A){this.allItems=[];this.childForms=[];Roo.apply(this,A);this.items=new Roo.util.MixedCollection(false,function(o){return o.id||(o.id=Roo.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);
 }Roo.form.BasicForm.superclass.constructor.call(this);Roo.form.BasicForm.popover.apply();};Roo.extend(Roo.form.BasicForm,Roo.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,childForms:false,allItems:false,waitMsgTarget:false,disableMask:false,errorMask:false,maskOffset:100,initEl:function(el){this.el=Roo.get(el);
@@ -1074,18 +1274,19 @@ this.fireEvent('actioncomplete',this,A);}else{if((typeof(A.result)!='undefined')
 i<B;i++){var C=A[i];var f=this.findField(C.id);if(f){f.markInvalid(C.msg);}}}else{var D,id;for(id in A){if(typeof A[id]!='function'&&(D=this.findField(id))){D.markInvalid(A[id]);}}}Roo.each(this.childForms||[],function(f){f.markInvalid(A);});return this;}
 ,setValues:function(A){if(A instanceof Array){for(var i=0,B=A.length;i<B;i++){var v=A[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var C,id;for(id in A){if(typeof A[id]!='function'&&(C=this.findField(id))){if(C.setFromData&&C.valueField&&C.displayField&&(C.store&&!C.store.isLocal)){var sd={}
 ;sd[C.valueField]=typeof(A[C.hiddenName])=='undefined'?'':A[C.hiddenName];sd[C.displayField]=typeof(A[C.name])=='undefined'?'':A[C.name];C.setFromData(sd);}else{C.setValue(A[id]);}if(this.trackResetOnLoad){C.originalValue=C.getValue();}}}}this.resetHasChanged();
 i<B;i++){var C=A[i];var f=this.findField(C.id);if(f){f.markInvalid(C.msg);}}}else{var D,id;for(id in A){if(typeof A[id]!='function'&&(D=this.findField(id))){D.markInvalid(A[id]);}}}Roo.each(this.childForms||[],function(f){f.markInvalid(A);});return this;}
 ,setValues:function(A){if(A instanceof Array){for(var i=0,B=A.length;i<B;i++){var v=A[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var C,id;for(id in A){if(typeof A[id]!='function'&&(C=this.findField(id))){if(C.setFromData&&C.valueField&&C.displayField&&(C.store&&!C.store.isLocal)){var sd={}
 ;sd[C.valueField]=typeof(A[C.hiddenName])=='undefined'?'':A[C.hiddenName];sd[C.displayField]=typeof(A[C.name])=='undefined'?'':A[C.name];C.setFromData(sd);}else{C.setValue(A[id]);}if(this.trackResetOnLoad){C.originalValue=C.getValue();}}}}this.resetHasChanged();
-Roo.each(this.childForms||[],function(f){f.setValues(A);f.resetHasChanged();});return this;},getValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getValues());},this);}if(typeof(FormData)!='undefined'&&A!==true){try{var fd=(new FormData(this.el.dom)).entries();
-var B={};var C=fd.next();while(!C.done){B[C.value[0]]=C.value[1];C=fd.next();};return B;}catch(e){}}var fs=Roo.lib.Ajax.serializeForm(this.el.dom);if(A===true){return fs;}return Roo.urlDecode(fs);},getFieldValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getValues());
-},this);}var B={};this.items.each(function(f){if(!f.getName()){return;}var v=f.getValue();if(f.inputType=='radio'){if(typeof(B[f.getName()])=='undefined'){B[f.getName()]='';}if(!f.el.dom.checked){return;}v=f.el.dom.value;}if((typeof(v)=='object')&&f.getRawValue){v=f.getRawValue();
-}if(f.name!=f.getName()){B[f.name]=f.getRawValue();}B[f.getName()]=v;});return B;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});Roo.each(this.childForms||[],function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();
-});Roo.each(this.childForms||[],function(f){f.reset();});this.resetHasChanged();return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(A){this.items.remove(A);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);
-}});return this;},applyToFields:function(o){this.items.each(function(f){Roo.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Roo.applyIf(f,o);});return this;}});Roo.BasicForm=Roo.form.BasicForm;Roo.apply(Roo.form.BasicForm,{popover:{padding:5,isApplied:false,isMasked:false,form:false,target:false,intervalID:false,maskEl:false,apply:function(){if(this.isApplied){return;
-}this.maskEl={top:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-top-mask"},true),left:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-left-mask"},true),bottom:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-bottom-mask"}
-,true),right:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-right-mask"},true)};this.maskEl.top.enableDisplayMode("block");this.maskEl.left.enableDisplayMode("block");this.maskEl.bottom.enableDisplayMode("block");this.maskEl.right.enableDisplayMode("block");
-Roo.get(document.body).on('click',function(){this.unmask();},this);Roo.get(document.body).on('touchstart',function(){this.unmask();},this);this.isApplied=true},mask:function(A,B){this.form=A;this.target=B;if(!this.form.errorMask||!B.el){return;}var C=this.target.el.findScrollableParent()||this.target.el.findParent('div.x-layout-active-content',100,true)||Roo.get(document.body);
-var ot=this.target.el.calcOffsetsTo(C);var D=ot[1]-this.form.maskOffset;D=Math.min(D,C.dom.scrollHeight);C.scrollTo('top',D);var el=this.target.wrap||this.target.el;var E=el.getBox();this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setStyle('z-index',10000);
-this.maskEl.top.setSize(Roo.lib.Dom.getDocumentWidth(),E.y-this.padding);this.maskEl.top.setLeft(0);this.maskEl.top.setTop(0);this.maskEl.top.show();this.maskEl.left.setStyle('position','absolute');this.maskEl.left.setStyle('z-index',10000);this.maskEl.left.setSize(E.x-this.padding,E.height+this.padding*2);
-this.maskEl.left.setLeft(0);this.maskEl.left.setTop(E.y-this.padding);this.maskEl.left.show();this.maskEl.bottom.setStyle('position','absolute');this.maskEl.bottom.setStyle('z-index',10000);this.maskEl.bottom.setSize(Roo.lib.Dom.getDocumentWidth(),Roo.lib.Dom.getDocumentHeight()-E.bottom-this.padding);
+Roo.each(this.childForms||[],function(f){f.setValues(A);f.resetHasChanged();});return this;},getValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getFieldValues());},this);}if(typeof(FormData)!='undefined'&&A!==true){try{var fd=(new FormData(this.el.dom)).entries();
+var B={};var C=fd.next();while(!C.done){B[C.value[0]]=C.value[1];C=fd.next();};return B;}catch(e){}}var fs=Roo.lib.Ajax.serializeForm(this.el.dom);if(A===true){return fs;}return Roo.urlDecode(fs);},getFieldValues:function(A){if(this.childForms){Roo.each(this.childForms,function(f){this.setValues(f.getFieldValues());
+},this);}var B={};this.items.each(function(f){if(f.readOnly&&A!==true){return;}if(!f.getName()){return;}var v=f.getValue();if(f.inputType=='radio'){if(typeof(B[f.getName()])=='undefined'){B[f.getName()]='';}if(!f.el.dom.checked){return;}v=f.el.dom.value;}
+if((typeof(v)=='object')&&f.getRawValue){v=f.getRawValue();}if(f.name!=f.getName()){B[f.name]=f.getRawValue();}B[f.getName()]=v;});return B;},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});Roo.each(this.childForms||[],function(f){f.clearInvalid();
+});return this;},reset:function(){this.items.each(function(f){f.reset();});Roo.each(this.childForms||[],function(f){f.reset();});this.resetHasChanged();return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(A){this.items.remove(A);
+return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Roo.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Roo.applyIf(f,o);
+});return this;}});Roo.BasicForm=Roo.form.BasicForm;Roo.apply(Roo.form.BasicForm,{popover:{padding:5,isApplied:false,isMasked:false,form:false,target:false,intervalID:false,maskEl:false,apply:function(){if(this.isApplied){return;}this.maskEl={top:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-top-mask"}
+,true),left:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-left-mask"},true),bottom:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-bottom-mask"},true),right:Roo.DomHelper.append(Roo.get(document.body),{tag:"div",cls:"x-dlg-mask roo-form-right-mask"}
+,true)};this.maskEl.top.enableDisplayMode("block");this.maskEl.left.enableDisplayMode("block");this.maskEl.bottom.enableDisplayMode("block");this.maskEl.right.enableDisplayMode("block");Roo.get(document.body).on('click',function(){this.unmask();},this);Roo.get(document.body).on('touchstart',function(){this.unmask();
+},this);this.isApplied=true},mask:function(A,B){this.form=A;this.target=B;if(!this.form.errorMask||!B.el){return;}var C=this.target.el.findScrollableParent()||this.target.el.findParent('div.x-layout-active-content',100,true)||Roo.get(document.body);var ot=this.target.el.calcOffsetsTo(C);
+var D=ot[1]-this.form.maskOffset;D=Math.min(D,C.dom.scrollHeight);C.scrollTo('top',D);var el=this.target.wrap||this.target.el;var E=el.getBox();this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setStyle('z-index',10000);this.maskEl.top.setSize(Roo.lib.Dom.getDocumentWidth(),E.y-this.padding);
+this.maskEl.top.setLeft(0);this.maskEl.top.setTop(0);this.maskEl.top.show();this.maskEl.left.setStyle('position','absolute');this.maskEl.left.setStyle('z-index',10000);this.maskEl.left.setSize(E.x-this.padding,E.height+this.padding*2);this.maskEl.left.setLeft(0);
+this.maskEl.left.setTop(E.y-this.padding);this.maskEl.left.show();this.maskEl.bottom.setStyle('position','absolute');this.maskEl.bottom.setStyle('z-index',10000);this.maskEl.bottom.setSize(Roo.lib.Dom.getDocumentWidth(),Roo.lib.Dom.getDocumentHeight()-E.bottom-this.padding);
 this.maskEl.bottom.setLeft(0);this.maskEl.bottom.setTop(E.bottom+this.padding);this.maskEl.bottom.show();this.maskEl.right.setStyle('position','absolute');this.maskEl.right.setStyle('z-index',10000);this.maskEl.right.setSize(Roo.lib.Dom.getDocumentWidth()-E.right-this.padding,E.height+this.padding*2);
 this.maskEl.right.setLeft(E.right+this.padding);this.maskEl.right.setTop(E.y-this.padding);this.maskEl.right.show();this.intervalID=window.setInterval(function(){Roo.form.BasicForm.popover.unmask();},10000);window.onwheel=function(){return false;};(function(){this.isMasked=true;
 }).defer(500,this);},unmask:function(){if(!this.isApplied||!this.isMasked||!this.form||!this.target||!this.form.errorMask){return;}this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setSize(0,0).setXY([0,0]);this.maskEl.top.hide();this.maskEl.left.setStyle('position','absolute');
 this.maskEl.bottom.setLeft(0);this.maskEl.bottom.setTop(E.bottom+this.padding);this.maskEl.bottom.show();this.maskEl.right.setStyle('position','absolute');this.maskEl.right.setStyle('z-index',10000);this.maskEl.right.setSize(Roo.lib.Dom.getDocumentWidth()-E.right-this.padding,E.height+this.padding*2);
 this.maskEl.right.setLeft(E.right+this.padding);this.maskEl.right.setTop(E.y-this.padding);this.maskEl.right.show();this.intervalID=window.setInterval(function(){Roo.form.BasicForm.popover.unmask();},10000);window.onwheel=function(){return false;};(function(){this.isMasked=true;
 }).defer(500,this);},unmask:function(){if(!this.isApplied||!this.isMasked||!this.form||!this.target||!this.form.errorMask){return;}this.maskEl.top.setStyle('position','absolute');this.maskEl.top.setSize(0,0).setXY([0,0]);this.maskEl.top.hide();this.maskEl.left.setStyle('position','absolute');
@@ -1384,21 +1585,28 @@ this.resizeEl.setSize(this.autoWidth?"auto":C.width,this.autoHeight?"auto":C.hei
 }},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();
 }},destroy:function(){this.el.removeAllListeners();var A=document.createElement("span");A.appendChild(this.el.dom);A.innerHTML="";this.el.remove();this.el=null;},form:false,view:false,addxtype:function(A){if(A.xtype.match(/^Form$/)){var el;el=this.el.createChild();
 this.form=new Roo.form.Form(A);if(this.form.allItems.length){this.form.render(el.dom);}return this.form;}if(['View','JsonView','DatePicker'].indexOf(A.xtype)>-1){A.el=this.el.appendChild(document.createElement("div"));var B=new Roo.factory(A);B.render&&B.render(false,'');
 }},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();
 }},destroy:function(){this.el.removeAllListeners();var A=document.createElement("span");A.appendChild(this.el.dom);A.innerHTML="";this.el.remove();this.el=null;},form:false,view:false,addxtype:function(A){if(A.xtype.match(/^Form$/)){var el;el=this.el.createChild();
 this.form=new Roo.form.Form(A);if(this.form.allItems.length){this.form.render(el.dom);}return this.form;}if(['View','JsonView','DatePicker'].indexOf(A.xtype)>-1){A.el=this.el.appendChild(document.createElement("div"));var B=new Roo.factory(A);B.render&&B.render(false,'');
-this.view=B;return B;}return false;}});Roo.GridPanel=function(A,B){this.wrapper=Roo.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(A.getGridEl().dom);Roo.GridPanel.superclass.constructor.call(this,this.wrapper,B);
+this.view=B;return B;}return false;}});
+// Roo/GridPanel.js
+Roo.GridPanel=function(A,B){if(typeof(A.grid)!='undefined'){B=A;A=B.grid;}this.wrapper=Roo.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(A.getGridEl().dom);Roo.GridPanel.superclass.constructor.call(this,this.wrapper,B);
 if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}if(this.footer&&!this.footer.el&&this.footer.xtype){this.footer.container=this.grid.getView().getFooterPanel(true);this.footer.dataSource=this.grid.dataSource;this.footer=Roo.factory(this.footer,Roo);
 }A.monitorWindowResize=false;A.autoHeight=false;A.autoWidth=false;this.grid=A;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Roo.extend(Roo.GridPanel,Roo.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;
 },setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.grid;var D=this.adjustForComponents(A,B);C.getGridEl().setSize(D.width,D.height);C.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();
 if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}if(this.footer&&!this.footer.el&&this.footer.xtype){this.footer.container=this.grid.getView().getFooterPanel(true);this.footer.dataSource=this.grid.dataSource;this.footer=Roo.factory(this.footer,Roo);
 }A.monitorWindowResize=false;A.autoHeight=false;A.autoWidth=false;this.grid=A;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Roo.extend(Roo.GridPanel,Roo.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;
 },setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.grid;var D=this.adjustForComponents(A,B);C.getGridEl().setSize(D.width,D.height);C.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();
-},destroy:function(){this.grid.destroy();delete this.grid;Roo.GridPanel.superclass.destroy.call(this);}});Roo.NestedLayoutPanel=function(A,B){Roo.NestedLayoutPanel.superclass.constructor.call(this,A.getEl(),B);A.monitorWindowResize=false;this.layout=A;this.layout.getEl().addClass("x-layout-nested-layout");
-};Roo.extend(Roo.NestedLayoutPanel,Roo.ContentPanel,{setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.adjustForComponents(A,B);var el=this.layout.getEl();el.setSize(C.width,C.height);var D=el.dom.offsetWidth;this.layout.layout();if(Roo.isIE&&!this.initialized){this.initialized=true;
-this.layout.layout();}}},setActiveState:function(A){this.active=A;if(!A){this.fireEvent("deactivate",this);return;}this.fireEvent("activate",this);if(!this.layout){return;}var B=false;for(var r in this.layout.regions){B=this.layout.getRegion(r);if(B.getActivePanel()){B.setActivePanel(B.getActivePanel());
-continue;}if(!B.panels.length){continue;}B.showPanel(B.getPanel(0));}},getLayout:function(){return this.layout;},addxtype:function(A){return this.layout.addxtype(A);}});Roo.ScrollPanel=function(el,A,B){A=A||{};A.fitToFrame=true;Roo.ScrollPanel.superclass.constructor.call(this,el,A,B);
-this.el.dom.style.overflow="hidden";var C=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");this.el.on("mousewheel",this.onWheel,this);var up=C.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);
-var D=C.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();D.unselectable();up.on("click",this.scrollUp,this);D.on("click",this.scrollDown,this);up.addClassOnOver("x-scroller-btn-over");D.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");
-D.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+D.getHeight())];this.resizeEl=this.el;this.el=C;this.up=up;this.down=D;};Roo.extend(Roo.ScrollPanel,Roo.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this}
-);},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this});},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");
-this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Roo.ScrollPanel.superclass.setSize.apply(this,arguments);this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);
-this.afterScroll();e.stopEvent();},setContent:function(A,B){this.resizeEl.update(A,B);}});Roo.TreePanel=function(A){var el=A.el;var B=A.tree;delete A.tree;delete A.el;var C=el.createChild();A.resizeEl=C;Roo.TreePanel.superclass.constructor.call(this,el,A);
-this.tree=new Roo.tree.TreePanel(C,B);this.on('activate',function(){if(this.tree.rendered){return;}this.tree.render();});};Roo.extend(Roo.TreePanel,Roo.ContentPanel,{fitToFrame:true,autoScroll:true,tree:false});
+},destroy:function(){this.grid.destroy();delete this.grid;Roo.GridPanel.superclass.destroy.call(this);}});
+// Roo/NestedLayoutPanel.js
+Roo.NestedLayoutPanel=function(A,B){Roo.NestedLayoutPanel.superclass.constructor.call(this,A.getEl(),B);A.monitorWindowResize=false;this.layout=A;this.layout.getEl().addClass("x-layout-nested-layout");};Roo.extend(Roo.NestedLayoutPanel,Roo.ContentPanel,{layout:false,setSize:function(A,B){if(!this.ignoreResize(A,B)){var C=this.adjustForComponents(A,B);
+var el=this.layout.getEl();el.setSize(C.width,C.height);var D=el.dom.offsetWidth;this.layout.layout();if(Roo.isIE&&!this.initialized){this.initialized=true;this.layout.layout();}}},setActiveState:function(A){this.active=A;if(!A){this.fireEvent("deactivate",this);
+return;}this.fireEvent("activate",this);if(!this.layout){return;}var B=false;for(var r in this.layout.regions){B=this.layout.getRegion(r);if(B.getActivePanel()){B.setActivePanel(B.getActivePanel());continue;}if(!B.panels.length){continue;}B.showPanel(B.getPanel(0));
+}},getLayout:function(){return this.layout;},addxtype:function(A){return this.layout.addxtype(A);}});
+// Roo/ScrollPanel.js
+Roo.ScrollPanel=function(el,A,B){A=A||{};A.fitToFrame=true;Roo.ScrollPanel.superclass.constructor.call(this,el,A,B);this.el.dom.style.overflow="hidden";var C=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");
+this.el.on("mousewheel",this.onWheel,this);var up=C.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);var D=C.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();D.unselectable();up.on("click",this.scrollUp,this);D.on("click",this.scrollDown,this);
+up.addClassOnOver("x-scroller-btn-over");D.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");D.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+D.getHeight())];this.resizeEl=this.el;this.el=C;this.up=up;
+this.down=D;};Roo.extend(Roo.ScrollPanel,Roo.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this});},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this}
+);},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Roo.ScrollPanel.superclass.setSize.apply(this,arguments);
+this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);this.afterScroll();e.stopEvent();},setContent:function(A,B){this.resizeEl.update(A,B);}});
+// Roo/TreePanel.js
+Roo.TreePanel=function(A){var el=A.el;var B=A.tree;delete A.tree;delete A.el;var C=el.createChild();A.resizeEl=C;Roo.TreePanel.superclass.constructor.call(this,el,A);this.tree=new Roo.tree.TreePanel(C,B);this.on('activate',function(){if(this.tree.rendered){return;
+}this.tree.render();});};Roo.extend(Roo.TreePanel,Roo.ContentPanel,{fitToFrame:true,autoScroll:true,tree:false});
 // Roo/ReaderLayout.js
 Roo.ReaderLayout=function(A,B){var c=A||{size:{}};Roo.ReaderLayout.superclass.constructor.call(this,B||document.body,{north:c.north!==false?Roo.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5}
 ,cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}
 // Roo/ReaderLayout.js
 Roo.ReaderLayout=function(A,B){var c=A||{size:{}};Roo.ReaderLayout.superclass.constructor.call(this,B||document.body,{north:c.north!==false?Roo.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5}
 ,cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Roo.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}
@@ -1410,7 +1618,7 @@ Roo.grid.Grid=function(A,B){this.container=Roo.get(A);this.container.update("");
 }if(this.cm){this.colModel=this.cm;delete this.cm;}if(this.sm){this.selModel=this.sm;delete this.sm;}if(this.selModel){this.selModel=Roo.factory(this.selModel,Roo.grid);this.sm=this.selModel;this.sm.xmodule=this.xmodule||false;}if(typeof(this.colModel.config)=='undefined'){this.colModel=new Roo.grid.ColumnModel(this.colModel);
 this.cm=this.colModel;this.cm.xmodule=this.xmodule||false;}if(this.dataSource){this.dataSource=Roo.factory(this.dataSource,Roo.data);this.ds=this.dataSource;this.ds.xmodule=this.xmodule||false;}if(this.width){this.container.setWidth(this.width);}if(this.height){this.container.setHeight(this.height);
 }this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,'rowclass':true,'render':true}
 }if(this.cm){this.colModel=this.cm;delete this.cm;}if(this.sm){this.selModel=this.sm;delete this.sm;}if(this.selModel){this.selModel=Roo.factory(this.selModel,Roo.grid);this.sm=this.selModel;this.sm.xmodule=this.xmodule||false;}if(typeof(this.colModel.config)=='undefined'){this.colModel=new Roo.grid.ColumnModel(this.colModel);
 this.cm=this.colModel;this.cm.xmodule=this.xmodule||false;}if(this.dataSource){this.dataSource=Roo.factory(this.dataSource,Roo.data);this.ds=this.dataSource;this.ds.xmodule=this.xmodule||false;}if(this.width){this.container.setWidth(this.width);}if(this.height){this.container.setHeight(this.height);
 }this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,'rowclass':true,'render':true}
-);Roo.grid.Grid.superclass.constructor.call(this);};Roo.extend(Roo.grid.Grid,Roo.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,dropTarget:false,rendered:false,ddText:"{0} selected row{1}",render:function(){var c=this.container;
+);Roo.grid.Grid.superclass.constructor.call(this);};Roo.extend(Roo.grid.Grid,Roo.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,dropTarget:false,sortColMenu:false,rendered:false,ddText:"{0} selected row{1}",render:function(){var c=this.container;
 if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}var A=this.getView();A.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);
 if(Roo.isTouch){c.on("touchstart",this.onTouchStart,this);}this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);A.render();if(this.loadMask){this.loadMask=new Roo.LoadMask(this.container,Roo.apply({store:this.dataSource}
 ,this.loadMask));}if(this.toolbar&&this.toolbar.xtype){this.toolbar.container=this.getView().getHeaderPanel(true);this.toolbar=new Roo.Toolbar(this.toolbar);}if(this.footer&&this.footer.xtype){this.footer.dataSource=this.getDataSource();this.footer.container=this.getView().getFooterPanel(true);
 if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}var A=this.getView();A.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);
 if(Roo.isTouch){c.on("touchstart",this.onTouchStart,this);}this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);A.render();if(this.loadMask){this.loadMask=new Roo.LoadMask(this.container,Roo.apply({store:this.dataSource}
 ,this.loadMask));}if(this.toolbar&&this.toolbar.xtype){this.toolbar.container=this.getView().getHeaderPanel(true);this.toolbar=new Roo.Toolbar(this.toolbar);}if(this.footer&&this.footer.xtype){this.footer.dataSource=this.getDataSource();this.footer.container=this.getView().getFooterPanel(true);
@@ -1531,11 +1739,11 @@ if(A){for(var dd in A){if(!A[dd].config.isTarget&&A[dd].dragElId){var B=A[dd].dr
 case "lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}if(lc!=B){cm.setLocked(B,true,true);cm.moveColumn(B,lc);this.grid.fireEvent("columnmove",B,lc);}else{cm.setLocked(B,true);}break;case "unlock":var lc=cm.getLockedCount();
 if((lc-1)!=B){cm.setLocked(B,false,true);cm.moveColumn(B,lc-1);this.grid.fireEvent("columnmove",B,lc-1);}else{cm.setLocked(B,false);}break;case 'wider':case 'narrow':var cw=cm.getColumnWidth(B);cw+=(A.id=='wider'?1:-1)*50;cw=Math.max(0,cw);cw=Math.min(cw,4000);
 cm.setColumnWidth(B,cw);break;default:B=cm.getIndexById(A.id.substr(4));if(B!=-1){if(A.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}cm.setHidden(B,A.checked);}}return true;},beforeColMenuShow:function(){var cm=this.cm,A=cm.getColumnCount();
 case "lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}if(lc!=B){cm.setLocked(B,true,true);cm.moveColumn(B,lc);this.grid.fireEvent("columnmove",B,lc);}else{cm.setLocked(B,true);}break;case "unlock":var lc=cm.getLockedCount();
 if((lc-1)!=B){cm.setLocked(B,false,true);cm.moveColumn(B,lc-1);this.grid.fireEvent("columnmove",B,lc-1);}else{cm.setLocked(B,false);}break;case 'wider':case 'narrow':var cw=cm.getColumnWidth(B);cw+=(A.id=='wider'?1:-1)*50;cw=Math.max(0,cw);cw=Math.min(cw,4000);
 cm.setColumnWidth(B,cw);break;default:B=cm.getIndexById(A.id.substr(4));if(B!=-1){if(A.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}cm.setHidden(B,A.checked);}}return true;},beforeColMenuShow:function(){var cm=this.cm,A=cm.getColumnCount();
-this.colMenu.removeAll();for(var i=0;i<A;i++){this.colMenu.add(new Roo.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false}));}},handleHdCtx:function(g,A,e){e.stopEvent();var hd=this.getHeaderCell(A);
-this.hdCtxIndex=A;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(A));ms.get("desc").setDisabled(!cm.isSortable(A));if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(A));ms.get("unlock").setDisabled(!cm.isLocked(A));
-}this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());
-if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);this.layout();}},render:function(){var cm=this.cm;
-var A=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Roo.EventManager.onWindowResize(this.onWindowResize,this,true);}var B=this.renderHeaders();var C=this.templates.body.apply({rows:""});var D=this.templates.master.apply({lockedBody:C,body:C,lockedHeader:B[0],header:B[1]}
+this.colMenu.removeAll();var B=[];for(var i=0;i<A;i++){B.push({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false});}if(this.grid.sortColMenu){B.sort(function(a,b){if(a.text==b.text){return 0;}return a.text.toUpperCase()>b.text.toUpperCase()?1:-1;
+});}for(var i=0;i<A;i++){this.colMenu.add(new Roo.menu.CheckItem(B[i]));}},handleHdCtx:function(g,A,e){e.stopEvent();var hd=this.getHeaderCell(A);this.hdCtxIndex=A;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(A));ms.get("desc").setDisabled(!cm.isSortable(A));
+if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(A));ms.get("unlock").setDisabled(!cm.isLocked(A));}this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");
+}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);
+this.layout();}},render:function(){var cm=this.cm;var A=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Roo.EventManager.onWindowResize(this.onWindowResize,this,true);}var B=this.renderHeaders();var C=this.templates.body.apply({rows:""});var D=this.templates.master.apply({lockedBody:C,body:C,lockedHeader:B[0],header:B[1]}
 );this.grid.getGridEl().dom.innerHTML=D;this.initElements();this.el.on("scroll",function(){this.el.dom.scrollTop=0;},this);this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);
 this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);
 this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Roo.grid.SplitDragZone){new Roo.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}this.updateSplitters();if(this.grid.enableColumnMove&&Roo.grid.HeaderDragZone){new Roo.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);
 );this.grid.getGridEl().dom.innerHTML=D;this.initElements();this.el.on("scroll",function(){this.el.dom.scrollTop=0;},this);this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);
 this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);
 this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Roo.grid.SplitDragZone){new Roo.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}this.updateSplitters();if(this.grid.enableColumnMove&&Roo.grid.HeaderDragZone){new Roo.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);