UNPKG

angular-gantt

Version:

Gantt chart component for AngularJS

111 lines (89 loc) 4.05 kB
(function(){ 'use strict'; angular.module('gantt').service('GanttHeadersGenerator', ['GanttColumnHeader', 'moment', function(ColumnHeader, moment) { var generateHeader = function(columnsManager, viewScale) { var generatedHeaders = []; var header; var viewScaleValue; var viewScaleUnit; var splittedViewScale; if (viewScale) { splittedViewScale = viewScale.split(' '); } if (splittedViewScale && splittedViewScale.length > 1) { viewScaleValue = parseFloat(splittedViewScale[0]); viewScaleUnit = splittedViewScale[splittedViewScale.length - 1]; } else { viewScaleValue = 1; viewScaleUnit = viewScale; } var currentColumn = columnsManager.columns[0]; var currentDate = moment(currentColumn.date); var maximumDate = moment(columnsManager.columns[columnsManager.columns.length - 1].endDate); while (true) { var currentPosition = currentColumn.getPositionByDate(currentDate); var endDate = moment.min(moment(currentDate).add(1, viewScaleUnit).startOf(viewScaleUnit), maximumDate); var column = columnsManager.getColumnByDate(endDate, true); var left = column.getPositionByDate(endDate); var width = left - currentPosition; if (width > 0) { var labelFormat = columnsManager.getHeaderFormat(viewScaleUnit); header = new ColumnHeader(currentDate, endDate, viewScaleUnit, currentPosition, width, labelFormat); generatedHeaders.push(header); } if (endDate.isSame(maximumDate) || endDate.isAfter(maximumDate)) { break; } currentColumn = column; currentDate = endDate; } return generatedHeaders; }; this.generate = function(columnsManager) { var units = []; if (columnsManager.gantt.options.value('headers') === undefined) { var viewScale = columnsManager.gantt.options.value('viewScale'); viewScale = viewScale.trim(); if (viewScale.charAt(viewScale.length - 1) === 's') { viewScale = viewScale.substring(0, viewScale.length - 1); } var viewScaleUnit; var splittedViewScale; if (viewScale) { splittedViewScale = viewScale.split(' '); } if (splittedViewScale && splittedViewScale.length > 1) { viewScaleUnit = splittedViewScale[splittedViewScale.length - 1]; } else { viewScaleUnit = viewScale; } if (['quarter','month'].indexOf(viewScaleUnit) > -1) { units.push('year'); } if (['day', 'week'].indexOf(viewScaleUnit) > -1) { units.push('month'); } if (['day'].indexOf(viewScaleUnit) > -1) { units.push('week'); } if (['hour'].indexOf(viewScaleUnit) > -1) { units.push('day'); } if (['minute', 'second'].indexOf(viewScaleUnit) > -1) { units.push('hour'); } if (['second'].indexOf(viewScaleUnit) > -1) { units.push('minute'); } units.push(viewScale); } else { units = columnsManager.gantt.options.value('headers'); } var headers = []; angular.forEach(units, function(unit) { headers.push(generateHeader(columnsManager, unit)); }); return headers; }; }]); }());