mirror of
https://github.com/nasa/openmct.git
synced 2025-05-03 09:12:51 +00:00
Squashed commit of the following:
commit f1dc1ce152e186da0d10c8e77d920ac0a76c9bc2 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:35:38 2017 -0700 [Timers] Rewrite JSDoc for FollowTimerAction https://github.com/nasa/openmct/pull/1694/files#r137604769 commit 7ab0693cc983f8a04ac8ee9002f4d776b06a869a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:27:53 2017 -0700 [Timer] Expect domain objects from FollowIndicator test commit ff89c0849d16ab451bfd2fddd9202cf36940f599 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:26:28 2017 -0700 [Timer] Add JSDoc for new method commit 2a0343352eca241dfc28a4aa0b3832e3e6928864 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:24:59 2017 -0700 [Timeline] Update TOI tests ...to account for refactoring out of tick handling. commit 01cbaafc72870fab4ada5894637ae5721214933d Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:17:25 2017 -0700 [Timeline] Update dependencies for TOI test commit 6bd5c378566362dce331e7c200dea87f0b08ecc6 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:15:21 2017 -0700 [Timers] Update timerService tests with dependencies commit b0793865c5131e17a58786ec356d67f2f2bba4c5 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:09:54 2017 -0700 [Timers] Declare vars to satisfy JSHint commit 9d2a63f7fe61dadf68255d795512ec55f532c533 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 14:07:12 2017 -0700 [Timeline] Handle stopped timer commit 30871270514730f3f2f12482075e5140bb97fa1f Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 13:59:08 2017 -0700 [Timer] Tweak refactored timer logic commit 53ad127ba7cf679377dc865301612a1d78399324 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 13:53:36 2017 -0700 [Timer] Convert times from timerService ...to reduce resposibilities for TOI controller. commit f8341133cf23df383b8f6e4815b88e0066ebd2bc Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 13:03:37 2017 -0700 [Timeline] Factor out timer knowledge commit aebd9e0ac223971b868b03343dbe4c61c6eb4849 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 12:34:58 2017 -0700 [Timeline] Consistently use this commit 48ac427a20c5c343aecdbd54b068d8691f7830b6 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 12:33:57 2017 -0700 [Timeline] Remove unused tick binding/call commit ea62f0a15ba4ab5de53213bbed14599eaf878d70 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 12:10:59 2017 -0700 [Timeline] Retrieve timestamp on demand commit f53bd04b5e343b22ea52b431785ade891577bb6a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 12:07:55 2017 -0700 [Timeline] Update clocks on bounds events https://github.com/nasa/openmct/pull/1694/files#r137603081 commit 51d8e376ee46aafa13cd9a969c6f03885e10dafb Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 11:40:33 2017 -0700 [Timeline] Don't listen for non-existing tick events commit 5cc40c488cec5e7453c2fe1dea5e5a4fa3509ecd Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 11:39:21 2017 -0700 [Time] Revert Time API changes https://github.com/nasa/openmct/pull/1694/files#r137603081 commit c55c8bc627bf0a7f3cfd04b604b82d15ff469ab9 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 11:37:40 2017 -0700 [Timeline] Finish testing TOI controller commit af5cea5f2f172a309568d477dfdf11b8d45e74bb Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 11:06:47 2017 -0700 [Timeline] Test TOI controller commit ba64db68b132fa431e8ccdb533024bf2850f9712 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 10:06:41 2017 -0700 [Timers] Test timerService commit 247e663b326ec5b8145b832af9b26086204baea3 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 10:05:24 2017 -0700 [Timers] Remove unused timerService method commit 8d741ad5744e1b7deb669dbaa0f3d30e4eb5866e Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 09:59:32 2017 -0700 [Timers] Remove unused timerService dependency commit b59c8917bdef5ec3e54c8857d993d86547cfe177 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 09:58:10 2017 -0700 [Timers] Remove unused timerService event commit f15dd9827f835a814dc40a6201c90268a60ed64a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 09:49:09 2017 -0700 [Timers] Test timer-following indicator commit 2501f11af8c0b2aed9ebf16ffd28c0003b2701c2 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 09:42:54 2017 -0700 [Timer] Complete test coverage for FollowTimerAction commit aa2be83fc15cd68ee6de4d9f8205dc2fcba8c35b Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Thu Sep 7 09:35:37 2017 -0700 [Timers] Begin testing Follow Timer action commit d9062e0b0ff351b141dcb646972053ec72292d53 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:45:18 2017 -0700 [Timeline] Remove unused variables commit 79ebe4dd2b2aefc1e83ea8142588ed0715b3c269 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:39:22 2017 -0700 [Timeline] JSDoc for TOI controller commit 330f6b465188555e8e59f4eaf8ce1875b5335846 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:30:58 2017 -0700 [Timeline] Use different icon to follow time bounds commit f0a3b628e6d1d843324085edd563b68997f5a215 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:30:46 2017 -0700 [Timeline] Simplify TOI following initialization commit e76f3d1d525e0d19845b4c5b457995e60c416ad0 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:27:07 2017 -0700 [Timeline] Add toggle to follow time bounds commit 8ec072c0a2a953c074e0c327430dd68f27894ffb Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 16:19:25 2017 -0700 [Timeline] Follow TC bounds based on boolean commit 206a26734dedc267af6d298a77658aa261ca4fea Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 15:37:12 2017 -0700 [Timeline] Tune bounds following commit 19563bdf53a036c7bf09c52924425a1902b243bb Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 15:19:19 2017 -0700 [Timeline] Remove unused method commit 293981ec55ad115d7bd90b92f5bd090df64bd7c2 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 15:18:59 2017 -0700 [Timeline] Only update timestamp on tick Leave bounds-following to the bounds event commit 9180e15971d2043f0999a16f0aa8794273bcfc74 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 14:43:01 2017 -0700 [Time] Document tick event commit c7b163dff0d94aaea86b76647501f21623b353e1 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 14:39:57 2017 -0700 [Timeline] Stop listening on destroy ...from the TOI controller. commit ca7def3cf98e1eaf6c3aeb16cf9fd79452c86bd0 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 14:32:40 2017 -0700 [Timeline] Remove surplus watches commit 367e7afa94ae1ed448e39f13be804c62e2bfcf00 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 14:30:14 2017 -0700 [Timeline] Very deltas are valid before panning commit 7ee94f316e90d046015266a2a9168e349ff73345 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 14:28:10 2017 -0700 [Timeline] Scroll with TOI only while in view commit 9d7bb431119b7bc6ddc86f0058718e4385478518 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 10:36:46 2017 -0700 [Timeline] Utilize zoomController.bounds commit f151b9e8adfd235c31e32bef5fddab835efa7c8f Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 10:35:57 2017 -0700 [Timeline] Add methods to set zoom bounds commit c3d0b9876ab79c18003838ed3315045c5fb2ddbb Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 10:32:08 2017 -0700 [Timelines] Observe bounds changes ...to synchronize zoom with Time Conductor, #1688 commit 58adafc46f231b0fd92827d10c377131166ff39c Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 09:37:07 2017 -0700 [Timers] JSDoc for TimerService commit a325a8d5085bf1a4c9aa3ab20771308d4789765a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 09:12:50 2017 -0700 [Timeline] Re-tweak follow scroll calculations ...for visibility. commit 41e4bf153607b081aaf92253fa2b21300e2f0ea7 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 09:03:45 2017 -0700 [Timeline] Tweak follow scroll calculations ...for visibility. commit 08a5b9f14ab629a310dc27a3771ca454f1187327 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 08:59:45 2017 -0700 [Timeline] Replace debug output with scroll updates commit 26585ecd61341b4ee89abd8ee866e705a02bbc9a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 08:59:07 2017 -0700 [Timeline] Move TOI to scrollable area commit 654eda027c3c67a3a0ff33136109ca27d14762ba Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 08:56:07 2017 -0700 [Timeline] Begin implementing TOI following commit 552f67a11ce439be58ab7ca7884c46241a25adee Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Sep 6 08:55:51 2017 -0700 [Timeline] At zoom-to-time method For use by time-of-interest controller, #1688 commit 37acbfd458740b2c3176875f83d37f0fdf57e727 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 12:46:33 2017 -0700 [Timeline] Remove other excess $apply calls ...although this should make us nervy about those callbacks being invoked in different ways. commit 0e72847c9ba59f957efa2d412cb77c024afa9e63 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 12:44:27 2017 -0700 [Timeline] Remove $apply from $watch callback ...to avoid an infinite digest loop. commit bade0fd9f60101d5b1b782cd28e608af493c9076 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 12:42:18 2017 -0700 [Timeline] Begin adding TOI line to template commit f94034a3b4136f6b174155397084f8cdb22ce544 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 12:11:25 2017 -0700 [Timers] Add missing semicolon, satisfy JSHint commit cb465b94011e7432cc7e4d9e815641f97dc61d7a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 12:08:45 2017 -0700 [Time] Verify that tick event is emitted commit 7c84a86a33ceb73ba6a06801374ea3f89793c450 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 11:59:06 2017 -0700 [Time] Emit tick events from Time API https://github.com/nasa/openmct/pull/1694 commit d319a783fcd882c03eb7d9a81fec33898016384e Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Wed Aug 30 11:56:28 2017 -0700 [Timeline] Sketch in TOI controller ...to position/follow time-of-interest, relative to the active timer. commit 2dbdb2627450039d69dbfd10eed2c100207e061a Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:57:47 2017 -0700 [Timers] Use timerService ...to coordinate between action and indicator commit f94a2358eaf0366bd4da2b44e69ccb62b153c5db Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:52:22 2017 -0700 [Timers] Use TimerService from Follow Timer action commit a720c2ec2cda4a300d26167f4717f0571bedcbfd Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:50:31 2017 -0700 [Timers] Expose TimerService through bundle commit e32bbc3e232d25f7c5dba98674781e4f263c4870 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:49:03 2017 -0700 [Timers] Sketch in timer service ...which will keep track of the active timer used to interpret SET for Timelines. commit a038c2b1d8fd34c2874fa8fc0421fa7ba53e11ab Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:41:05 2017 -0700 [Timers] Register indicator commit 0e93ae87a1cccc4f3a0636844625b64ccb77a7ae Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 12:39:21 2017 -0700 [Timers] Skeleton for time following indicator commit e806386891639740e9fe3d8641c2f60ab5a88eac Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 09:37:14 2017 -0700 [Timers] Register the Follow Timer action commit 008aa95932070459dcc6fa1d918a23dac8df7592 Author: Victor Woeltjen <victor.woeltjen@nasa.gov> Date: Tue Aug 29 09:35:08 2017 -0700 [Timers] Skeleton for Follow Timer action ...to synchronize the time conductor with a particular Timer. #1688
This commit is contained in:
parent
b6a8078634
commit
d65e1e604e
@ -23,10 +23,13 @@
|
||||
define([
|
||||
"moment-timezone",
|
||||
"./src/indicators/ClockIndicator",
|
||||
"./src/indicators/FollowIndicator",
|
||||
"./src/services/TickerService",
|
||||
"./src/services/TimerService",
|
||||
"./src/controllers/ClockController",
|
||||
"./src/controllers/TimerController",
|
||||
"./src/controllers/RefreshingController",
|
||||
"./src/actions/FollowTimerAction",
|
||||
"./src/actions/StartTimerAction",
|
||||
"./src/actions/RestartTimerAction",
|
||||
"./src/actions/StopTimerAction",
|
||||
@ -37,10 +40,13 @@ define([
|
||||
], function (
|
||||
MomentTimezone,
|
||||
ClockIndicator,
|
||||
FollowIndicator,
|
||||
TickerService,
|
||||
TimerService,
|
||||
ClockController,
|
||||
TimerController,
|
||||
RefreshingController,
|
||||
FollowTimerAction,
|
||||
StartTimerAction,
|
||||
RestartTimerAction,
|
||||
StopTimerAction,
|
||||
@ -80,6 +86,11 @@ define([
|
||||
"CLOCK_INDICATOR_FORMAT"
|
||||
],
|
||||
"priority": "preferred"
|
||||
},
|
||||
{
|
||||
"implementation": FollowIndicator,
|
||||
"depends": ["timerService"],
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
@ -90,6 +101,11 @@ define([
|
||||
"$timeout",
|
||||
"now"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "timerService",
|
||||
"implementation": TimerService,
|
||||
"depends": ["openmct"]
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
@ -134,6 +150,15 @@ define([
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"key": "timer.follow",
|
||||
"implementation": FollowTimerAction,
|
||||
"depends": ["timerService"],
|
||||
"category": "contextual",
|
||||
"name": "Follow Timer",
|
||||
"cssClass": "icon-clock",
|
||||
"priority": "optional"
|
||||
},
|
||||
{
|
||||
"key": "timer.start",
|
||||
"implementation": StartTimerAction,
|
||||
|
54
platform/features/clock/src/actions/FollowTimerAction.js
Normal file
54
platform/features/clock/src/actions/FollowTimerAction.js
Normal file
@ -0,0 +1,54 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define(
|
||||
[],
|
||||
function () {
|
||||
|
||||
/**
|
||||
* Designates a specific timer for following. Timelines, for example,
|
||||
* use the actively followed timer to display a time-of-interest line
|
||||
* and interpret time conductor bounds in the Timeline's relative
|
||||
* time frame.
|
||||
*
|
||||
* @implements {Action}
|
||||
* @memberof platform/features/clock
|
||||
* @constructor
|
||||
* @param {ActionContext} context the context for this action
|
||||
*/
|
||||
function FollowTimerAction(timerService, context) {
|
||||
var domainObject = context.domainObject;
|
||||
this.perform =
|
||||
timerService.setTimer.bind(timerService, domainObject);
|
||||
}
|
||||
|
||||
FollowTimerAction.appliesTo = function (context) {
|
||||
var model =
|
||||
(context.domainObject && context.domainObject.getModel()) ||
|
||||
{};
|
||||
|
||||
return model.type === 'timer';
|
||||
};
|
||||
|
||||
return FollowTimerAction;
|
||||
}
|
||||
);
|
57
platform/features/clock/src/indicators/FollowIndicator.js
Normal file
57
platform/features/clock/src/indicators/FollowIndicator.js
Normal file
@ -0,0 +1,57 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define(
|
||||
['moment'],
|
||||
function (moment) {
|
||||
var NO_TIMER = "No timer being followed.";
|
||||
|
||||
/**
|
||||
* Indicator that displays the active timer, as well as its
|
||||
* current state.
|
||||
* @implements {Indicator}
|
||||
* @memberof platform/features/clock
|
||||
*/
|
||||
function FollowIndicator(timerService) {
|
||||
this.timerService = timerService;
|
||||
}
|
||||
|
||||
FollowIndicator.prototype.getGlyphClass = function () {
|
||||
return "";
|
||||
};
|
||||
|
||||
FollowIndicator.prototype.getCssClass = function () {
|
||||
return "icon-clock";
|
||||
};
|
||||
|
||||
FollowIndicator.prototype.getText = function () {
|
||||
var timer = this.timerService.getTimer();
|
||||
return timer ? timer.getModel().name : NO_TIMER;
|
||||
};
|
||||
|
||||
FollowIndicator.prototype.getDescription = function () {
|
||||
return "";
|
||||
};
|
||||
|
||||
return FollowIndicator;
|
||||
}
|
||||
);
|
102
platform/features/clock/src/services/TimerService.js
Normal file
102
platform/features/clock/src/services/TimerService.js
Normal file
@ -0,0 +1,102 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define(['EventEmitter'], function (EventEmitter) {
|
||||
|
||||
/**
|
||||
* Tracks the currently-followed Timer object. Used by
|
||||
* timelines et al to synchronize to a particular timer.
|
||||
*
|
||||
* The TimerService emits `change` events when the active timer
|
||||
* is changed.
|
||||
*/
|
||||
function TimerService(openmct) {
|
||||
EventEmitter.apply(this);
|
||||
this.time = openmct.time;
|
||||
}
|
||||
|
||||
TimerService.prototype = Object.create(EventEmitter.prototype);
|
||||
|
||||
/**
|
||||
* Set (or clear, if `timer` is undefined) the currently active timer.
|
||||
* @param {DomainObject} timer the new active timer
|
||||
* @emits change
|
||||
*/
|
||||
TimerService.prototype.setTimer = function (timer) {
|
||||
this.timer = timer;
|
||||
this.emit('change');
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the currently active timer.
|
||||
* @return {DomainObject} the active timer
|
||||
* @emits change
|
||||
*/
|
||||
TimerService.prototype.getTimer = function () {
|
||||
return this.timer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Check if there is a currently active timer.
|
||||
* @return {boolean} true if there is a timer
|
||||
*/
|
||||
TimerService.prototype.hasTimer = function () {
|
||||
return !!this.timer;
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert the provided timestamp to milliseconds relative to
|
||||
* the active timer.
|
||||
* @return {number} milliseconds since timer start
|
||||
*/
|
||||
TimerService.prototype.convert = function (timestamp) {
|
||||
var clock = this.time.clock();
|
||||
var canConvert = this.hasTimer() &&
|
||||
!!clock &&
|
||||
this.timer.getModel().timerState !== 'stopped';
|
||||
|
||||
if (!canConvert) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
var now = clock.currentValue();
|
||||
var model = this.timer.getModel();
|
||||
var delta = model.timerState === 'paused' ? now - model.pausedTime : 0;
|
||||
var epoch = model.timestamp;
|
||||
|
||||
return timestamp - epoch - delta;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the value of the active clock, adjusted to be relative to the active
|
||||
* timer. If there is no clock or no active timer, this will return
|
||||
* `undefined`.
|
||||
* @return {number} milliseconds since the start of the active timer
|
||||
*/
|
||||
TimerService.prototype.now = function () {
|
||||
var clock = this.time.clock();
|
||||
return clock && this.convert(clock.currentValue());
|
||||
};
|
||||
|
||||
return TimerService;
|
||||
});
|
@ -0,0 +1,80 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
"../../src/actions/FollowTimerAction"
|
||||
], function (FollowTimerAction) {
|
||||
var TIMER_SERVICE_METHODS =
|
||||
['setTimer', 'getTimer', 'clearTimer', 'on', 'off'];
|
||||
|
||||
describe("The Follow Timer action", function () {
|
||||
var testContext;
|
||||
var testModel;
|
||||
|
||||
beforeEach(function () {
|
||||
testModel = {};
|
||||
testContext = { domainObject: { getModel: function () {
|
||||
return testModel;
|
||||
} } };
|
||||
});
|
||||
|
||||
it("is applicable to timers", function () {
|
||||
testModel.type = "timer";
|
||||
expect(FollowTimerAction.appliesTo(testContext)).toBe(true);
|
||||
});
|
||||
|
||||
it("is inapplicable to non-timers", function () {
|
||||
testModel.type = "folder";
|
||||
expect(FollowTimerAction.appliesTo(testContext)).toBe(false);
|
||||
});
|
||||
|
||||
describe("when instantiated", function () {
|
||||
var mockTimerService;
|
||||
var action;
|
||||
|
||||
beforeEach(function () {
|
||||
mockTimerService = jasmine.createSpyObj(
|
||||
'timerService',
|
||||
TIMER_SERVICE_METHODS
|
||||
);
|
||||
action = new FollowTimerAction(mockTimerService, testContext);
|
||||
});
|
||||
|
||||
it("does not interact with the timer service", function () {
|
||||
TIMER_SERVICE_METHODS.forEach(function (method) {
|
||||
expect(mockTimerService[method]).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("and performed", function () {
|
||||
beforeEach(function () {
|
||||
action.perform();
|
||||
});
|
||||
|
||||
it("sets the active timer", function () {
|
||||
expect(mockTimerService.setTimer)
|
||||
.toHaveBeenCalledWith(testContext.domainObject);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@ -0,0 +1,60 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define(["../../src/indicators/FollowIndicator"], function (FollowIndicator) {
|
||||
var TIMER_SERVICE_METHODS =
|
||||
['setTimer', 'getTimer', 'clearTimer', 'on', 'off'];
|
||||
|
||||
describe("The timer-following indicator", function () {
|
||||
var mockTimerService;
|
||||
var indicator;
|
||||
|
||||
beforeEach(function () {
|
||||
mockTimerService =
|
||||
jasmine.createSpyObj('timerService', TIMER_SERVICE_METHODS);
|
||||
indicator = new FollowIndicator(mockTimerService);
|
||||
});
|
||||
|
||||
it("implements the Indicator interface", function () {
|
||||
expect(indicator.getGlyphClass()).toEqual(jasmine.any(String));
|
||||
expect(indicator.getCssClass()).toEqual(jasmine.any(String));
|
||||
expect(indicator.getText()).toEqual(jasmine.any(String));
|
||||
expect(indicator.getDescription()).toEqual(jasmine.any(String));
|
||||
});
|
||||
|
||||
describe("when a timer is set", function () {
|
||||
var testModel;
|
||||
var mockDomainObject;
|
||||
|
||||
beforeEach(function () {
|
||||
testModel = { name: "some timer!" };
|
||||
mockDomainObject = jasmine.createSpyObj('timer', ['getModel']);
|
||||
mockDomainObject.getModel.andReturn(testModel);
|
||||
mockTimerService.getTimer.andReturn(mockDomainObject);
|
||||
});
|
||||
|
||||
it("display's the timer's name", function () {
|
||||
expect(indicator.getText()).toEqual(testModel.name);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
64
platform/features/clock/test/services/TimerServiceSpec.js
Normal file
64
platform/features/clock/test/services/TimerServiceSpec.js
Normal file
@ -0,0 +1,64 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
'../../src/services/TimerService'
|
||||
], function (TimerService) {
|
||||
describe("TimerService", function () {
|
||||
var callback;
|
||||
var mockClock;
|
||||
var mockmct;
|
||||
var timerService;
|
||||
|
||||
beforeEach(function () {
|
||||
callback = jasmine.createSpy('callback');
|
||||
mockmct = { time: { clock: jasmine.createSpy('clock') } };
|
||||
timerService = new TimerService(mockmct);
|
||||
timerService.on('change', callback);
|
||||
});
|
||||
|
||||
it("initially emits no change events", function () {
|
||||
expect(callback).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("reports no current timer", function () {
|
||||
expect(timerService.getTimer()).toBeUndefined();
|
||||
});
|
||||
|
||||
describe("setTimer", function () {
|
||||
var testTimer;
|
||||
|
||||
beforeEach(function () {
|
||||
testTimer = { name: "I am some timer; you are nobody." };
|
||||
timerService.setTimer(testTimer);
|
||||
});
|
||||
|
||||
it("emits a change event", function () {
|
||||
expect(callback).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("reports the current timer", function () {
|
||||
expect(timerService.getTimer()).toBe(testTimer);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@ -29,6 +29,7 @@ define([
|
||||
"./src/controllers/TimelineTickController",
|
||||
"./src/controllers/TimelineTableController",
|
||||
"./src/controllers/TimelineGanttController",
|
||||
"./src/controllers/TimelineTOIController",
|
||||
"./src/controllers/ActivityModeValuesController",
|
||||
"./src/capabilities/ActivityTimespanCapability",
|
||||
"./src/capabilities/TimelineTimespanCapability",
|
||||
@ -59,6 +60,7 @@ define([
|
||||
TimelineTickController,
|
||||
TimelineTableController,
|
||||
TimelineGanttController,
|
||||
TimelineTOIController,
|
||||
ActivityModeValuesController,
|
||||
ActivityTimespanCapability,
|
||||
TimelineTimespanCapability,
|
||||
@ -502,6 +504,15 @@ define([
|
||||
"TIMELINE_MAXIMUM_OFFSCREEN"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "TimelineTOIController",
|
||||
"implementation": TimelineTOIController,
|
||||
"depends": [
|
||||
"openmct",
|
||||
"timerService",
|
||||
"$scope"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "ActivityModeValuesController",
|
||||
"implementation": ActivityModeValuesController,
|
||||
|
@ -101,22 +101,29 @@
|
||||
class="abs split-pane-component l-timeline-pane l-pane-r t-pane-v">
|
||||
|
||||
<!-- TOP PANE GANTT BARS -->
|
||||
<div class="split-pane-component l-timeline-pane t-pane-h l-pane-top t-timeline-gantt l-timeline-gantt s-timeline-gantt">
|
||||
<div class="split-pane-component l-timeline-pane t-pane-h l-pane-top t-timeline-gantt l-timeline-gantt s-timeline-gantt"
|
||||
ng-controller="TimelineTOIController as toiController">
|
||||
<div class="l-hover-btns-holder s-hover-btns-holder">
|
||||
<a class="s-button icon-clock"
|
||||
ng-click="scroll.follow = true"
|
||||
ng-show="!toiController.isFollowing() && toiController.isActive()"
|
||||
title="Follow time bounds">
|
||||
</a>
|
||||
|
||||
<a class="s-button icon-arrows-out"
|
||||
ng-click="zoomController.fit()"
|
||||
ng-click="scroll.follow = false; zoomController.fit()"
|
||||
ng-show="true"
|
||||
title="Zoom to fit">
|
||||
</a>
|
||||
|
||||
<a class="s-button icon-magnify-in"
|
||||
ng-click="zoomController.zoom(-1)"
|
||||
ng-click="scroll.follow = false; zoomController.zoom(-1)"
|
||||
ng-show="true"
|
||||
title="Zoom in">
|
||||
</a>
|
||||
|
||||
<a class="s-button icon-magnify-out"
|
||||
ng-click="zoomController.zoom(1)"
|
||||
ng-click="scroll.follow = false; zoomController.zoom(1)"
|
||||
ng-show="true"
|
||||
title="Zoom out">
|
||||
</a>
|
||||
@ -132,6 +139,10 @@
|
||||
toMillis: zoomController.toMillis
|
||||
}">
|
||||
</mct-include>
|
||||
<div ng-if="toiController.isActive()"
|
||||
ng-style="{ left: toiController.x() + 'px', width: '4px', top: '0px', height: '30px', background: 'blue', position: 'absolute' }">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="t-swimlanes-holder l-swimlanes-holder"
|
||||
|
@ -0,0 +1,111 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define([], function () {
|
||||
|
||||
/**
|
||||
* Tracks time-of-interest in timelines, updating both scroll state
|
||||
* (when appropriate) and positioning of the displayed line.
|
||||
*/
|
||||
function TimelineTOIController(openmct, timerService, $scope) {
|
||||
this.openmct = openmct;
|
||||
this.timerService = timerService;
|
||||
this.$scope = $scope;
|
||||
|
||||
this.change = this.change.bind(this);
|
||||
this.bounds = this.bounds.bind(this);
|
||||
this.destroy = this.destroy.bind(this);
|
||||
|
||||
this.timerService.on('change', this.change);
|
||||
this.openmct.time.on('bounds', this.bounds);
|
||||
|
||||
this.$scope.$on('$destroy', this.destroy);
|
||||
|
||||
this.$scope.scroll.follow = this.timerService.hasTimer();
|
||||
if (this.$scope.zoomController) {
|
||||
this.bounds(this.openmct.time.bounds());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handle a `change` event from the timer service; track the
|
||||
* new timer.
|
||||
*/
|
||||
TimelineTOIController.prototype.change = function () {
|
||||
this.$scope.scroll.follow =
|
||||
this.$scope.scroll.follow || this.timerService.hasTimer();
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle a `bounds` event from the time API; scroll the timeline
|
||||
* to match the current bounds, if currently in follow mode.
|
||||
*/
|
||||
TimelineTOIController.prototype.bounds = function (bounds) {
|
||||
if (this.isFollowing()) {
|
||||
var start = this.timerService.convert(bounds.start);
|
||||
var end = this.timerService.convert(bounds.end);
|
||||
this.duration = bounds.end - bounds.start;
|
||||
this.$scope.zoomController.bounds(start, end);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Handle a `$destroy` event from scope; detach all observers.
|
||||
*/
|
||||
TimelineTOIController.prototype.destroy = function () {
|
||||
this.timerService.off('change', this.change);
|
||||
this.openmct.time.off('bounds', this.bounds);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the x position of the time-of-interest line,
|
||||
* in pixels from the left edge of the timeline area.
|
||||
*/
|
||||
TimelineTOIController.prototype.x = function () {
|
||||
var now = this.timerService.now();
|
||||
|
||||
if (now === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return this.$scope.zoomController.toPixels(this.timerService.now());
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if there is an active time-of-interest to be shown.
|
||||
* @return {boolean} true when active
|
||||
*/
|
||||
TimelineTOIController.prototype.isActive = function () {
|
||||
return this.x() !== undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the timeline should be following time conductor bounds.
|
||||
* @return {boolean} true when following
|
||||
*/
|
||||
TimelineTOIController.prototype.isFollowing = function () {
|
||||
return !!this.$scope.scroll.follow && this.timerService.now() !== undefined;
|
||||
};
|
||||
|
||||
return TimelineTOIController;
|
||||
});
|
@ -60,14 +60,21 @@ define(
|
||||
});
|
||||
}
|
||||
|
||||
function initializeZoomFromTimespan(timespan) {
|
||||
var timelineDuration = timespan.getDuration();
|
||||
function initializeZoomFromStartEnd(start, end) {
|
||||
var duration = end - start;
|
||||
zoomIndex = 0;
|
||||
while (toMillis($scope.scroll.width) < timelineDuration &&
|
||||
while (toMillis($scope.scroll.width) < duration &&
|
||||
zoomIndex < zoomLevels.length - 1) {
|
||||
zoomIndex += 1;
|
||||
}
|
||||
setScroll(toPixels(timespan.getStart()));
|
||||
setScroll(toPixels(start));
|
||||
}
|
||||
|
||||
function initializeZoomFromTimespan(timespan) {
|
||||
return initializeZoomFromStartEnd(
|
||||
timespan.getStart(),
|
||||
timespan.getEnd()
|
||||
);
|
||||
}
|
||||
|
||||
function initializeZoom() {
|
||||
@ -101,6 +108,13 @@ define(
|
||||
}
|
||||
return zoomLevels[zoomIndex];
|
||||
},
|
||||
/**
|
||||
* Adjust the current zoom bounds to fit both the
|
||||
* start and the end time provided.
|
||||
* @param {number} start the starting timestamp
|
||||
* @param {number} end the ending timestamp
|
||||
*/
|
||||
bounds: initializeZoomFromStartEnd,
|
||||
/**
|
||||
* Set the zoom level to fit the bounds of the timeline
|
||||
* being viewed.
|
||||
|
@ -0,0 +1,138 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2009-2016, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT is licensed 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.
|
||||
*
|
||||
* Open MCT includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
"../../src/controllers/TimelineTOIController",
|
||||
"EventEmitter"
|
||||
], function (TimelineTOIController, EventEmitter) {
|
||||
describe("The timeline TOI controller", function () {
|
||||
var mockmct;
|
||||
var mockTimerService;
|
||||
var mockScope;
|
||||
var controller;
|
||||
|
||||
beforeEach(function () {
|
||||
mockmct = { time: new EventEmitter() };
|
||||
mockmct.time.bounds = jasmine.createSpy('bounds');
|
||||
mockTimerService = new EventEmitter();
|
||||
mockTimerService.getTimer = jasmine.createSpy('getTimer');
|
||||
mockTimerService.hasTimer = jasmine.createSpy('hasTimer');
|
||||
mockTimerService.now = jasmine.createSpy('now');
|
||||
mockTimerService.convert = jasmine.createSpy('convert');
|
||||
mockScope = new EventEmitter();
|
||||
mockScope.$on = mockScope.on.bind(mockScope);
|
||||
mockScope.zoomController = jasmine.createSpyObj('zoom', [
|
||||
'bounds',
|
||||
'toPixels'
|
||||
]);
|
||||
mockScope.scroll = { x: 10, width: 1000 };
|
||||
|
||||
spyOn(mockmct.time, "on").andCallThrough();
|
||||
spyOn(mockmct.time, "off").andCallThrough();
|
||||
spyOn(mockTimerService, "on").andCallThrough();
|
||||
spyOn(mockTimerService, "off").andCallThrough();
|
||||
|
||||
controller = new TimelineTOIController(
|
||||
mockmct,
|
||||
mockTimerService,
|
||||
mockScope
|
||||
);
|
||||
});
|
||||
|
||||
it("reports an undefined x position initially", function () {
|
||||
expect(controller.x()).toBeUndefined();
|
||||
});
|
||||
|
||||
it("listens for bounds changes", function () {
|
||||
expect(mockmct.time.on)
|
||||
.toHaveBeenCalledWith('bounds', controller.bounds);
|
||||
});
|
||||
|
||||
it("listens for timer changes", function () {
|
||||
expect(mockTimerService.on)
|
||||
.toHaveBeenCalledWith('change', controller.change);
|
||||
});
|
||||
|
||||
it("is not active", function () {
|
||||
expect(controller.isActive()).toBe(false);
|
||||
});
|
||||
|
||||
describe("on $destroy from scope", function () {
|
||||
beforeEach(function () {
|
||||
mockScope.emit("$destroy");
|
||||
});
|
||||
|
||||
it("unregisters listeners", function () {
|
||||
expect(mockmct.time.off)
|
||||
.toHaveBeenCalledWith('bounds', controller.bounds);
|
||||
expect(mockTimerService.off)
|
||||
.toHaveBeenCalledWith('change', controller.change);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when a timer and timestamp present", function () {
|
||||
var mockTimer;
|
||||
var testNow;
|
||||
|
||||
beforeEach(function () {
|
||||
testNow = 333221;
|
||||
mockScope.zoomController.toPixels
|
||||
.andCallFake(function (millis) {
|
||||
return millis * 2;
|
||||
});
|
||||
mockTimerService.emit('change', mockTimer);
|
||||
mockTimerService.now.andReturn(testNow);
|
||||
});
|
||||
|
||||
it("reports an x value from the zoomController", function () {
|
||||
var now = mockTimerService.now();
|
||||
var expected = mockScope.zoomController.toPixels(now);
|
||||
expect(controller.x()).toEqual(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when follow mode is disabled", function () {
|
||||
beforeEach(function () {
|
||||
mockScope.scroll.follow = false;
|
||||
});
|
||||
|
||||
it("ignores bounds events", function () {
|
||||
mockmct.time.emit('bounds', { start: 0, end: 1000 });
|
||||
expect(mockScope.zoomController.bounds)
|
||||
.not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("when follow mode is enabled", function () {
|
||||
beforeEach(function () {
|
||||
mockScope.scroll.follow = true;
|
||||
mockTimerService.now.andReturn(500);
|
||||
});
|
||||
|
||||
it("zooms on bounds events", function () {
|
||||
mockmct.time.emit('bounds', { start: 0, end: 1000 });
|
||||
expect(mockScope.zoomController.bounds)
|
||||
.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user