function chooseFolder() { var prefs = preferences.get_prefs(); var ajaxOptions = getAjaxOptions('/api/files?site='); var params = $.extend({}, ajaxOptions.params, util.serializeObject($('#siteSettings'))); if (prefs.useMasterPassword) { if (params.ftp_pass) { params.ftp_pass = Aes.Ctr.encrypt(params.ftp_pass, storage.get('masterPassword'), 256); } if (params.db_password) { params.db_password = Aes.Ctr.encrypt(params.db_password, storage.get('masterPassword'), 256); } } delete params.dir; delete params.dir_id; $( "body" ).append('<div id="dialog-choose-folder" title="Choose folder">\ <div id="folderTree"></div>\ </div>'); var folderTree = $('#folderTree').jstree({ 'core' : { 'data' : function (node, callback) { if( ['GDrive', 'GDriveLimited'].indexOf(params.server_type) !== -1 ){ gdrive.directFn({node: node, callback: callback, tree: $('#folderTree')}); }else{ if(!ajaxOptions.url){ return false; } if(node.id==='#') { return callback.call($('#folderTree'), { children: true, id: '#root', text: ajaxOptions.dir, type: 'folder' }); } //backcompat old turbo mode params.path = ''; if(node.id!=='#root') params.path = encodeURIComponent(node.id); $.ajax(ajaxOptions.url+'&cmd=get&path='+params.path, { method: 'POST', dataType: 'json', data: params, success: function(data) { if(data.error) { prompt.alert({title:'Error', msg:data.error}); return; } //backcompat old turbo mode if(!data) return; if(!data.files) { var files = []; data.forEach(function(item){ files.push({ children: (!item.leaf), data: { perms: item.perms, modified: item.modified, size: item.size }, icon: (item.leaf ? 'file' : 'folder'), id: item.id, text: item.text, type: (item.leaf ? 'file' : 'folder') }); }); data.files = files; } callback.call(tree, data.files); } }); } }, 'themes': { 'responsive': false, 'variant': 'small', 'stripes': true } }, 'types' : { 'default' : { 'icon' : 'folder' }, 'file' : { 'valid_children' : [], 'icon' : 'file' } }, 'sort' : function(a, b) { return this.get_type(a) === this.get_type(b) ? (this.get_text(a).toLowerCase() > this.get_text(b).toLowerCase() ? 1 : -1) : (this.get_type(a) >= this.get_type(b) ? 1 : -1); }, 'plugins' : [ 'sort','types' ] }).on('loaded.jstree', function(e, data) { //expand root node var inst = $.jstree.reference($('#folderTree')); var rootNode = $('#folderTree').jstree(true).get_node('#').children[0]; inst.open_node(rootNode); }); $( "#dialog-choose-folder" ).dialog({ modal: true, minHeight: 200, maxHeight: 360, buttons: { OK: function() { var reference = folderTree; var instance = $.jstree.reference(folderTree); var selected = instance.get_selected(); var node = instance.get_node(selected); if(node){ var parent; if (node.children===false) { parent = node.parent; } else { parent = node; } var dir = node.id; if(dir.substr(0,1)==='#') { dir = node.text; } var dir_id = dir; //set web url for gdrive (https://googledrive.com/host/0B716ywBKT84AMXBENXlnYmJISlE/GoogleDriveHosting.html) if( params.server_type == 'GDrive' || params.server_type == 'GDriveLimited' ){ $('input[name=web_url]').val('https://googledrive.com/host/'+node.id+'/'); dir = node.text; } setSiteValues({ dir: dir, dir_id: dir_id }); } $( this ).dialog( "close" ); }, Cancel: function() { $( this ).dialog( "close" ); } }, close: function( event, ui ) { $( this ).remove(); } }); if(params.server_type == 'GDrive' || params.server_type == 'GDriveLimited'){ gdrive.fullAccess = (params.server_type === 'GDrive'); gdrive.authorise(function(){ folderTree.jstree(true).refresh(); }); } }
function open(siteId, options) { if(!options) { options = {}; } currentSite = null; if(!siteId) { storage.set('currentSite', currentSite); return; } //hide tree $('#tree-container').hide(); site = getSettings(siteId); currentSite = siteId; storage.set('currentSite', currentSite); enableMenuItems(site); $( "#sites" ).combobox('val', currentSite+''); var ajax; if (!loading.start('Connecting to site '+site.name, function(){ console.log('abort opening site'); ajax.abort(); opening = {}; })) { console.log('in queue'); return; } function openCallback() { $('#tree-container').show(); //highlight active tabs var color = util.strToHex(siteId); $('#siteStyle-'+siteId).remove(); $('<style id="siteStyle-'+siteId+'">.site-' + siteId + '{background:' + color + ';}</style>').appendTo('head'); if(options.callback) { options.callback(); } } if(site.server_type == 'AJAX' || site.turbo == 1){ var ajaxOptions = getAjaxOptions(); console.log("connecting to: "+ajaxOptions.url); tree.setAjaxOptions(ajaxOptions); loading.stop(); openCallback(); return; //} else if(settings.server_type == 'GDriveJS'){ } else if(['GDrive','GDriveLimited'].indexOf(site.server_type)!=-1) { gdrive.setFullAccess(site.server_type === 'GDrive'); $('#tree').data('dir', site.dir); $('#tree').data('dir_id', site.dir_id); gdrive.authorise(function(){ loading.stop(); $('#tree-container').show(); tree.setAjaxOptions(gdrive.directFn); directFn = gdrive.directFn; }); return; } directFn = null; ajax = $.ajax({ url: '/api/sites?site='+siteId, method: 'POST', dataType: 'json', data: { password: options.password, masterPassword: options.masterPassword, save_password: 1 } }); ajax.then(function (data) { loading.stop(); //console.log(data); if(data.success){ definitions[siteId] = data.definitions; //load file tree var ajaxOptions = getAjaxOptions('/api/files?site='+siteId); tree.setAjaxOptions(ajaxOptions); openCallback(); }else{ if (data.require_password) { password = site.ftp_pass; var prefs = preferences.get_prefs(); if (prefs.useMasterPassword) { if (password) { password = (Aes.Ctr.decrypt(password, storage.get('masterPassword'), 256)); } } prompt.prompt({ title: 'Require server password for '+site.name, msg: lang.passwordText, value: password, password: true, fn: function(btn, password) { switch(btn) { case 'ok': options.password = password; var prefs = preferences.get_prefs(); if (prefs.useMasterPassword) { if (password) { options.password = Aes.Ctr.encrypt(password, storage.get('masterPassword'), 256); } } open(siteId, options); break; } } }); }else if (data.require_master_password) { masterPasswordPrompt(function() { options.masterPassword = storage.get('masterPassword'); open(siteId, options); }); }else{ prompt.alert({title:'Error', msg:data.error}); } } }).fail(function() { loading.stop(); prompt.alert({title:lang.failedText, msg:'Error opening site'}); }); return ajax; }