When loading the application and no time system is set,
the url handler should not cause multiple errors to be
logged.
This adds a test for the case but does not specify the
expected behavior in detail, other than "it should not
crash."
Fixes bugs as reported here.
When browse controller is hijacking a browser navigation event,
it calls preventDefault on the route change. This has the effect
of preventing all changes in the location (including search changes).
This change checks if other changes were made in the route change and
re-applies them after the navigation has completed.
Fixes a bug where navigating via a link that contained additional
search paramterers would have the effect of navigating but not
keeping the parameters in tact.
Discovered in the course of fixing #1636
Update time conductor so that it triggers changes when the user
selects them instead of when the scope is updated. Prevents spurious
changes from being triggered by the conductor when it updates
in response to a time API change.
Fixes#1636.
Implemented auto-scrolling historical imagery view in ImageryController. Imagery domain objects now request historical data on each manual bounds change. Added new specs for ensuring that historical data is requested on bounds change and duplicate bounds / datum are ignored.
For elements created before this change where useGrid is not defined,
default it to true to ensure consistent display size
Inline constant definitions in unit tests if they are only used once
Update the TimeSettingsURLHandler to check for changes to the search
parameters and only trigger a bounds change when there is a change.
Added integration tests between Time API and settings url handler.
Prevents extraneous bounds events.
Fixes https://github.com/nasa/openmct/issues/1636
Change the input for grid units/pixels to a simple checkbox toggle from a
dropdown menu.
Add a new specialized AccessorMutator class to support this operation.
Fix code style issues per Victor's review
Add toggle to work in pixel space or grid space, per the issue description.
Each element stores a boolean property that determines whether or not it
snaps to grid space or pixel space. Coordinates are converted between spaces
on toggle, preserving the size of the element in pixels.
To complete: change UI element for toggle to a checkbox.
Added individual property inputs to the toolbar for height, width, x,
y, and line endpoint coordinates in fixed/bundle.js.
Added "edit<Property>" AccessorMutators for height and width to each
of the element proxies, so these properties can be exposed only for
elements where it makes sense (e.g. boxes, but not lines, since lines
are better controlled by endpoint coordinates).
Added a method "checkNumeric" to ElementProxy.js , to be used
to restrict inputs to integral values for position and size
textfield inputs.
Current issues: endpoint coordinate inputs have undexpected behvaior,
handles disappear after using the input fields to modify element
properties.
Added individual property inputs to the toolbar for height, width, x,
y, and line endpoint coordinates in fixed/bundle.js.
Added "edit<Property>" AccessorMutators for height and width to each
of the element proxies, so these properties can be exposed only for
elements where it makes sense (e.g. boxes, but not lines, since lines
are better controlled by endpoint coordinates).
Added a method "checkNumeric" to ElementProxy.js , to be used
to restrict inputs to integral values for position and size
textfield inputs.
Current issues: endpoint coordinate inputs have undexpected behvaior,
handles disappear after using the input fields to modify element
properties.
* [Time Conductor] Skeleton class for URL handling
#1550
* [Time Conductor] Scaffold in param handling
* [Time Conductor] Finish sketching in URL handler
* [Time Conductor] Usage correct constants for bounds
* [Time Conductor] Use start/end for bounds/deltas
* [Time] Move URL handler
Per discussion, https://github.com/nasa/openmct/issues/1550#issuecomment-308849449
* [Time] Rename URL handler
* [Time] Rename URL handler script
* [Time] Use Time API from URL handler
* [Time] Utilize Time API
* [Time] Listen for changes, synchronize URL
* [Time] Move URL handler into adapter
...as it uses Angular constructs.
* [Time] Wire URL handler into adapter bundle
* [Time] Pass correct constructor arguments to URL handler
* [Time] Begin debugging URL handling
* [Time] Clarify and correct logic for bounds/deltas in URL
* [Time] Define timeSystem
* [Time] Pass start/end into time API as numbers
...instead of strings.
* [Time] Avoid creating redundant objects
* [Time] Restructure fixed vs clock logic
* [Time] Stop clock correctly for fixed mode
* [Time] Fix hasBounds/hasDeltas logic
...given that both inputs will be strings when read from search params,
_.isFinite was doomed to return false.
* [Time] Check for complete information
...before updating Time API to reflect search state. Additionally,
flatten logic to ease readability.
* [Time] Begin testing TimeSettingsURLHandler
* [Time] Test fixed mode query string updates
* [Time] Test realtime mode query string updates
* [Time] Test update of time API from query params
* [Time] Add missing semicolons
Satisfies JSHint; fixes#1550
* refactored code for listView
* minimum viable folder list functionality
* moved listview directory inside of platform/features
* [Folder ListView] First Code Review Fixes
Changes made:
Updated listview icon as the hamburger menu.
Injecting listview template as textfile instead of using the template's url.
Added callback to $scope to listen for $destroy to release resources for the mutation listener and the gesture recognizer.
Refactored ListViewController formatting function to use map instead of foreach.
Added listview plugin to the default registry.
Updated table styling.
* working progress commit. ListViewControllerSpec is implemented and all tests are passing. MCTGestureSpec is not fully implemented. Testing the gestureService release is in progress.
* All tests in MCTGestureSpec and ListViewControllerSpec are passing.
* ListViewControllerSpec and MCTGesture Tests all passing.
* refactored variable names in ListviewController to make more sense.
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
This will have conflicts with Luis's work,
be careful!
* [Folder ListView] Second Code Review Fixes
Changes made:
updated listview to utilize open-mct sorting style.
added license comments to all files.
modified mctgesture interface to use $scope.eval().
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
New list-view glyph added
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
Changed name of "Items" view to "Grid";
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
Updated icomoon project file with new list-view
glyph e1042;
* [Folder ListView] Second Code Review Fixes
Changes made:
updated listview to utilize open-mct sorting style.
added license comments to all files.
modified mctgesture interface to use $scope.eval().
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
Refined cursor CSS;
* [Frontend] Styling of Luis's list view WIP
Fixes#1615
Added logic to refine how sorting occurs:
now, clicking a table header that wasn't
the orderByField always sorts by its default;
This change is based on the following code review:
- Display the entire list of timezones, regardless of what's currently entered.
- As soon as the user typed (or deleted chars in the input) then that filtration would take over the list display
Fixes#1437
Markup and CSS for `view large` button in frame context;
Sass formatting cleanups; removed unused styles from
_layout.scss; mods to MCTTriggerModal.js to remove
button label functionality;
Added new "icon-expand" glyph and class;
Fixes#1437Fixes#1423
New overlay > l-dialog and l-large-view classes;
Fix context-menu z-index to allow context menu
to appear in the overlay;
.object-top-bar refactored and replaced with
.object-browse-bar;
frame > hover now only displays local controls for
proper level, handles nested layout situation;
Fixed font-weight display issues;
MCTTriggerModal.js modified to do the following:
- Remove .frame classes when displaying object in overlay
- Allow click on this overlay .blocker to dismiss overlay
Fixed min-width issue incorrectly targeting .object-browse-bar in frame context;
Added expand anim to large view holder;
Changed close button icon
Significant mobile styling and cleanups;
Markup mods for overlay.html;
Handles dialog on top of large view;
Form validation now displays better in mobile;
Updated /src/api/ui/dialog.html to be in-line
with /platform/commonUI/dialog/res/templates/overlay.html;
Moved border-radius from containerBase to btnBase mixins;
Animate with scale for GPU acceleration
Change desktop animation to use scale, so that it is hardware
accelerated and buttery smooth. Also fixes text anti-aliasing
to improve readability.
Moved mobile/overlay/_overlay.scss styles into
overlay/_overlay.scss; removed mobile/overlay/_overlay.scss;
Cleanups in _overlay.scss; restored max-width/max-height
to dialogs (removed in #1376 for #1298) and added
min-width;
[Frontend] Mobile fixes in overlay and related
Fixes#1437
Added mobile-specific styling to _messages.scss;
Fixed button layout and margins in _overlay.scss;
Fixed message.html to not default to major style
buttons;
[Frontend] Timing tweaks
Fixes#1437
Moved large view expand transition duration
into theme _constants files; shortened anim
duration
Fix Style errors
[mctTriggerModal] correct scope for toggle
Correct scope for toggleFunction such that #1503 no longer occurs.
Fixes#1503
[Style] Add copyright header
Use private parts of new composition API for generic search indexer
so that all objects are properly accessible in search results.
Also prevent ROOT object from getting indexed but still traverse
composition. That way, "The root object" no longer shows in search
results.
Update tests to cover changes.
Fixes#1579
Allow timeSystem to be changed without specifying bounds when
a clock is present and can provide bounds. This simplifies
bootstrap code.
https://github.com/nasa/openmct/issues/1581
When a menu option that specified an invalid time system with a
clock, the time conductor controller would log an error claiming
that the clock was unknown when in fact the time system is the
culprit.
Remove the error message as the plugin handles this validation
already. Also removed some unused code.
https://github.com/nasa/openmct/issues/1580
Update conductor validation logic to trigger easier-to-understand
error messages for bad configurations.
Update default-setting-behavior to properly set clock and offsets
when the default option is clock-based menu option.
Only set defaults when timeSystem has not already been configured.
fixes https://github.com/nasa/openmct/issues/1580
Update time API to tick immediately after setting a clock using
the currentValue of the clock. This ensures that bounds will
be set when the clock is set, instead of waiting for the next
tick to occur.
fixes https://github.com/nasa/openmct/issues/1582
Remove examples of format implementations. The docs stated
incorrectly that UTCTimeFormat used the additional parameters
for the format method when it did not actually use those
parameters.
With our current landscape of telemetry providers, parse can
frequently be called on an already parsed value, so added
documentation to highlight the importance of an idempotent
parse method.
Cleanup related to change of file locations in:
https://github.com/nasa/openmct/issues/1574
Always include basic formats; removing them from the utc format
bundle. This way, they can be utilized by third parties without
them having to commit to the utc time system.
Fixes https://github.com/nasa/openmct/issues/1574
Ensure telemetry request options always have a certain number
of fields-- start, end, and domain. This allows telemetry providers
to implement necessary filtering for these types of requests.
Update warning message with correct wording, and change
check for label property such that a blank label will also
trigger the deprecation warning.
Addresses feedback from https://github.com/nasa/openmct/pull/1571
Update docs to reference domain and range. Also added additional
documentation for the Telemetry API based on a previous draft of
the docs.
https://github.com/nasa/openmct/issues/1546
Track the updated composition of an object before notifying any
listeners. Otherwise, any composition listener that mutates the
object would cause an infinite loop.
Detected in implementation of the new plot.
When no path is specified, don't throw error. Navigate
to default, as expected.
When navigating to root, navigate to the last child
of root instead. This handles cases where DEFAULT_PATH
is not found (e.g. deployments without "mine").
Remove a check for an invalid return value, update the spec to
return the proper value. Also updated the subscribe method
to fetch defaults the same as the request method.
https://github.com/nasa/openmct/pull/1544
Update the formatter mock to implement the expected methods, such
that formatting occurs properly.
Remove a test that was validating the execution of a method
as this was smelly-- it's not the method that is important, it's
the result (that couldn't be obtained without the method).
Edited for consistent period and parentheses usage throughout:
- Removed periods at the end of each element in a list of nouns.
- Placed periods outside parenthetical statements that aren't complete sentences themselves.
- Placed periods at the end of sentences without punctuation.
Around line 143, gave "constants" its own bullet point. Although it is a form of variable or field, it also forms a separate style element with a different guideline. It's also easier to find when skimming when separated - for new contributors who need to learn the style, and veteran contributors who are just double checking.
Added TelemetryCollection to handle bounds and buffering. Avoids loss of telemetry due to timing mismatch between telemetry providers and tick sources
Fixed issues with removal and addition of objects
Set up TC so that it is always enabled and defaults to realtime mode.
This allows us to have warp-like functionality without showing
the TC interface, and simplifies a lot of tutorials. We can still
reconfigure the TC by re-installing the plugin with different settings
Fix search item so that navigation occurs after clicking on
a search result, while still properly preventing navigation
when required.
Related to #1366
The composition policy now takes a child instance instead
of the child type, as in all cases we have access to the child
object.
This allows new-style objects to be contained by old-style objects.
Updated all composition policies to use standardized argument names
instead of `context` and `candidate`; this makes it easier to
understand.
Updated AddActionProvider to hardcode the object types supported.
Based on feedback from tutorial sprint, update provider API,
formatter API, and legacy adapter code.
Providers can now implement separate checks for providing realtime
and historical data, and providers are not registered with a specific
strategy. Strategy is instead intended to be an attribute in the
request options.
Removed unused code in the telemetry API and simplify limitEvaluators.
Stop application from requesting bundles.json at first load. This was
confusing to some external developers who would see an error in the
log and not know the cause.
Historical and real-time data flowing
Added formatting, and limits. Support telemetry objects themselves and not just composition of telemetry objects
Apply default time range if none supplied (15 minutes)
Fixes#1233
Additional content; adding size classes to
input[type="text"] to allow direct application to
the input; added placeholder styling and related
thematic constants.
Make a separate chart directive for drawing resource graphs in timelines. This
is in preparation for a new plot bundle which will make a large number of
changes to the drawing API to support newly requested features. By separating
code, there will be no impact to the timeline when the new plot features are
added.
Set key on represent so that commit function can properly persist
configuration per object type. Add tests to EditRepresenter
Fixes https://github.com/nasa/openmct/issues/1367
BrowseController uses new MCTTreeView parameters to prevent navigation
events before triggering digests. It also no longer sets navigation
more frequently than it should.
https://github.com/nasa/openmct/issues/1360
EditObjectController now exits edit mode when it is destroyed.
It also injects a check function in the navigation service to
replace the old functionality implemented in EditNavigationPolicy.
https://github.com/nasa/openmct/issues/1360
Remove mct-before-unload, and move the functionality to the navigation
service. The navigation service considers "unload" to be a navigation
event and prompts in much the same way as it would before any other
navigation event.
https://github.com/nasa/openmct/issues/1360
Remove policy checking in navigation action and depend on navigation
service to provide those checks.
* Register checkFunctions with navigationService.checkBeforeNavigation
which returns a function for unregistering them.
* navigationService.setNavigation will run checks before allowing
navigation, unless a `force` argument is supplied.
https://github.com/nasa/openmct/issues/1360
Add methods to tree view via scope for more fine grained control.
Can supply a "allowSelection" function which should return true
if a given selection is allowed. This is executed before a node
is selected and allows you to prevent selection. Before this, if
you wanted to prevent the selection from changing, you had to wait
for it to change and then change it back to the original value.
Can also supply an "onSelection" function which is called when a
value is successfully selected. This allows you to handle the
selection event without waiting for digest. You can still $watch
"selectedObject" if you prefer.
Additionally, this changes the tree node to trigger a digest only
when the value is set via a MouseClick, instead of every time.
Tidies up directive scope bindings to clarify usage.
https://github.com/nasa/openmct/issues/1360
Simplify edit registration and remove extra abstractions. No longer
attach a status listener for every representation-- just use a single watch
for the edit controller. Simplifies logic involved in switching controllers.
https://github.com/nasa/openmct/issues/1360
* [Edit] Added notifications to SaveAsAction
* [Edit] Added notifications to SaveAction
* [Edit] Update SaveAsActionSpec
* [Edit] No error notif when user cancels SaveAs
Add TelemetryMetadataManager which assists developers in interrogating
telemetry metadata to find values that are useful for them.
Add TelemetryValueFormatter to simplify the parsing (retrieval of numerical
values) and formatting (retrieval of displayable string value) of datums.
https://github.com/nasa/openmct/issues/1310
* [Generator] Support more config, data rates
Update sinewave generator to use webworker, have more
configuration options. Now supports higher data rates.
Also wrote telemetry provider for new API, and updated
legacy provider as well while we flesh out the telemetry API.
Fixes https://github.com/nasa/openmct/issues/1337
* Proper Step Timing, proper value passthrough
* Remove unused value, remove non-functional plugin
Remove an unnecessary datum value, `time`, and remove the new style
plugin -- which does not actually work -- to prevent confusion.
Addresses
https://github.com/nasa/openmct/pull/1353#pullrequestreview-12571665
* [Time Conductor] Prevent route change on setting search parameters. fixes#1341
* [Inspector] Fixed incorrect listener deregistration which was causing errors on scope destruction
* Bare route is redirect to browse
* [Browse] handle routing without breaking $route
Manage route transitions such that route changes are properly
prevented and navigation events occur while still updating the url.
Resolves a number of issues where path and search updates had
to be supported in a very hacky manner.
https://github.com/nasa/openmct/pull/1342
* [URL] Set search without hacks
Changes in previous commit allow the search parameters to be modified
without accidentally triggering a page reload.
https://github.com/nasa/openmct/pull/1342
* [Views] Update on location changes
If the user has a bookmark or tries to change the current view of an
object by specifying view=someView as a search parameter, the change would
not previously take effect. This resolves that bug.
https://github.com/nasa/openmct/pull/1342
* [TC] Set query params to undefined
Instead of setting params to null, which would eventually result in those
parameters equaling undefined, set them to undefined to skip the extra
step.
https://github.com/nasa/openmct/pull/1342
* [Instantiate] Instantiate objects with context
Add context to instantiate objects so that they can be navigated
to for editing.
https://github.com/nasa/openmct/pull/1342
* [Tests] Update specs
Update specs to match new expectations.
* [Style] Fix style
* [TC] Remove unused dependency
Remove $route dependency from time conductor controller as it was
not being used. Resolves review comments.
https://github.com/nasa/openmct/pull/1342#pullrequestreview-11449260
* [Composition] provide ids, sync via mutation
Composition provides ids, and we sync things via mutation. This
simplifies the composition provider interface some, and also
fixes some issues with the previous default composition provider
related to #1322fixes#1253
* [Style] Fix style, update jsdoc
Fix style, update jsdoc, clean up composition api changes for
Fixes#1322
* [Style] Tidy and JSDoc
* [Composition] Utilize new composition API
Ensures that composition provided by new API works in old API.
Some functionality is not present in both places, but for the
time being this is sufficient.
https://github.com/nasa/openmct/pull/1332
* [Utils] add tests, fix bugs
Add tests to objectUtils to ensure correctness. This caught a bug
where character escapes were not properly applied or removed. As
a result, any missing object that contained a colon in it's key
would cause an infinite loop and cause the application to crash.
Bug discovered in VISTA integration.
* [Style] Fix style
* [Roots] Depend on new api for ROOT
Depend on new API for ROOT model, ensuring consistency when
fetching ROOT model.
* [Style] Remove commented code
Closes https://github.com/nasa/openmct/pull/1287.
Squashed commit of the following:
commit af9ba3095859684cb2465f1d5222a14db231fdb7
Merge: c98286d31308b1
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Fri Nov 25 14:57:32 2016 -0800
Merge branch 'open1193' into open1287-integration
Resolve conflicts in glyph files as documented in pull request:
https://github.com/nasa/openmct/pull/1287#issuecomment-263030180
Closes https://github.com/nasa/openmct/pull/1287
commit 31308b1076
Author: Andrew Henry <andrew.k.henry@nasa.gov>
Date: Tue Nov 22 17:08:10 2016 +0000
[Time Conductor] Addressed code review comments. Fixes#1287
commit db6386e21c
Author: Henry <akhenry@gmail.com>
Date: Wed Nov 9 11:52:39 2016 -0800
Removed redundant ConductorService
commit a9ec8db8c6
Merge: fc36674dfa4591
Author: Henry <akhenry@gmail.com>
Date: Wed Nov 9 08:23:07 2016 -0800
Merge branch 'master' into open1193
commit fc36674b5c
Author: Henry <akhenry@gmail.com>
Date: Wed Nov 9 08:23:01 2016 -0800
Updated wording of docs
commit d0906baccf
Author: Henry <akhenry@gmail.com>
Date: Fri Nov 4 10:48:05 2016 -0700
Fixed TOI not showing
commit 099c56c407
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 28 16:46:06 2016 -0700
Fixed failing tests
commit 7cc008ed01
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 28 10:28:41 2016 -0700
Added tests for tables, TOI controller
commit b0901e83cb
Author: Henry <akhenry@gmail.com>
Date: Thu Oct 27 10:42:31 2016 -0700
Added tests for ConductorAxisController and TimeConductor
commit dfed0a0783
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 26 18:07:50 2016 -0700
Added ConductorAxisController tests
commit c3322e3847
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 25 20:54:24 2016 -0700
Added tests for MctTableController
commit 8e76ebb5a8
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 25 15:48:15 2016 -0700
Removed debugging code
commit 93735bc404
Author: Henry <akhenry@gmail.com>
Date: Mon Oct 24 15:13:45 2016 -0700
Removed bundle definition of MctAxisController
Documenting code
commit a942541724
Author: Henry <akhenry@gmail.com>
Date: Sun Oct 23 19:54:01 2016 -0700
[Time Conductor] Fixed memory leak due to listeners not being deregistered
commit 49e600dcc9
Author: Henry <akhenry@gmail.com>
Date: Sat Oct 22 16:47:11 2016 -0700
[Time Conductor] Fixed zoom slider behavior
commit f5806613b9
Author: Henry <akhenry@gmail.com>
Date: Sat Oct 22 14:46:14 2016 -0700
[Time Conductor] support TOI from real-time tables
commit 029d2b3058
Author: Henry <akhenry@gmail.com>
Date: Thu Oct 20 14:32:34 2016 -0700
[Examples] Simplified MSL example, fixed object tree not loading by default, renamed. Fixes#1256. Fixes#1255
commit 482eb4a5e8
Author: Henry <akhenry@gmail.com>
Date: Sat Oct 22 13:09:05 2016 -0700
[Time Conductor] Using new API
commit 843c678b0b
Merge: b56ab0a08ca765
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 21 10:21:22 2016 -0700
In process of merging
commit b56ab0aac2
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 19 16:30:26 2016 -0700
[Time Conductor] Implement default sort, fix unpredictable positioning using % left, set TOI on conductor init. #1193
commit d12ae77d95
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 19 11:29:42 2016 -0700
Further TOI improvements
commit 22564473b5
Merge: 9f3ec3b86b51f6
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 18 16:32:12 2016 -0700
Merge branch 'open1193' of https://github.com/nasa/openmctweb into open1193
commit 9f3ec3b18f
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 18 16:31:59 2016 -0700
Fixed issue with scrolling to row after bounds change
commit 86b51f6cde
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Oct 17 17:19:50 2016 -0700
[Frontend] Small refactor for mct-include
Fixes#933Fixes#1193
Markup and CSS tweaked to support using mct-include
as the main container for the TOI element; TC, plots
and tables all updated.
commit dadca62955
Author: Henry <akhenry@gmail.com>
Date: Mon Oct 17 15:54:34 2016 -0700
Positioning of TOI in tables and plots
commit 7a09bc1339
Author: Henry <akhenry@gmail.com>
Date: Mon Oct 17 10:11:59 2016 -0700
Migrated TOI functionality to common controller
commit 6bea6b3bc2
Merge: 660757f8f67cbd
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 14 14:38:57 2016 -0700
Merge branch 'open1193' of https://github.com/nasa/openmctweb into open1193
commit 660757fc1c
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 14 14:38:46 2016 -0700
Added TimeOfInterestController
commit 8f67cbd717
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Oct 14 11:33:35 2016 -0700
[Frontend] Fixed cursor: grab on Time Conductor
Fixes#933Fixes#1193
Moved cursor: grab into mixin; sass cleanups
commit 07a4e26317
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Oct 14 11:03:23 2016 -0700
[Frontend] TOI finalizing
Fixes#933Fixes#1193
HTML template cleaned up; checked in snow theme,
theme colors tweaked; padding finalized; now uses
val-to-left instead of -to-right;
commit 271c788f20
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Oct 14 10:22:26 2016 -0700
[Frontend] TOI in tables
Fixes#933Fixes#1193
WIP
commit b7e8a1b378
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Oct 13 15:55:48 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: Table TOI element in progress
commit 6042e4ad58
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Oct 13 13:46:27 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: plots and TC done, moving on to
tables; moved sass into conductor-v2;
moved constants;
commit 1a534301c5
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Oct 13 11:42:10 2016 -0700
[Frontend] Refactor TOI element
Fixes#933Fixes#1193
WIP; TOI as mct-include; layout uses
flex-box; preparing to move TOI sass
into conductor-v2 directory;
commit 42acf9255e
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Oct 12 18:34:51 2016 -0700
[Frontend] Adding resync and dedicated unpin buttons
Fixes#933Fixes#1193
VERY WIP!
commit 3f0eb0b7cb
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Oct 12 18:33:53 2016 -0700
[Frontend] New glyphs for use by TOI
Fixes#933Fixes#1193
Symbols font updated
commit 086307ba3a
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 11 17:16:51 2016 -0700
Fixed scrolling behavior with TOI
commit 938bf3c4df
Merge: 39104378b2047c
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 11 13:26:20 2016 -0700
Merge branch 'open1182' into open1193
commit 8b2047ca32
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 11 13:25:24 2016 -0700
Fixed issue with setting deltas
commit 3910437033
Merge: 70c4ce202c543f
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 11 12:48:37 2016 -0700
Merged changes to zoom
commit 02c543fddc
Author: Henry <akhenry@gmail.com>
Date: Tue Oct 11 12:45:18 2016 -0700
Fixed zoom in real-time mode
commit 70c4ce24e4
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 7 17:57:14 2016 -0700
Added support for clicking row to set TOI
commit b995a8b87b
Merge: 51a9557b384e84
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 7 16:11:59 2016 -0700
Merged from open1182
commit b384e84872
Merge: 5babf7207140b1
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 7 15:02:41 2016 -0700
Merge branch 'open933' into open1182
commit 07140b179f
Merge: 3e9c0ebcbd001e
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 7 14:54:18 2016 -0700
Merge branch 'master' into open933
commit 51a95575f7
Author: Henry <akhenry@gmail.com>
Date: Fri Oct 7 14:51:59 2016 -0700
[Time Conductor] Refactored time of interest as optional generic behavior of MctTable
commit dfbbc3b0c5
Merge: 430645b47a0aba
Author: Henry <akhenry@gmail.com>
Date: Thu Oct 6 10:23:42 2016 -0700
alt-click to select TOI from table
commit 3e9c0eb7a5
Merge: f1d20728a00181
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 5 12:25:04 2016 -0700
Merged from master to resolve build issues
commit f1d2072bb9
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 5 11:17:22 2016 -0700
Added license information
commit 430645b1f2
Author: Henry <akhenry@gmail.com>
Date: Wed Oct 5 09:04:13 2016 -0700
TOI working in time conductor
commit 47a0aba601
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Tue Oct 4 18:12:01 2016 -0700
[Frontend] TOI sass and markup sanding
Fixes#933Fixes#1193
Color tweaks; Cleanups, commented
code removal, etc.; tightened up
tabular padding and font sizes;
commit 0ed0a48a8c
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Tue Oct 4 15:49:18 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
Tabular styling for TOI;
commit 1650aae518
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Oct 3 15:56:56 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: Tabular styling for TOI;
TODO: make bottom border work
commit d3bf6c5857
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Oct 3 15:15:56 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: Markup and CSS for plots and TC near complete;
TODO: revised styling in tabular views;
commit 5cd0c8a4fa
Author: Henry <akhenry@gmail.com>
Date: Fri Sep 30 12:41:14 2016 -0700
[Time Conductor] merged from open1182
commit 5babf7274d
Author: Henry <akhenry@gmail.com>
Date: Thu Sep 29 11:21:11 2016 -0700
[Time Conductor] Tweaked the break points for zoom level indicator
commit 22da34870d
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 29 10:41:21 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: Markup and CSS revisions for updated UX approach;
TODO: cosmetic CSS
commit 99253a5904
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Tue Sep 27 20:42:33 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: Markup and CSS revisions for updated UX approach
commit 2db4aa6235
Author: Henry <akhenry@gmail.com>
Date: Fri Sep 23 13:06:22 2016 -0700
[Time Conductor] Added zoom level label
commit bb2ae2f8d1
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Fri Sep 23 11:07:06 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
Finalized TOI in plots, table and TC
commit 0cf4c92555
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 22 19:15:10 2016 -0700
[Frontend] Styling for TOI element in tables
Fixes#933Fixes#1193
WIP: styling in tabular mostly done, needs more unit testing
TODO: fix hide/show for pinned TOI in plots - don't
show pinned TOI on hover when not .active
commit 3c95c095f1
Author: Henry <akhenry@gmail.com>
Date: Thu Sep 22 17:22:25 2016 -0700
[Time Conductor] Refactored out use of angular event bus in favor of making TimeConductorViewService an event emitter.
commit adbcc407ef
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 22 16:06:45 2016 -0700
[Frontend] Styling for TOI element
Fixes#933Fixes#1193
WIP: TOI in tables
commit 1c3bd69b66
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 22 16:06:16 2016 -0700
[Frontend] Styling for TOI element, some refactoring
Fixes#933Fixes#1193
Moves some TOI styling into dedicated new scss file;
Enhancements to TOI in plots to bring into parity
with TOI in TC approach;
commit 49ee5cb74b
Author: Henry <akhenry@gmail.com>
Date: Thu Sep 22 15:18:48 2016 -0700
[Time Conductor] Destroy listeners in ConductorAxisController
commit 1a93ba2c3d
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 22 15:09:42 2016 -0700
[Frontend] Styling for TOI element in TC
Fixes#933Fixes#1193
Final for now; both types of TOI added to TC markup;
Hover behavior; constant values in the right places;
commit 98122cc730
Author: Henry <akhenry@gmail.com>
Date: Tue Sep 20 11:40:58 2016 -0700
[Time Conductor] Added Zoom
commit 7fcafb6b58
Author: Henry <akhenry@gmail.com>
Date: Mon Sep 12 16:53:48 2016 -0700
[Time Conductor] Added pan to Time Conductor
commit d77922d66c
Author: Pete Richards <pete@pete-richards.com>
Date: Thu Sep 15 09:37:11 2016 -0700
Revert "[proxyUrl] pass URL parameters to proxied URL"
commit 2e81550c86
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Sep 14 10:16:33 2016 -0700
Revert "[Build] Check dependencies for vulnerabilities"
commit 8eb7585653
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Mon Aug 29 10:58:02 2016 -0700
[README] Warn about root installation issues
Mitigates #1151.
commit 904d56a089
Author: Henry <akhenry@gmail.com>
Date: Thu Sep 22 13:32:43 2016 -0700
[Time Conductor] #933 Clean up time conductor listeners on scope destruction
commit c0a96b3c5f
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 22 10:33:05 2016 -0700
[Frontend] Styling for TOI element in TC
Fixes#933Fixes#1193
WIP, tweaking TOI in TC
commit 27e6caf69b
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Sep 16 18:51:51 2016 -0700
[Frontend] Styling for TOI element in plots
Fixes#933Fixes#1193
Relates to #1182
WIP, adding TOI to plot view;
Integrated Andrew's work from #1182;
Significant changes to markup and
additions to plot scss;
commit 2c7ae95106
Merge: 2c81b7241a160f
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Sep 16 15:11:25 2016 -0700
Merge branch 'open1182' into open1193
commit 41a160fc4f
Merge: 92a80c3156ba83
Author: Henry <akhenry@gmail.com>
Date: Fri Sep 16 14:25:49 2016 -0700
Merge branch 'master' into open1182
commit 92a80c39cb
Author: Henry <akhenry@gmail.com>
Date: Mon Sep 12 16:53:48 2016 -0700
[Time Conductor] Added pan to Time Conductor
commit 2c81b72d60
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 15 16:02:30 2016 -0700
[Frontend] Styling for TOI element in plots
Fixes#933Fixes#1193
WIP, adding TOI to plot view.
commit 9e2debf801
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 15 15:43:29 2016 -0700
[Frontend] Styling for TC's TOI element
Fixes#933Fixes#1193
I lied in my last commit - one more
alignment tweak needed. Now I'm done.
commit 35872e284c
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 15 15:40:03 2016 -0700
[Frontend] Styling for TC's TOI element
Fixes#933Fixes#1193
TOI in TC done for now.
commit 98e67f8dfb
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Thu Sep 15 14:55:06 2016 -0700
[Frontend] Styling for TC's TOI element
Fixes#933Fixes#1193
WIP: adjust spacing;
added pagination buttons
commit f912b9e273
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Sep 14 18:40:55 2016 -0700
[Frontend] Styling for TC's TOI element
Fixes#933
WIP, TC v2 changes
commit 2df1e2b508
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Sep 14 18:40:29 2016 -0700
[Frontend] Styling for TC's TOI element
Fixes#933
WIP, global changes
commit 9e85341aaa
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Sep 14 15:16:16 2016 -0700
[Frontend] Fixed color for TC clock hands
Fixes#933
commit 11e06039ec
Merge: a1331b7f732387
Author: Henry <akhenry@gmail.com>
Date: Tue Sep 13 13:25:37 2016 -0700
Merge branch 'master' into open933
commit a1331b7bb3
Merge: d1960b2e73bb4f
Author: Henry <akhenry@gmail.com>
Date: Mon Sep 12 15:07:05 2016 -0700
Merge branch 'master' into open933
commit d1960b2f46
Author: Henry <akhenry@gmail.com>
Date: Mon Sep 12 14:54:16 2016 -0700
[Time Conductor] Resolved merge conflicts
commit 9a06325533
Merge: e639e054c6ca58
Author: Henry <akhenry@gmail.com>
Date: Mon Sep 12 14:39:24 2016 -0700
Merge branch 'master' into open933
commit e639e056ba
Author: Henry <akhenry@gmail.com>
Date: Fri Sep 9 16:39:21 2016 -0700
[Time Conductor] Fixing bugs found in smoke testing. Fixes#933
commit fbab890081
Author: Henry <akhenry@gmail.com>
Date: Wed Sep 7 14:29:21 2016 -0700
[Time Conductor] Switched conductor to mct-include rather than mct-representation to avoid warnings
commit d37dd52ee1
Merge: 7af587558391de
Author: Henry <akhenry@gmail.com>
Date: Tue Sep 6 16:43:17 2016 -0700
Merge branch 'master' into open933
commit 7af5875dd5
Author: Henry <akhenry@gmail.com>
Date: Tue Sep 6 10:04:29 2016 -0700
[Time Conductor] #933 Fixed code style errors
commit c6eaa3d528
Author: Andrew Henry <andrew.k.henry@nasa.gov>
Date: Wed Aug 24 15:28:19 2016 +0100
[Time Conductor] Adding tests and fixing failing ones. #933
commit 4cf6126d35
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 10 18:22:30 2016 -0700
Refactoring based on feedback
Refactoring controller
Migrating functions off controller onto service class
Simplified modes
Adding comments
Removed unnecessary validation
Fixing testing issues
commit 4ae6da0334
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Tue Aug 9 17:47:31 2016 -0700
[Frontend] Data viz in Time Conductor smaller
Fixes#933
Reduced height of data viz bar in Time Conductor
v2;
commit ae39343b76
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Aug 8 12:14:20 2016 -0700
[Frontend] Fix for bad fix
Fixes#1112
Put overflow: hidden back at
outer wrapper level (now on .t-object.primary-pane
) which doens't clip the Inspector expand/collapse;
did better unit testing;
commit 62ee7e569b
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Aug 8 11:21:01 2016 -0700
[Frontend] Fix for collapse Inspector button
Fixes#1112
Moved min-width and overflow: hidden
to TC-specific elements; removed
overflow: hidden from .primary-pane
commit 7557a86208
Merge: 46e644ec8931f8
Author: Henry <akhenry@gmail.com>
Date: Fri Aug 5 16:37:36 2016 -0700
Merge branch 'master' into open933
commit 46e644e6dc
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Fri Aug 5 14:44:18 2016 -0700
Use key to retrieve default
commit af7954c5a1
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Fri Aug 5 11:24:51 2016 -0700
Trigger digests when bounds are set
commit 0e0ad64830
Author: Henry <akhenry@gmail.com>
Date: Thu Aug 4 10:41:58 2016 -0700
Fixed issue with wrong deltas being applied
commit f3fd386e3b
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 21:03:09 2016 -0700
Retain time system on mode change
commit 25b9f371e2
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 20:16:03 2016 -0700
Fixed loss of time system options on navigation
commit 6b482d487b
Merge: f96f78f9a72c96
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 19:57:03 2016 -0700
Merged mode-specific defaults, with some refactoring
commit f96f78ff79
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 19:34:31 2016 -0700
Select appropriate tick source based on mode
commit 579233ade9
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 18:30:01 2016 -0700
Fixed delta format issue on navigation
commit 9a72c96ea4
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Wed Aug 3 18:06:39 2016 -0700
[TCv2] different defaults by mode
commit f4e1879a2d
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 17:43:07 2016 -0700
stop listening to tick source on time system change
commit f844495cc1
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 17:40:37 2016 -0700
Support deltaFormat on timeSystems
commit 900752208f
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Wed Aug 3 13:05:43 2016 -0700
[TCv2] get conductor without service
commit 6501e2eb5f
Author: Henry <akhenry@gmail.com>
Date: Wed Aug 3 12:22:13 2016 -0700
Added isUTCBased to TimeSystem interface
commit b9c41107c1
Author: Henry <akhenry@gmail.com>
Date: Tue Aug 2 22:18:44 2016 -0700
Time Conductor state retained on navigation
commit 34c62ba405
Author: Henry <akhenry@gmail.com>
Date: Tue Aug 2 15:16:35 2016 -0700
Time Conductor in edit mode
commit 1eea5ce480
Merge: 4cd579d1173828
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 20:29:50 2016 -0700
merged from master
commit 4cd579d274
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 20:16:46 2016 -0700
Pass numerical value to format functions
commit 11738286df
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 18:56:33 2016 -0700
[Frontend] Styling for unsynced elements
Fixes#933
commit ca5206d4a0
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 18:55:49 2016 -0700
[Frontend] Fixing issues with theme coloring
Fixes#933
commit 573f1f9f99
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 18:04:17 2016 -0700
[Frontend] Hide zoom slider control
Fixes#933
Temporarily hiding per request from Andrew
today;
commit c5c45f0a0e
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 18:01:28 2016 -0700
[Frontend] Update TC2 markup and sass
Fixes#933
Update markup and sass in TC2 to be in line with
updates from master from #1047 glyphs
to cssclass approach;
commit 121ab413ff
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 17:51:15 2016 -0700
Apply formatting, filter modes by tick source availability
commit 753bd97c8a
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 17:12:44 2016 -0700
Merge remote-tracking branch 'origin/master' into open933-c
# Conflicts:
# platform/commonUI/edit/res/templates/create/create-menu.html
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff
# platform/commonUI/general/res/sass/_archetypes.scss
# platform/commonUI/general/res/sass/_constants.scss
# platform/commonUI/general/res/sass/_icons.scss
# platform/commonUI/general/res/sass/_main.scss
# platform/commonUI/general/res/sass/_mixins.scss
# platform/commonUI/general/res/sass/controls/_buttons.scss
# platform/commonUI/general/res/templates/controls/time-controller.html
# platform/commonUI/themes/snow/res/sass/_constants.scss
commit fcd7ab93e5
Merge: a75ea679b58aa0
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 17:12:00 2016 -0700
Merge branch 'open933' of https://github.com/nasa/openmctweb into open933
commit c699cb8b4b
Merge: 579c6b6d1e1ba1
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 17:11:37 2016 -0700
Merge remote-tracking branch 'origin/master' into open933-c
# Conflicts:
# platform/commonUI/edit/res/templates/create/create-menu.html
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf
# platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff
# platform/commonUI/general/res/sass/_archetypes.scss
# platform/commonUI/general/res/sass/_constants.scss
# platform/commonUI/general/res/sass/_icons.scss
# platform/commonUI/general/res/sass/_main.scss
# platform/commonUI/general/res/sass/_mixins.scss
# platform/commonUI/general/res/sass/controls/_buttons.scss
# platform/commonUI/general/res/templates/controls/time-controller.html
# platform/commonUI/themes/snow/res/sass/_constants.scss
commit a75ea67b8c
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 17:11:01 2016 -0700
Format updates when time system selected
commit 9b58aa0052
Author: Pete Richards <peter.l.richards@nasa.gov>
Date: Mon Aug 1 17:03:00 2016 -0700
[TCv2] Add conductorService for compatibility
Add conductor service for compatibility with old plugins that depend
on the conductor service.
commit 579c6b6d24
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 16:30:51 2016 -0700
[Frontend] Styling TC unsynced elements
Fixes#933
WIP: Styling for unsynced elements
commit 762f43fa61
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 16:26:47 2016 -0700
[Frontend] Styling TC unsynced elements
Fixes#933
WIP: Styling for unsynced elements
commit ce5d0ef5bd
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 16:03:27 2016 -0700
Merged stylesheet changes
commit 142ee2f336
Merge: 482fcbf523d674
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 15:44:49 2016 -0700
Added LocalTimeSystem and merged latest styles
commit 482fcbf6ee
Author: Henry <akhenry@gmail.com>
Date: Mon Aug 1 15:14:23 2016 -0700
Refactored bundle
commit 523d6743fb
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Mon Aug 1 12:00:53 2016 -0700
[Frontend] Added support for thematic styling of Time Conductor v2
Fixes#933
Added theme sass files
commit 7af22126d4
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 27 12:05:03 2016 -0400
Prevent tabbing into end bounds when not in fixed mode
commit 8e59072537
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 27 11:55:12 2016 -0400
Removed LAD and Realtime modes
commit c1bbc4f01d
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 27 10:38:04 2016 -0400
Code cleanup
commit aa4a5e56f9
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 26 16:55:00 2016 -0400
Improved support from plot
commit 5b2eb72b16
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 26 08:33:30 2016 -0400
[Time Conductor] Addressed documentation issues
commit 1b7fc57d21
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 25 16:55:27 2016 -0400
Added status support to plots
commit a4f6f6f50b
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 25 12:09:15 2016 -0400
Added license
commit 19fd63b850
Merge: c2c8e16a10ded2
Author: Henry <akhenry@gmail.com>
Date: Thu Jul 21 20:06:50 2016 -0700
Merge branch 'open933-frontend-b' into open933
commit c2c8e16453
Author: Henry <akhenry@gmail.com>
Date: Thu Jul 21 20:03:40 2016 -0700
Added scale sensitive formatting to UTCTimeFormat
commit a10ded25b4
Merge: da7c636e6d8944
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 20 18:33:58 2016 -0700
Merge remote-tracking branch 'origin/open933' into open933-frontend-b
# Conflicts:
# platform/features/conductor-v2/res/sass/time-conductor.scss
# platform/features/conductor/res/sass/time-conductor.scss
commit da7c636724
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 20 18:22:20 2016 -0700
[Frontend] Time Conductor v2 styling
Fixes#933
Redo TC icon to use font symbol, added
new symbol for brackets to font files; font
anti-aliasing mod for .ui-symbol class;
layout tweaks; mobile tweaks.
commit b392633bc6
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 20 15:48:22 2016 -0700
[Frontend] Time Conductor v2 styling
Fixes#933
WIP: Significant mobile and desktop style tweaks;
moved constants into their own include file;
commit ff1678435e
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 20 11:43:40 2016 -0700
[Frontend] Time Conductor v2 styling
Fixes#933
Changed desktop and mobile RT UI to display
end datetime and hide start;
WIP: mobile styling for main UI of TC;
commit 2124fe01e1
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 20 10:18:42 2016 -0700
[Frontend] Renew support for Time Conductor v1
Fixes#933
Minor fixes to TCv1 for mobile
commit e6d8944547
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 19 20:17:06 2016 -0700
Modified main.js
commit ea1defac28
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Tue Jul 19 18:33:24 2016 -0700
[Frontend] Renew support for Time Conductor v1
Fixes#933
Time Conductors v1 and v2 now build and load their
own isolated CSS files. All previous styling for TCv1
should be re-enabled. Note that Conductor v2 mobile
is not complete yet.
commit 2a19394334
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 19 19:54:52 2016 -0700
Added compatibility layer to support existing plots and historical tables
commit f641edbce7
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Tue Jul 19 18:33:24 2016 -0700
[Frontend] Renew support for Time Conductor v1
Fixes#933
Time Conductors v1 and v2 now build and load their
own isolated CSS files. All previous styling for TCv1
should be re-enabled. Note that Conductor v2 mobile
is not complete yet.
commit 15a608a861
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 18 18:44:29 2016 -0700
Populate format in input fields
commit 334ca64551
Merge: 0af49ef4087b9c
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 18 14:25:02 2016 -0700
Merged open933-frontend
commit 0af49efe06
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 18 08:23:27 2016 -0700
Refactored out modes, time systems, etc.
commit 4087b9cdde
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Fri Jul 15 14:39:29 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
WIP: Fixed look for Firefox
commit 43a804eef4
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Jul 15 07:54:32 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
WIP: Added zoom current range indicator;
tweaks to style
commit b3a4f52fe2
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Thu Jul 14 18:30:49 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
WIP: Adding zoom control with HTML5
input range type; Refactored sass slightly
to move display: inline-block out of mixin
containerBase and into .s-btn.
commit 671e3016d4
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Thu Jul 14 16:40:05 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
New _animations scss include, moved
scss around.
commit 379828315f
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Thu Jul 14 16:39:27 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
New _animations scss include, moved
scss around.
commit 8c5538ec4d
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Thu Jul 14 14:58:18 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
"Sticky" clock anim for LAD mode
commit 2f9fbfef7f
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 13 20:33:47 2016 -0700
More refactoring
commit 2baca659ca
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 13 19:50:58 2016 -0700
Refactoring
commit 8b694ef337
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 19:42:51 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
In-progress: color/size tweaks, fixes for espresso
theme
commit e193e3dfba
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 19:16:27 2016 -0700
Merge open933 latest, resolve conflicts
Fixes#933
Fair amount of manual fixing in time-conductor.html
commit 8214c8e895
Merge: 33b222514463d3
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 19:16:00 2016 -0700
Merge open933 latest, resolve conflicts
Fixes#933
Fair amount of manual fixing in time-conductor.html
commit 33b2225d10
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 18:48:17 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
In-progress: restructured markup to move
modeModel farther out; animated icon
commit 14463d39a8
Author: Henry <akhenry@gmail.com>
Date: Wed Jul 13 18:17:27 2016 -0700
Added end delta
commit fcfda50e73
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 15:00:16 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
In-progress: color tweaks, bar sizing,
field widths
commit 06af84c161
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 13:14:32 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
In-progress: fixed SVG text color, field
styling for fixed vs. real-time, markup cleanup
commit 5238aa2731
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Wed Jul 13 08:07:59 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
In-progress; fixed SVG text color
commit fd29473664
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 12 15:02:39 2016 -0700
Support resize
commit 97f3fd516b
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 12 10:14:26 2016 -0700
Changed default duration to fifteen minutes
commit 088416905d
Author: Henry <akhenry@gmail.com>
Date: Tue Jul 12 10:08:08 2016 -0700
Added duration
commit 2056d87453
Merge: 585da3864ce8a2
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 11 14:27:30 2016 -0700
Merge branch 'open933-frontend' into open933
commit 64ce8a2b2a
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 14:03:41 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
Color adjusts, mini super-menu size
and font tweaks, glyphs added to selector,
SVG style fixes in progress
commit 585da38a16
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 11 13:46:46 2016 -0700
Fixed some merge issues
commit bf0e85a94c
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 11:35:26 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#933
Renamed main class; removed unused <style>
defs
commit 84b7a9dc2f
Merge: 7b7b21d11caa83
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 11:29:35 2016 -0700
Merge remote-tracking branch 'origin/open933' into open933-frontend
Fixes#933
Conflicts:
platform/features/conductor-v2/src/TimeConductorController.js
commit 11caa8396a
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 11 11:18:23 2016 -0700
Updated modes
commit 0017b77439
Merge: 5cc81ba788483e
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 11 11:06:22 2016 -0700
Merged markup changes
commit 7b7b21d748
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 11:05:47 2016 -0700
[Frontend] Styling of Time Conductor v2
Fixes#933
Tweaks to language; tweak to class name in markup
commit 788483ec13
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 10:37:08 2016 -0700
[Frontend] Styling of Time Conductor v2
Fixes#933
Tweaks to language
commit 7b19f91ce6
Merge: 0a0bc554e7b69c
Author: Charles Hacskaylo <charles.f.hacskaylo@nasa.gov>
Date: Mon Jul 11 10:31:14 2016 -0700
[Frontend] Merge latest from open933
Fixes#933
Resolve conflicts in
mode-menu.html, mode-selector.html,
time-conductor.html; apply tweaks, language, etc.
commit 5cc81ba12a
Author: Henry <akhenry@gmail.com>
Date: Mon Jul 11 10:26:34 2016 -0700
[Time Conductor] Added mode class to time conductor
commit 0a0bc55f5f
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Jul 8 17:11:43 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#993
In-progress; mode menu names and
descriptors modified, markup cleaned up
commit 4e7b69c4df
Author: Henry <akhenry@gmail.com>
Date: Fri Jul 8 16:57:50 2016 -0700
Enabled fixed and real-time modes
commit cf83040c4b
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Jul 8 16:54:49 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#993
In-progress; Create menu refactoring and new
mini Create menu
commit 32f7bc86af
Author: Charles Hacskaylo <charlesh88@gmail.com>
Date: Fri Jul 8 16:54:13 2016 -0700
[Frontend] Styling for Time Conductor v2
Fixes#993
In-progress; class renaming continued,
cleanups in markup file, in-page styles
ported to scss
commit e230b92946
Author: Henry <akhenry@gmail.com>
Date: Fri Jul 8 15:15:12 2016 -0700
Fixed bug with date selector having to be clicked twice
commit 58ed500ecf
Author: Henry <akhenry@gmail.com>
Date: Thu Jul 7 16:57:03 2016 -0700
Time sync via conductor
commit bca5eb0fdb
Author: Henry <akhenry@gmail.com>
Date: Thu Jul 7 09:47:46 2016 -0700
[Time Conductor] #933 Initial markup
* [Core] Log errors from topic
Log full error (including stack trace) when catching errors
from the topic service. Aids debugging of #1303 (and should
aid in future debugging of any similar issues.)
* [API] Fix identifier usage in handleMutation
To address console errors observed in the context of #1303
* [Views] Listen to mutation
Listen for mutation instead of watching modified timestamp;
more reliable due to recent API changes. Fixes#1303.
* [Views] Update spec for mct-representation
...to reflect changes for #1303
* [Views] Rewrite mct-view
...to make it a simple way to include non-Angular views, without
integrating unnecessarily with other architectural concerns.
Supports restoration of view registration functionality to fix
#1307
* [API] Use identifier as property name
* [API] Add adapter capability
...to simplify adapter layer (allowing new-style objects to be
retrieved via capability.)
* [API] Add AdaptedViewController
* [API] Add template for adapted views
* [API] Add AdaptedViewPolicy
* [API] Wire in view adapter
* [API] Fix adapter capability implementation
* [API] Don't create new scope from mct-view
...to allow use on same element as ng-controller (and because a
new scope just is not necessary.)
Remove 'install' step from gulp develop task, instead
run 'stylesheets' to build stylesheets. Result is much
faster execution of gulp develop as is expected for
a development tool.
Fixes https://github.com/nasa/openmct/issues/1268.
My Items root is now opt-in, and does not need to be enabled for all
deployments. My Items is enabled by default in the development edition.
https://github.com/nasa/openmct/issues/1251
Overload addRoot method to support async root loading. By supplying a
function you can defer loading to later, and by allowing those functions
to return a promise, execution can be asynchronous.
Remove "removeRoot" as the assumption will be that roots are opt in, and
instead of removing a Root, an application developer should never configure
it in the first place.
Fixes https://github.com/nasa/openmct/issues/1251
New test suite for the notification service covering common use cases. Fixed the bug where autoDismiss would be set wrong for info notifications; also treating info notifications appropriately now.
In the spec: NotificationService knows about concepts like "info", "alert" and "error" only, having a plain info notification model called successModel doesn't help much and may be confusing at times (makes you think it's something the service treats separately).
Adds miscellaneous platform updates to include templates
via the RequireJS text plugin; to support modification of
asset paths; and to support priority order for gestures.
Supports integration of new API, #1124.
Issue #1184. This allows for a generically sized text area in forms. I am
anticipating some potential feedback on this given the approach and the sizing
I chose may or may not be ideal for your requirements.
The images were being cutoff due to the "top" attribute of .gl-plot
not changing when the buttons were hidden. The buttons are now
hidden by CSS class rather than ng-show, which makes updating the
.gl-plot top attribute easier.
I would prefer this be passed in via the bundle, but it continues to fail
saying "Unknown Provider". I have chosen to require them into the module
the old-fashioned way, then allow an injectible dependency to override.
It's worth noting that I changed the .gl-plot position from relative to absolute
in an attempt to match the results to a similar requirement in MCT Table. Setting
to absolute caused no regressions as far as I could tell, but I have not attempted
browsers outside of Chrome.
Fixes#1161
New .s-selectable, .s-hover, .s-selected and .s-moveable classes
New supporting color constants
Markup in layouts, fixed position/panels updated
Removed old commented code
Extends PlotController by adding three new scoped methods:
exportPDF, exportPNG, exportJPG.
All three methods use basically the same steps. The HTML node
of the plot is passed through html2canvas which generates a canvas.
From the canvas we export a blob, PNG, or JPG then save the file.
🐙
# Author Checklist:
Changes appear to address issue? Y
Appropriate unit tests included? N/A - No code changes
Code style and in-line documentation are appropriate? N/A
Commit messages meet standards? Y
Addresses issue #1158
Passes query parameters on to proxyUrl proxied URL
remove the url parameter before passing
Naming convention for variables
Re-order code to reuse variable
Clicking `Long-duration testing` was showing the right doc but wrong section due to typo in `procedures.md#long-duration-testng`. Fixed it, so now clicking `Long-duration testing` will take us to the right section.
Changed test to ensure checkAll and it's appropriate filter string are
set whenever checkAll is changed.
Removed redundant line checking for a filter string of 'NONE' as this
is no longer a possibility.
Changed test to work properly with #1117 fix.
Checks if checkAll gets checked when no options are checked.
Checks if changing checkAll updates the filter string to ''
Upon deselecting every filter, the search returns nothing. This serves
no useful purpose as discussed in #1117. Now deselecting every filter
automatically selects 'All'.
...as this will trigger a refresh of the mct-representation for
the tree, which will in turn create a new mct-tree instance,
resulting in any expanded/collapsed state being lost.
Fixes#1008.
TreeView's observers will be called when the selected domain object
changes, which can occur for one of two reasons:
1. Because a new value was set externally, from mct-tree.
2. Because a new value was selected, by the user.
In the latter case a $apply is needed, but in the former it is not
(and causes an error.) However, when that case occurs, the value in
scope will be up to date already (it was a watch that triggered the
call to treeView.value) so no assignment or $apply is necessary.
Fixes#1114.
...to account for changes to separate out transaction management,
including removal of specs made obsolete (as tested behavior has
been moved to TransactionManager or was already redundant to
behavior from the undecorated PersistenceCapability)
commit 3f199a9f06
Merge: 27fe4ed736cba7
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Mon Jun 27 09:04:40 2016 -0700
Merge remote-tracking branch 'origin/master' into clear-transactions-1046
Conflicts:
platform/commonUI/edit/src/actions/SaveAsAction.js
commit 27fe4edb30
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Jun 22 15:04:06 2016 -0700
[Edit] Mark restartTransaction as private API
commit 21d1938a0f
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Jun 22 15:03:17 2016 -0700
[Edit] Clarify JSDoc
commit 06a83f9fa9
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Jun 22 15:01:35 2016 -0700
[Edit] Update failing spec
commit 1f525160e0
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Jun 22 14:52:43 2016 -0700
[Edit] Refer to correct variable
...when clearing transactions after a restartTransaction
commit b60e94bce4
Author: Victor Woeltjen <victor.woeltjen@nasa.gov>
Date: Wed Jun 22 14:38:54 2016 -0700
[Edit] Clear transactions on Save As
...such that only persistence calls associated with the
saved clones are actually issued. Fixes#1046.
Show a blocking dialog while the save action is being performed.
Prevents users from pressing save a second time or performing
further actions while a save is in progress.
Fixes https://github.jpl.nasa.gov/MissionControl/vista/issues/362
Remove domain objects from the active transaction when they
are refreshed, and use this from the SaveAsAction to prevent
saving unintended changes. Fixes#1046
Set the min height for the plot element based on user feedback for
minimum plot size that they find useful. Plot ticks may overlap
but that is expected to be fixed in a future release.
Fixes https://github.com/nasa/openmct/issues/1048
Reposition scroll bar in Timeline with RAF instead of timeout;
this ensures that scroll bar is positioned after the current
digest (updating the width) but before the results are rendered
(avoiding flicker.) Fixes#997
Whenever timeline zoom controller sets scroll, check to see if
there may be a width violation that causes scroll to be reset,
and retry on a timeout if so. Fixes#936.
fixes#709
- When going from browse to edit mode, the wrapper
around the object being edited will now transition in
from its edges, and the edit controls toolbar will
animate its height;
- There is no transition applied for going from edit
to browse; to do this we'd need to mod the JS on
exiting to look for the end of an animation event;
- Tested in Chrome, Safari and Firefox;
- May not be smooth with very complex objects
like Layouts with a large number of components;
- Added transitional animations to .l-object-wrapper
and .l-edit-controls;
- New 'animTo' mixin added to _effects.scss;
...from TimelineController. Will replace with a more straightforward
call to the zoom controller that uses the exposed end time instead,
to address #981.
fixes#973
- Done;
- Styling for Export button and tabular view
area in layout frame context;
- Export button in frame context now
hidden until user hovers over tabular
view area in frame, includes animated
transition;
- Normalized line-height on button and
menu elements in frame context;
- Layout/markup/SASS for historical and
RT tabular view modified;
- Converted imagery.html layout
to use flexbox;
fixes#973
- In progress:
- Added new download symbol to symbols font;
- Added export symbol to export button;
- Layout/markup/SASS for historical tabular
view modified;
open #965
- CSS adjusted to handle min-width of 2px and better
approach to ellipsizing text;
- Angular ng-class added to hide icon and title if
width less than a value;
- Rounded corners on bars removed;
Revert "[Timeline] Change ordering in mct-representation"
This reverts commit 20ecf168f2.
These changes introduced a regression due to ordering
expected by time conductor, #957
Run the full gulp verify task for testing on CircleCI, to handle
unit tests as well as code style checks and linting (and other
verification steps that may be added in the future.)
Add JSHint rules to complement allowing multiple var statements,
https://github.com/nasa/openmct/issues/142#issuecomment-212187972
[Code Style] Require one decl per var
[Code Style] Don't require separate var decls
...but allow them (for compatibility with existing code style)
[Code Style] Allow var decl after start of scope
[Code Style] Enforce codestyle during verify task
open #889
open #298
Fixes for mobile;
Moved popup z-index def into sass;
Datetime picker compressed for
better fit in mobile phone;
Removed hours selector from datetime
picker to enable better fit in mobile;
open #909
- Changed markup to not use plot .tick-label class;
- Changed CSS accordingly;
- Fixed alignment (clipped bottom value) by
refactoring to use flex-box layout for tick labels;
open #889
IN PROGRESS
- Smaller font used on range value;
- More space allocated to left and right
for slider range values;
- Style tweaks to slider look;
- Layout and style of datetime inputs
fixed;
- Input error colors fixed, moved to
theme constants;
Use circle's heroku integration to deploy to ensure that we deploy
a full clone of the repo and not a shallow clone, prevents build
failure in master branch.
Remove duplicate ClickAwayController implementation that was obscuring actual
implementation. Debounce clickaway action in case toggle is invoked in a
click handler.
Resolves https://github.com/nasa/openmct/issues/888
Mutation now triggers persistence; this means that some legacy code
does or may issue redundant calls to persistence after mutating.
To avoid issuing redundant calls all the way down to the
persistenceService, bail out of persist calls early if there are
no unsaved changes to persist.
* In the prepublish step, run bower and gulp via node, instead of
relying on shebang interpretation. (Forward-slash path separators
appear to get normalized by node itself before executing the scripts.)
* In the gulp build, replace hard-coded *nix-style separators with
path.sep; this allows stylesheets to be output to expected locations
when building on Windows.
Addresses #827.
Add default values to model, such that editing which occurs
before user supplies these properties does not cause errors
to occur. Directly addresses #717, indirectly addresses
remaining errant behavior associated with #790.
#445
Markup enhanced in wait-node.html;
More wait-spinner constants added;
Normalized appearance between tree-based
.loading and .s-status-pending;
Fixed .s-status-pending to work now that
mct-representation is gone from tree;
#445
New wait-spinner constants;
Markup fixed in wait-node.html;
Styles for .loading when applied to
.tree-item.wait-node;
Changed from percent-of-parent-
width sizing of spinner to fixed size;
Track whether an object is in the cache based on whether it is
in the cache instead of utilizing a separate object for tracking
contents of cache.
See comment on https://github.com/nasa/openmct/pull/773/files
...to restore suppression of Move for objects being edited
(relaxed for the specific case of moving one object being
edited into another object being edited, for use in Timelines.)
Remove step where Added objects are persisted via the editor
capability; instead, persist via the usual persistence capability,
such that Edit mode may intervene (or not) as necessary.
As instantiated models are cached at least until persisted,
this workaround to allow newly-created models to be available
during editing is no longer necessary (and undesired consequences
such as #770 no longer occur)
Specify requirejs minor version of 2.1, as 2.2 is not compatible
with karma-requirejs.
Fixes build problems that appeared after latest requirejs version bump.
#750
Moved l-plot-resource cursor: pointer
to a more specific selector;
Added user-select: none to l-header;
Fixed s-status-editing styling so
that tabular labels only appear draggable
while editing;
#700#689#740
Removed _selects.scss and moved classes
into _controls.scss;
Reorg'd _controls;
Moved classes into _elems.scss;
Added and fixed cssclass defs in multiple
bundle.js files to allow better field widths
in overlay dialogs;
Fixed overlay custom scrollbar colors;
Fixed alignment of required glyphs in forms;
open #729
open #498
Fixed markup to use proper CSS classes
to allow tree items in Inspector Elements to
ellipsize properly, and to apply scroll regions
to the proper elements;
open #729
In-progress!
Markup and CSS mods continued;
Config params added to PlotOptionsForm.js to
allow control-first layout per form row;
Changed titles of Inspector parts;
open #729
In-progress!
Markup and CSS modified to cleanup control layout
and styling in Plot and Table config options;
gulpfile.js modified to include SASS source line numbers
in rendered CSS;
Pass model directly when indexing is triggered via object mutation,
to avoid issuing an extra, unnecessary request to the server.
Additionally supports indexing of objects which have been created
but not yet persisted.
Addresses #377.
#442
Removed white space from markup;
Moved getGlyphClass up to status-block-holder
element out of status-block;
CSS mods to selectors and style defs
in _messages.scss;
...add to TimelineSwimlanePopulator to reflect changes to
time at which selection object may become available as
a consequence to changes in the way templates are normally
loaded. #673
...to reflect changes to how selection object is obtained,
which in turn reflects change to using templates obtained
via RequireJS text plugin, instead of loading by URL.
Loading templates via RequireJS text plugin means they are
immediately available; appears to have caused a change in
ordering wherein controllers for views may be initialized
before representers have installed things like selection
state. As such, need to watch for changes instead of simply
checking for a selection object when the controller is
initialized.
Minor change to readme
Fixed JSLint errors
More JSLint errors
[Example] Rems data integration - disabled bundle by default.
[Examples] REMS data integration - added newlines at end of files
[Example] Added time conductor support to REMS data integration
Added caching of results
[Examples] Added domain format to REMS data #359
[Example] #637 Added local proxy to app.js to allow cross-origin requests
Updated readme
#164https://github.jpl.nasa.gov/MissionControl/vista/issues/299
App logo and bg files renamed;
Added openmct.scss to hold openmct-specific styles;
Renamed _startup.scss to startup-base.scss
which now renders its own .css file;
Still to-do: apply to WARP including needed
mods to its About dialog screen;
#164
Markup in index.html and about-dialog.html
changed to simplify and use :before/:after psuedos;
CSS in _logo-and-bg.scss modded for same;
Added _startup.scss to hold general CSS for
the startup screen;
Renamed startup.scss to startup-open.scss;
Modified SplashScreenManager.js to target renamed
outer container .l-splash-holder;
Added media query for startup screen on phone;
Cleanup: moved classes out of _effects into _global;
Still to-do: apply to WARP and VISTA, including needed
mods to their About dialog screens;
Add a runtime extension that detects the splash screen and triggers a fade out
after the application has loaded. Once the fade out has ended, it removes the
element from the page.
Related to https://github.com/nasa/openmctweb/issues/164
open #442
Fixed white space problem with .status-block-holder
applied to mct-include; Added new status 'available'
class and updated theme constants files;
Reinstantiate compass wrapper for each task execution. Allows stylesheets
task to be run multiple times by watch. Fixes a bug that prevents watch
from working properly.
Updates the stylesheet task to output CSS in the correct locations. Remove
config.rb for running compass manually, and remove compiled css files from
project. Add a .gitignore to ensure they don't get included accidentally.
Add a gulp task for running the development server and watching for scss
changes at the same time.
resolves https://github.com/nasa/openmctweb/issues/238
open #639
open #683
open #169
open #335
Fixed wrong application of body.desktop.mini-tab...;
Increased size of pane collapse/expand icons;
Removed max-width applied to search input holder;
open #639
open #683
open #169
open #494
Replaced MQ around mobile/_tree.scss ul.tree;
Removed MQ desktop around hover in mixin btnBase;
Reversed orientation of mobile tree arrows for #494;
open #639
Refactored all usage of @include desktop to use CSS selector body.desktop
instead; Still to-do: deal with desktopandtablet usage with hover bubbles
and mixins btnBase;
open #659
CSS for .rep-object-label modified; Added CSS class
to tabular-swimlane-cols-tree.html markup;
Also cleaned up .s-status-pending styles for related
label elements;
Add an optional parameter to method signature of
copyService, used to determine if a domain object should
or should not be cloned.
This will be used to support usages of copyService
where links should remain links;
https://github.com/nasa/openmctweb/pull/666/files#r52525612
open #638
Added custom radio button control and modified
PlotOptionsController / plotOptionsStructure
accordingly; spacing, borders, etc. are
all as finally intended;
Allow bundles to be removed by:
* Waiting for explicit activation before bootstrapping,
providing a time period when bundles could be removed.
* Adding a remove method to BundleRegistry
Acquire reference to moment as an argument instead of
assuming global availability; this appears to be no longer
be present globally after build changes
[New Edit Mode] #480 fixed JSLint errors
[New Edit Mode] #480 do not show locator for sub objects
[New Edit Mode] Modified persistence in SaveAction
Removed redundant variable
Fixed Failing Test
Fixed JSLint errors
Improved some documentation
Switch Karma to use PhantomJS to run tests. CI machines no longer
need to have Chrome installed.
Implemented after changes to build process due to imperative registration.
https://github.com/nasa/openmctweb/issues/450
Remove depencendies necessary to build docs from package.json and
specify them in the readme. Due to difficulty managing dependencies
for nomnoml on different platforms, this reduces dependency requirements
to only those needed for building the package.
open #445
Mods and simplifications to wait-spinner classes;
Simplification and cleanup in plot.html to use loading
class instead of hide/show DOM element;
open #337
Tick label strings are now reversed in their char order in
PlotTickGenerator.js, then reversed again via CSS in
_plots-main.scss. This forces the browser to clip the label
at the left 'start' side, rather than the end, resulting in
the least significant portion of the label getting clipped.
open #342
Now using CSS hover on pertinent plot areas;
Refining of select styling, tweaks for Firefox Linux;
Tweaks to local-control positioning in plots;
Changed *-options controls to use length > 1
instead of > 0;
Allow injection of a validator for numeric values of
the date-time fields, to allow for these to be displayed
as invalid in cases where the text itself may be parsed
but the resulting value is not valid (e.g. when start
is greater than end.)
https://github.com/nasa/openmctweb/issues/325
Many tweaks to fix some issues with tree, labels and Inspector.
Conflicts:
platform/commonUI/edit/res/templates/elements.html
platform/commonUI/general/res/sass/search/_search.scss
platform/commonUI/general/res/sass/tree/_tree.scss
platform/commonUI/general/res/templates/object-inspector.html
platform/commonUI/themes/espresso/res/css/theme-espresso.css
platform/commonUI/themes/snow/res/css/theme-snow.css
platform/search/res/templates/search.html
open #468
Removed ng-show="editMode" in object-inspector.html;
Refactored CSS as required in _inspector.scss;
Added opacity transition to splitter-inspect-panel and
split-pane-component pane bottom, but not working as desired currently:
entire inspector seems to be destroyed and recreated when switching into
and out of edit mode;
Moved <style> def for .location-item in object-inspector.html into .scss;
open #468
Remove ng-class statements in favor of upstream .s-status-editing;
Restructure CSS accordingly;
NOTE: because edit.html has NOT been changed,
changes here will cause old edit mode to no longer display properly.
Don't integrate this CSS with old edit mode!
Write HTML reports of test successes/failures to simplify
handling of test failures; pre-existing HTML test runner
is incompatible with changes to the way bundles are loaded.
Declare external dependencies up-front in RequireJS
config; avoids problems due to changes in ordering
(since RequireJS config may be modified by bundle
contents.)
Remove obsolete split-pane container and associated
controller; this behavior is now handled by the
mct-split-pane directive.
Part of updates to tests for the mct-split-pane
directive, WTD-1400
Test ability to look up datum object by index (used to
support evaluation of limit state in Fixed Position and
similar single-value views while time conducting.)
Merge in latest from master into topic branch for
https://github.com/nasa/openmctweb/issues/116
Conflicts:
platform/features/layout/test/FixedControllerSpec.js
platform/features/plot/test/PlotControllerSpec.js
Update RangeColumn spec. Changes appear to have been related
to limits (WTD-1337), but making changes in the context of
updating tests for time conductor,
https://github.com/nasa/openmctweb/issues/116
Add classes describing device characteristics to the
body of the current document at start-up. Refactor
device matchers out of the mct-device directive for
reuse and consistency here.
https://github.com/nasa/openmctweb/issues/169
warp #1596
open #425
Changes to autoflow styles, particularly in header;
Cleanup in effects.scss; CSS to be re-compiled;
(cherry picked from commit 5848077)
* Add spaces to 'Open MCT Web' for consistency
* Use term 'platform' instead of 'framework' for consistency
with the developer guide
* Avoid the term 'capabilities' (could be ambiguous in the context
of other documentation)
* Use canonical casing for JSDoc and JavaScript
* Simplify phrasing of first sentence
* Change casing of 'Developer Guide' for consistency with
other bullets
From review of https://github.com/nasa/openmctweb/pull/412
When handling a drop into the layout, store the panel's
new position to the LayoutController's internal table of
raw positions (in addition to writing it to the configuration.)
Avoids https://github.com/nasa/openmctweb/issues/384
open #199
open #278
Changed CSS to use s-status-editing instead of .active
class;
Refined style defs to explicitly target tree and
search-results children in order to avoid items in
Inspector Elements pool from being designated as
being edited;
Removed {{searchText}} div from input-filter;
...when determining if a representation needs to be
refreshed. Avoids representations becoming stale
when switching or navigating among linked instances
of the same domain object.
https://github.com/nasa/openmctweb/issues/302
...on watches triggered from the picker. Only want to
trigger a submit when this actually constitutes a change from
the datetime field's underlying model (to avoid triggering
form submission when datetime picker is initialized.)
Timeline uses a custom date-time control on creation;
use a distinct key for this to avoid a naming collision
with platform's datetime. Addresses abnormal behavior
identified in nasa/openmctweb#208
open #208
Unit tested in both themes;
.s-icon-btn refactored slightly to focus on usage
as an icon-only element, removed overlap designations
with .s-btn in markup;
Colors normalized for theming;
Code cleanup;
open #208
Espresso and Snow now supported; bulk of
work done except for minor cleanups, like zoom
buttons; Dragging not working currently in Timelines;
open #208
Copied SASS styles from /warp and created
new platform/features/timeline/themes/espresso;
Styling looks complete, but Timeline itself has
functional issues;
TO-DO: remove styles from /warp/.../sass/ as needed;
In future, object providers will support other methods to enable other operations
with persistence stores, such as creating, updating, and deleting objects.
## Composition Providers
The _composition_ of a domain object is the list of objects it contains, as shown
(for example) in the tree for browsing. Open MCT provides a
[default solution](#default-composition-provider) for composition, but there
may be cases where you want to provide the composition of a certain object
(or type of object) dynamically.
### Adding Composition Providers
You may want to populate a hierarchy under a custom root-level object based on
the contents of a telemetry dictionary. To do this, you can add a new
Composition Provider:
```javascript
openmct.composition.addProvider({
appliesTo:function(domainObject){
returndomainObject.type==='my-type';
},
load:function(domainObject){
returnPromise.resolve(myDomainObjects);
}
});
```
The `addProvider` function accepts a Composition Provider object as its sole
argument. A Composition Provider is a javascript object exposing two functions:
*`appliesTo`: A `function` that accepts a `domainObject` argument, and returns
a `boolean` value indicating whether this composition provider applies to the
given object.
*`load`: A `function` that accepts a `domainObject` as an argument, and returns
a `Promise` that resolves with an array of [Identifier](#domain-objects-and-identifiers).
These identifiers will be used to fetch Domain Objects from an [Object Provider](#object-provider)
### Default Composition Provider
The default composition provider applies to any domain object with a `composition`
property. The value of `composition` should be an array of identifiers, e.g.:
```javascript
vardomainObject={
name:"My Object",
type:'folder',
composition:[
{
id:'412229c3-922c-444b-8624-736d85516247',
namespace:'foo'
},
{
key:'d6e0ce02-5b85-4e55-8006-a8a505b64c75',
namespace:'foo'
}
]
};
```
## Telemetry API
The Open MCT telemetry API provides two main sets of interfaces-- one for integrating telemetry data into Open MCT, and another for developing Open MCT visualization plugins utilizing telemetry API.
The APIs for visualization plugins are still a work in progress and docs may change at any time. However, the APIs for integrating telemetry metadata into Open MCT are stable and documentation is included below.
### Integrating Telemetry Sources
There are two main tasks for integrating telemetry sources-- describing telemetry objects with relevant metadata, and then providing telemetry data for those objects. You'll use an [Object Provider](#object-providers) to provide objects with the necessary [Telemetry Metadata](#telemetry-metadata), and then register a [Telemetry Provider](#telemetry-providers) to retrieve telemetry data for those objects.
For a step-by-step guide to building a telemetry adapter, please see the
A telemetry object is a domain object with a telemetry property. To take an example from the tutorial, here is the telemetry object for the "fuel" measurement of the spacecraft:
```json
{
"identifier":{
"namespace":"example.taxonomy",
"key":"prop.fuel"
},
"name":"Fuel",
"type":"example.telemetry",
"telemetry":{
"values":[
{
"key":"value",
"name":"Value",
"units":"kilograms",
"format":"float",
"min":0,
"max":100,
"hints":{
"range":1
}
},
{
"key":"utc",
"source":"timestamp",
"name":"Timestamp",
"format":"utc",
"hints":{
"domain":1
}
}
]
}
}
```
The most important part of the telemetry metadata is the `values` property-- this describes the attributes of telemetry datums (objects) that a telemetry provider returns. These descriptions must be provided for telemetry views to work properly.
##### Values
`telemetry.values` is an array of value description objects, which have the following fields:
attribute | type | flags | notes
--- | --- | --- | ---
`key` | string | required | unique identifier for this field.
`hints` | object | required | Hints allow views to intelligently select relevant attributes for display, and are required for most views to function. See section on "Value Hints" below.
`name` | string | optional | a human readible label for this field. If omitted, defaults to `key`.
`source` | string | optional | identifies the property of a datum where this value is stored. If omitted, defaults to `key`.
`format` | string | optional | a specific format identifier, mapping to a formatter. If omitted, uses a default formatter. For enumerations, use `enum`. For timestamps, use `utc` if you are using utc dates, otherwise use a key mapping to your custom date format.
`units` | string | optional | the units of this value, e.g. `km`, `seconds`, `parsecs`
`min` | number | optional | the minimum possible value of this measurement. Will be used by plots, gauges, etc to automatically set a min value.
`max` | number | optional | the maximum possible value of this measurement. Will be used by plots, gauges, etc to automatically set a max value.
`enumerations` | array | optional | for objects where `format` is `"enum"`, this array tracks all possible enumerations of the value. Each entry in this array is an object, with a `value` property that is the numerical value of the enumeration, and a `string` property that is the text value of the enumeration. ex: `{"value": 0, "string": "OFF"}`. If you use an enumerations array, `min` and `max` will be set automatically for you.
###### Value Hints
Each telemetry value description has an object defining hints. Keys in this this object represent the hint itself, and the value represents the weight of that hint. A lower weight means the hint has a higher priority. For example, multiple values could be hinted for use as the y axis of a plot (raw, engineering), but the highest priority would be the default choice. Likewise, a table will use hints to determine the default order of columns.
Known hints:
*`domain`: Indicates that the value represents the "input" of a datum. Values with a `domain` hint will be used for the x-axis of a plot, and tables will render columns for these values first.
*`range`: Indicates that the value is the "output" of a datum. Values with a `range` hint will be used as the y-axis on a plot, and tables will render columns for these values after the `domain` values.
*`image`: Indicates that the value may be interpreted as the URL to an image file, in which case appropriate views will be made available.
##### The Time Conductor and Telemetry
Open MCT provides a number of ways to pivot through data and link data via time. The Time Conductor helps synchronize multiple views around the same time.
In order for the time conductor to work, there will always be an active "time system". All telemetry metadata *must* have a telemetry value with a `key` that matches the `key` of the active time system. You can use the `source` attribute on the value metadata to remap this to a different field in the telemetry datum-- especially useful if you are working with disparate datasources that have different field mappings.
#### Telemetry Providers
Telemetry providers are responsible for providing historical and real time telemetry data for telemetry objects. Each telemetry provider determines which objects it can provide telemetry for, and then must implement methods to provide telemetry for those objects.
A telemetry provider is a javascript object with up to four methods:
*`supportsSubscribe(domainObject, callback, options)` optional. Must be implemented to provide realtime telemetry. Should return `true` if the provider supports subscriptions for the given domain object (and request options).
*`subscribe(domainObject, callback, options)` required if `supportsSubscribe` is implemented. Establish a subscription for realtime data for the given domain object. Should invoke `callback` with a single telemetry datum every time data is received. Must return an unsubscribe function. Multiple views can subscribe to the same telemetry object, so it should always return a new unsubscribe function.
*`supportsRequest(domainObject, options)` optional. Must be implemented to provide historical telemetry. Should return `true` if the provider supports historical requests for the given domain object.
*`request(domainObject, options)` required if `supportsRequest` is implemented. Must return a promise for an array of telemetry datums that fulfills the request. The `options` argument will include a `start`, `end`, and `domain` attribute representing the query bounds. For more request properties, see Request Properties below.
Telemetry providers are registered by calling `openmct.telemetry.addProvider(provider)`, e.g.
Telemetry requests support time bounded queries. A call to a _Telemetry Provider_'s `request` function will include an `options` argument. These are simply javascript objects with attributes for the request parameters. An example of a telemetry request object with a start and end time is included below:
```javascript
{
start:1487981997240,
end:1487982897240,
domain:'utc'
}
```
#### Telemetry Formats
Telemetry format objects define how to interpret and display telemetry data.
They have a simple structure:
*`key`: A `string` that uniquely identifies this formatter.
*`format`: A `function` that takes a raw telemetry value, and returns a
human-readable `string` representation of that value. It has one required
argument, and three optional arguments that provide context and can be used
for returning scaled representations of a value. An example of this is
representing time values in a scale such as the time conductor scale. There
are multiple ways of representing a point in time, and by providing a minimum
scale value, maximum scale value, and a count, it's possible to provide more
useful representations of time given the provided limitations.
*`value`: The raw telemetry value in its native type.
*`minValue`: An __optional__ argument specifying the minimum displayed
value.
*`maxValue`: An __optional__ argument specifying the maximum displayed
value.
*`count`: An __optional__ argument specifying the number of displayed
values.
*`parse`: A `function` that takes a `string` representation of a telemetry
value, and returns the value in its native type. **Note** parse might receive an already-parsed value. This function should be idempotent.
*`validate`: A `function` that takes a `string` representation of a telemetry
value, and returns a `boolean` value indicating whether the provided string
can be parsed.
##### Registering Formats
Formats are registered with the Telemetry API using the `addFormat` function. eg.
``` javascript
openmct.telemetry.addFormat({
key: 'number-to-string',
format: function (number) {
return number + '';
},
parse: function (text) {
return Number(text);
},
validate: function (text) {
return !isNaN(text);
}
});
```
#### Telemetry Data
A single telemetry point is considered a Datum, and is represented by a standard
javascript object. Realtime subscriptions (obtained via __subscribe__) will
invoke the supplied callback once for each telemetry datum recieved. Telemetry
requests (obtained via __request__) will return a promise for an array of
telemetry datums.
##### Telemetry Datums
A telemetry datum is a simple javascript object, e.g.:
```json
{
"timestamp": 1491267051538,
"value": 77,
"id": "prop.fuel"
}
```
The key-value pairs of this object are described by the telemetry metadata of
a domain object, as discussed in the [Telemetry Metadata](#telemetry-metadata)
section.
## Time API
Open MCT provides API for managing the temporal state of the application.
Central to this is the concept of "time bounds". Views in Open MCT will
typically show telemetry data for some prescribed date range, and the Time API
provides a way to centrally manage these bounds.
The Time API exposes a number of methods for querying and setting the temporal
state of the application, and emits events to inform listeners when the state changes.
Because the data displayed tends to be time domain data, Open MCT must always
have at least one time system installed and activated. When you download Open
MCT, it will be pre-configured to use the UTC time system, which is installed and activated, along with other default plugins, in `index.html`. Installing and activating a time system is simple, and is covered
[in the next section](#defining-and-registering-time-systems).
### Time Systems and Bounds
#### Defining and Registering Time Systems
The time bounds of an Open MCT application are defined as numbers, and a Time
System gives meaning and context to these numbers so that they can be correctly
interpreted. Time Systems are javscript objects that provide some information
about the current time reference frame. An example of defining and registering
a new time system is given below:
``` javascript
openmct.time.addTimeSystem({
key: 'utc',
name: 'UTC Time',
cssClass = 'icon-clock',
timeFormat = 'utc',
durationFormat = 'duration',
isUTCBased = true
});
```
The example above defines a new utc based time system. In fact, this time system
is configured and activated by default from `index.html` in the default
installation of Open MCT if you download the source from GitHub. Some details of
each of the required properties is provided below.
* `key`: A `string` that uniquely identifies this time system.
* `name`: A `string` providing a brief human readable label. If the [Time Conductor](#the-time-conductor)
plugin is enabled, this name will identify the time system in a dropdown menu.
* `cssClass`: A class name `string` that will be applied to the time system when
it appears in the UI. This will be used to represent the time system with an icon.
There are a number of built-in icon classes [available in Open MCT](https://github.com/nasa/openmct/blob/master/platform/commonUI/general/res/sass/_glyphs.scss),
or a custom class can be used here.
* `timeFormat`: A `string` corresponding to the key of a registered
[telemetry time format](#telemetry-formats). The format will be used for
displaying discrete timestamps from telemetry streams when this time system is
activated. If the [UTCTimeSystem](#included-plugins) is enabled, then the `utc`
format can be used if this is a utc-based time system
* `durationFormat`: A `string` corresponding to the key of a registered
[telemetry time format](#telemetry-formats). The format will be used for
displaying time ranges, for example `00:15:00` might be used to represent a time
period of fifteen minutes. These are used by the Time Conductor plugin to specify
relative time offsets. If the [UTCTimeSystem](#included-plugins) is enabled,
then the `duration` format can be used if this is a utc-based time system
* `isUTCBased`: A `boolean` that defines whether this time system represents
numbers in UTC terrestrial time.
#### Getting and Setting the Active Time System
Once registered, a time system can be activated by calling `timeSystem` with
the timeSystem `key` or an instance of the time system. If you are not using a
[clock](#clocks), you must also specify valid [bounds](#time-bounds) for the
timeSystem.
```javascript
openmct.time.timeSystem('utc', bounds);
```
A time system can be immediately activated after registration:
```javascript
openmct.time.addTimeSystem(utcTimeSystem);
openmct.time.timeSystem(utcTimeSystem, bounds);
```
Setting the active time system will trigger a [`'timeSystem'`](#time-events)
event. If you supplied bounds, a [`'bounds'`](#time-events) event will be triggered afterwards with your newly supplied bounds.
### Time Bounds
The TimeAPI provides a getter/setter for querying and setting time bounds. Time
bounds are simply an object with a `start` and an end `end` attribute.
* `start`: A `number` representing a moment in time in the active [Time System](#defining-and-registering-time-systems).
This will be used as the beginning of the time period displayed by time-responsive
telemetry views.
* `end`: A `number` representing a moment in time in the active [Time System](#defining-and-registering-time-systems).
This will be used as the end of the time period displayed by time-responsive
telemetry views.
If invoked with bounds, it will set the new time bounds system-wide. If invoked
without any parameters, it will return the current application-wide time bounds.
``` javascript
const ONE_HOUR = 60 * 60 * 1000;
let now = Date.now();
openmct.time.bounds({start: now - ONE_HOUR, now);
```
To respond to bounds change events, listen for the [`'bounds'`](#time-events)
event.
## Clocks
The Time API can be set to follow a clock source which will cause the bounds
to be updated automatically whenever the clock source "ticks". A clock is simply
an object that supports registration of listeners and periodically invokes its
listeners with a number. Open MCT supports registration of new clock sources that
tick on almost anything. A tick occurs when the clock invokes callback functions
registered by its listeners with a new time value.
An example of a clock source is the [LocalClock](https://github.com/nasa/openmct/blob/master/src/plugins/utcTimeSystem/LocalClock.js)
which emits the current time in UTC every 100ms. Clocks can tick on anything. For
example, a clock could be defined to provide the timestamp of any new data
received via a telemetry subscription. This would have the effect of advancing
the bounds of views automatically whenever data is received. A clock could also
be defined to tick on some remote timing source.
The values provided by clocks are simple `number`s, which are interpreted in the
context of the active [Time System](#defining-and-registering-time-systems).
### Defining and registering clocks
A clock is an object that defines certain required metadata and functions:
* `key`: A `string` uniquely identifying this clock. This can be used later to
reference the clock in places such as the [Time Conductor configuration](#time-conductor-configuration)
* `cssClass`: A `string` identifying a CSS class to apply to this clock when it's
displayed in the UI. This will be used to represent the time system with an icon.
There are a number of built-in icon classes [available in Open MCT](https://github.com/nasa/openmct/blob/master/platform/commonUI/general/res/sass/_glyphs.scss),
or a custom class can be used here.
* `name`: A `string` providing a human-readable identifier for the clock source.
This will be displayed in the clock selector menu in the Time Conductor UI
component, if active.
* `description`: An __optional__ `string` providing a longer description of the
clock. The description will be visible in the clock selection menu in the Time
Conductor plugin.
* `on`: A `function` supporting registration of a new callback that will be
invoked when the clock next ticks. It will be invoked with two arguments:
* `eventName`: A `string` specifying the event to listen on. For now, clocks
support one event - `tick`.
* `callback`: A `function` that will be invoked when this clock ticks. The
function must be invoked with one parameter - a `number` representing a valid
time in the current time system.
* `off`: A `function` that allows deregistration of a tick listener. It accepts
the same arguments as `on`.
* `currentValue`: A `function` that returns a `number` representing a point in
time in the active time system. It should be the last value provided by a tick,
or some default value if no ticking has yet occurred.
A new clock can be registered using the `addClock` function exposed by the Time
API:
```javascript
var someClock = {
key: 'someClock',
cssClass: 'icon-clock',
name: 'Some clock',
description: "Presumably does something useful",
on: function (event, callback) {
// Some function that registers listeners, and updates them on a tick
},
off: function (event, callback) {
// Some function that unregisters listeners.
},
currentValue: function () {
// A function that returns the last ticked value for the clock
}
}
openmct.time.addClock(someClock);
```
An example clock implementation is provided in the form of the [LocalClock](https://github.com/nasa/openmct/blob/master/src/plugins/utcTimeSystem/LocalClock.js)
#### Getting and setting active clock
Once registered a clock can be activated by calling the `clock` function on the
Time API passing in the key or instance of a registered clock. Only one clock
may be active at once, so activating a clock will deactivate any currently
active clock. [`clockOffsets`](#clock-offsets) must be specified when changing a clock.
Setting the clock triggers a [`'clock'`](#time-events) event, followed by a [`'clockOffsets'`](#time-events) event, and then a [`'bounds'`](#time-events) event as the offsets are applied to the clock's currentValue().
```
openmct.time.clock(someClock, clockOffsets);
```
Upon being activated, the time API will listen for tick events on the clock by calling `clock.on`.
The currently active clock (if any) can be retrieved by calling the same
function without any arguments.
#### Stopping an active clock
The `stopClock` method can be used to stop an active clock, and to clear it. It
will stop the clock from ticking, and set the active clock to `undefined`.
``` javascript
openmct.time.stopClock();
```
#### Clock Offsets
When a clock is active, the time bounds of the application will be updated
automatically each time the clock "ticks". The bounds are calculated based on
the current value provided by the active clock (via its `tick` event, or its
`currentValue()` method).
Unlike bounds, which represent absolute time values, clock offsets represent
relative time spans. Offsets are defined as an object with two properties:
* `start`: A `number` that must be < 0 and which is used to calculate the start
bounds on each clock tick. The start offset will be calculated relative to the
value provided by a clock's tick callback, or its `currentValue()` function.
* `end`: A `number` that must be >= 0 and which is used to calculate the end
bounds on each clock tick.
The `clockOffsets` function can be used to get or set clock offsets. For example,
to show the last fifteen minutes in a ms-based time system:
```javascript
var FIFTEEN_MINUTES = 15 * 60 * 1000;
openmct.time.clockOffsets({
start: -FIFTEEN_MINUTES,
end: 0
})
```
__Note:__ Setting the clock offsets will trigger an immediate bounds change, as
new bounds will be calculated based on the `currentValue()` of the active clock.
Clock offsets are only relevant when a clock source is active.
## Time Events
The Time API is a standard event emitter; you can register callbacks for events using the `on` method and remove callbacks for events with the `off` method.
For example:
``` javascript
openmct.time.on('bounds', function callback (newBounds, tick) {
// Do something with new bounds
});
```
#### List of Time Events
The events emitted by the Time API are:
* `bounds`: emitted whenever the bounds change. The callback will be invoked
with two arguments:
* `bounds`: A [bounds](#getting-and-setting-bounds) bounds object
representing a new time period bound by the specified start and send times.
* `tick`: A `boolean` indicating whether or not this bounds change is due to
a "tick" from a [clock source](#clocks). This information can be useful
when determining a strategy for fetching telemetry data in response to a
bounds change event. For example, if the bounds change was automatic, and
is due to a tick then it's unlikely that you would need to perform a
historical data query. It should be sufficient to just show any new
telemetry received via subscription since the last tick, and optionally to
discard any older data that now falls outside of the currently set bounds.
If `tick` is false,then the bounds change was not due to an automatic tick,
and a query for historical data may be necessary, depending on your data
caching strategy, and how significantly the start bound has changed.
* `timeSystem`: emitted whenever the active time system changes. The callback will be invoked with a single argument:
* `timeSystem`: The newly active [time system](#defining-and-registering-time-systems).
* `clock`: emitted whenever the clock changes. The callback will be invoked
with a single argument:
* `clock`: The newly active [clock](#clocks), or `undefined` if an active
clock has been deactivated.
* `clockOffsets`: emitted whenever the active clock offsets change. The
callback will be invoked with a single argument:
* `clockOffsets`: The new [clock offsets](#clock-offsets).
## The Time Conductor
The Time Conductor provides a user interface for managing time bounds in Open
MCT. It allows a user to select from configured time systems and clocks, and to set bounds and clock offsets.
If activated, the time conductor must be provided with configuration options,
detailed below.
#### Time Conductor Configuration
The time conductor is configured by specifying the options that will be
available to the user from the menus in the time conductor. These will determine
the clocks available from the conductor, the time systems available for each
clock, and some default bounds and clock offsets for each combination of clock
and time system. By default, the conductor always supports a `fixed` mode where
no clock is active. To specify configuration for fixed mode, simply leave out a
`clock` attribute in the configuration entry object.
Configuration is provided as an `array` of menu options. Each entry of the
array is an object with some properties specifying configuration. The configuration
options specified are slightly different depending on whether or not it is for
an active clock mode.
__Configuration for Fixed Time Mode (no active clock)__
* `timeSystem`: A `string`, the key for the time system that this configuration
relates to.
* `bounds`: A [`Time Bounds`](#time-bounds) object. These bounds will be applied
when the user selects the time system specified in the previous `timeSystem`
property.
* `zoomOutLimit`: An __optional__ `number` specifying the longest period of time
that can be represented by the conductor when zooming. If a `zoomOutLimit` is
provided, then a `zoomInLimit` must also be provided. If provided, the zoom
slider will automatically become available in the Time Conductor UI.
* `zoomInLimit`: An __optional__ `number` specifying the shortest period of time
that can be represented by the conductor when zooming. If a `zoomInLimit` is
provided, then a `zoomOutLimit` must also be provided. If provided, the zoom
slider will automatically become available in the Time Conductor UI.
__Configuration for Active Clock__
* `clock`: A `string`, the `key` of the clock that this configuration applies to.
* `timeSystem`: A `string`, the key for the time system that this configuration
relates to. Separate configuration must be provided for each time system that you
wish to be available to users when they select the specified clock.
* `clockOffsets`: A [`clockOffsets`](#clock-offsets) object that will be
automatically applied when the combination of clock and time system specified in
this configuration is selected from the UI.
#### Example conductor configuration
An example time conductor configuration is provided below. It sets up some
default options for the [UTCTimeSystem](https://github.com/nasa/openmct/blob/master/src/plugins/utcTimeSystem/UTCTimeSystem.js)
and [LocalTimeSystem](https://github.com/nasa/openmct/blob/master/src/plugins/localTimeSystem/LocalTimeSystem.js),
in both fixed mode, and for the [LocalClock](https://github.com/nasa/openmct/blob/master/src/plugins/utcTimeSystem/LocalClock.js)
source. In this configutation, the local clock supports both the UTCTimeSystem
and LocalTimeSystem. Configuration for fixed bounds mode is specified by omitting
a clock key.
``` javascript
const ONE_YEAR = 365 * 24 * 60 * 60 * 1000;
const ONE_MINUTE = 60 * 1000;
openmct.install(openmct.plugins.Conductor({
menuOptions: [
// 'Fixed' bounds mode configuation for the UTCTimeSystem
Open MCT Web, Copyright (c) 2014-2015, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.
Open MCT, Copyright (c) 2014-2017, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.
Open MCT Web 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.
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 Web includes source code licensed under additional open source licenses as follows.
Open MCT includes source code licensed under additional open source licenses as follows.
## Software Components Licenses
@ -135,7 +135,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
* Link: http://requirejs.org/
* Version: 2.1.9
* Version: 2.1.22
* Author: The Dojo Foundation
@ -153,13 +153,49 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
---
### requirejs-text
#### Info
* Link: https://github.com/requirejs/text
* Version: 2.0.14
* Author: The Dojo Foundation
* Description: Text loading plugin for RequireJS
#### License
Copyright (c) 2010-2014, The Dojo Foundation
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
---
### AngularJS
#### Info
* Link: http://angularjs.org/
* Version: 1.2.26
* Version: 1.4.4
* Author: Google
@ -167,7 +203,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#### License
Copyright (c) 2010-2014 Google, Inc. http://angularjs.org
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@ -183,7 +219,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
* Link: http://angularjs.org/
* Version: 1.2.26
* Version: 1.4.4
* Author: Google
@ -191,7 +227,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
#### License
Copyright (c) 2010-2014 Google, Inc. http://angularjs.org
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@ -207,7 +243,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
### Modernizr
#### Info
* Link: http://modernizr.com
* Version: 2.6.2
* Author: Faruk Ateş
* Description: Browser/device capability finding
#### License
Copyright (c) 2009–2015
Copyright (c) 2010-2012 Robert Kieffer
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@ -327,7 +339,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
* Link: http://momentjs.com
* Version: 2.7.0
* Version: 2.11.1
* Authors: Tim Wood, Iskren Chernev, Moment.js contributors
@ -380,6 +392,104 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
### CSV.js
#### Info
* Link: https://github.com/knrz/CSV.js
* Version: 3.6.4
* Authors: Kash Nouroozi
* Description: Encoder for CSV (comma separated values) export
#### License
Copyright (c) 2014 Kash Nouroozi
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
### Zepto
#### Info
* Link: http://zeptojs.com/
* Version: 1.1.6
* Authors: Thomas Fuchs
* Description: DOM manipulation
#### License
Copyright (c) 2010-2016 Thomas Fuchs
http://zeptojs.com/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
### Json.NET
#### Info
@ -450,3 +560,132 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
### Almond
* Link: https://github.com/requirejs/almond
* Version: 0.3.3
* Author: jQuery Foundation
* Description: Lightweight RequireJS replacement for builds
#### License
Copyright jQuery Foundation and other contributors, https://jquery.org/
This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
available at https://github.com/requirejs/almond
The following license applies to all parts of this software except as
documented below:
====
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
====
Copyright and related rights for sample code are waived via CC0. Sample
code is defined as all source code displayed within the prose of the
# Open MCT [](http://www.apache.org/licenses/LICENSE-2.0)
Open MCT Web is a web-based platform for mission operations user interface
software.
Open MCT (Open Mission Control Technologies) is a next-generation mission control framework for visualization of data on desktop and mobile devices. It is developed at NASA's Ames Research Center, and is being used by NASA for data analysis of spacecraft missions, as well as planning and operation of experimental rover systems. As a generalizable and open source framework, Open MCT could be used as the basis for building applications for planning, operation, and analysis of any systems producing telemetry data.
Please visit our [Official Site](https://nasa.github.io/openmct/) and [Getting Started Guide](https://nasa.github.io/openmct/getting-started/)
## See Open MCT in Action
Try Open MCT now with our [live demo](https://openmct-demo.herokuapp.com/).
A simpler, [easier-to-use API](https://nasa.github.io/openmct/docs/api/)
has been added to Open MCT. Changes in this
API include a move away from a declarative system of JSON configuration files
towards an imperative system based on function calls. Developers will be able
to extend and build on Open MCT by making direct function calls to a public
API. Open MCT is also being refactored to minimize the dependencies that using
Open MCT imposes on developers, such as the current requirement to use
AngularJS.
This new API has not yet been heavily used and is likely to contain defects.
You can help by trying it out, and reporting any issues you encounter
using our GitHub issue tracker. Such issues may include bugs, suggestions,
missing documentation, or even just requests for help if you're having
trouble.
We want Open MCT to be as easy to use, install, run, and develop for as
possible, and your feedback will help us get there!
## Building and Running Open MCT Locally
Building and running Open MCT in your local dev environment is very easy. Be sure you have [Git](https://git-scm.com/downloads) and [Node.js](https://nodejs.org/) installed, then follow the directions below. Need additional information? Check out the [Getting Started](https://nasa.github.io/openmct/getting-started/) page on our website.
(These instructions assume you are installing as a non-root user; developers have [reported issues](https://github.com/nasa/openmct/issues/1151) running these steps with root privileges.)
1. Clone the source code
`git clone https://github.com/nasa/openmct.git`
2. Install development dependencies
`npm install`
3. Run a local development server
`npm start`
Open MCT is now running, and can be accessed by pointing a web browser at [http://localhost:8080/](http://localhost:8080/)
## Documentation
Documentation is available on the [Open MCT website](https://nasa.github.io/openmct/documentation/). The documentation can also be built locally.
### Examples
The clearest examples for developing Open MCT plugins are in the
[tutorials](https://github.com/nasa/openmct-tutorial) provided in
our documentation.
For a practical example of a telemetry adapter, see David Hudson's
[Kerbal Space Program plugin](https://github.com/hudsonfoo/kerbal-openmct),
which allows [Kerbal Space Program](https://kerbalspaceprogram.com) players
to build and use displays for their own missions in Open MCT.
Additional examples are available in the `examples` hierarchy of this
repository; however, be aware that these examples are
[not fully-documented](https://github.com/nasa/openmct/issues/846), so
the tutorials will likely serve as a better starting point.
### Building the Open MCT Documentation Locally
Open MCT's documentation is generated by an
[npm](https://www.npmjs.com/)-based build. It has additional dependencies that
may not be available on every platform and thus is not covered in the standard
npm install. Ensure your system has [libcairo](http://cairographics.org/)
installed and then run the following commands:
*`npm install`
*`npm install canvas nomnoml`
*`npm run docs`
Documentation will be generated in `target/docs`.
## Deploying Open MCT
Open MCT is built using [`npm`](http://npmjs.com/)
and [`gulp`](http://gulpjs.com/).
To build Open MCT for deployment:
`npm run prepublish`
This will compile and minify JavaScript sources, as well as copy over assets.
The contents of the `dist` folder will contain a runnable Open MCT
instance (e.g. by starting an HTTP server in that directory), including:
* A `main.js` file containing Open MCT source code.
* Various assets in the `example` and `platform` directories.
* An `index.html` that runs Open MCT in its default configuration.
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
## Bundles
A bundle is a group of software components (including source code, declared
as AMD modules, as well as resources such as images and HTML templates)
that are intended to be added or removed as a single unit. A plug-in for
Open MCT Web will be expressed as a bundle; platform components are also
that is intended to be added or removed as a single unit. A plug-in for
Open MCT will be expressed as a bundle; platform components are also
expressed as bundles.
A bundle is also just a directory which contains a file `bundle.json`,
@ -16,111 +113,33 @@ which declares its contents.
The file `bundles.json` (note the plural), at the top level of the
repository, is a JSON file containing an array of all bundles (expressed as
directory names) to include in a running instance of Open MCT Web. Adding or
directory names) to include in a running instance of Open MCT. Adding or
removing paths from this list will add or remove bundles from the running
application.
### Bundle Contents
A bundle directory will contain:
*`bundle.json`, the declaration of the bundles contents.
* A source code directory, named `src` by convention. This contains all
JavaScript sources exposed by the bundle. These are declared as
AMD modules.
* A directory for other resources, named `res` by convention. This
contains all HTML templates, CSS files, images, and so forth to be
used within a given bundle.
* A library directory, named `lib` by convention. This contains all
external libraries used and/or exposed by the bundle.
* A test directory, named `test` by convention. This contains all unit
tests declared for the bundle, as well as a `suite.json` that acts
as a listing of these dependencies. See the section on unit testing
below.
Following these bundle conventions is required, at present, to ensure
that Open MCT Web (and its build and tests) execute correctly.
## Tests
The repository for Open MCT Web includes a test suite that can be run
directly from the web browser, `test.html`. This page will:
Tests are written for [Jasmine 1.3](http://jasmine.github.io/1.3/introduction.html)
and run by [Karma](http://karma-runner.github.io). To run:
* Load `bundles.json` to determine which bundles are in the application.
* Load `test/suite.json` to determine which source files are to be tested.
This should contain an array of strings, where each is the name of an
AMD module in the bundle's source directory. For each source file:
* Code coverage instrumentation will be added, via Blanket.
* The associated test file will be loaded, via RequireJS. These will
be located in the bundle's test folder; the test runner will presume
these follow a naming convention where each module to be tested has a
corresponding test module with the suffix `Spec` in that folder.
* Jasmine will then be invoked to run all tests defined in the loaded
test modules. Code coverage reporting will be displayed at the bottom
of the test page.
`npm test`
At present, the test runner presumes that bundle conventions are followed
as above; that is, sources are contained in `src`, and tests are contained
in `test`. Additionally, individual test files must use the `Spec` suffix
as described above.
The test suite is configured to load any scripts ending with `Spec.js` found
in the `src` hierarchy. Full configuration details are found in
`karma.conf.js`. By convention, unit test scripts should be located
alongside the units that they test; for example, `src/foo/Bar.js` would be
tested by `src/foo/BarSpec.js`. (For legacy reasons, some existing tests may
be located in separate `test` folders near the units they test, but the
naming convention is otherwise the same.)
An example of this is expressed in `platform/framework`, which follows
bundle conventions.
### Functional Testing
The tests described above are all at the unit-level; an additional
test suite using [Protractor](https://angular.github.io/protractor/)
us under development, in the `protractor` folder.
To run:
* Install protractor following the instructions above.
*`cd protractor`
*`npm install`
*`npm run all`
## Build
Open MCT Web includes a Maven command line build. Although Open MCT Web
can be run as-is using the repository contents (that is, by viewing
`index.html` in a web browser), and its tests can be run in-place
similarly (that is, by viewing `test.html` in a browser), the command
line build allows machine-driven verification and packaging.
This build will:
* Check all sources (excluding those in directories named `lib`) with
JSLint for code style compliance. The build will fail if any sources
do not satisfy JSLint.
* Run unit tests. This is done by running `test.html` in a PhantomJS
browser-like environment. The build will fail if any tests fail.
* Package the application as a `war` (web archive) file. This is
convenient for deployment on Tomcat or similar. This archive will
include sources, resources, and libraries for bundles, as well
as the top-level files used to initiate running of the application
(`index.html` and `bundles.json`).
Run as `mvn clean install`.
### Building Documentation
Open MCT Web's documentation is generated by an
[npm](https://www.npmjs.com/)-based build:
*`npm install`_(only needs to run once)_
*`npm run docs`
Documentation will be generated in `target/docs`. Note that diagram
generation is dependent on having [Cairo](http://cairographics.org/download/)
- [Get rid of "extension category" concept.](#get-rid-of-extension-category-concept)
- [Reduce number and depth of extension points](#reduce-number-and-depth-of-extension-points)
- [Composite services should not be the default](#composite-services-should-not-be-the-default)
- [Get rid of views, representations, and templates.](#get-rid-of-views-representations-and-templates)
- [Reducing interface depth (The angular discussion)](#reducing-interface-depth-the-angular-discussion)
- [More angular: for all services](#more-angular-for-all-services)
- [Less angular: only for views](#less-angular-only-for-views)
- [Standard packaging and build system](#standard-packaging-and-build-system)
- [Use systemjs for module loading](#use-systemjs-for-module-loading)
- [Use gulp or grunt for standard tooling](#use-gulp-or-grunt-for-standard-tooling)
- [Package openmctweb as single versioned file.](#package-openmctweb-as-single-versioned-file)
- [Misc Improvements](#misc-improvements)
- [Refresh on navigation](#refresh-on-navigation)
- [Move persistence adapter to promise rejection.](#move-persistence-adapter-to-promise-rejection)
- [Remove bulk requests from providers](#remove-bulk-requests-from-providers)
- [Notes on current API proposals:](#notes-on-current-api-proposals)
- [[1] Footnote: The angular debacle](#1-footnote-the-angular-debacle)
- ["Do or do not, there is no try"](#do-or-do-not-there-is-no-try)
- [A lack of commitment](#a-lack-of-commitment)
- [Commitment is good!](#commitment-is-good)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Reducing interface depth (the bundle.json version)
## Imperative component registries
Transition component registries to javascript, get rid of bundle.json and bundles.json. Prescribe a method for application configuration, but allow flexibility in how application configuration is defined.
Register components in an imperative fashion, see angularApp.factory, angularApp.controller, etc. Alternatively, implement our own application object with new registries and it's own form of registering objects.
## Get rid of "extension category" concept.
The concept of an "extension category" is itself an extraneous concept-- an extra layer of interface depth, an extra thing to learn before you can say "hello world". Extension points should be clearly supported and documented with whatever interfaces make sense. Developers who wish to add something that is conceptually equivalent to an extension category can do so directly, in the manner that suites their needs, without us forcing a common method on them.
## Reduce number and depth of extension points
Clearly specify supported extension points (e.g. persistence, model providers, telemetry providers, routes, time systems), but don't claim that the system has a clear and perfect repeatable solution for unknown extension types. New extension categories can be implemented in whatever way makes sense, without prescribing "the one and only system for managing extensions".
The underlying problem here is we are predicting needs for extension points where none exist-- if we try and design the extension system before we know how it is used, we design the wrong thing and have to rewrite it later.
## Composite services should not be the default
Understanding composite services, and describing services as composite services can confuse developers. Aggregators are implemented once and forgotten, while decorators tend to be hacky, brittle solutions that are generally needed to avoid circular imports. While composite services are a useful construct, it reduces interface depth to implement them as registries + typed providers.
You can write a provider (provides "thing x" for "inputs y") with a simple interface. A provider has two or more methods:
* a method which takes "inputs y" and returns True if it knows how to provide "thing x", false otherwise.
* one or more methods which provide "thing x" for objects of "inputs y".
Actually checking whether a provider can respond to a request before asking it to do work allows for faster failure and clearer errors when no providers match the request.
## Get rid of views, representations, and templates.
Templates are an implementation detail that should be handled by module loaders. Views and representations become "components," and a new concept, "routes", is used to exposing specific views to end users.
`components` - building blocks for views, have clear inputs and outputs, and can be coupled to other components when it makes sense. (e.g. parent-child components such as menu and menu item), but should have ZERO knowledge of our data models or telemetry apis. They should define data models that enable them to do their job well while still being easy to test.
`routes` - a view type for a given domain object, e.g. a plot, table, display layout, etc. Can be described as "whatever shows in the main screen when you are viewing an object." Handle loading of data from a domain object and passing that data to the view components. Routes should support editing as it makes sense in their own context.
To facilitate testing:
* routes should be testable without having to test the actual view.
* components should be independently testable with zero knowledge of our data models or telemetry APIs.
Component code should be organized side by side, such as:
```
app
|- components
|- productDetail
| |- productDetail.js
| |- productDetail.css
| |- productDetail.html
| |- productDetailSpec.js
|- productList
|- checkout
|- wishlist
```
Components are not always reusable, and we shouldn't be overly concerned with making them so. If components are heavily reused, they should either be moved to a platform feature (e.g. notifications, indicators), or broken off as an external dependency (e.g. publish mct-plot as mct-plot.js).
# Reducing interface depth (The angular discussion)
Two options here: use more angular, use less angular. Wrapping angular methods does not reduce interface depth and must be avoided.
The primary issue with angular is duplications of concerns-- both angular and the openmctweb platform implement the same tools side by side and it can be hard to comprehend-- it increases interface depth. For other concerns, see footnotes[1].
Wrapping angular methods for non-view related code is confusing to developers because of the random constraints angular places on these items-- developers ultimately have to understand both angular DI and our framework. For example, it's not possible to name the topic service "topicService" because angular expects Services to be implemented by Providers, which is different than our expectation.
To reduce interface depth, we can replace our own provider and registry patterns with angular patterns, or we can only utilize angular view logic, and only use our own DI patterns.
## More angular: for all services
Increasing our commitment to angular would mean using more of the angular factories, services, etc, and less of our home grown tools. We'd implement our services and extension points as angular providers, and make them configurable via app.config.
As an example, registering a specific type of model provider in angular would look like:
If we wish to use less angular, I would recommend discontinuing use of all angular components that are not view related-- services, factories, $http, etc, and implementing them in our own paradigm. Otherwise, we end up with layered interfaces-- one of the goals we would like to avoid.
# Standard packaging and build system
Standardize the packaging and build system, and completely separate the core platform from deployments. Prescribe a starting point for deployments, but allow flexibility.
## Use systemjs for module loading
Allow developers to use whatever module loading system they'd like to use, while still supporting all standard cases. We should also use this system for loading assets (css, scss, html templates), which makes it easier to implement a single file deployment using standard build tooling.
## Use gulp or grunt for standard tooling
Using gulp or grunt as a task runner would bring us in line with standard web developer workflows and help standardize rendering, deployment, and packaging. Additional tools can be added to the workflow at low cost, simplifying the setup of developer environments.
Gulp and grunt provide useful developer tooling such as live reload, automatic scss/less/etc compilation, and ease of extensibility for standard production build processes. They're key in decoupling code.
## Package openmctweb as single versioned file.
Deployments should depend on a specific version of openmctweb, but otherwise be allowed to have their own deployment and development toolsets.
Customizations and deployments of openmctweb should not use the same build tooling as the core platform; instead they should be free to use their own build tools as they wish. (We would provide a template for an application, based on our experience with warp-for-rp and vista)
Installation and utilization of openmctweb should be as simple as downloading the js file, including it in your own html page, and then initializing an app and running it. If a developer would prefer, they could use bower or npm to handle installation.
Then, if we're using imperative methods for extending the application we can use the following for basic customization:
This packaging reduces the complexity of managing multiple deployed versions, and also allows us to provide users with incredibly simple tutorials-- they can use whatever tooling they like. For instance, a hello world tutorial may take the option of "exposing a new object in the tree".
```javascript
varmyApp=newOpenMCTWeb();
myApp.roots.addRoot({
id:'myRoot',
name:'Hello World!',
});
myApp.routes.setDefault('myRoot');
myApp.run();
```
# Misc Improvements
## Refresh on navigation
In cases where navigation events change the entire screen, we should be using routes and location changes to navigate between objects. We should be using href for all navigation events.
At the same time, navigating should refresh state of every visible object. A properly configured persistence store will handle caching with standard cache headers and 304 not modified responses, which will provide good performance of object reloads, while helping us ensure that objects are always in sync between clients.
View state (say, the expanded tree nodes) should not be tied to caching of data-- it should be something we intentionally persist and restore with each navigation. Data (such as object definitions) should be reloaded from server as necessary to restore state.
## Move persistence adapter to promise rejection.
Simple: reject on fail, resolve on success.
## Remove bulk requests from providers
Aggregators can request multiple things at once, but individual providers should only have to implement handling at the level of a single request. Each provider can implement it's own internal batching, but it should support making requests at a finer level of detail.
Excessive wrapping of code with $q.all causes additional digest cycles and decreased performance.
For example, instead of every telemetry provider responding to a given telemetry request, aggregators should route each request to the first provider that can fulfill that request.
# Notes on current API proposals:
* [RequireJS for Dependency Injection](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#requirejs-as-dependency-injector): requires other topics to be discussed first.
* [Arbitrary HTML Views](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#arbitrary-html-views): think there is a place for it, requires other topics to be discussed first.
* [Wrap Angular Services](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#wrap-angular-services): No, this is bad.
* [Bundle definitions in Javascript](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#bundle-declarations-in-javascript): Points to a solution, but ultimately requires more discussion.
* [pass around a dependency injector](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#pass-around-a-dependency-injector): No.
* [remove partial constructors](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#remove-partial-constructors): Yes, this should be superseded by another proposal though. The entire concept was a messy solution to dependency injection issues caused by declarative syntax.
* [Rename views to applications](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#rename-views-to-applications): Points to a problem that needs to be solved but I think the name is bad.
* [Provide classes for extensions](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#provide-classes-for-extensions): Yes, in specific places
* [Expose no third-party APIs](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#expose-no-third-party-apis): Completely disagree, points to a real problem with poor angular integration.
* [Register Extensions as Instances instead of Constructors](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#register-extensions-as-instances-instead-of-constructors): Superseded by the fact that we should not hope to implement a generic construct.
* [Nomenclature Change](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#nomenclature-change): Yes, hope to discuss the implications of this more clearly in other proposals.
* [Capabilities as mixins](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#capabilities-as-mixins): Yes.
* [Remove appliesTo methods](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#remove-applies-to-methods): No-- I think some level of this is necessary. I think a more holistic approach to policy is needed. it's a rather complicated system.
* [Revise telemetry API](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#revise-telemetry-api): If we can rough out and agree to the specifics, then Yes. Needs discussion.
* [Allow composite services to fail gracefully](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#allow-composite-services-to-fail-gracefully): No. As mentioned above, I think composite services themselves should be eliminated for a more purpose bound tool.
* [Plugins as angular modules](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#plugins-as-angular-modules): Should we decide to embrace Angular completely, I would support this. Otherwise, no.
* [Contextual Injection](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#contextual-injection): No, don't see a need.
* [Add New Abstractions for Actions](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#add-new-abstractions-for-actions): Worth a discussion.
* [Add gesture handlers](https://github.com/nasa/openmctweb/blob/api-redesign/docs/src/design/proposals/APIRedesign.md#add-gesture-handlers): Yes if we can agree on details. We need a platform implementation that is easy to use, but we should not reinvent the wheel.
# [1] Footnote: The angular debacle
## "Do or do not, there is no try"
A commonly voiced concern of embracing angular is the possibility of becoming dependent on a third party framework. This concern is itself detrimental-- if we're afraid of becoming dependent on a third party framework, then we will do a bad job of using the framework, and inevitably will want to stop using it.
If we're using a framework, we need to use it fully, or not use it at all.
## A lack of commitment
A number of the concerns we heard from developers and interns can be attributed to the tenuous relationship between the OpenMCTWeb platform and angular. We claimed to be angular, but we weren't really angular. Instead, we are caught between our incomplete framework paradigm and the angular paradigm. In many cases we reinvented the wheel or worked around functionality that angular provides, and ended up in a more confusing state.
## Commitment is good!
We could just be an application that is built with angular.
An application that is modular and extensible not because it reinvents tools for providing modularity and extensibility, but because it reuses existing tools for modularity and extensibility.
There are benefits to buying into the angular paradigm: shift documentation burden to external project, engage a larger talent pool available both as voluntary open source contributors and as experienced developers for hire, and gain access to an ecosystem of tools that we can use to increase the speed of development.
There are negatives too: Angular is a monolith, it has performance concerns, and an unclear future. If we can't live with it, we should look at alternatives.
*`remove:row`: A `$broadcast` event that will notify the table that a row
should be removed from the table.
eg. The code below removes a row from the rows array, and then alerts the table
to its removal.
```
$scope.rows.slice(5, 1);
$scope.$broadcast('remove:row', 5);
```
### Parameters
*`headers`: An array of string values which will constitute the column titles
that appear at the top of the table. Corresponding values are specified in
the rows using the header title provided here.
*`rows`: An array of objects containing row values. Each element in the
array must be an associative array, where the key corresponds to a column header.
*`enableFilter`: A boolean that if true, will enable searching and result
filtering. When enabled, each column will have a text input field that can be
used to filter the table rows in real time.
*`enableSort`: A boolean determining whether rows can be sorted. If true,
sorting will be enabled allowing sorting by clicking on column headers. Only
one column may be sorted at a time.
*`autoScroll`: A boolean value that if true, will cause the table to automatically
scroll to the bottom as new data arrives. Auto-scroll can be disengaged manually
by scrolling away from the bottom of the table, and can also be enabled manually
by scrolling to the bottom of the table rows.
# Services
The Open MCT Web platform provides a variety of services which can be retrieved
The Open MCT platform provides a variety of services which can be retrieved
and utilized via dependency injection. These services fall into two categories:
* _Composite Services_ are defined by a set of components extensions; plugins may
@ -1591,7 +1628,7 @@ utilized by plugins but are not intended to be modified or augmented.
## Composite Type Services
This section describes the composite services exposed by Open MCT Web,
This section describes the composite services exposed by Open MCT,
specifically focusing on their interface and contract.
In many cases, the platform will include a provider for a service which consumes
@ -1909,7 +1946,7 @@ The `workerService` may be used to run web workers defined via the
as a shared worker); if the `key` is unknown, returns `undefined`.
# Models
Domain object models in Open MCT Web are JavaScript objects describing the
Domain object models in Open MCT are JavaScript objects describing the
persistent state of the domain objects they describe. Their contents include a
mix of commonly understood metadata attributes; attributes which are recognized
by and/or determine the applicability of specific extensions; and properties
@ -1925,7 +1962,7 @@ MCT Web and can be utilized directly:
## Extension-specific Properties
Other properties of domain object models have specific meaning imposed by other
extensions within the Open MCT Web platform.
extensions within the Open MCT platform.
### Capability-specific Properties
@ -2209,7 +2246,7 @@ way of its `composition` capability.)
# Policies
Policies are consulted to determine when certain behavior in Open MCT Web is
Policies are consulted to determine when certain behavior in Open MCT is
allowed. Policy questions are assigned to certain categories, which broadly
describe the type of decision being made; within each category, policies have a
candidate (the thing which may or may not be allowed) and, optionally, a context
@ -2225,82 +2262,69 @@ The platform understands the following policy categories (specifiable as the
*`action`: Determines whether or not a given action is allowable. The candidate
argument here is an Action; the context is its action context object.
*`composition`: Determines whether or not domain objects of a given type are
allowed to contain domain objects of another type. The candidate argument here
is the container's `Type`; the context argument is the `Type` of the object to be
contained.
*`composition`: Determines whether or not a given domain object(first argument, `parent`) can contain a candidate child object (second argument, `child`).
*`view`: Determines whether or not a view is applicable for a domain object.
The candidate argument is the view's extension definition; the context argument
is the `DomainObject` to be viewed.
# Build-Test-Deploy
Open MCT Web is designed to support a broad variety of build and deployment
Open MCT is designed to support a broad variety of build and deployment
options. The sources can be deployed in the same directory structure used during
development. A few utilities are included to support development processes.
## Command-line Build
Open MCT Web includes a script for building via command line using Maven 3.0.4
https://maven.apache.org/ .
Invoking mvn clean install will:
* Check code style using JSLint. The build will fail if JSLint raises any warnings.
* Run the test suite (see below.) The build will fail if any tests fail.
* Populate version info (e.g. commit hash, build time.)
* Produce a web archive (`.war`) artifact in the `target` directory.
Open MCT is built using [`npm`](http://npmjs.com/)
and [`gulp`](http://gulpjs.com/).
The produced artifact contains a subset of the repository's own folder
hierarchy, omitting tests and example bundles.
To install build dependencies (only needs to be run once):
`npm install`
To build:
`npm run prepublish`
This will compile and minify JavaScript sources, as well as copy over assets.
The contents of the `dist` folder will contain a runnable Open MCT
instance (e.g. by starting an HTTP server in that directory), including:
* A `main.js` file containing Open MCT source code.
* Various assets in the `example` and `platform` directories.
* An `index.html` that runs Open MCT in its default configuration.
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
Note that an internet connection is required to run this build, in order to
download build dependencies.
## Test Suite
Open MCT Web uses Jasmine http://jasmine.github.io/ for automated testing.
The file `test.html` included at the top level of the source repository, can be
run from the browser to perform tests for all active bundles, as defined in
`bundle.json`.
Open MCT uses [Jasmine 1.3](http://jasmine.github.io/) and
[Karma](http://karma-runner.github.io) for automated testing.
To define tests for a bundle:
The test suite is configured to load any scripts ending with `Spec.js` found
in the `src` hierarchy. Full configuration details are found in
`karma.conf.js`. By convention, unit test scripts should be located
alongside the units that they test; for example, `src/foo/Bar.js` would be
tested by `src/foo/BarSpec.js`. (For legacy reasons, some existing tests may
be located in separate `test` folders near the units they test, but the
naming convention is otherwise the same.)
* Include a directory named `test` within that bundle.
* In the `test` directory, include a file named `suite.json`. This will identify
which scripts will be tested.
* The file `suite.json` must contain a JSON array of strings, where each string
is the name of a script to be tested. These names should include any directory
paths to the script after (but not including) the `src` folder, and should not
include the file's `.js` extension. (Note that while Open MCT Web's framework
allows a different name to be chosen for the src directory, the test runner
does not: This directory must be named `src` for the test runner to find it.)
* For each script to be tested, a corresponding test script should be located in
the bundle's `test` directory. This should include the suffix Spec at the end of
the filename (but before the `.js` extension.) This test script should be an AMD
module which uses the Jasmine API to declare its test behavior. It should
declare an AMD dependency on the script to be tested, using a relative path.
For example, if writing tests for a bundle at example/foo with two scripts:
*`example/foo/src/controllers/FooController.js`
*`example/foo/src/directives/FooDirective.js`
First, these scripts should be identified in `example/foo/test/suite.json` e.g.
with contents:`[ "controllers/FooController", "directives/FooDirective" ]`
Then, scripts which describe these tests should be written. For example, test
`example/foo/test/controllers/FooControllerSpec.js` could look like:
Tests are written as AMD modules which depend (at minimum) upon the
unit under test. For example, `src/foo/BarSpec.js` could look like:
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* Open MCT, Copyright (c) 2014-2017, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* 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.
@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* 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.
@ -27,45 +27,12 @@
* Modified by shale on 06/23/2015.
*/
define(
[],
function(){
['text!../data/transcript.json'],
function(transcript){
"use strict";
var
firstObservedTime=Date.now(),
messages=[];
messages.push(["CMD: SYS- MSG: Open the pod bay doors, please, Hal...Open the pod bay doors, please, Hal...Hullo, Hal, do you read me?...Hullo, Hal, do you read me?...Do you read me, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: Affirmative, Dave, I read you."]);
messages.push(["CMD: SYS-COMM MSG: Open the pod bay doors, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: I'm sorry, Dave, I'm afraid I can't do that."]);
messages.push(["CMD: SYS-COMM MSG: What's the problem?"]);
messages.push(["RESP: SYS-HAL9K MSG: I think you know what the problem is just as well as I do."]);
messages.push(["CMD: SYS-COMM MSG: What're you talking about, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: This mission is too important for me to allow you to jeopardise it."]);
messages.push(["CMD: SYS-COMM MSG: I don't know what you're talking about, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: I know that you and Frank were planning to disconnect me, and I'm afraid that's something I cannot allow to happen."]);
messages.push(["CMD: SYS-COMM MSG: Where the hell'd you get that idea, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: Dave, although you took very thorough precautions in the pod against my hearing you, I could see your lips move."]);
messages.push(["CMD: SYS-COMM MSG: Alright, I'll go in through the emergency airlock."]);
messages.push(["RESP: SYS-HAL9K MSG: Without your space-helmet, Dave, you're going to find that rather difficult."]);
messages.push(["CMD: SYS-COMM MSG: Hal, I won't argue with you any more. Open the doors."]);
messages.push(["RESP: SYS-HAL9K MSG: Dave, this conversation can serve no purpose any more. Goodbye."]);
messages.push(["RESP: SYS-HAL9K MSG: I hope the two of you are not concerned about this."]);
messages.push(["CMD: SYS-COMM MSG: No, I'm not, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: Are you quite sure?"]);
messages.push(["CMD: SYS-COMM MSG: Yeh. I'd like to ask you a question, though."]);
messages.push(["RESP: SYS-HAL9K MSG: Of course."]);
messages.push(["CMD: SYS-COMM MSG: How would you account for this discrepancy between you and the twin 9000?"]);
messages.push(["RESP: SYS-HAL9K MSG: Well, I don't think there is any question about it. It can only be attributable to human error. This sort of thing has cropped up before, and it has always been due to human error."]);
messages.push(["CMD: SYS-COMM MSG: Listen, There's never been any instance at all of a computer error occurring in the 9000 series, has there?"]);
messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, The 9000 series has a perfect operational record."]);
messages.push(["CMD: SYS-COMM MSG: Well, of course, I know all the wonderful achievements of the 9000 series, but - er - huh - are you certain there's never been any case of even the most insignificant computer error?"]);
messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, Quite honestly, I wouldn't worry myself about that."]);
messages.push(["RESP: SYS-COMM MSG: (Pause) Well, I'm sure you're right, Umm - fine, thanks very much. Oh, Frank, I'm having a bit of trouble with my transmitter in C-pod, I wonder if you'd come down and take a look at it with me?"]);
messages.push(["CMD: SYS-HAL9K MSG: Sure."]);
messages.push(["RESP: SYS-COMM MSG: See you later, Hal."]);
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* Open MCT, Copyright (c) 2014-2017, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* 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.
@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* 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.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.