blob: 4677925b8dbf52cdd444de1a33d4a02fba8170e9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import template from './status.template.html';
const ICONS = {
CREATED: 'CREATED',
STARTING: 'STARTING',
RUNNING: 'RUNNING',
STOPPING: 'STOPPING',
STOPPED: 'STOPPED',
ON_FIRE: 'ON_FIRE',
ERROR: 'ERROR',
UNKNOWN: 'UNKNOWN',
NO_STATE: 'NO_STATE'
};
const STATUS = {
CREATED: {name: 'Created', icon: ICONS.CREATED},
STARTING: {name: 'Starting', icon: ICONS.STARTING},
RUNNING: {name: 'Running', icon: ICONS.RUNNING},
STOPPING: {name: 'Stopping', icon: ICONS.STOPPING},
STOPPED: {name: 'Stopped', icon: ICONS.STOPPED},
ON_FIRE: {name: 'On fire', icon: ICONS.ON_FIRE},
ERROR: {name: 'Error', icon: ICONS.ERROR},
UNKNOWN: {name: 'Unknown', icon: ICONS.UNKNOWN},
NO_STATE: {name: '', icon: ICONS.NO_STATE},
'In progress': {name: 'In progress', icon: ICONS.STARTING},
'Completed': {name: 'Completed', icon: ICONS.RUNNING},
'Failed': {name: 'Failed', icon: ICONS.ERROR}
};
const MODULE_NAME = 'brooklyn.components.status';
angular.module(MODULE_NAME, [])
.directive('brooklynStatus', statusDirective)
.directive('brooklynStatusIcon', statusIconDirective)
.directive('brooklynStatusText', statusTextDirective);
export default MODULE_NAME;
export function statusDirective() {
var directive = {
template: '<brooklyn-status-icon value="{{value}}"></brooklyn-status-icon><brooklyn-status-text value="{{value}}"></brooklyn-status-text>',
restrict: 'E',
scope: {
value: '@'
}
};
return directive;
}
export function statusIconDirective() {
var directive = {
template: template,
restrict: 'E',
scope: {
value: '@'
},
link: link
};
return directive;
}
export function statusTextDirective() {
var directive = {
template: '<div ng-class="statusClass()">{{status.name}}</div>',
restrict: 'E',
scope: {
value: '@'
},
link: link
};
return directive;
}
function link($scope) {
$scope.status = STATUS.NO_STATE;
$scope.$watch('value', (nevVal)=> {
$scope.status = (STATUS.hasOwnProperty($scope.value)) ? STATUS[$scope.value] : STATUS.NO_STATE;
});
$scope.statusClass = function () {
return 'status-' + $scope.status.icon.toLowerCase();
}
}