roojs-core.js
[roojs1] / roojs-debug.js
index 75b309f..f25d43b 100644 (file)
@@ -60414,7 +60414,6 @@ Roo.LayoutStateManager.prototype = {
  */
 Roo.ContentPanel = function(el, config, content){
     
-    console.log("ContentPanel Constructor");
     /*
     if(el.autoCreate || el.xtype){ // xtype is available if this is called from factory
         config = el;
@@ -60802,7 +60801,7 @@ layout.addxtype({
 
             this.cropbox = new Roo.factory(cfg);
 
-            this.cropbox.render();
+            this.cropbox.render(this.el);
 
             return this.cropbox;
         }
@@ -68072,6 +68071,7 @@ Roo.XTemplate.from = function(el){
  * @cfg {Number} errorTimeout default 3000
  * @cfg {Number} minWidth default 300
  * @cfg {Number} minHeight default 300
+ * @cfg {Number} outputMaxWidth default 1200
  * @cfg {Array} buttons default ['rotateLeft', 'pictureBtn', 'rotateRight']
  * @cfg {Boolean} isDocument (true|false) default false
  * @cfg {String} url action url
@@ -68086,7 +68086,6 @@ Roo.XTemplate.from = function(el){
  */
 
  Roo.dialog.UploadCropbox = function(config){
-    console.log("Dialog UploadCropbox Constructor");
     Roo.dialog.UploadCropbox.superclass.constructor.call(this, config);
     
     this.addEvents({
@@ -68182,7 +68181,14 @@ Roo.XTemplate.from = function(el){
          * @param {Roo.dialog.UploadCropbox} this
          * @param {Object} formData
          */
-        "arrange" : true
+        "arrange" : true,
+        /**
+         * @event loadcanvas
+         * Fire after load the canvas
+         * @param {Roo.dialog.UploadCropbox}
+         * @param {Object} imgEl
+         */
+        "loadcanvas" : true
     });
     
     this.buttons = this.buttons || Roo.dialog.UploadCropbox.footer.STANDARD;
@@ -68203,6 +68209,7 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
     cropData : false,
     minWidth : 300,
     minHeight : 300,
+    outputMaxWidth : 1200,
     file : false,
     exif : {},
     baseRotate : 1,
@@ -68269,8 +68276,6 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
     
     onRender : function(ct, position)
     {
-        console.log("On Render");
-        console.log(this);
         Roo.dialog.UploadCropbox.superclass.onRender.call(this, ct, position);
 
         if(this.el){
@@ -68280,51 +68285,25 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
                 
                 this.initEvents();
             }
-            
-            return;
         }
+        else {
+            var cfg = Roo.apply({},  this.getAutoCreate());
         
-         
-        
-        var cfg = Roo.apply({},  this.getAutoCreate());
-        
-        cfg.id = this.id || Roo.id();
-        
-        // fill in the extra attributes 
-        if (this.xattr && typeof(this.xattr) =='object') {
-            for (var i in this.xattr) {
-                cfg[i] = this.xattr[i];
+            cfg.id = this.id || Roo.id();
+            
+            if (this.cls) {
+                cfg.cls = (typeof(cfg.cls) == 'undefined' ? this.cls : cfg.cls) + ' ' + this.cls;
             }
+            
+            if (this.style) { // fixme needs to support more complex style data.
+                cfg.style = (typeof(cfg.style) == 'undefined' ? this.style : cfg.style) + '; ' + this.style;
+            }
+            
+            this.el = ct.createChild(cfg, position);
+            
+            this.initEvents();
         }
         
-        if(this.dataId){
-            cfg.dataId = this.dataId;
-        }
-        
-        if (this.cls) {
-            cfg.cls = (typeof(cfg.cls) == 'undefined' ? this.cls : cfg.cls) + ' ' + this.cls;
-        }
-        
-        if (this.style) { // fixme needs to support more complex style data.
-            cfg.style = (typeof(cfg.style) == 'undefined' ? this.style : cfg.style) + '; ' + this.style;
-        }
-        
-        if(this.name){
-            cfg.name = this.name;
-        }
-        
-        this.el = ct.createChild(cfg, position);
-        
-        if (this.tooltip) {
-            this.tooltipEl().attr('tooltip', this.tooltip);
-        }
-        
-        if(this.tabIndex !== undefined){
-            this.el.dom.setAttribute('tabIndex', this.tabIndex);
-        }
-        
-        this.initEvents();
-        
         if (this.buttons.length) {
             
             Roo.each(this.buttons, function(bb) {
@@ -68418,7 +68397,7 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         this.cropData = false;
         this.notifyEl.dom.innerHTML = this.emptyText;
         
-        this.selectorEl.dom.value = '';
+        // this.selectorEl.dom.value = '';
         
     },
     
@@ -68513,29 +68492,33 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
     {   
         this.imageEl.OriginWidth = this.imageEl.naturalWidth || this.imageEl.width;
         this.imageEl.OriginHeight = this.imageEl.naturalHeight || this.imageEl.height;
+
+        if(this.fireEvent('loadcanvas', this, this.imageEl) != false){
         
-        this.bodyEl.un('click', this.beforeSelectFile, this);
-        
-        this.notifyEl.hide();
-        this.thumbEl.show();
-        this.footerEl.show();
-        
-        this.baseRotateLevel();
+            this.bodyEl.un('click', this.beforeSelectFile, this);
+            
+            this.notifyEl.hide();
+            this.thumbEl.show();
+            this.footerEl.show();
+            
+            this.baseRotateLevel();
+            
+            if(this.isDocument){
+                this.setThumbBoxSize();
+            }
+            
+            this.setThumbBoxPosition();
+            
+            this.baseScaleLevel();
+            
+            this.draw();
+            
+            this.resize();
+            
+            this.canvasLoaded = true;
         
-        if(this.isDocument){
-            this.setThumbBoxSize();
         }
         
-        this.setThumbBoxPosition();
-        
-        this.baseScaleLevel();
-        
-        this.draw();
-        
-        this.resize();
-        
-        this.canvasLoaded = true;
-        
         if(this.loadMask){
             this.maskEl.unmask();
         }
@@ -68590,18 +68573,30 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         
         var maxX = Math.ceil(minX + this.thumbEl.getWidth() - this.canvasEl.width);
         var maxY = Math.ceil(minY + this.thumbEl.getHeight() - this.canvasEl.height);
-        
+
+        if(minX > maxX) {
+            var tempX = minX;
+            minX = maxX;
+            maxX = tempX;
+        }
+
+        if(minY > maxY) {
+            var tempY = minY;
+            minY = maxY;
+            maxY = tempY;
+        }
+
         var x = Roo.isTouch ? e.browserEvent.touches[0].pageX : e.getPageX();
         var y = Roo.isTouch ? e.browserEvent.touches[0].pageY : e.getPageY();
         
         x = x - this.mouseX;
         y = y - this.mouseY;
-        
+
         var bgX = Math.ceil(x + this.previewEl.getLeft(true));
         var bgY = Math.ceil(y + this.previewEl.getTop(true));
         
-        bgX = (minX < bgX) ? minX : ((maxX > bgX) ? maxX : bgX);
-        bgY = (minY < bgY) ? minY : ((maxY > bgY) ? maxY : bgY);
+        bgX = (bgX < minX) ? minX : ((bgX > maxX) ? maxX : bgX);
+        bgY = (bgY < minY) ? minY : ((bgY > maxY) ? maxY : bgY);
         
         this.previewEl.setLeft(bgX);
         this.previewEl.setTop(bgY);
@@ -68622,13 +68617,13 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         e.stopEvent();
         
         this.startScale = this.scale;
-        
         this.scale = (e.getWheelDelta() == 1) ? (this.scale + 1) : (this.scale - 1);
         
         if(!this.zoomable()){
             this.scale = this.startScale;
             return;
         }
+
         
         this.draw();
         
@@ -68645,6 +68640,10 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         
         var width = Math.ceil(this.imageEl.OriginWidth * this.getScaleLevel() / minScale);
         var height = Math.ceil(this.imageEl.OriginHeight * this.getScaleLevel() / minScale);
+
+
+        var maxWidth = this.imageEl.OriginWidth;
+        var maxHeight = this.imageEl.OriginHeight;
         
         if(
                 this.isDocument &&
@@ -68674,10 +68673,10 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
                 !this.isDocument &&
                 (this.rotate == 0 || this.rotate == 180) && 
                 (
-                    width < this.minWidth || 
-                    width > this.imageEl.OriginWidth || 
-                    height < this.minHeight || 
-                    height > this.imageEl.OriginHeight
+                    (this.imageEl.OriginWidth >= this.minWidth) && width < this.minWidth ||
+                    (this.imageEl.OriginHeight >= this.minHeight) && height < this.minHeight ||
+                    width > maxWidth ||
+                    height > maxHeight
                 )
         ){
             return false;
@@ -68926,9 +68925,10 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         var canvas = document.createElement("canvas");
         
         var context = canvas.getContext("2d");
-                
-        canvas.width = this.minWidth;
-        canvas.height = this.minHeight;
+
+        canvas.width = this.thumbEl.getWidth() / this.getScaleLevel();
+        
+        canvas.height = this.thumbEl.getHeight() / this.getScaleLevel();
 
         switch (this.rotate) {
             case 0 :
@@ -68939,35 +68939,19 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
                 var x = (this.thumbEl.getLeft(true) > this.previewEl.getLeft(true)) ? 0 : ((this.previewEl.getLeft(true) - this.thumbEl.getLeft(true)) / this.getScaleLevel());
                 var y = (this.thumbEl.getTop(true) > this.previewEl.getTop(true)) ? 0 : ((this.previewEl.getTop(true) - this.thumbEl.getTop(true)) / this.getScaleLevel());
                 
-                var targetWidth = this.minWidth - 2 * x;
-                var targetHeight = this.minHeight - 2 * y;
-                
-                var scale = 1;
-                
-                if((x == 0 && y == 0) || (x == 0 && y > 0)){
-                    scale = targetWidth / width;
-                }
-                
-                if(x > 0 && y == 0){
-                    scale = targetHeight / height;
-                }
-                
-                if(x > 0 && y > 0){
-                    scale = targetWidth / width;
-                    
-                    if(width < height){
-                        scale = targetHeight / height;
-                    }
-                }
-                
-                context.scale(scale, scale);
-                
-                var sx = Math.min(this.canvasEl.width - this.thumbEl.getWidth(), this.thumbEl.getLeft(true) - this.previewEl.getLeft(true));
-                var sy = Math.min(this.canvasEl.height - this.thumbEl.getHeight(), this.thumbEl.getTop(true) - this.previewEl.getTop(true));
+                var sx = this.thumbEl.getLeft(true) - this.previewEl.getLeft(true);
+                var sy = this.thumbEl.getTop(true) - this.previewEl.getTop(true);
 
                 sx = sx < 0 ? 0 : (sx / this.getScaleLevel());
                 sy = sy < 0 ? 0 : (sy / this.getScaleLevel());
 
+                if(canvas.width > this.outputMaxWidth) {
+                    var scale = this.outputMaxWidth / canvas.width;
+                    canvas.width = canvas.width * scale;
+                    canvas.height = canvas.height * scale;
+                    context.scale(scale, scale);
+                }
+
                 context.drawImage(imageCanvas, sx, sy, width, height, x, y, width, height);
                 
                 break;
@@ -69086,7 +69070,6 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
                 }
                 
                 context.scale(scale, scale);
-                
                 var sx = Math.min(this.canvasEl.width - this.thumbEl.getWidth(), this.thumbEl.getLeft(true) - this.previewEl.getLeft(true));
                 var sy = Math.min(this.canvasEl.height - this.thumbEl.getHeight(), this.thumbEl.getTop(true) - this.previewEl.getTop(true));
 
@@ -69244,13 +69227,17 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
             }
             
         }
-        
+
+        if(this.imageEl.OriginWidth < this.minWidth || this.imageEl.OriginHeight < this.minHeight) {
+            this.baseScale = width / this.minWidth;
+        }
+
         return;
     },
     
     getScaleLevel : function()
     {
-        return this.baseScale * Math.pow(1.1, this.scale);
+        return this.baseScale * Math.pow(1.02, this.scale);
     },
     
     onTouchStart : function(e)
@@ -69379,13 +69366,16 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         var formData = new FormData();
 
         formData.append('returnHTML', 'NO');
-        
+
         if(crop){
             formData.append('crop', crop);
-        }
-        
-        if(typeof(file) != 'undefined' && (typeof(file.id) == 'undefined' || file.id * 1 < 1)){
-            formData.append(this.paramName, file, file.name);
+            var blobBin = atob(crop.split(',')[1]);
+            var array = [];
+            for(var i = 0; i < blobBin.length; i++) {
+                array.push(blobBin.charCodeAt(i));
+            }
+            var croppedFile =new Blob([new Uint8Array(array)], {type: this.cropType});
+            formData.append(this.paramName, croppedFile, file.name);
         }
         
         if(typeof(file.filename) != 'undefined'){
@@ -69395,7 +69385,7 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         if(typeof(file.mimetype) != 'undefined'){
             formData.append('mimetype', file.mimetype);
         }
-        
+
         if(this.fireEvent('arrange', this, formData) != false){
             this.xhr.send(formData);
         };
@@ -69458,7 +69448,9 @@ Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
         }
         
         this.file = file;
-        this.cropType = file.type;
+        if(typeof(file.type) != 'undefined' && file.type.length != 0) {
+            this.cropType = file.type;
+        }
         
         var _this = this;