Roo/dialog/UploadCropbox.js
[roojs1] / Roo / dialog / UploadCropbox.js
index b448e9d..0a6db43 100644 (file)
@@ -4,9 +4,9 @@
 */
 
 /**
- * @class Roo.UploadCropbox
- * @extends Roo.Component
- * UploadCropbox class
+ * @class Roo.dialog.UploadCropbox
+ * @extends Roo.BoxComponent
+ * Dialog UploadCropbox class
  * @cfg {String} emptyText show when image has been loaded
  * @cfg {String} rotateNotify show when image too small to rotate
  * @cfg {Number} errorTimeout default 3000
  * @param {Object} config The config object
  */
 
- Roo.UploadCropbox = function(config){
-    console.log("BOOTSTRAP UPLOAD CROPBOX SUPERCLASS CONSTRUCTOR CALL");
-    Roo.UploadCropbox.superclass.constructor.call(this, config);
+ Roo.dialog.UploadCropbox = function(config){
+    Roo.dialog.UploadCropbox.superclass.constructor.call(this, config);
     
     this.addEvents({
         /**
          * @event beforeselectfile
          * Fire before select file
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          */
         "beforeselectfile" : true,
         /**
          * @event initial
          * Fire after initEvent
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          */
         "initial" : true,
         /**
          * @event crop
          * Fire after initEvent
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {String} data
          */
         "crop" : true,
         /**
          * @event prepare
          * Fire when preparing the file data
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {Object} file
          */
         "prepare" : true,
         /**
          * @event exception
          * Fire when get exception
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {XMLHttpRequest} xhr
          */
         "exception" : true,
         /**
          * @event beforeloadcanvas
          * Fire before load the canvas
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {String} src
          */
         "beforeloadcanvas" : true,
         /**
          * @event trash
          * Fire when trash image
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          */
         "trash" : true,
         /**
          * @event download
          * Fire when download the image
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          */
         "download" : true,
         /**
          * @event footerbuttonclick
          * Fire when footerbuttonclick
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {String} type
          */
         "footerbuttonclick" : true,
         /**
          * @event resize
          * Fire when resize
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          */
         "resize" : true,
         /**
          * @event rotate
          * Fire when rotate the image
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {String} pos
          */
         "rotate" : true,
         /**
          * @event inspect
          * Fire when inspect the file
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {Object} file
          */
         "inspect" : true,
         /**
          * @event upload
          * Fire when xhr upload the file
-         * @param {Roo.UploadCropbox} this
+         * @param {Roo.dialog.UploadCropbox} this
          * @param {Object} data
          */
         "upload" : true,
         /**
          * @event arrange
          * Fire when arrange the file data
-         * @param {Roo.UploadCropbox} this
+         * @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.UploadCropbox.footer.STANDARD;
+    this.buttons = this.buttons || Roo.dialog.UploadCropbox.footer.STANDARD;
 };
 
-Roo.extend(Roo.UploadCropbox, Roo.Component,  {
+Roo.extend(Roo.dialog.UploadCropbox, Roo.Component,  {
     
     emptyText : 'Click to upload image',
     rotateNotify : 'Image is too small to rotate',
@@ -209,7 +215,33 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     onRender : function(ct, position)
     {
-        Roo.UploadCropbox.superclass.onRender.call(this, ct, position);
+        Roo.dialog.UploadCropbox.superclass.onRender.call(this, ct, position);
+
+        if(this.el){
+            if (this.el.attr('xtype')) {
+                this.el.attr('xtypex', this.el.attr('xtype'));
+                this.el.dom.removeAttribute('xtype');
+                
+                this.initEvents();
+            }
+        }
+        else {
+            var cfg = Roo.apply({},  this.getAutoCreate());
+        
+            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.buttons.length) {
             
@@ -304,7 +336,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
         this.cropData = false;
         this.notifyEl.dom.innerHTML = this.emptyText;
         
-        this.selectorEl.dom.value = '';
+        // this.selectorEl.dom.value = '';
         
     },
     
@@ -355,6 +387,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     onFileSelected : function(e)
     {
+        console.log("ON FILE SELECTED");
         e.preventDefault();
         
         if(typeof(this.selectorEl.dom.files) == 'undefined' || !this.selectorEl.dom.files.length){
@@ -381,6 +414,8 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     loadCanvas : function(src)
     {   
+        console.log("LOAD CANVAS");
+        console.log(src);
         if(this.fireEvent('beforeloadcanvas', this, src) != false){
             
             this.reset();
@@ -397,31 +432,36 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     onLoadCanvas : function()
     {   
+        console.log("ON LOAD CANVAS");
         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();
         }
@@ -430,6 +470,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     setCanvasPosition : function()
     {   
+        console.log("SET CANVAS POSITION");
         if(!this.canvasEl){
             return;
         }
@@ -444,6 +485,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     onMouseDown : function(e)
     {   
+        console.log("ON MOUSE DOWN");
         e.stopEvent();
         
         this.dragable = true;
@@ -461,6 +503,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     onMouseMove : function(e)
     {   
+        console.log ("ON MOUSE MOVE");
         e.stopEvent();
         
         if(!this.canvasLoaded){
@@ -473,21 +516,45 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
         
         var minX = Math.ceil(this.thumbEl.getLeft(true));
         var minY = Math.ceil(this.thumbEl.getTop(true));
+
+        console.log("minX");
+        console.log(minX);
+        console.log("minY");
+        console.log(minY);
         
         var maxX = Math.ceil(minX + this.thumbEl.getWidth() - this.canvasEl.width);
         var maxY = Math.ceil(minY + this.thumbEl.getHeight() - this.canvasEl.height);
         
+        console.log("maxX");
+        console.log(maxX);
+        console.log("maxY");
+        console.log(maxY);
+
+        if(minX < maxX && minY < maxY) {
+            return;
+        }
+
         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;
         
+        console.log("MOVE LEFT / RIGHT");
+        console.log(x);
+        console.log("MOVE UP / DOWN");
+        console.log(y);
+
         var bgX = Math.ceil(x + this.previewEl.getLeft(true));
         var bgY = Math.ceil(y + this.previewEl.getTop(true));
+
+        console.log("bgX");
+        console.log(bgX);
+        console.log("bgY");
+        console.log(bgY);
         
-        bgX = (minX < bgX) ? minX : ((maxX > bgX) ? maxX : bgX);
-        bgY = (minY < bgY) ? minY : ((maxY > bgY) ? maxY : bgY);
+        bgX = (minX > bgX) ? minX : ((maxX < bgX) ? maxX : bgX);
+        bgY = (minY > bgY) ? minY : ((maxY < bgY) ? maxY : bgY);
         
         this.previewEl.setLeft(bgX);
         this.previewEl.setTop(bgY);
@@ -508,9 +575,7 @@ Roo.extend(Roo.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;
@@ -531,6 +596,9 @@ Roo.extend(Roo.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 &&
@@ -560,10 +628,10 @@ Roo.extend(Roo.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
+                    width < this.minWidth ||
+                    height < this.minHeight ||
+                    width > maxWidth ||
+                    height > maxHeight
                 )
         ){
             return false;
@@ -704,11 +772,14 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     draw : function()
     {
+        console.log("DRAW");
         this.previewEl.dom.innerHTML = '';
         
         var canvasEl = document.createElement("canvas");
         
         var contextEl = canvasEl.getContext("2d");
+
+        console.log(this.getScaleLevel());
         
         canvasEl.width = this.imageEl.OriginWidth * this.getScaleLevel();
         canvasEl.height = this.imageEl.OriginWidth * this.getScaleLevel();
@@ -1034,6 +1105,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     setThumbBoxPosition : function()
     {
+        console.log("SET THUMBBOX POSITION");
         var x = Math.ceil((this.bodyEl.getWidth() - this.thumbEl.getWidth()) / 2 );
         var y = Math.ceil((this.bodyEl.getHeight() - this.thumbEl.getHeight()) / 2);
         
@@ -1044,22 +1116,24 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     baseRotateLevel : function()
     {
+        console.log("BASE ROTATE LEVEL");
         this.baseRotate = 1;
         
         if(
                 typeof(this.exif) != 'undefined' &&
-                typeof(this.exif[Roo.UploadCropbox['tags']['Orientation']]) != 'undefined' &&
-                [1, 3, 6, 8].indexOf(this.exif[Roo.UploadCropbox['tags']['Orientation']]) != -1
+                typeof(this.exif[Roo.dialog.UploadCropbox['tags']['Orientation']]) != 'undefined' &&
+                [1, 3, 6, 8].indexOf(this.exif[Roo.dialog.UploadCropbox['tags']['Orientation']]) != -1
         ){
-            this.baseRotate = this.exif[Roo.UploadCropbox['tags']['Orientation']];
+            this.baseRotate = this.exif[Roo.dialog.UploadCropbox['tags']['Orientation']];
         }
         
-        this.rotate = Roo.UploadCropbox['Orientation'][this.baseRotate];
+        this.rotate = Roo.dialog.UploadCropbox['Orientation'][this.baseRotate];
         
     },
     
     baseScaleLevel : function()
     {
+        console.log("BASE SCALE LEVEL");
         var width, height;
         
         if(this.isDocument){
@@ -1130,13 +1204,17 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
             }
             
         }
-        
+
+        if(this.imageEl.OriginWidth < this.minWidth || this.imageEl.OriginHeight < this.minHeight) {
+            this.baseScale = width / this.minWidth;
+        }
+        console.log(this.baseScale);
         return;
     },
     
     getScaleLevel : function()
     {
-        return this.baseScale * Math.pow(1.1, this.scale);
+        return this.baseScale * Math.pow(1.02, this.scale);
     },
     
     onTouchStart : function(e)
@@ -1327,6 +1405,8 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     prepare : function(file)
     {   
+        console.log("PREPARE");
+        console.log(file);
         if(this.loadMask){
             this.maskEl.mask(this.loadingText);
         }
@@ -1503,7 +1583,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
     getExifValue : function (dataView, tiffOffset, offset, type, length, littleEndian)
     {
-        var tagType = Roo.UploadCropbox.exifTagTypes[type],
+        var tagType = Roo.dialog.UploadCropbox.exifTagTypes[type],
             tagSize,
             dataOffset,
             values,
@@ -1551,7 +1631,7 @@ Roo.extend(Roo.UploadCropbox, Roo.Component,  {
     
 });
 
-Roo.apply(Roo.UploadCropbox, {
+Roo.apply(Roo.dialog.UploadCropbox, {
     tags : {
         'Orientation': 0x0112
     },