151 lines
3.8 KiB
JavaScript
151 lines
3.8 KiB
JavaScript
(function () {
|
|
|
|
/**
|
|
* ReposCtrl responsible for rendering the user's
|
|
* repository home screen.
|
|
*/
|
|
function ReposCtrl($scope, $location, $stateParams, repos, users) {
|
|
$scope.loading = true;
|
|
$scope.waiting = false;
|
|
|
|
// Gets the currently authenticated user
|
|
users.getCached().then(function (payload) {
|
|
$scope.user = payload.data;
|
|
$scope.loading = false;
|
|
});
|
|
|
|
// Gets a list of repos to display in the
|
|
// dropdown.
|
|
repos.list().then(function (payload) {
|
|
$scope.repos = angular.isArray(payload.data) ? payload.data : [];
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
|
|
// Adds a repository
|
|
$scope.add = function (event, fullName) {
|
|
$scope.error = undefined;
|
|
if (event.which && event.which !== 13) {
|
|
return;
|
|
}
|
|
$scope.waiting = true;
|
|
|
|
repos.post(fullName).then(function (payload) {
|
|
$location.path('/' + fullName);
|
|
$scope.waiting = false;
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
$scope.waiting = false;
|
|
$scope.search_text = undefined;
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* RepoAddCtrl responsible for activaing a new
|
|
* repository.
|
|
*/
|
|
function RepoAddCtrl($scope, $location, repos, users) {
|
|
|
|
// Gets the currently authenticated user
|
|
users.getCached().then(function (payload) {
|
|
$scope.user = payload.data;
|
|
});
|
|
|
|
$scope.add = function (slug) {
|
|
repos.post(slug).then(function (payload) {
|
|
$location.path('/' + slug);
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* RepoEditCtrl responsible for editing a repository.
|
|
*/
|
|
function RepoEditCtrl($scope, $window, $location, $stateParams, repos, users) {
|
|
var owner = $stateParams.owner;
|
|
var name = $stateParams.name;
|
|
var fullName = owner + '/' + name;
|
|
|
|
// Inject window for composing url
|
|
$scope.window = $window;
|
|
|
|
// Gets the currently authenticated user
|
|
users.getCached().then(function (payload) {
|
|
$scope.user = payload.data;
|
|
});
|
|
|
|
// Gets a repository
|
|
repos.get(fullName).then(function (payload) {
|
|
$scope.repo = payload.data;
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
|
|
$scope.save = function (repo) {
|
|
repo.timeout = parseInt(repo.timeout);
|
|
repos.update(repo).then(function (payload) {
|
|
$scope.repo = payload.data;
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
};
|
|
|
|
$scope.delete = function (repo) {
|
|
repos.delete(repo).then(function (payload) {
|
|
$location.path('/');
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
};
|
|
|
|
$scope.param = {};
|
|
$scope.addParam = function (param) {
|
|
if (!$scope.repo.params) {
|
|
$scope.repo.params = {}
|
|
}
|
|
$scope.repo.params[param.key] = param.value;
|
|
$scope.param = {};
|
|
|
|
// auto-update
|
|
repos.update($scope.repo).then(function (payload) {
|
|
$scope.repo = payload.data;
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
};
|
|
|
|
|
|
$scope.encrypt = function (plaintext) {
|
|
var data = {"DATA": plaintext};
|
|
repos.encrypt(fullName, data).then(function (payload) {
|
|
$scope.secure = payload.data["DATA"];
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
};
|
|
|
|
$scope.deleteParam = function (key) {
|
|
delete $scope.repo.params[key];
|
|
|
|
// auto-update
|
|
repos.update($scope.repo).then(function (payload) {
|
|
$scope.repo = payload.data;
|
|
}).catch(function (err) {
|
|
$scope.error = err;
|
|
});
|
|
}
|
|
}
|
|
|
|
function toSnakeCase(str) {
|
|
return str.replace(/ /g, '_').replace(/([a-z0-9])([A-Z0-9])/g, '$1_$2').toLowerCase();
|
|
}
|
|
|
|
angular
|
|
.module('drone')
|
|
.controller('ReposCtrl', ReposCtrl)
|
|
.controller('RepoAddCtrl', RepoAddCtrl)
|
|
.controller('RepoEditCtrl', RepoEditCtrl);
|
|
})();
|