UNPKG

angular-gantt

Version:

Gantt chart component for AngularJS

213 lines (182 loc) 8.34 kB
/* Project: angular-gantt v1.2.9 - Gantt chart component for AngularJS Authors: Marco Schweighauser, Rémi Alvergnat License: MIT Homepage: https://www.angular-gantt.com Github: https://github.com/angular-gantt/angular-gantt.git */ (function(){ 'use strict'; angular.module('gantt.table', ['gantt', 'gantt.table.templates']).directive('ganttTable', ['ganttUtils', '$compile', '$document', function(utils, $compile, $document) { // Provides the row sort functionality to any Gantt row // Uses the sortableState to share the current row return { restrict: 'E', require: '^gantt', scope: { enabled: '=?', columns: '=?', headers: '=?', classes: '=?', contents: '=?', headerContents: '=?', formatters: '=?', headerFormatter: '=?' }, link: function(scope, element, attrs, ganttCtrl) { var api = ganttCtrl.gantt.api; // Load options from global options attribute. if (scope.options && typeof(scope.options.sortable) === 'object') { for (var option in scope.options.sortable) { scope[option] = scope.options[option]; } } if (scope.enabled === undefined) { scope.enabled = true; } if (scope.columns === undefined) { scope.columns = ['model.name']; } if (scope.headers === undefined) { scope.headers = {'model.name': 'Name'}; } if (scope.contents === undefined) { scope.contents = {}; } if (scope.headerContents === undefined) { scope.headerContents = {}; } if (scope.classes === undefined) { scope.classes = {}; } if (scope.formatters === undefined) { scope.formatters = {}; } api.directives.on.new(scope, function(directiveName, sideContentScope, sideContentElement) { if (directiveName === 'ganttSideContent') { var tableScope = sideContentScope.$new(); tableScope.pluginScope = scope; var ifElement = $document[0].createElement('div'); angular.element(ifElement).attr('data-ng-if', 'pluginScope.enabled'); angular.element(ifElement).addClass('side-element'); var tableElement = $document[0].createElement('gantt-side-content-table'); angular.element(ifElement).append(tableElement); sideContentElement.append($compile(ifElement)(tableScope)); } }); } }; }]); }()); (function(){ 'use strict'; angular.module('gantt.table').directive('ganttSideContentTable', ['GanttDirectiveBuilder', 'ganttLayout', function(Builder, layout) { var builder = new Builder('ganttSideContentTable', 'plugins/table/sideContentTable.tmpl.html'); builder.controller = function($scope) { var hScrollBarHeight = layout.getScrollBarHeight(); $scope.getMaxHeightCss = function() { var css = {}; if ($scope.maxHeight) { var bodyScrollBarHeight = $scope.gantt.scroll.isHScrollbarVisible() ? hScrollBarHeight : 0; css['max-height'] = $scope.maxHeight - bodyScrollBarHeight - $scope.gantt.header.getHeight() + 'px'; } return css; }; }; return builder.build(); }]); }()); (function() { 'use strict'; angular.module('gantt.table').controller('TableColumnController', ['$scope', function($scope) { $scope.getHeader = function() { var header = $scope.pluginScope.headers[$scope.column]; if (header !== undefined) { return header; } if ($scope.pluginScope.headerFormatter !== undefined) { header = $scope.pluginScope.headerFormatter($scope.column); } if (header !== undefined) { return header; } return header; }; $scope.getHeaderContent = function() { var headerContent = $scope.pluginScope.headerContents[$scope.column]; if (headerContent === undefined) { return '{{getHeader()}}'; } return headerContent; }; $scope.getClass = function() { return $scope.pluginScope.classes[$scope.column]; }; }]); }()); (function() { 'use strict'; angular.module('gantt.table').controller('TableColumnRowController', ['$scope', function($scope) { $scope.getValue = function() { var value = $scope.$eval($scope.column, $scope.row); var formatter = $scope.pluginScope.formatters[$scope.column]; if (formatter !== undefined) { value = formatter(value, $scope.column, $scope.row); } return value; }; $scope.getRowContent = function() { var content; if ($scope.row.model.columnContents) { content = $scope.row.model.columnContents[$scope.column]; } if (content === undefined && $scope.column === 'model.name') { content = $scope.row.model.content; } if (content === undefined) { content = $scope.pluginScope.contents[$scope.column]; } if (content === undefined && $scope.column === 'model.name') { content = $scope.row.rowsManager.gantt.options.value('rowContent'); } if (content === undefined && $scope.pluginScope.content !== undefined) { content = $scope.pluginScope.content; } if (content === undefined) { return '{{getValue()}}'; } return content; }; }]); }()); angular.module('gantt.table.templates', []).run(['$templateCache', function($templateCache) { $templateCache.put('plugins/table/sideContentTable.tmpl.html', '<div class="gantt-side-content-table">\n' + '\n' + ' <div class="gantt-table-column {{getClass()}}" ng-repeat="column in pluginScope.columns" ng-controller="TableColumnController">\n' + '\n' + ' <div class="gantt-table-header" ng-style="{height: ganttHeaderHeight + \'px\'}">\n' + ' <div ng-show="ganttHeaderHeight" class="gantt-row-label-header gantt-row-label gantt-table-row gantt-table-header-row">\n' + ' <span class="gantt-label-text" gantt-bind-compile-html="getHeaderContent()"/>\n' + ' </div>\n' + ' </div>\n' + '\n' + ' <div class="gantt-table-content" ng-style="getMaxHeightCss()">\n' + ' <div gantt-vertical-scroll-receiver>\n' + ' <div class="gantt-table-row" ng-repeat="row in gantt.rowsManager.visibleRows track by row.model.id" ng-controller="TableColumnRowController">\n' + ' <div gantt-row-label class="gantt-row-label gantt-row-height" ng-class="row.model.classes" ng-style="{\'height\': row.model.height}">\n' + ' <div class="gantt-valign-container">\n' + ' <div class="gantt-valign-content">\n' + ' <span class="gantt-label-text" gantt-bind-compile-html="getRowContent()"></span>\n' + ' </div>\n' + ' </div>\n' + ' </div>\n' + ' </div>\n' + ' </div>\n' + ' </div>\n' + '\n' + ' </div>\n' + '</div>\n' + ''); }]); //# sourceMappingURL=angular-gantt-table-plugin.js.map