'use strict' ;
/* globals define, ajaxify, socket, app, templates */
define ( 'uploader' , [ 'translator' , 'cropper' ] , function ( translator , cropper ) {
var module = { } ;
module . open = function ( route , params , fileSize , callback ) {
console . warn ( '[uploader] uploader.open() is deprecated, please use uploader.show() instead, and pass parameters as a singe option with callback, e.g. uploader.show({}, callback);' ) ;
module . show ( {
route : route ,
params : params ,
fileSize : fileSize
} , callback ) ;
} ;
module . show = function ( data , callback ) {
var fileSize = data . hasOwnProperty ( 'fileSize' ) && data . fileSize !== undefined ? parseInt ( data . fileSize , 10 ) : false ;
parseModal ( {
showHelp : data . hasOwnProperty ( 'showHelp' ) && data . showHelp !== undefined ? data . showHelp : true ,
fileSize : fileSize ,
title : data . title || '[[global:upload_file]]' ,
description : data . description || '' ,
button : data . button || '[[global:upload]]' ,
accept : data . accept ? data . accept . replace ( /,/g , ', ' ) : ''
} , function ( uploadModal ) {
uploadModal = $ ( uploadModal ) ;
uploadModal . modal ( 'show' ) ;
uploadModal . on ( 'hidden.bs.modal' , function ( ) {
uploadModal . remove ( ) ;
} ) ;
var uploadForm = uploadModal . find ( '#uploadForm' ) ;
uploadForm . attr ( 'action' , data . route ) ;
uploadForm . find ( '#params' ) . val ( JSON . stringify ( data . params ) ) ;
uploadModal . find ( '#fileUploadSubmitBtn' ) . on ( 'click' , function ( ) {
$ ( this ) . addClass ( 'disabled' ) ;
uploadForm . submit ( ) ;
} ) ;
uploadForm . submit ( function ( ) {
onSubmit ( uploadModal , fileSize , callback ) ;
return false ;
} ) ;
} ) ;
} ;
module . hideAlerts = function ( modal ) {
$ ( modal ) . find ( '#alert-status, #alert-success, #alert-error, #upload-progress-box' ) . addClass ( 'hide' ) ;
} ;
function onSubmit ( uploadModal , fileSize , callback ) {
function showAlert ( type , message ) {
module . hideAlerts ( uploadModal ) ;
if ( type === 'error' ) {
uploadModal . find ( '#fileUploadSubmitBtn' ) . removeClass ( 'disabled' ) ;
}
uploadModal . find ( '#alert-' + type ) . translateText ( message ) . removeClass ( 'hide' ) ;
}
var fileInput = uploadModal . find ( '#fileInput' ) ;
if ( ! fileInput . val ( ) ) {
return showAlert ( 'error' , '[[uploads:select-file-to-upload]]' ) ;
}
var file = fileInput [ 0 ] . files [ 0 ] ;
var reader = new FileReader ( ) ;
var imageUrl ;
var imageType = file . type ;
reader . addEventListener ( "load" , function ( ) {
imageUrl = reader . result ;
uploadModal . modal ( 'hide' ) ;
callback ( { url : imageUrl , imageType : imageType } ) ;
} , false ) ;
if ( file ) {
reader . readAsDataURL ( file ) ;
}
}
function parseModal ( tplVals , callback ) {
templates . parse ( 'partials/modals/upload_file_modal' , tplVals , function ( html ) {
translator . translate ( html , callback ) ;
} ) ;
}
return module ;
} ) ;