blob: 9485aa4067f7ece55d2dacde635d208ae8fa9aa5 [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.
//
// Controller for the OCW Timeline Widget
App.Controllers.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);
}]);