Files
duplicati/Duplicati/Server/webroot/scripts/folderbrowser.js
T

113 lines
3.8 KiB
JavaScript

$(document).ready(function() {
var isWindows = null;
$.browseForFolder = function(config) {
var self = {};
var select_node = function(node) {
if (node != null) {
var path = node.original.filepath;
if (self.resolvePath && node.original.resolvedpath)
path = node.original.resolvedpath;
if (self.resolvePath && isWindows) {
if (path.substr(0,1) == '/')
path = path.substr(1);
path = replace_all(path, '/', '\\');
}
config.callback(path, node.text);
self.rootel.dialog('close');
}
}
if (isWindows == null) {
APP_DATA.getServerConfig(function(data) {
isWindows = data.DirectorySeperator = '/';
});
}
self.rootel = $('<div class="modal-dialog folder-browser-dialog"></div>')
self.treeel = $('<div></div>');
self.rootel.append(self.treeel);
self.rootel.attr('title', config.title);
self.resolvePath = config.resolvePath;
self.treeel.jstree({
'core': {
'data': {
'url': APP_CONFIG.server_url,
'data' : function (node) {
return {
'action': 'get-folder-contents',
'onlyfolders': true,
'path': node.id === '#' ? '/' : node.original.filepath
};
},
'success': function(data, status, xhr) {
for(var i = 0; i < data.length; i++) {
var o = data[i];
o.children = !o.leaf;
o.filepath = o.id;
//o.icon = o.iconCls;
delete o.id;
delete o.iconCls;
delete o.leaf;
}
xhr.getResponseHeader_orig = xhr.getResponseHeader;
xhr.getResponseHeader = function(arg) {
if (arg == 'Content-Type')
return 'text/json';
else
return xhr.getResponseHeader_orig(arg);
};
return data;
},
'dataType': 'json',
}
},
'dnd': { copy: false },
});
self.rootel.dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: true,
closeOnEscape: true,
buttons: [
{ text: 'Close', disabled: false, click: function(event, ui) {
self.rootel.dialog('close');
}},
{ text: 'OK', disabled: true, click: function(event, ui) {
select_node(self.selected_node);
}}
]
});
self.dlg_buttons = self.rootel.parent().find('.ui-dialog-buttonpane').find('.ui-button');
self.rootel.on('dialogclose', function() {
self.rootel.remove();
});
self.treeel.bind("dblclick.jstree", function (event) {
var node = self.treeel.jstree().get_node($(event.target).closest("li"));
select_node(node);
});
self.treeel.bind('select_node.jstree', function (event, data) {
self.selected_node = data.node;
self.dlg_buttons.last().button('option', 'disabled', self.selected_node == null);
});
};
});