etcd/mod/dashboard/app/page/browser/browser-ctrl.js
2014-04-14 12:16:18 -07:00

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
});
});