From 0b8665f148c5f62f311059fa7c0404ffdf06323d Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Sun, 30 Sep 2018 11:16:10 +0300 Subject: [PATCH] feat(agent): browse files --- .../host-browser/host-browser-controller.js | 79 +++++++++++++------ .../components/host-browser/host-browser.html | 2 +- .../components/host-browser/host-browser.js | 4 +- app/agent/services/hostBrowserService.js | 33 ++++++++ app/docker/__module.js | 23 +++--- .../dockerSidebarContent.html | 3 - .../host-overview/host-overview.html | 6 +- app/docker/views/host/hostController.js | 10 --- .../node-browser/node-browser-controller.js | 18 +++++ .../node-browser/node-browser.html} | 4 +- .../views/nodes/node-browser/node-browser.js | 4 + 11 files changed, 133 insertions(+), 53 deletions(-) create mode 100644 app/agent/services/hostBrowserService.js delete mode 100644 app/docker/views/host/hostController.js create mode 100644 app/docker/views/nodes/node-browser/node-browser-controller.js rename app/docker/views/{host/host.html => nodes/node-browser/node-browser.html} (56%) create mode 100644 app/docker/views/nodes/node-browser/node-browser.js 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 @@ - diff --git a/app/docker/components/host-overview/host-overview.html b/app/docker/components/host-overview/host-overview.html index 6cef660a4..15144717f 100644 --- a/app/docker/components/host-overview/host-overview.html +++ b/app/docker/components/host-overview/host-overview.html @@ -1,8 +1,12 @@ - + + + Browse + Docker diff --git a/app/docker/views/host/hostController.js b/app/docker/views/host/hostController.js deleted file mode 100644 index daa9e857f..000000000 --- a/app/docker/views/host/hostController.js +++ /dev/null @@ -1,10 +0,0 @@ -angular.module('portainer.docker').controller('HostController', [ - '$transition$', - function HostController() { - initView(); - - function initView() { - } - - } -]); diff --git a/app/docker/views/nodes/node-browser/node-browser-controller.js b/app/docker/views/nodes/node-browser/node-browser-controller.js new file mode 100644 index 000000000..cd0706371 --- /dev/null +++ b/app/docker/views/nodes/node-browser/node-browser-controller.js @@ -0,0 +1,18 @@ +angular.module('portainer.docker').controller('NodeBrowserController', [ + 'NodeService', + 'HttpRequestHelper', + '$stateParams', + function NodeBrowserController(NodeService, HttpRequestHelper, $stateParams) { + var ctrl = this; + + ctrl.$onInit = $onInit; + + function $onInit() { + ctrl.nodeId = $stateParams.id; + NodeService.node(ctrl.nodeId).then(function onNodeLoaded(node) { + HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname); + ctrl.node = node; + }); + } + } +]); diff --git a/app/docker/views/host/host.html b/app/docker/views/nodes/node-browser/node-browser.html similarity index 56% rename from app/docker/views/host/host.html rename to app/docker/views/nodes/node-browser/node-browser.html index a3a0a1639..211898a08 100644 --- a/app/docker/views/host/host.html +++ b/app/docker/views/nodes/node-browser/node-browser.html @@ -1,7 +1,7 @@ - + - Host + Nodes > {{ $ctrl.node.Hostname }} > browse diff --git a/app/docker/views/nodes/node-browser/node-browser.js b/app/docker/views/nodes/node-browser/node-browser.js new file mode 100644 index 000000000..3e7269384 --- /dev/null +++ b/app/docker/views/nodes/node-browser/node-browser.js @@ -0,0 +1,4 @@ +angular.module('portainer.docker').component('nodeBrowserView', { + templateUrl: 'app/docker/views/nodes/node-browser/node-browser.html', + controller: 'NodeBrowserController' +});