angular-gantt
Version:
Gantt chart component for AngularJS
68 lines (57 loc) • 2.42 kB
text/typescript
import moment from 'moment'
require('./taskBounds.tmpl.html')
export default function ($templateCache) {
'ngInject'
// Displays a box representing the earliest allowable start time and latest completion time for a job
return {
restrict: 'E',
templateUrl: function (tElement, tAttrs) {
let templateUrl
if (tAttrs.templateUrl === undefined) {
templateUrl = 'plugins/bounds/taskBounds.tmpl.html'
} else {
templateUrl = tAttrs.templateUrl
}
if (tAttrs.template) {
$templateCache.put(templateUrl, tAttrs.template)
}
return templateUrl
},
replace: true,
scope: true,
controller: function ($scope, $element) {
'ngInject'
$element.toggleClass('ng-hide', true)
$scope.simplifyMoment = function (d) {
return moment.isMoment(d) ? d.unix() : d
}
$scope.$watchGroup(['simplifyMoment(task.model.est)', 'simplifyMoment(task.model.lct)', 'task.left', 'task.width'], function () {
let left = $scope.task.rowsManager.gantt.getPositionByDate($scope.task.model.est)
let right = $scope.task.rowsManager.gantt.getPositionByDate($scope.task.model.lct)
$element.css('left', left - $scope.task.left + 'px')
$element.css('width', right - left + 'px')
$element.toggleClass('gantt-task-bounds-in', false)
$element.toggleClass('gantt-task-bounds-out', false)
if ($scope.task.model.est === undefined || $scope.task.model.lct === undefined) {
$element.toggleClass('gantt-task-bounds-in', true)
} else if ($scope.task.model.est > $scope.task.model.from) {
$element.toggleClass('gantt-task-bounds-out', true)
} else if ($scope.task.model.lct < $scope.task.model.to) {
$element.toggleClass('gantt-task-bounds-out', true)
} else {
$element.toggleClass('gantt-task-bounds-in', true)
}
})
$scope.task.$element.bind('mouseenter', function () {
$element.toggleClass('ng-hide', false)
})
$scope.task.$element.bind('mouseleave', function () {
$element.toggleClass('ng-hide', true)
})
$scope.task.rowsManager.gantt.api.directives.raise.new('ganttBounds', $scope, $element)
$scope.$on('$destroy', function () {
$scope.task.rowsManager.gantt.api.directives.raise.destroy('ganttBounds', $scope, $element)
})
}
}
}