mirror of
https://github.com/nasa/openmct.git
synced 2024-12-27 08:32:28 +00:00
parent
026ece3956
commit
d02f4041b2
@ -472,6 +472,7 @@ define([
|
||||
"implementation": TimelineZoomController,
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$timeout",
|
||||
"TIMELINE_ZOOM_CONFIGURATION"
|
||||
]
|
||||
},
|
||||
|
@ -28,11 +28,12 @@ define(
|
||||
* Controls the pan-zoom state of a timeline view.
|
||||
* @constructor
|
||||
*/
|
||||
function TimelineZoomController($scope, ZOOM_CONFIGURATION) {
|
||||
function TimelineZoomController($scope, $timeout, ZOOM_CONFIGURATION) {
|
||||
// Prefer to start with the middle index
|
||||
var zoomLevels = ZOOM_CONFIGURATION.levels || [1000],
|
||||
zoomIndex = Math.floor(zoomLevels.length / 2),
|
||||
tickWidth = ZOOM_CONFIGURATION.width || 200,
|
||||
width = tickWidth,
|
||||
bounds = { x: 0, width: tickWidth }; // Default duration in view
|
||||
|
||||
function toMillis(pixels) {
|
||||
@ -62,6 +63,12 @@ define(
|
||||
zoomIndex += 1;
|
||||
}
|
||||
bounds.x = toPixels(timespan.getStart());
|
||||
|
||||
// Physical width may be insufficient for scroll;
|
||||
// if so, try again on a timeout!
|
||||
if (bounds.x + bounds.width > width) {
|
||||
$timeout(initializeZoomFromTimespan.bind(null, timespan));
|
||||
}
|
||||
}
|
||||
|
||||
function initializeZoom() {
|
||||
@ -122,7 +129,8 @@ define(
|
||||
*/
|
||||
width: function (timestamp) {
|
||||
var pixels = Math.ceil(toPixels(timestamp * (1 + PADDING)));
|
||||
return Math.max(bounds.width * 2, pixels);
|
||||
width = Math.max(bounds.width, pixels);
|
||||
return width;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ define(
|
||||
describe("The timeline zoom state controller", function () {
|
||||
var testConfiguration,
|
||||
mockScope,
|
||||
mockTimeout,
|
||||
controller;
|
||||
|
||||
beforeEach(function () {
|
||||
@ -37,8 +38,10 @@ define(
|
||||
};
|
||||
mockScope = jasmine.createSpyObj("$scope", ['$watch']);
|
||||
mockScope.commit = jasmine.createSpy('commit');
|
||||
mockTimeout = jasmine.createSpy('$timeout');
|
||||
controller = new TimelineZoomController(
|
||||
mockScope,
|
||||
mockTimeout,
|
||||
testConfiguration
|
||||
);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user