2015-01-10 19:48:00 -05:00
'use strict' ;
2017-02-03 00:47:09 +00:00
/* globals define, ajaxify, socket, app, templates */
2015-01-10 19:48:00 -05:00
2017-02-03 00:47:09 +00:00
define ( 'uploader' , [ 'translator' , 'cropper' ] , function ( translator , cropper ) {
2013-10-22 15:54:02 -04:00
2015-01-10 19:48:00 -05:00
var module = { } ;
2013-10-22 15:54:02 -04:00
2016-10-13 11:43:39 +02:00
module . open = function ( route , params , fileSize , callback ) {
2015-12-14 12:00:24 -05:00
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 ) ;
} ;
2016-10-13 11:43:39 +02:00
module . show = function ( data , callback ) {
2016-03-29 09:59:47 +02:00
var fileSize = data . hasOwnProperty ( 'fileSize' ) && data . fileSize !== undefined ? parseInt ( data . fileSize , 10 ) : false ;
2015-12-14 12:00:24 -05:00
parseModal ( {
showHelp : data . hasOwnProperty ( 'showHelp' ) && data . showHelp !== undefined ? data . showHelp : true ,
2016-03-29 09:59:47 +02:00
fileSize : fileSize ,
2016-02-29 14:23:12 +02:00
title : data . title || '[[global:upload_file]]' ,
description : data . description || '' ,
button : data . button || '[[global:upload]]' ,
2016-05-09 10:22:37 -04:00
accept : data . accept ? data . accept . replace ( /,/g , ', ' ) : ''
2016-10-13 11:43:39 +02:00
} , function ( uploadModal ) {
2015-09-26 00:08:26 -04:00
uploadModal = $ ( uploadModal ) ;
2013-10-22 15:54:02 -04:00
2015-09-26 00:08:26 -04:00
uploadModal . modal ( 'show' ) ;
2016-10-13 11:43:39 +02:00
uploadModal . on ( 'hidden.bs.modal' , function ( ) {
2015-09-26 00:08:26 -04:00
uploadModal . remove ( ) ;
} ) ;
2013-10-22 15:54:02 -04:00
2015-09-26 00:08:26 -04:00
var uploadForm = uploadModal . find ( '#uploadForm' ) ;
2015-12-14 12:00:24 -05:00
uploadForm . attr ( 'action' , data . route ) ;
uploadForm . find ( '#params' ) . val ( JSON . stringify ( data . params ) ) ;
2013-10-22 15:54:02 -04:00
2016-10-13 11:43:39 +02:00
uploadModal . find ( '#fileUploadSubmitBtn' ) . on ( 'click' , function ( ) {
2016-07-06 13:01:00 +03:00
$ ( this ) . addClass ( 'disabled' ) ;
2015-09-26 00:08:26 -04:00
uploadForm . submit ( ) ;
} ) ;
2013-10-22 15:54:02 -04:00
2016-10-13 11:43:39 +02:00
uploadForm . submit ( function ( ) {
2016-03-29 09:59:47 +02:00
onSubmit ( uploadModal , fileSize , callback ) ;
2016-02-29 15:26:57 +02:00
return false ;
} ) ;
} ) ;
} ;
2013-10-22 15:54:02 -04:00
2016-10-13 11:43:39 +02:00
module . hideAlerts = function ( modal ) {
2016-03-29 09:59:47 +02:00
$ ( modal ) . find ( '#alert-status, #alert-success, #alert-error, #upload-progress-box' ) . addClass ( 'hide' ) ;
} ;
function onSubmit ( uploadModal , fileSize , callback ) {
2016-02-29 15:26:57 +02:00
function showAlert ( type , message ) {
module . hideAlerts ( uploadModal ) ;
2016-07-06 13:01:00 +03:00
if ( type === 'error' ) {
uploadModal . find ( '#fileUploadSubmitBtn' ) . removeClass ( 'disabled' ) ;
}
2016-02-29 15:26:57 +02:00
uploadModal . find ( '#alert-' + type ) . translateText ( message ) . removeClass ( 'hide' ) ;
}
2013-10-22 15:54:02 -04:00
2016-03-29 09:59:47 +02:00
var fileInput = uploadModal . find ( '#fileInput' ) ;
if ( ! fileInput . val ( ) ) {
2016-02-29 15:26:57 +02:00
return showAlert ( 'error' , '[[uploads:select-file-to-upload]]' ) ;
}
2017-02-03 00:47:09 +00:00
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 ) ;
2016-03-29 09:59:47 +02:00
}
2016-02-29 15:26:57 +02:00
}
2013-10-22 15:54:02 -04:00
2015-12-14 12:00:24 -05:00
function parseModal ( tplVals , callback ) {
2016-10-13 11:43:39 +02:00
templates . parse ( 'partials/modals/upload_file_modal' , tplVals , function ( html ) {
2015-09-26 00:08:26 -04:00
translator . translate ( html , callback ) ;
} ) ;
}
2013-10-22 15:54:02 -04:00
return module ;
2014-04-10 20:31:57 +01:00
} ) ;