From 2a5a02e04b8cf7f4c47ebeb52a3849c8b7a12a5a Mon Sep 17 00:00:00 2001 From: Georg Kallidis Date: Mon, 25 Jul 2016 11:09:52 +0200 Subject: [PATCH 1/5] Using Deferred promises in loading configuration files, language files and also other ajax calls; some cleanup of global space using variable FileManager; fixed issue #504 --- scripts/filemanager.js | 3946 ++++++++++++++++++++-------------------- 1 file changed, 2009 insertions(+), 1937 deletions(-) diff --git a/scripts/filemanager.js b/scripts/filemanager.js index 2fd1376d..27578851 100644 --- a/scripts/filemanager.js +++ b/scripts/filemanager.js @@ -8,1581 +8,1644 @@ * @author Simon Georget * @copyright Authors */ + +window.FileManager = window.FileManager || {}; +FileManager.lg = []; +var initConfigLastPromise = jQuery.Deferred(); +// loading default configuration file +var promiseDefault = jQuery.Deferred(); +// loading user configuration file +var promiseUser = jQuery.Deferred(); +// included files collector +var HEAD_included_files = new Array(); (function($) { -// function to retrieve GET params -$.urlParam = function(name){ - var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); - if (results) - return results[1]; - else - return 0; -}; - -/*-----------------------------------------------------$('#level-up').click---- - Setup, Layout, and Status Functions ----------------------------------------------------------*/ - -// We retrieve config settings from filemanager.config.js -var loadConfigFile = function (type) { - var json = null; - type = (typeof type === "undefined") ? "user" : type; - - if(type == 'user') { - if($.urlParam('config') != 0) { - var url = './scripts/' + $.urlParam('config'); - userconfig = $.urlParam('config'); - } else { - var url = './scripts/filemanager.config.json'; - userconfig = 'filemanager.config.json'; - } - } else { - var url = './scripts/filemanager.config.default.json'; - } + // function to retrieve GET params + $.urlParam = function(name){ + var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); + if (results) + return results[1]; + else + return 0; + }; + + /*-----------------------------------------------------$('#level-up').click---- + Setup, Layout, and Status Functions + ---------------------------------------------------------*/ + + // We retrieve config settings from filemanager.config.js + var loadDefaultConfigFile = function () { + var json = null; + var url = './scripts/filemanager.config.default.json'; + + return $.ajax({ + 'url': url, + 'dataType': "json", + cache: false + }); + }; + + var loadUserConfigFile = function (type) { + var json = null; + type = (typeof type === "undefined") ? "user" : type; - $.ajax({ - 'async': false, - 'url': url, - 'dataType': "json", - cache: false, - 'success': function (data) { - json = data; + if(type == 'user') { + if($.urlParam('config') != 0) { + var url = './scripts/' + $.urlParam('config'); + FileManager.userconfig = $.urlParam('config'); + } else { + var url = './scripts/filemanager.config.json'; + FileManager.userconfig = 'filemanager.config.json'; + } + } + + return $.ajax({ + 'url': url, + 'dataType': "json", + cache: false + }) ; + }; + + var err = function( req, status, err ) { + alert( '

something went wrong

'+ err ); + }; + + // loading default configuration file + var promiseA = loadDefaultConfigFile(); + promiseA.then( function (data) { + json = data; + promiseDefault.resolve(json); + },err); + // loading user configuration file + var promiseB = loadUserConfigFile('user'); + promiseB.then( function (data) { + json = data; + promiseUser.resolve(json); + }, err); + + + $.when(promiseDefault, promiseUser).done(function(configd,config) { + // we remove version from user config file + if (FileManager.config != undefined && FileManager.config !== null) delete FileManager.config.version; + // we merge default config and user config file + FileManager.config = $.extend({}, configd, config); + if(FileManager.config.options.logger) FileManager.start = new Date().getTime(); + + // Sets paths to connectors based on language selection. + FileManager.fileConnector = FileManager.config.options.fileConnector || 'connectors/' + FileManager.config.options.lang + '/filemanager.' + FileManager.config.options.lang; + + // Read capabilities from config files if exists + // else apply default settings + FileManager.capabilities = FileManager.config.options.capabilities || new Array('select', 'download', 'rename', 'move', 'delete', 'replace'); + // Get localized messages from file + // through culture var or from URL + if($.urlParam('langCode') != 0) { + file_exists ('scripts/languages/' + $.urlParam('langCode') + '.js').done( + function(result) { + if (result) { + FileManager.config.options.culture = $.urlParam('langCode'); + } else { + FileManager.urlLang = $.urlParam('langCode').substring(0, 2); + file_exists ('scripts/languages/' + FileManager.urlLang + '.js').done( + function(result) { + if(result) { + FileManager.config.options.culture = FileManager.urlLang; + } + } + ); + } + } + ); } - }); - return json; -}; + wrapperInitConfigLastPromise = $.Deferred(function() { + var self = this; + $.ajax({ + url: 'scripts/languages/' + FileManager.config.options.culture + '.js', + dataType: 'json' + }).done( function (json) { + FileManager.lg = json; + initConfigLastPromise.resolve(json); + self.resolve(json); + }); + }).promise(); + }); + + + /** + * function to load a given css file into header + * if not already included + */ + loadCSS = function(href) { + // we check if already included + if($.inArray(href, HEAD_included_files) == -1) { + var cssLink = $(""); + $("head").append(cssLink); + HEAD_included_files.push(href); + } + }; + + /** + * function to load a given js file into header + * if not already included + */ + loadJS = function(src) { + // we check if already included + if($.inArray(src, HEAD_included_files) == -1) { + var jsLink = $("