function prepareFileUpload() {
		// Retourne le parentId dans lequel l'ajout se fera (le sous-dossier si on droppe sur sa ligne ou le dossier en cours sinon)
		function getParentIdFromTarget(target) {
			var tr = $(target).closest('tr.folder');
			if (tr.length === 1)
				return tr.data('item').id;
			return getCurrentPathId();
		}
		// Ajout de fichier local en utilisant le plugin jquery gpfileupload
		$('#add-file-input').hide().gpfileupload({
			url : '/files/upload',
			// method: 'POST',
			// dropSelector: document,
			// abortOnEscape: true,
			extraParams: function(files, target) {
				var params = { parentId: getParentIdFromTarget(target) };
				for (var i = 0; i < files.length; i++) {
					params['updateDate' + i] = files[i].lastModified;
				}
				return params;
			},
			onstart: function(files, target) {
				// Mettre de côté l'id de l'élément dans lequel les fichiers seront ajoutés
				var parentId = getParentIdFromTarget(target);
				// Concaténer les noms de fichiers en une chaine
				var names = Array.prototype.map.apply(files, [(file) => file.name]);
				// On retournera une "promise" qui sera rejettée si des fichiers existent déjà avec ce nom et que l'utilisateur ne souhaite pas les écraser.
				var defer = $.Deferred();
				// Demander au serveur si l'un de ces fichiers existe déjà
				$.post('/items/exists', {
					parentId: parentId,
					names: names
				}).then(function(r) {
					// Si pas de conflit => accepter aussitôt
					if (r === 'false')
						return true;
					// Si conflit => confirmer d'abord
					return NIMBUS.confirm('', NIMBUS.translate('MainUploadFileOverrideMessage'), true);
				}).then(function() {
					// Si confirmation inutile ou confirmation acceptée, l'upload va commencer, on affiche la progression
					$('#items').hide();
					$('#progress').css('display', 'flex')
						.find('>div>div').removeClass('progress-bar-striped progress-bar-animated');
					defer.resolve();
				}, function() {
					// Si confirmation refusée, on stoppe l'upload
					defer.reject();
				});
				return defer;
			},
			onprogress: function(files, total, duration, loaded, percent) {
				$('#progress > div > div').css('width', percent + '%').toggleClass('progress-bar-striped progress-bar-animated', percent === 100);
				$('#progress > span').text(percent + ' %');
			},
			onerror: function(files) {
				if (files.length === 1)
					NIMBUS.message(NIMBUS.translate('MainUploadFileErrorSingleFile', files[0].name), true);
				else
					NIMBUS.message(NIMBUS.translate('MainUploadFileErrorMultipleFiles', files.length), true);
			},
			onstop: function(files, total, duration) {
				$('#progress').css('display', '');
				$('#progress > div > div').css('width', '0%');
				$('#progress > span').text('');
				$('#items').show();
				refreshItems(false);
			}
		});
	}
/** Initialiser le comportement pour l'upload de fichier(s) */
Initialiser le comportement pour l'upload de fichier(s)
Initialiser le comportement pour l ' upload de fichier ( s )
function prepareFileUpload() {
		function getParentIdFromTarget(target) {
			var tr = $(target).closest('tr.folder');
			if (tr.length === 1)
				return tr.data('item').id;
			return getCurrentPathId();
		}
		$('#add-file-input').hide().gpfileupload({
			url : '/files/upload',
			extraParams: function(files, target) {
				var params = { parentId: getParentIdFromTarget(target) };
				for (var i = 0; i < files.length; i++) {
					params['updateDate' + i] = files[i].lastModified;
				}
				return params;
			},
			onstart: function(files, target) {
				var parentId = getParentIdFromTarget(target);
				var names = Array.prototype.map.apply(files, [(file) => file.name]);
				var defer = $.Deferred();
				$.post('/items/exists', {
					parentId: parentId,
					names: names
				}).then(function(r) {
					if (r === 'false')
						return true;
					return NIMBUS.confirm('', NIMBUS.translate('MainUploadFileOverrideMessage'), true);
				}).then(function() {
					$('#items').hide();
					$('#progress').css('display', 'flex')
						.find('>div>div').removeClass('progress-bar-striped progress-bar-animated');
					defer.resolve();
				}, function() {
					defer.reject();
				});
				return defer;
			},
			onprogress: function(files, total, duration, loaded, percent) {
				$('#progress > div > div').css('width', percent + '%').toggleClass('progress-bar-striped progress-bar-animated', percent === 100);
				$('#progress > span').text(percent + ' %');
			},
			onerror: function(files) {
				if (files.length === 1)
					NIMBUS.message(NIMBUS.translate('MainUploadFileErrorSingleFile', files[0].name), true);
				else
					NIMBUS.message(NIMBUS.translate('MainUploadFileErrorMultipleFiles', files.length), true);
			},
			onstop: function(files, total, duration) {
				$('#progress').css('display', '');
				$('#progress > div > div').css('width', '0%');
				$('#progress > span').text('');
				$('#items').show();
				refreshItems(false);
			}
		});
	}
function prepareFileUpload ( ) { function getParentIdFromTarget ( target ) { var tr = $ ( target ) . closest ( 'tr.folder' ) ; if ( tr . length === 1 ) return tr . data ( 'item' ) . id ; return getCurrentPathId ( ) ; } $ ( '#add-file-input' ) . hide ( ) . gpfileupload ( { url : '/files/upload' , extraParams : function ( files , target ) { var params = { parentId : getParentIdFromTarget ( target ) } ; for ( var i = 0 ; i < files . length ; i ++ ) { params [ 'updateDate' + i ] = files [ i ] . lastModified ; } return params ; } , onstart : function ( files , target ) { var parentId = getParentIdFromTarget ( target ) ; var names = Array . prototype . map . apply ( files , [ ( file ) => file . name ] ) ; var defer = $ . Deferred ( ) ; $ . post ( '/items/exists' , { parentId : parentId , names : names } ) . then ( function ( r ) { if ( r === 'false' ) return true ; return NIMBUS . confirm ( '' , NIMBUS . translate ( 'MainUploadFileOverrideMessage' ) , true ) ; } ) . then ( function ( ) { $ ( '#items' ) . hide ( ) ; $ ( '#progress' ) . css ( 'display' , 'flex' ) . find ( '>div>div' ) . removeClass ( 'progress-bar-striped progress-bar-animated' ) ; defer . resolve ( ) ; } , function ( ) { defer . reject ( ) ; } ) ; return defer ; } , onprogress : function ( files , total , duration , loaded , percent ) { $ ( '#progress > div > div' ) . css ( 'width' , percent + '%' ) . toggleClass ( 'progress-bar-striped progress-bar-animated' , percent === 100 ) ; $ ( '#progress > span' ) . text ( percent + ' %' ) ; } , onerror : function ( files ) { if ( files . length === 1 ) NIMBUS . message ( NIMBUS . translate ( 'MainUploadFileErrorSingleFile' , files [ 0 ] . name ) , true ) ; else NIMBUS . message ( NIMBUS . translate ( 'MainUploadFileErrorMultipleFiles' , files . length ) , true ) ; } , onstop : function ( files , total , duration ) { $ ( '#progress' ) . css ( 'display' , '' ) ; $ ( '#progress > div > div' ) . css ( 'width' , '0%' ) ; $ ( '#progress > span' ) . text ( '' ) ; $ ( '#items' ) . show ( ) ; refreshItems ( false ) ; } } ) ; }
Initialiser le comportement pour l'upload de fichier(s)
Initialiser le comportement pour l ' upload de fichier ( s )
// Retourne le parentId dans lequel l'ajout se fera (le sous-dossier si on droppe sur sa ligne ou le dossier en cours sinon)
 // Ajout de fichier local en utilisant le plugin jquery gpfileupload
 // method: 'POST',
 // dropSelector: document,
 // abortOnEscape: true,
 // Mettre de côté l'id de l'élément dans lequel les fichiers seront ajoutés
 // Concaténer les noms de fichiers en une chaine
 // On retournera une "promise" qui sera rejettée si des fichiers existent déjà avec ce nom et que l'utilisateur ne souhaite pas les écraser.
 // Demander au serveur si l'un de ces fichiers existe déjà
 // Si pas de conflit => accepter aussitôt
 // Si conflit => confirmer d'abord
 // Si confirmation inutile ou confirmation acceptée, l'upload va commencer, on affiche la progression
 // Si confirmation refusée, on stoppe l'upload
