var loadImage = function (file, callBack, maxHeight) {
var img,
scaleImage,
urlAPI,
fileReader;
scaleImage = function (img) {
var scale = Math.min(
(maxHeight || img.height) / img.height
);
if (scale > 1) {
scale = 1;
}
img.width = parseInt(img.width * scale, 10);
img.height = parseInt(img.height * scale, 10);
return img;
};
img = document.createElement('img');
undef = 'undefined';
//urlAPI = $.isset(URL)? URL : $.isset(webkitURL) ? webkitURL : null;
urlAPI = typeof URL !== undef ? URL : typeof webkitURL !== undef ? webkitURL : null;
if (urlAPI && $.isFunction(urlAPI.createObjectURL)) {
img.onload = function () {
urlAPI.revokeObjectURL(this.src);
callBack(scaleImage(img));
};
img.src = urlAPI.createObjectURL(file);
} else if (typeof FileReader !== undef && $.isFunction(FileReader.prototype.readAsDataURL)) {
img.onload = function () {
callBack(scaleImage(img));
};
fileReader = new FileReader();
fileReader.onload = function (e) {
img.src = e.target.result;
};
fileReader.readAsDataURL(file);
} else {
img.src = 'http://static.photogeek.ru/i/ajax-loader.gif';
img.width = 80;
$(img).data('callback', scaleImage);
callBack(img);
}
};
// The UI version extends the basic fileupload widget and adds
// a complete user interface based on the given upload/download
// templates.
$.widget('blueimpUI.fileuploadImage', $.blueimp.fileupload, {
options: {
acceptFileTypes: /.+(gif|jpeg|jpg|png)$/i,
previewFileTypes: /^image\/(gif|jpeg|png)$/,
url: '/_builder/editor/imageupload.html',
dataType: 'json',
add: function (e, data) {
var that = $(this).data('fileuploadImage');
data.isValidated = that._validate(data.files);
if (!data.isValidated) return;
/*
data.context = that._renderUpload(data.files).appendTo($(this).find('.files')).fadeIn(function () {
// Fix for IE7 and lower:
$(this).show();
}).data('data', data);
*/
data.jqXHR = data.submit();
},
send: function (e, data) {
$('#builderImagesList > div').hide();
$('#imagesMain').show();
$('#editorImagesForm .nav li').removeClass('active');
$('#editorImagesForm .nav li a[href=#imagesMain]').parent().addClass('active');
var img = $('').prependTo($('#imagesMain'));
var c = function(i) {
if (i == null) return;
$(i).prependTo(img);
img.removeClass('imgblank');
};
loadImage(data.files[0], c, 80);
data._progress_i = img;
data._progress_o = img.find('em');
data._progress_v = 88;
},
progress: function (e, data) {
var v = 80 - parseInt(data.loaded * 88 / data.total);
if (v != data._progress_v) {
data._progress_v = v;
data._progress_o.css({'height':v, 'margin-bottom':-v});
}
},
progressall: function (e, data) {
},
done: function (e, data) {
var r = data.result
var src = '/sites/images/m/'+r.domain_id+'/'+r.id+'.'+r.ext;
var img = data._progress_i.find('img');
img.data('src', '/sites/images/b/'+r.domain_id+'/'+r.id+'.'+r.ext)
img.attr('src', src).ready(function(){
if (c = img.data('callback')) {
c(img[0]);
}
});
/*
var img = data._progress_i.find('a').attr('href', src);
$.lazy('jquery.fancybox.js', 'jquery.fancybox.css', function() {
img.fancybox({'transitionIn':'elastic', 'transitionOut':'elastic'});
});
*/
//$('').val(r.id).appendTo($('#idForm'));
data._progress_o.remove();
$('').appendTo(data._progress_i);
},
fail: function (e, data) {
data._progress_i.removeClass('progresswidget').addClass('error');
data._progress_o.css({'height':88, 'margin-bottom':-88});
},
start: function () {
},
stop: function () {
},
destroy: function (e, data) {
}
},
_hasError: function (file) {
if (file.error) {
return file.error;
}
// The number of added files is subtracted from
// maxNumberOfFiles before validation, so we check if
// maxNumberOfFiles is below 0 (instead of below 1):
if (this.options.maxNumberOfFiles < 0) {
return 'maxNumberOfFiles';
}
// Files are accepted if either the file type or the file name
// matches against the acceptFileTypes regular expression, as
// only browsers with support for the File API report the type:
if (!(this.options.acceptFileTypes.test(file.type) ||
this.options.acceptFileTypes.test(file.name))) {
return 'acceptFileTypes';
}
if (this.options.maxFileSize &&
file.size > this.options.maxFileSize) {
return 'maxFileSize';
}
if (typeof file.size === 'number' &&
file.size < this.options.minFileSize) {
return 'minFileSize';
}
return null;
},
_validate: function (files) {
var that = this,
valid;
$.each(files, function (index, file) {
file.error = that._hasError(file);
valid = !file.error;
});
return valid;
}
});