Example #1
0
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();
    	});
	}
}
Example #2
0
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;
}