/** * An element which displays a table of events on a repository and allows them to be * edited. */ angular.module('quay').directive('repositoryEventsTable', function () { var directiveDefinitionObject = { priority: 0, templateUrl: '/static/directives/repository-events-table.html', replace: false, transclude: true, restrict: 'C', scope: { 'repository': '=repository' }, controller: function($scope, $element, ApiService, Restangular, UtilService, ExternalNotificationData) { $scope.showNewNotificationCounter = 0; var loadNotifications = function() { if (!$scope.repository || $scope.notificationsResource) { return; } var params = { 'repository': $scope.repository.namespace + '/' + $scope.repository.name }; $scope.notificationsResource = ApiService.listRepoNotificationsAsResource(params).get( function(resp) { $scope.notifications = resp.notifications; return $scope.notifications; }); }; $scope.$watch('repository', loadNotifications); loadNotifications(); $scope.handleNotificationCreated = function(notification) { $scope.notifications.push(notification); }; $scope.askCreateNotification = function() { $scope.showNewNotificationCounter++; }; $scope.getEventInfo = function(notification) { return ExternalNotificationData.getEventInfo(notification.event); }; $scope.getMethodInfo = function(notification) { return ExternalNotificationData.getMethodInfo(notification.method); }; $scope.deleteNotification = function(notification) { var params = { 'repository': $scope.repository.namespace + '/' + $scope.repository.name, 'uuid': notification.uuid }; ApiService.deleteRepoNotification(null, params).then(function() { var index = $.inArray(notification, $scope.notifications); if (index < 0) { return; } $scope.notifications.splice(index, 1); }, ApiService.errorDisplay('Cannot delete notification')); }; $scope.showWebhookInfo = function(notification) { var eventId = notification.event; document.location = 'http://docs.quay.io/guides/notifications.html#webhook_' + eventId; }; $scope.testNotification = function(notification) { var params = { 'repository': $scope.repository.namespace + '/' + $scope.repository.name, 'uuid': notification.uuid }; ApiService.testRepoNotification(null, params).then(function() { bootbox.dialog({ "title": "Test Notification Queued", "message": "A test version of this notification has been queued and should appear shortly", "buttons": { "close": { "label": "Close", "className": "btn-primary" } } }); }, ApiService.errorDisplay('Could not issue test notification')); }; } }; return directiveDefinitionObject; });