diff --git a/app/agent/components/host-browser/host-browser-controller.js b/app/agent/components/host-browser/host-browser-controller.js index 111f4b18b..34ef24a0e 100644 --- a/app/agent/components/host-browser/host-browser-controller.js +++ b/app/agent/components/host-browser/host-browser-controller.js @@ -1,34 +1,67 @@ -angular - .module('portainer.agent') - .controller('HostBrowserController', [function HostBrowserController() { +angular.module('portainer.agent').controller('HostBrowserController', [ + 'HostBrowserService', + 'Notifications', + function HostBrowserController(HostBrowserService, Notifications) { + var ctrl = this; + ctrl.state = { + path: '/' + }; - this.isRoot=true - this.files = [] - - this.goToParent = goToParent; - this.browse = browse; - this.renameFile = renameFile; - this.downloadFile = downloadFile; - this.deleteFile = deleteFile; + ctrl.goToParent = goToParent; + ctrl.browse = browse; + ctrl.renameFile = renameFile; + ctrl.downloadFile = downloadFile; + ctrl.deleteFile = deleteFile; + ctrl.isRoot = isRoot; + ctrl.$onInit = $onInit; function goToParent() { - + getFilesForPath(parentPath(this.state.path)); } - function browse(folderName) { - - } - - function renameFile(name, newName) { - + function isRoot() { + return ctrl.state.path === '/'; } - function downloadFile(name) { - + function browse(folder) { + getFilesForPath(buildPath(ctrl.state.path, folder)); } - function deleteFile(name) { - + function getFilesForPath(path) { + HostBrowserService.ls(path) + .then(function onFilesLoaded(files) { + ctrl.state.path = path; + ctrl.files = files; + }) + .catch(function onLoadingFailed(err) { + Notifications.error('Failure', err, 'Unable to browse'); + }); } - }]); + function renameFile(name, newName) {} + + function downloadFile(name) {} + + function deleteFile(name) {} + + function $onInit() { + getFilesForPath('/'); + } + + function parentPath(path) { + if (path.lastIndexOf('/') === 0) { + return '/'; + } + + var split = _.split(path, '/'); + return _.join(_.slice(split, 0, split.length - 1), '/'); + } + + function buildPath(parent, file) { + if (parent === '/') { + return parent + file; + } + return parent + '/' + file; + } + } +]); diff --git a/app/agent/components/host-browser/host-browser.html b/app/agent/components/host-browser/host-browser.html index 4a6f8aac2..863052557 100644 --- a/app/agent/components/host-browser/host-browser.html +++ b/app/agent/components/host-browser/host-browser.html @@ -2,7 +2,7 @@ title-text="Host browser" title-icon="fa-file" dataset="$ctrl.files" table-key="host_browser" order-by="Dir" - is-root="$ctrl.state.isRoot" + is-root="$ctrl.isRoot()" go-to-parent="$ctrl.goToParent()" browse="$ctrl.browse(name)" rename="$ctrl.renameFile(name, newName)" diff --git a/app/agent/components/host-browser/host-browser.js b/app/agent/components/host-browser/host-browser.js index 2e26a0997..a136730ee 100644 --- a/app/agent/components/host-browser/host-browser.js +++ b/app/agent/components/host-browser/host-browser.js @@ -1,5 +1,5 @@ angular.module('portainer.agent').component('hostBrowser', { - bindings: {}, controller: 'HostBrowserController', - templateUrl: 'app/agent/components/host-browser/host-browser.html' + templateUrl: 'app/agent/components/host-browser/host-browser.html', + bindings: {} }); diff --git a/app/agent/services/hostBrowserService.js b/app/agent/services/hostBrowserService.js new file mode 100644 index 000000000..81c2cfc94 --- /dev/null +++ b/app/agent/services/hostBrowserService.js @@ -0,0 +1,33 @@ +angular.module('portainer.agent').factory('HostBrowserService', [ + 'Browse', + function HostBrowserServiceFactory(Browse) { + var service = {}; + + service.ls = ls; + service.get = get; + service.delete = deletePath; + service.rename = rename; + + function ls(path) { + return Browse.ls({ path: path }).$promise; + } + + function get(path) { + return Browse.get({ path: path }).$promise; + } + + function deletePath(path) { + return Browse.delete({ path: path }).$promise; + } + + function rename(path, newPath) { + var payload = { + CurrentFilePath: path, + NewFilePath: newPath + }; + return Browse.rename({}, payload).$promise; + } + + return service; + } +]); diff --git a/app/docker/__module.js b/app/docker/__module.js index 619e79840..1d4de12e6 100644 --- a/app/docker/__module.js +++ b/app/docker/__module.js @@ -243,6 +243,16 @@ angular.module('portainer.docker', ['portainer.app']) } }; + var nodeBrowser = { + name: 'docker.nodes.node.browse', + url: '/browse', + views: { + 'content@': { + component: 'nodeBrowserView' + } + } + }; + var secrets = { name: 'docker.secrets', url: '/secrets', @@ -414,16 +424,7 @@ angular.module('portainer.docker', ['portainer.app']) } }; - var host = { - name: 'docker.host', - url: '/host', - views: { - 'content@': { - templateUrl: 'app/docker/views/host/host.html', - controller: 'HostController' - } - } - }; + $stateRegistryProvider.register(configs); $stateRegistryProvider.register(config); @@ -448,6 +449,7 @@ angular.module('portainer.docker', ['portainer.app']) $stateRegistryProvider.register(networkCreation); $stateRegistryProvider.register(nodes); $stateRegistryProvider.register(node); + $stateRegistryProvider.register(nodeBrowser); $stateRegistryProvider.register(secrets); $stateRegistryProvider.register(secret); $stateRegistryProvider.register(secretCreation); @@ -464,5 +466,4 @@ angular.module('portainer.docker', ['portainer.app']) $stateRegistryProvider.register(volume); $stateRegistryProvider.register(volumeBrowse); $stateRegistryProvider.register(volumeCreation); - $stateRegistryProvider.register(host); }]); diff --git a/app/docker/components/dockerSidebarContent/dockerSidebarContent.html b/app/docker/components/dockerSidebarContent/dockerSidebarContent.html index b0df76120..2e0eeb497 100644 --- a/app/docker/components/dockerSidebarContent/dockerSidebarContent.html +++ b/app/docker/components/dockerSidebarContent/dockerSidebarContent.html @@ -34,9 +34,6 @@