mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
84 lines
1.7 KiB
JavaScript
84 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('etcd.page')
|
|
.controller('BrowserCtrl', function($scope, $modal, etcdApiSvc, pathSvc,
|
|
ETCD_EVENT, d3, pollerSvc) {
|
|
|
|
$scope.currPath = '/';
|
|
$scope.currNode = null;
|
|
|
|
$scope.rowClick = function(node) {
|
|
if (node.dir) {
|
|
$scope.currPath = node.key;
|
|
}
|
|
};
|
|
|
|
$scope.truncateKey = function(key) {
|
|
return pathSvc.tail(key);
|
|
};
|
|
|
|
$scope.openCreateModal = function(key) {
|
|
$modal.open({
|
|
templateUrl: '/page/browser/create-node.html',
|
|
controller: 'CreateNodeCtrl',
|
|
resolve: {
|
|
key: d3.functor(key || $scope.currPath),
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Refresh the list whenever a node is changed.
|
|
*/
|
|
$scope.$on(ETCD_EVENT.NODE_CHANGED, function(e, node) {
|
|
var parentKey = pathSvc.getParent(node.key);
|
|
$scope.refreshNode(parentKey);
|
|
});
|
|
|
|
/**
|
|
* Refresh the list whenever a node is deleted.
|
|
*/
|
|
$scope.$on(ETCD_EVENT.NODE_DELETED, function(e, node) {
|
|
var parentKey = pathSvc.getParent(node.key);
|
|
$scope.refreshNode(parentKey);
|
|
});
|
|
|
|
$scope.breadcrumbCallback = function(result) {
|
|
$scope.currPath = result.path;
|
|
};
|
|
|
|
/**
|
|
* Update currPath and always refetch that node.
|
|
*/
|
|
$scope.refreshNode = function(path) {
|
|
if ($scope.currPath === path) {
|
|
// Force refresh.
|
|
$scope.fetchNode();
|
|
} else {
|
|
$scope.currPath = path;
|
|
}
|
|
};
|
|
|
|
$scope.fetchNode = function() {
|
|
return etcdApiSvc.fetch($scope.currPath)
|
|
.then(function(node) {
|
|
$scope.currNode = node;
|
|
});
|
|
};
|
|
|
|
$scope.$watch('currPath', function(currPath) {
|
|
if (!currPath || currPath === '') {
|
|
$scope.currPath = '/';
|
|
return;
|
|
}
|
|
$scope.fetchNode();
|
|
});
|
|
|
|
pollerSvc.register('nodePoller', {
|
|
fn: $scope.fetchNode,
|
|
scope: $scope
|
|
});
|
|
|
|
});
|
|
|