*/
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;
this.cropbox = new Roo.factory(cfg);
- this.cropbox.render();
+ this.cropbox.render(this.el);
return this.cropbox;
}
* @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
*/
Roo.dialog.UploadCropbox = function(config){
- console.log("Dialog UploadCropbox Constructor");
Roo.dialog.UploadCropbox.superclass.constructor.call(this, config);
this.addEvents({
* @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;
cropData : false,
minWidth : 300,
minHeight : 300,
+ outputMaxWidth : 1200,
file : false,
exif : {},
baseRotate : 1,
onRender : function(ct, position)
{
- console.log("On Render");
- console.log(this);
Roo.dialog.UploadCropbox.superclass.onRender.call(this, ct, position);
if(this.el){
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) {
this.cropData = false;
this.notifyEl.dom.innerHTML = this.emptyText;
- this.selectorEl.dom.value = '';
+ // this.selectorEl.dom.value = '';
},
{
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();
}
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);
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();
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 &&
!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;
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 :
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;
}
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));
}
}
-
+
+ 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)
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'){
if(typeof(file.mimetype) != 'undefined'){
formData.append('mimetype', file.mimetype);
}
-
+
if(this.fireEvent('arrange', this, formData) != false){
this.xhr.send(formData);
};
}
this.file = file;
- this.cropType = file.type;
+ if(typeof(file.type) != 'undefined' && file.type.length != 0) {
+ this.cropType = file.type;
+ }
var _this = this;