class @Uploader extends Backbone.View events : 'click [data-upload]' : 'upload' 'click [data-crop]' : 'crop' initialize : (options) -> super @$uploader = options.$uploader @_initCropper() initElements : () -> @$progressWrapper = @$el.find('.upload-progress-wrapper') @$cropButton = @$el.find('[data-crop]') @$cropAttributes = @$el.find('[data-crop-attribute]') initFileUpload : () -> @$uploader.fileupload dataType : 'json' url : @$uploader.data('url') formData : @_getUploaderData() add : @submitFile done : => @$progressWrapper.hide() error : => @$progressWrapper.hide() progressall : @updateUploadProggress upload : () -> @$el.find('input.uploader-input-file').click() crop : () -> imagePath = @$el.find('.form-input[type="hidden"]').val() if imagePath @cropper.setOriginalDimensions @$el.find('img').data('original-dimensions').split(',') @cropper.show imagePath @$el.append(@cropper.$el) submitFile : (e, $form) => @_setUploadProgress(0) @$progressWrapper.show() $form.submit().done @appendUploadResult updateUploadProggress : (e, data) => progress = parseInt(data.loaded / data.total * 100, 10) @_setUploadProgress(progress) appendUploadResult : (result) => @$el .find('.preview-wrapper').replaceWith(result.html).end() .find('.form-input[type="hidden"]').val(result.file[@$uploader.data('column')].url) _initCropper : () -> @cropper = new Cropper() @cropper.on 'crop-image', @_crop _crop : (cropData) => allData = @_getUploaderData() allData.crop = cropData $.ajax type : 'post' url : @$cropButton.data('url') data : allData dataType : 'json' success : @appendUploadResult _getUploaderData : () -> uploaderData = _.pick(@$uploader.data(), 'id', 'saved', 'model', 'column', 'uploader') uploaderData.path = @$el.find('.form-input[type="hidden"]').val() uploaderData _setUploadProgress : (progress) => @$el.find('.upload-progress').width(progress + '%') @init : ($uploader) -> uploader = new this el : $uploader.closest('.uploader-wrapper') $uploader : $uploader uploader.initElements() uploader.initFileUpload() uploader @initAll : () -> $('.uploader-input-file').each (index, el) -> $uploader = $(el) unless $uploader.data('initialized') Uploader.init $uploader $uploader.data('initialized', true) $ -> $(document).on 'page:load ready init-plugins', Uploader.initAll