Merge branch 'master' of http://git.roojs.com/roojs1
authorjohn@roojs.com <john@roojs.com>
Wed, 16 Jan 2019 02:38:31 +0000 (10:38 +0800)
committerjohn@roojs.com <john@roojs.com>
Wed, 16 Jan 2019 02:38:31 +0000 (10:38 +0800)
1  2 
roojs-bootstrap-debug.js
roojs-bootstrap.js

diff --combined roojs-bootstrap-debug.js
@@@ -2060,13 -2060,13 +2060,13 @@@ Roo.bootstrap.Menu = function(config)
      this.addEvents({
          /**
           * @event beforeshow
-          * Fires before this menu is displayed
+          * Fires before this menu is displayed (return false to block)
           * @param {Roo.menu.Menu} this
           */
          beforeshow : true,
          /**
           * @event beforehide
-          * Fires before this menu is hidden
+          * Fires before this menu is hidden (return false to block)
           * @param {Roo.menu.Menu} this
           */
          beforehide : true,
@@@ -2268,7 -2268,7 +2268,7 @@@ Roo.extend(Roo.bootstrap.Menu, Roo.boot
      isVisible : function(){
          return !this.hidden;
      },
-      onMouseOut : function(e){
+     onMouseOut : function(e){
          var t  = this.findTargetItem(e);
          
          //if(t ){
       * the element (defaults to this.defaultAlign)
       * @param {Roo.menu.Menu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)
       */
-     show : function(el, pos, parentMenu){
-         this.parentMenu = parentMenu;
+     show : function(el, pos, parentMenu)
+     {
+         if (false === this.fireEvent("beforeshow", this)) {
+           Roo.log("show canceled");
+           return;
+       }
+       this.parentMenu = parentMenu;
          if(!this.el){
              this.render();
          }
-         this.fireEvent("beforeshow", this);
+         
          this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
      },
       /**
       */
      hide : function(deep)
      {
-         
+         if (false === this.fireEvent("beforehide", this)) {
+           Roo.log("hide canceled");
+           return;
+       }
          this.hideMenuItems();
          if(this.el && this.isVisible()){
-             this.fireEvent("beforehide", this);
+            
              if(this.activeItem){
                  this.activeItem.deactivate();
                  this.activeItem = null;
          if (!this.el) { 
              return;
          }
-         //$(backdrop).remove()
+         
          this.el.select('.open',true).each(function(aa) {
              
              aa.removeClass('open');
-           //var parent = getParent($(this))
-           //var relatedTarget = { relatedTarget: this }
-           
-            //$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
-           //if (e.isDefaultPrevented()) return
-            //$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+          
          });
      },
      addxtypeChild : function (tree, cntr) {
@@@ -3875,46 -3878,7 +3878,7 @@@ Roo.extend(Roo.bootstrap.Navbar, Roo.bo
      initEvents :function ()
      {
          //Roo.log(this.el.select('.navbar-toggle',true));
-         this.el.select('.navbar-toggle',true).on('click', function() {
-             if(this.fireEvent('beforetoggle', this) !== false){
-                 var ce = this.el.select('.navbar-collapse',true).first();
-                 ce.toggleClass('in'); // old...
-                 if (ce.hasClass('collapse')) {
-                     // show it...
-                     ce.removeClass('collapse');
-                     ce.addClass('show');
-                     var h = ce.getHeight();
-                     Roo.log(h);
-                     ce.removeClass('show');
-                     // at this point we should be able to see it..
-                     ce.addClass('collapsing');
-                     
-                     ce.setHeight(0); // resize it ...
-                     ce.on('transitionend', function() {
-                         Roo.log('done transition');
-                         ce.removeClass('collapsing');
-                         ce.addClass('show');
-                         ce.removeClass('collapse');
-                         ce.dom.style.height = '';
-                     }, this, { single: true} );
-                     ce.setHeight(h);
-                     
-                 } else {
-                     ce.setHeight(ce.getHeight());
-                     ce.removeClass('show');
-                     ce.addClass('collapsing');
-                     
-                     ce.on('transitionend', function() {
-                         ce.dom.style.height = '';
-                         ce.removeClass('collapsing');
-                         ce.addClass('collapse');
-                     }, this, { single: true} );
-                     ce.setHeight(0);
-                 }
-             }
-             
-         }, this);
+         this.el.select('.navbar-toggle',true).on('click', this.onToggle , this);
          
          var mark = {
              tag: "div",
      
      getChildContainer : function()
      {
-         if (this.el.select('.collapse').getCount()) {
+         if (this.el && this.el.select('.collapse').getCount()) {
              return this.el.select('.collapse',true).first();
          }
          
      unmask : function()
      {
          this.maskEl.hide();
-     } 
+     },
+     onToggle : function()
+     {
+         
+         if(this.fireEvent('beforetoggle', this) === false){
+             return;
+         }
+         var ce = this.el.select('.navbar-collapse',true).first();
+       
+         if (!ce.hasClass('show')) {
+            this.expand();
+         } else {
+             this.collapse();
+         }
+         
+         
      
+     },
+     /**
+      * Expand the navbar pulldown 
+      */
+     expand : function ()
+     {
+        
+         var ce = this.el.select('.navbar-collapse',true).first();
+         if (ce.hasClass('collapsing')) {
+             return;
+         }
+         ce.dom.style.height = '';
+                // show it...
+         ce.addClass('in'); // old...
+         ce.removeClass('collapse');
+         ce.addClass('show');
+         var h = ce.getHeight();
+         Roo.log(h);
+         ce.removeClass('show');
+         // at this point we should be able to see it..
+         ce.addClass('collapsing');
+         
+         ce.setHeight(0); // resize it ...
+         ce.on('transitionend', function() {
+             //Roo.log('done transition');
+             ce.removeClass('collapsing');
+             ce.addClass('show');
+             ce.removeClass('collapse');
+             ce.dom.style.height = '';
+         }, this, { single: true} );
+         ce.setHeight(h);
+         ce.dom.scrollTop = 0;
+     },
+     /**
+      * Collapse the navbar pulldown 
+      */
+     collapse : function()
+     {
+          var ce = this.el.select('.navbar-collapse',true).first();
+        
+         if (ce.hasClass('collapsing') || ce.hasClass('collapse') ) {
+             // it's collapsed or collapsing..
+             return;
+         }
+         ce.removeClass('in'); // old...
+         ce.setHeight(ce.getHeight());
+         ce.removeClass('show');
+         ce.addClass('collapsing');
+         
+         ce.on('transitionend', function() {
+             ce.dom.style.height = '';
+             ce.removeClass('collapsing');
+             ce.addClass('collapse');
+         }, this, { single: true} );
+         ce.setHeight(0);
+     }
      
      
      
@@@ -5125,7 -5161,7 +5161,7 @@@ Roo.extend(Roo.bootstrap.NavSidebarItem
              e.preventDefault();
          }
          
-         this.fireEvent('click', this);
+         this.fireEvent('click', this, e);
      },
      
      disable : function()
@@@ -12379,7 -12415,7 +12415,7 @@@ Roo.extend(Roo.data.MemoryProxy, Roo.da
          params = params || {};
          var result;
          try {
-             result = reader.readRecords(this.data);
+             result = reader.readRecords(params.data ? params.data :this.data);
          }catch(e){
              this.fireEvent("loadexception", this, arg, null, e);
              callback.call(scope, null, arg, false);
@@@ -12986,24 -13022,31 +13022,31 @@@ var myReader = new Roo.data.ArrayReader
   * <pre><code>
  [ [1, 'Bill', 'Gardener'], [2, 'Ben', 'Horticulturalist'] ]
    </code></pre>
-  * @cfg {String} id (optional) The subscript within row Array that provides an ID for the Record
+  
   * @constructor
   * Create a new JsonReader
   * @param {Object} meta Metadata configuration options.
-  * @param {Object} recordType Either an Array of field definition objects
+  * @param {Object|Array} recordType Either an Array of field definition objects
+  * 
+  * @cfg {Array} fields Array of field definition objects
+  * @cfg {String} id Name of the property within a row object that contains a record identifier value.
   * as specified to {@link Roo.data.Record#create},
   * or an {@link Roo.data.Record} object
+  *
+  * 
   * created using {@link Roo.data.Record#create}.
   */
  Roo.data.ArrayReader = function(meta, recordType){
-     Roo.data.ArrayReader.superclass.constructor.call(this, meta, recordType);
+     
+      
+     Roo.data.ArrayReader.superclass.constructor.call(this, meta, recordType||meta.fields);
  };
  
  Roo.extend(Roo.data.ArrayReader, Roo.data.JsonReader, {
      /**
       * Create a data block containing Roo.data.Records from an XML document.
       * @param {Object} o An Array of row objects which represents the dataset.
-      * @return {Object} data A data block which is used by an Roo.data.Store object as
+      * @return {Object} A data block which is used by an {@link Roo.data.Store} object as
       * a cache of Roo.data.Records.
       */
      readRecords : function(o){
@@@ -41676,11 -41719,8 +41719,11 @@@ Roo.extend(Roo.bootstrap.BezierSignatur
          
          var canvas = this.canvasEl().dom;
          var ctx = this.canvasElCtx();
 -        var img_data = ctx.getImageData(0, 0, canvas.width, canvas.height);
 +        var img_data = false;
          
 +        if(canvas.width > 0) {
 +            var img_data = ctx.getImageData(0, 0, canvas.width, canvas.height);
 +        }
          // setting canvas width will clean img data
          canvas.width = 0;
          
          
          canvas.width = this.el.dom.clientWidth - padding_left - padding_right;
          
 -        ctx.putImageData(img_data, 0, 0);
 +        if(img_data) {
 +            ctx.putImageData(img_data, 0, 0);
 +        }
      },
      
      _handleMouseDown: function(e)
diff --combined roojs-bootstrap.js
@@@ -91,10 -91,10 +91,10 @@@ this.triggerEl.on(Roo.isTouch?'touchsta
  }this.el.on('click',this.onClick,this);this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);},findTargetItem:function(e){var t=e.getTarget(".dropdown-menu-item",this.el,true);if(!t){return false;}if(t&&t.id){return this.menuitems.get(t.id);
  }return false;},onTouch:function(e){Roo.log("menu.onTouch");this.onClick(e);},onClick:function(e){Roo.log("menu.onClick");var t=this.findTargetItem(e);if(!t||t.isContainer){return;}Roo.log(e);Roo.log('pass click event');t.onClick(e);this.fireEvent("click",this,t,e);
  var A=this;if(!t.href.length||t.href=='#'){(function(){A.hide();}).defer(100);}},onMouseOver:function(e){var t=this.findTargetItem(e);this.fireEvent("mouseover",this,e,t);},isVisible:function(){return !this.hidden;},onMouseOut:function(e){var t=this.findTargetItem(e);
- this.fireEvent("mouseout",this,e,t);},show:function(el,A,B){this.parentMenu=B;if(!this.el){this.render();}this.fireEvent("beforeshow",this);this.showAt(this.el.getAlignToXY(el,A||this.defaultAlign),B,false);},showAt:function(xy,A,_e){this.parentMenu=A;if(!this.el){this.render();
- }if(_e!==false){this.fireEvent("beforeshow",this);}this.hideMenuItems();this.hidden=false;this.triggerEl.addClass('open');this.el.addClass('show');if(this.el.getWidth()+xy[0]>=Roo.lib.Dom.getViewWidth()){xy[0]=xy[0]-this.el.getWidth()+this.triggerEl.getWidth();
+ this.fireEvent("mouseout",this,e,t);},show:function(el,A,B){if(false===this.fireEvent("beforeshow",this)){Roo.log("show canceled");return;}this.parentMenu=B;if(!this.el){this.render();}this.showAt(this.el.getAlignToXY(el,A||this.defaultAlign),B,false);},showAt:function(xy,A,_e){this.parentMenu=A;
if(!this.el){this.render();}if(_e!==false){this.fireEvent("beforeshow",this);}this.hideMenuItems();this.hidden=false;this.triggerEl.addClass('open');this.el.addClass('show');if(this.el.getWidth()+xy[0]>=Roo.lib.Dom.getViewWidth()){xy[0]=xy[0]-this.el.getWidth()+this.triggerEl.getWidth();
  }if(this.el.getHeight()+xy[1]>=Roo.lib.Dom.getViewHeight()){xy[1]=xy[1]-this.el.getHeight()-this.triggerEl.getHeight();}if(this.el.getStyle('top')!='auto'&&this.el.getStyle('top').slice(-1)!="%"){this.el.setXY(xy);}this.focus();this.fireEvent("show",this);
- },focus:function(){return;if(!this.hidden){this.doFocus.defer(50,this);}},doFocus:function(){if(!this.hidden){this.focusEl.focus();}},hide:function(A){this.hideMenuItems();if(this.el&&this.isVisible()){this.fireEvent("beforehide",this);if(this.activeItem){this.activeItem.deactivate();
+ },focus:function(){return;if(!this.hidden){this.doFocus.defer(50,this);}},doFocus:function(){if(!this.hidden){this.focusEl.focus();}},hide:function(A){if(false===this.fireEvent("beforehide",this)){Roo.log("hide canceled");return;}this.hideMenuItems();if(this.el&&this.isVisible()){if(this.activeItem){this.activeItem.deactivate();
  this.activeItem=null;}this.triggerEl.removeClass('open');;this.el.removeClass('show');this.hidden=true;this.fireEvent("hide",this);}if(A===true&&this.parentMenu){this.parentMenu.hide(true);}},onTriggerClick:function(e){Roo.log('trigger click');var A=e.getTarget();
  Roo.log(A.nodeName.toLowerCase());if(A.nodeName.toLowerCase()==='i'){e.preventDefault();}},onTriggerPress:function(e){Roo.log('trigger press');var A=Roo.get(e.getTarget());if(A.findParent('.dropdown-menu')||A.findParent('.treeview-menu')){Roo.log('is treeview or dropdown?');
  return;}if(e.getTarget().nodeName.toLowerCase()!=='i'&&this.isLink){return;}if(this.isVisible()){Roo.log('hide');this.hide();}else{Roo.log('show');this.show(this.triggerEl,'?',false);}if(this.stopEvent||e.getTarget().nodeName.toLowerCase()==='i'){e.stopEvent();
@@@ -153,11 -153,12 +153,12 @@@ H.hide();}I.setDisplayed(B.progress===t
  Roo.Msg=Roo.Msg||Roo.MessageBox;
  // Roo/bootstrap/Navbar.js
  Roo.bootstrap.Navbar=function(A){Roo.bootstrap.Navbar.superclass.constructor.call(this,A);this.addEvents({"beforetoggle":true});};Roo.extend(Roo.bootstrap.Navbar,Roo.bootstrap.Component,{navItems:false,loadMask:false,getAutoCreate:function(){throw {message:"nav bar is now a abstract base class - use NavSimplebar / NavHeaderbar / NavSidebar etc..."}
- ;},initEvents:function(){this.el.select('.navbar-toggle',true).on('click',function(){if(this.fireEvent('beforetoggle',this)!==false){var ce=this.el.select('.navbar-collapse',true).first();ce.toggleClass('in');if(ce.hasClass('collapse')){ce.removeClass('collapse');
- ce.addClass('show');var h=ce.getHeight();Roo.log(h);ce.removeClass('show');ce.addClass('collapsing');ce.setHeight(0);ce.on('transitionend',function(){Roo.log('done transition');ce.removeClass('collapsing');ce.addClass('show');ce.removeClass('collapse');ce.dom.style.height='';
- },this,{single:true});ce.setHeight(h);}else{ce.setHeight(ce.getHeight());ce.removeClass('show');ce.addClass('collapsing');ce.on('transitionend',function(){ce.dom.style.height='';ce.removeClass('collapsing');ce.addClass('collapse');},this,{single:true});ce.setHeight(0);
- }}},this);var A={tag:"div",cls:"x-dlg-mask"};this.maskEl=Roo.DomHelper.append(this.el,A,true);var B=this.el.getSize();this.maskEl.setSize(B.width,B.height);this.maskEl.enableDisplayMode("block");this.maskEl.hide();if(this.loadMask){this.maskEl.show();}},getChildContainer:function(){if(this.el.select('.collapse').getCount()){return this.el.select('.collapse',true).first();
- }return this.el;},mask:function(){this.maskEl.show();},unmask:function(){this.maskEl.hide();}});
+ ;},initEvents:function(){this.el.select('.navbar-toggle',true).on('click',this.onToggle,this);var A={tag:"div",cls:"x-dlg-mask"};this.maskEl=Roo.DomHelper.append(this.el,A,true);var B=this.el.getSize();this.maskEl.setSize(B.width,B.height);this.maskEl.enableDisplayMode("block");
+ this.maskEl.hide();if(this.loadMask){this.maskEl.show();}},getChildContainer:function(){if(this.el&&this.el.select('.collapse').getCount()){return this.el.select('.collapse',true).first();}return this.el;},mask:function(){this.maskEl.show();},unmask:function(){this.maskEl.hide();
+ },onToggle:function(){if(this.fireEvent('beforetoggle',this)===false){return;}var ce=this.el.select('.navbar-collapse',true).first();if(!ce.hasClass('show')){this.expand();}else{this.collapse();}},expand:function(){var ce=this.el.select('.navbar-collapse',true).first();
+ if(ce.hasClass('collapsing')){return;}ce.dom.style.height='';ce.addClass('in');ce.removeClass('collapse');ce.addClass('show');var h=ce.getHeight();Roo.log(h);ce.removeClass('show');ce.addClass('collapsing');ce.setHeight(0);ce.on('transitionend',function(){ce.removeClass('collapsing');
+ ce.addClass('show');ce.removeClass('collapse');ce.dom.style.height='';},this,{single:true});ce.setHeight(h);ce.dom.scrollTop=0;},collapse:function(){var ce=this.el.select('.navbar-collapse',true).first();if(ce.hasClass('collapsing')||ce.hasClass('collapse')){return;
+ }ce.removeClass('in');ce.setHeight(ce.getHeight());ce.removeClass('show');ce.addClass('collapsing');ce.on('transitionend',function(){ce.dom.style.height='';ce.removeClass('collapsing');ce.addClass('collapse');},this,{single:true});ce.setHeight(0);}});
  // Roo/bootstrap/NavSimplebar.js
  Roo.bootstrap.NavSimplebar=function(A){Roo.bootstrap.NavSimplebar.superclass.constructor.call(this,A);};Roo.extend(Roo.bootstrap.NavSimplebar,Roo.bootstrap.Navbar,{inverse:false,type:false,arrangement:'',align:false,weight:'light',main:false,tag:false,getAutoCreate:function(){var A={tag:this.tag||'div',cls:'navbar navbar-expand-lg roo-navbar-simple'}
  ;if(['light','white'].indexOf(this.weight)>-1){A.cls+=['light','white'].indexOf(this.weight)>-1?' navbar-light':' navbar-dark';}A.cls+=' bg-'+this.weight;if(this.inverse){A.cls+=' navbar-inverse';}A.cn=[{cls:'nav',tag:'ul'}];this.type=this.type||'nav';if(['tabs','pills'].indexOf(this.type)!=-1){A.cn[0].cls+=' nav-'+this.type}
@@@ -207,7 -208,7 +208,7 @@@ Roo.bootstrap.NavSidebarItem=function(A
  }if(this.open){A.cls+=' open x-open';}if(this.glyphicon||this.icon){var c=this.glyphicon?('glyphicon glyphicon-'+this.glyphicon):this.icon;a.cn.push({tag:'i',cls:c});}if(!this.buttonView){var B={tag:'span',html:this.html||''};a.cn.push(B);}if(this.badge!==''){a.cn.push({tag:'span',cls:'badge pull-right badge-'+this.badgeWeight,html:this.badge}
  );}if(this.menu){if(this.showArrow){a.cn.push({tag:'i',cls:'glyphicon glyphicon-chevron-down pull-right'});}a.cls+=' dropdown-toggle treeview';}return A;},initEvents:function(){if(typeof(this.menu)!='undefined'){this.menu.parentType=this.xtype;this.menu.triggerEl=this.el;
  this.menu=this.addxtype(Roo.apply({},this.menu));}this.el.on('click',this.onClick,this);if(this.badge!==''){this.badgeEl=this.el.select('.badge',true).first().setVisibilityMode(Roo.Element.DISPLAY);}},onClick:function(e){if(this.disabled){e.preventDefault();
- return;}if(this.preventDefault){e.preventDefault();}this.fireEvent('click',this);},disable:function(){this.setDisabled(true);},enable:function(){this.setDisabled(false);},setDisabled:function(A){if(this.disabled==A){return;}this.disabled=A;if(A){this.el.addClass('disabled');
+ return;}if(this.preventDefault){e.preventDefault();}this.fireEvent('click',this,e);},disable:function(){this.setDisabled(true);},enable:function(){this.setDisabled(false);},setDisabled:function(A){if(this.disabled==A){return;}this.disabled=A;if(A){this.el.addClass('disabled');
  return;}this.el.removeClass('disabled');return;},setActive:function(A){if(this.active==A){return;}this.active=A;if(A){this.el.addClass('active');return;}this.el.removeClass('active');return;},isActive:function(){return this.active;},setBadge:function(A){if(!this.badgeEl){return;
  }this.badgeEl.dom.innerHTML=A;}});
  // Roo/bootstrap/Row.js
@@@ -507,8 -508,8 +508,8 @@@ break;case 'date':da[c.name]=new Date()
  // Roo/data/DataProxy.js
  Roo.data.DataProxy=function(){this.addEvents({beforeload:true,load:true,loadexception:true});Roo.data.DataProxy.superclass.constructor.call(this);};Roo.extend(Roo.data.DataProxy,Roo.util.Observable);
  // Roo/data/MemoryProxy.js
- Roo.data.MemoryProxy=function(A){if(A.data){A=A.data;}Roo.data.MemoryProxy.superclass.constructor.call(this);this.data=A;};Roo.extend(Roo.data.MemoryProxy,Roo.data.DataProxy,{load:function(A,B,C,D,E){A=A||{};var F;try{F=B.readRecords(this.data);}catch(e){this.fireEvent("loadexception",this,E,null,e);
- C.call(D,null,E,false);return;}C.call(D,F,E,true);},update:function(A,B){}});
+ Roo.data.MemoryProxy=function(A){if(A.data){A=A.data;}Roo.data.MemoryProxy.superclass.constructor.call(this);this.data=A;};Roo.extend(Roo.data.MemoryProxy,Roo.data.DataProxy,{load:function(A,B,C,D,E){A=A||{};var F;try{F=B.readRecords(A.data?A.data:this.data);
}catch(e){this.fireEvent("loadexception",this,E,null,e);C.call(D,null,E,false);return;}C.call(D,F,E,true);},update:function(A,B){}});
  // Roo/data/HttpProxy.js
  Roo.data.HttpProxy=function(A){Roo.data.HttpProxy.superclass.constructor.call(this);this.conn=A;this.useAjax=!A||!A.events;};Roo.extend(Roo.data.HttpProxy,Roo.data.DataProxy,{getConnection:function(){return this.useAjax?Roo.Ajax:this.conn;},load:function(A,B,C,D,E){if(this.fireEvent("beforeload",this,A)!==false){var o={params:A||{}
  ,request:{callback:C,scope:D,arg:E},reader:B,callback:this.loadResponse,scope:this};if(this.useAjax){Roo.applyIf(o,this.conn);if(this.activeRequest){Roo.Ajax.abort(this.activeRequest);}this.activeRequest=Roo.Ajax.request(o);}else{this.conn.request(o);}}else{C.call(D||this,null,E,false);
@@@ -532,8 -533,8 +533,8 @@@ jj<fl;jj++){f=fi[jj];var B=(f.mapping!=
  if(vs===false||vs==='false'){E=false;}}var F=[];for(var i=0;i<c;i++){var n=C[i];var G={};var id=this.getId(n);for(var j=0;j<fl;j++){f=fi[j];var v=this.ef[j](n);if(!f.convert){Roo.log('missing convert for '+f.name);Roo.log(f);continue;}G[f.name]=f.convert((v!==undefined)?v:f.defaultValue);
  }var H=new A(G,id);H.json=n;F[i]=H;}return {raw:o,success:E,records:F,totalRecords:D};}});
  // Roo/data/ArrayReader.js
- Roo.data.ArrayReader=function(A,B){Roo.data.ArrayReader.superclass.constructor.call(this,A,B);};Roo.extend(Roo.data.ArrayReader,Roo.data.JsonReader,{readRecords:function(o){var A=this.meta?this.meta.id:null;var B=this.recordType,C=B.prototype.fields;var D=[];
- var E=o;for(var i=0;i<E.length;i++){var n=E[i];var F={};var id=((A||A===0)&&n[A]!==undefined&&n[A]!==""?n[A]:null);for(var j=0,G=C.length;j<G;j++){var f=C.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;
+ Roo.data.ArrayReader=function(A,B){Roo.data.ArrayReader.superclass.constructor.call(this,A,B||A.fields);};Roo.extend(Roo.data.ArrayReader,Roo.data.JsonReader,{readRecords:function(o){var A=this.meta?this.meta.id:null;var B=this.recordType,C=B.prototype.fields;
+ var D=[];var E=o;for(var i=0;i<E.length;i++){var n=E[i];var F={};var id=((A||A===0)&&n[A]!==undefined&&n[A]!==""?n[A]:null);for(var j=0,G=C.length;j<G;j++){var f=C.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;
  v=f.convert(v);F[f.name]=v;}var H=new B(F,id);H.json=n;D[D.length]=H;}return {records:D,totalRecords:D.length};}});
  // Roo/bootstrap/ComboBox.js
  Roo.bootstrap.ComboBox=function(A){Roo.bootstrap.ComboBox.superclass.constructor.call(this,A);this.addEvents({'expand':true,'collapse':true,'beforeselect':true,'select':true,'beforequery':true,'add':true,'edit':true,'remove':true,'afterremove':true,'specialfilter':true,'tick':true,'touchviewdisplay':true}
@@@ -1736,8 -1737,8 +1737,8 @@@ if(this.cls){A+=' '+this.cls;}var B=['l
  ]},{tag:'input',type:'file',style:'display: none'}]};return C;},initEvents:function(){Roo.bootstrap.BezierSignature.superclass.initEvents.call(this);var A=this.canvasEl();A.dom.style.touchAction='none';A.dom.style.msTouchAction='none';this.mouse_btn_down=false;
  A.on('mousedown',this._handleMouseDown,this);A.on('mousemove',this._handleMouseMove,this);Roo.select('html').first().on('mouseup',this._handleMouseUp,this);if(window.PointerEvent){A.on('pointerdown',this._handleMouseDown,this);A.on('pointermove',this._handleMouseMove,this);
  Roo.select('html').first().on('pointerup',this._handleMouseUp,this);}if('ontouchstart' in window){A.on('touchstart',this._handleTouchStart,this);A.on('touchmove',this._handleTouchMove,this);A.on('touchend',this._handleTouchEnd,this);}Roo.EventManager.onWindowResize(this.resize,this,true);
 -this.fileEl().on('change',this.uploadImage,this);this.clear();this.resize();},resize:function(){var A=this.canvasEl().dom;var B=this.canvasElCtx();var C=B.getImageData(0,0,A.width,A.height);A.width=0;var D=window.getComputedStyle?getComputedStyle(this.el.dom,null):this.el.dom.currentStyle;
 -var E=parseInt(D.paddingLeft)||0;var F=parseInt(D.paddingRight)||0;A.width=this.el.dom.clientWidth-E-F;B.putImageData(C,0,0);},_handleMouseDown:function(e){if(e.browserEvent.which===1){this.mouse_btn_down=true;this.strokeBegin(e);}},_handleMouseMove:function(e){if(this.mouse_btn_down){this.strokeMoveUpdate(e);
 +this.fileEl().on('change',this.uploadImage,this);this.clear();this.resize();},resize:function(){var A=this.canvasEl().dom;var B=this.canvasElCtx();var C=false;if(A.width>0){var C=B.getImageData(0,0,A.width,A.height);}A.width=0;var D=window.getComputedStyle?getComputedStyle(this.el.dom,null):this.el.dom.currentStyle;
 +var E=parseInt(D.paddingLeft)||0;var F=parseInt(D.paddingRight)||0;A.width=this.el.dom.clientWidth-E-F;if(C){B.putImageData(C,0,0);}},_handleMouseDown:function(e){if(e.browserEvent.which===1){this.mouse_btn_down=true;this.strokeBegin(e);}},_handleMouseMove:function(e){if(this.mouse_btn_down){this.strokeMoveUpdate(e);
  }},_handleMouseUp:function(e){if(e.browserEvent.which===1&&this.mouse_btn_down){this.mouse_btn_down=false;this.strokeEnd(e);}},_handleTouchStart:function(e){e.preventDefault();if(e.browserEvent.targetTouches.length===1){this.strokeBegin(e);}},_handleTouchMove:function(e){e.preventDefault();
  this.strokeMoveUpdate(e);},_handleTouchEnd:function(e){var A=e.target===this.canvasEl().dom;if(A){e.preventDefault();this.strokeEnd(e);}},reset:function(){this._lastPoints=[];this._lastVelocity=0;this._lastWidth=(this.min_width+this.max_width)/2;this.canvasElCtx().fillStyle=this.dot_color;
  },strokeMoveUpdate:function(e){this.strokeUpdate(e);if(this.throttle){this.throttle(this.strokeUpdate,this.throttle);}else{this.strokeUpdate(e);}},strokeBegin:function(e){var A={color:this.dot_color,points:[]};if(typeof this.onBegin==='function'){this.onBegin(e);