blob: 2546eded0bc9790eef587f80a5be559ed591128e [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.
*/
'use strict';
/**
* @ngdoc function
* @name ocwUiApp.controller:TimelineCtrl
* @description
* # TimelineCtrl
* Controller of the ocwUiApp
*/
angular.module('ocwUiApp')
.controller('TimelineCtrl', ['$rootScope', '$scope', 'selectedDatasetInformation', 'regionSelectParams',
function($rootScope, $scope, selectedDatasetInformation, regionSelectParams) {
$scope.datasets = selectedDatasetInformation.getDatasets();
$scope.regionParams = regionSelectParams.getParameters();
$scope.updateTimeline = function() {
// Clear timeline data if it exists
if ("timeline" in $rootScope) {
$rootScope.timeline.deleteAllItems();
}
// Don't process if no datasets have been added
if ($scope.datasets.length == 0 || !("timeline" in $rootScope))
return;
// Create DataTable to add data to timeline
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'start');
data.addColumn('datetime', 'end');
data.addColumn('string', 'content');
// Loop through datasets and find the overlapping start/end time range
var start = $scope.datasets[0].timeVals.start;
var end = $scope.datasets[0].timeVals.end;
for (var i = 0; i < $scope.datasets.length; i++) {
var possibleNewStart = $scope.datasets[i].timeVals.start;
var possibleNewEnd = $scope.datasets[i].timeVals.end;
start = (possibleNewStart > start) ? possibleNewStart : start;
end = (possibleNewEnd < end) ? possibleNewEnd : end;
}
// Set the timeline extent to the overlapping time range
//
// NOTE: The month value substring is expected to be 0-based (hence the -1)
$rootScope.timeline.setVisibleChartRange(new Date(start.substr(0, 4), start.substr(5, 2) - 1, start.substr(8, 2)),
new Date(end.substr(0, 4), end.substr(5, 2) - 1, end.substr(8, 2)));
// Add user selected bounds to timeline
if ($scope.regionParams.areValid) {
var userStart = $scope.regionParams.start;
var userEnd = $scope.regionParams.end;
// Add color to user selected bounds
var style = 'background-color: #000000; border: 2px solid;';
var ocwBar = '<div class="ocw-bar timeline-event-range" style="' + style + '"></div>';
// Add row to DataTable: object with start and end date
// note: subtract one from month since indexes from 0 to 11
data.addRow([new Date(userStart.substr(0,4), userStart.substr(5,2)-1, userStart.substr(8,2)),
new Date(userEnd.substr(0,4), userEnd.substr(5,2)-1, userEnd.substr(8,2)),
ocwBar ]);
}
var options = {
"width": "100%",
"showCurrentTime": false,
"moveable": false,
"zoomable": false,
};
// Draw timeline with data (DataTable) and options (a name-value map)
$rootScope.timeline.draw(data, options);
};
$scope.$on('redrawOverlays', function(event, parameters) {
$scope.updateTimeline();
});
$scope.$watch('datasets', function() {
$scope.updateTimeline();
}, true);
}]);