OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/app/assets/javascripts/angular/directives/timelines/timeline-table-container-di...

92 lines
2.8 KiB

angular.module('openproject.timelines.directives')
.directive('timelineTableContainer', ['TimelineLoaderService', 'TimelineTableHelper', 'SvgHelper', function(TimelineLoaderService, TimelineTableHelper, SvgHelper) {
return {
restrict: 'E',
replace: true,
templateUrl: '/templates/timelines/timeline_table_container.html',
link: function(scope, element, attributes) {
completeUI = function() {
scope.timeline.paper = new SvgHelper(scope.timeline.paperElement);
// perform some zooming. if there is a zoom level stored with the
// report, zoom to it. otherwise, zoom out. this also constructs
// timeline graph.
if (scope.timeline.options.zoom_factor &&
scope.timeline.options.zoom_factor.length === 1) {
scope.timeline.zoom(
scope.timeline.pnum(scope.timeline.options.zoom_factor[0])
);
} else {
scope.timeline.zoomOut();
}
// perform initial outline expansion.
if (scope.timeline.options.initial_outline_expansion &&
scope.timeline.options.initial_outline_expansion.length === 1) {
scope.timeline.expandTo(
scope.timeline.pnum(scope.timeline.options.initial_outline_expansion[0])
);
}
// zooming and initial outline expansion have consequences in the
// select inputs in the toolbar.
if(scope.updateToolbar) scope.updateToolbar();
scope.underConstruction = false;
scope.timeline.getChart().scroll(function() {
scope.timeline.adjustTooltip();
});
jQuery(window).scroll(function() {
scope.timeline.adjustTooltip();
});
};
buildWorkPackageTable = function(timeline){
if (timeline.isGrouping() && timeline.options.grouping_two_enabled) {
timeline.secondLevelGroupingAdjustments();
}
tree = timeline.getLefthandTree();
if (tree.containsPlanningElements() || tree.containsProjects()) {
timeline.adjustForPlanningElements();
scope.rows = TimelineTableHelper.getTableRowsFromTimelineTree(tree, timeline.options);
} else{
scope.rows = [];
}
return scope.rows;
};
drawChart = function(tree) {
timeline = scope.timeline;
try {
window.clearTimeout(timeline.safetyHook);
if (rows.length > 0) {
completeUI();
} else {
timeline.warn(I18n.t('js.label_no_data'), 'warning');
}
} catch (e) {
timeline.die(e);
}
};
// start timeline
scope.timeline.registerTimelineContainer(element);
TimelineLoaderService.loadTimelineData(scope.timeline)
.then(buildWorkPackageTable)
.then(drawChart);
}
};
}]);