Compare commits

..

422 Commits

Author SHA1 Message Date
Henry
b573b3a681 Amended change so that context menu only suppressed on navigation menu 2015-11-27 14:16:37 -08:00
Henry
6558461fda Reverted changes after refactor 2015-11-27 13:05:55 -08:00
Henry
4b23e3fbcb Refactored changes to ContextMenuGesture.js 2015-11-27 13:02:19 -08:00
Henry
9eb8158c4e [Edit Mode] Disallow context menu actions on tree items during edit mode. #277 2015-11-25 14:44:31 -08:00
Henry
75d4be290c Merge branch 'open278-proto' into open199-merge 2015-11-25 11:27:08 -08:00
Henry
3b9cd5f1ac Merge branch 'open279-proto' into open199-merge 2015-11-25 11:25:00 -08:00
Henry
64a7647ec3 #279 Added search filter support to elements pool 2015-11-25 11:20:58 -08:00
Henry
9ed10ba9da Merge branch 'open279-proto' into open199-merge 2015-11-25 10:47:21 -08:00
Henry
c211f413aa [New Edit Mode] Add Elements pool to New Edit Mode #279 2015-11-25 10:40:37 -08:00
Henry
268a2c2427 Merged from master 2015-11-25 09:04:11 -08:00
Henry
7849803a5d Fixed cancel and drop-initiated edit 2015-11-20 14:00:29 -08:00
Henry
0263cf5407 Fixed cancel and drop-initiated edit 2015-11-20 13:59:32 -08:00
Henry
4f0f9e4104 Merge branch 'open-status-tracking' into open278 2015-11-20 11:28:06 -08:00
Henry
e6054b8252 #287 - modified to use s-status-editing, but CSS needed 2015-11-20 11:23:34 -08:00
Henry
a864c172d5 [Edit Mode Prototype] #278 Added visual indication of edit 2015-11-20 10:07:58 -08:00
Victor Woeltjen
400b992ec3 [Status] Revise API
Change method names, add a getter to status capability;
per code review feedback, nasa/openmctweb#319.
2015-11-20 09:46:08 -08:00
Henry
10a44c026c [Edit Mode] Visual indication of object being edited #278 2015-11-19 18:45:18 -08:00
Henry
9631d95a52 Merge remote-tracking branch 'origin/open-status-tracking' into open278-proto 2015-11-19 15:13:10 -08:00
Henry
4ea757faa5 Adding support for object status 2015-11-19 15:12:43 -08:00
Victor Woeltjen
b5d1118a3f [Status] Document status capability
...in the developer guide. Includes a table for listing
status names and classes, per code review feedback,
nasa/openmctweb#319.
2015-11-19 15:12:03 -08:00
Henry
50d83eaffb Merge remote-tracking branch 'origin/open278' into open278-proto 2015-11-19 14:50:01 -08:00
Henry
30e6980dc6 Merge branch 'master' into open199 2015-11-19 14:29:32 -08:00
Victor Woeltjen
5b9e43f8ff [Status] Test platform/status 2015-11-19 14:22:44 -08:00
Henry
19d2970e0e Merge in "create button initiates edit mode" 2015-11-19 14:13:28 -08:00
Henry
a04b3f8a4b enabled toolbar in edit mode 2015-11-19 14:01:38 -08:00
Victor Woeltjen
3ffa6f70aa [Status] Add empty specs 2015-11-19 13:47:39 -08:00
Victor Woeltjen
0d07c3c289 [Status] Clean up classes when destroyed 2015-11-19 13:44:06 -08:00
Victor Woeltjen
29fdb6d641 [Status] Add JSDoc 2015-11-19 13:43:18 -08:00
Henry
b06a38da2f Fixed incorrect case 2015-11-19 13:17:14 -08:00
Henry
f45e236281 #286 Fixed issues with composition not surviving through create wizard 2015-11-19 13:11:01 -08:00
Henry
2e2b18eaa5 [Edit Mode Prototype] Create button initiates edit-mode immediately #286 2015-11-19 10:33:44 -08:00
Charles Hacskaylo
ee86209166 Merge branch 'open278' of https://github.com/nasa/openmctweb into open278 2015-11-18 17:29:18 -08:00
Charles Hacskaylo
9f5729dbbc Merge remote-tracking branch 'github/master' into open278 2015-11-18 17:28:31 -08:00
Charles Hacskaylo
de9e41818b [Frontend] File cleanup
open #199
open #278
Comments and empty CSS classes removed;
2015-11-18 17:27:56 -08:00
Victor Woeltjen
39d007470a [Status] Active platform/status bundle 2015-11-18 17:23:31 -08:00
Victor Woeltjen
285c8cbd1e [Status] Add status tracking
Add status tracking for domain objects, and decoration of
representations with status-related classes. Supports WTD-1575
by allowing pending state of taxonomy to be handled by
status tracking and custom CSS, instead of by overriding platform
templates.
2015-11-18 17:22:38 -08:00
Charles Hacskaylo
3478f9d861 [Frontend] File cleanup
open #199
open #279
Comments and empty CSS classes removed;
2015-11-18 17:15:13 -08:00
Charles Hacskaylo
558ad94b91 [Frontend] Synced theme constants
open #199
open #279
Theme constants files needed to be synced
to facilitate more efficient comparison;
2015-11-18 17:06:18 -08:00
Charles Hacskaylo
c2e26b3555 [Frontend] Fixed magnify glass in search input
open #199
open #278
Fixed z-indexing problem in :before elements
in search input (magnify glass, etc.);
2015-11-18 16:48:13 -08:00
Charles Hacskaylo
c5c166c790 [Frontend] Refinements to active edit styles
open #199
open #278
Picking up missed rendered CSS;
2015-11-18 16:47:36 -08:00
Charles Hacskaylo
cc7df05a43 [Frontend] Refinements to active edit styles
open #199
open #278
Styling finalized for tree/search items;
Mods to pulse mixins;
Colors for both themes finessed and finalized;
2015-11-18 16:46:56 -08:00
Victor Woeltjen
a7f277b0d2 Merge pull request #317 from nasa/open316
[bug] TypeImpl.getInitialmodel should always return a fresh (ie. cloned) model.
2015-11-18 12:21:23 -08:00
Henry
5ced8e655d [bug] #317 Added jsdoc note about performance 2015-11-18 12:14:00 -08:00
akhenry
4de7b7dfb5 Merge pull request #288 from nasa/open218
[Plot] Support domain/range switching
2015-11-18 11:54:13 -08:00
Victor Woeltjen
a9518e9890 [Telemetry] Add missing JSDoc
...for new parameters added to support domain/range switching
in plots, per code review on nasa/openmctweb#288
2015-11-18 10:50:32 -08:00
akhenry
4ed35cddde Merge pull request #272 from nasa/open120
[Actions] Avoid suppression of context menus
2015-11-17 16:27:17 -08:00
Charles Hacskaylo
b9cd26aaf6 [Frontend] Styling for tree item when its being edited
open #278
Work in progress
2015-11-17 16:04:41 -08:00
Charles Hacskaylo
5882278f98 Bringing in latest NEM work from open199-meet-open279 2015-11-17 15:26:11 -08:00
Henry
40b21e35fd Fixed jslint error 2015-11-17 15:03:17 -08:00
Henry
2251a0c1e9 https://github.com/nasa/openmctweb/issues/287 2015-11-17 15:01:13 -08:00
Henry
3a36389815 Fixed test 2015-11-17 14:45:10 -08:00
Henry
ba669f1395 Merge branch 'open316' into open199 2015-11-17 14:31:06 -08:00
Henry
b27b60aedc Merge branch 'master' into open199 2015-11-17 14:30:57 -08:00
Henry
606667eb4d [bug] TypeImpl.getInitialmodel should always return a fresh (ie. cloned) model. #316 2015-11-17 14:30:34 -08:00
Charles Hacskaylo
90c06cfc97 [Frontend] Style tweaks for edit mode
open #199
Added bg color in edit area when edit mode
is active; Added to-do for ng-init in
object-inspector.html;
Ready for integration into open199;
2015-11-17 12:44:14 -08:00
Charles Hacskaylo
ec4c5864dc [Frontend] Style tweaks for edit mode
open #199
Added bg color in edit area when edit mode
is active;
2015-11-17 12:35:44 -08:00
Charles Hacskaylo
3ff275c853 [Frontend] Sanding and shimming styles for Elements pool
open #199
open #279
Also tweaked bg color of text inputs;
2015-11-17 12:20:14 -08:00
Henry
cd3bdf4f81 Change to navigate by location change 2015-11-16 17:45:31 -08:00
Charles Hacskaylo
a8d563975a [Frontend] Refinements to Inspector elements, search inputs
open #199
open #279
Treeview indent removed;
Significant refactoring of search classes to generalize
approach to search inputs;
2015-11-16 17:20:15 -08:00
Charles Hacskaylo
966e993c5d [Frontend] Merge work in open279 into open199
open #199
open #279
Fixed margin problem in mobile with
object-browse-bar element;
2015-11-16 15:20:43 -08:00
Charles Hacskaylo
9b5d894949 [Frontend] Merge work in open279 into open199
open #199
open #279
Last commit didn't fully take...
Integrated inspector changes from open279 into
new edit mode work from open199; _layout.scss
had a bit of difficult conflict resolution but seems
good at this point...
2015-11-16 15:08:22 -08:00
Charles Hacskaylo
5dd15e3b20 [Frontend] Merge work in open279 into open199
open #199
open #279
Integrated inspector changes from open279 into
new edit mode work from open199; _layout.scss
had a bit of difficult conflict resolution but seems
good at this point...
2015-11-16 15:05:44 -08:00
Henry
d961b41253 removed static buttons 2015-11-12 17:18:41 -08:00
Henry
564a822423 Fixed saving 2015-11-12 17:05:43 -08:00
akhenry
2b2ac0b0d9 Merge pull request #299 from nasa/open297
[Time Conductor] Fix date picker toggles
2015-11-12 16:52:35 -08:00
akhenry
f9a7ca85ac Merge pull request #273 from nasa/open231
[Core] Catch errors from listeners in topic
2015-11-12 16:51:50 -08:00
Victor Woeltjen
46b110e12f [Common UI] Add note about TODO item
Add note about temporary work around, per code review
from nasa/openmctweb#299
2015-11-12 16:38:01 -08:00
akhenry
b7eb9491cb Merge pull request #275 from nasa/open271
[Layout] Enforce minimum size on drop
2015-11-12 16:10:50 -08:00
akhenry
a92d13c10f Merge pull request #294 from nasa/open223
[Documentation] Document process
2015-11-12 15:08:03 -08:00
Victor Woeltjen
4ad007f882 [Common UI] Add z-index to popups
Temporary workaround for nasa/openmctweb#298
2015-11-12 14:52:41 -08:00
Victor Woeltjen
9f2303face [Time Conductor] Fix date picker toggle
nasa/openmctweb#297; avoid flag toggled to display date-time
picker becoming lost in a child scope.
2015-11-12 14:49:19 -08:00
Henry
51abd1fadf Merge branch 'open199d' into open199 2015-11-12 14:23:15 -08:00
Charles Hacskaylo
1ceb6d2d96 [Frontend] Fixed scrolling view
open #199
open #293
open #201
Removed fixed-header class from table markup;
(cherry picked from commit 6c4bdca)
2015-11-12 13:24:28 -08:00
Victor Woeltjen
99512f41b9 [Documentation] Handle review feedback
Fix spelling error, add link, per code review nasa/openmctweb#294
2015-11-12 12:23:38 -08:00
Henry
93171230e3 restoring toolbar 2015-11-12 11:13:54 -08:00
Henry
5fdef59f3b Merge branch 'open199d' into open199c 2015-11-12 10:23:36 -08:00
Henry
16c3229a84 Telemetry Panels now created correctly 2015-11-12 10:22:37 -08:00
Victor Woeltjen
49a5ac833b [Documentation] Use consistent row headers 2015-11-12 09:57:06 -08:00
Victor Woeltjen
646df81874 [Documentation] Add sprint calendars
...and fix quotes copied from original sketch of document.
2015-11-12 09:52:47 -08:00
Charles Hacskaylo
1058648e76 [Frontend] Fixed plot display
open #199
open #293
Added .abs to plot.html to allow plot
to layout properly when viewed in
main view area;
Removed .test class from time-controller;
2015-11-12 09:06:17 -08:00
Charles Hacskaylo
5b325a9698 Merge remote-tracking branch 'github/open199c' into open199d 2015-11-12 08:06:12 -08:00
Henry
f0e293a513 Virtual panels working again with refactored code 2015-11-11 14:59:00 -08:00
Henry
5f8d13672f Reverted model modified hack 2015-11-11 11:58:15 -08:00
Henry
4c0a79116a Added refresh check for editability 2015-11-11 11:52:30 -08:00
Henry
aa5734d023 merged 2015-11-11 10:21:17 -08:00
Henry
ba8c2b8468 Fixed buttons not appearing on edit mode click 2015-11-10 22:10:43 -08:00
Henry
5a2f073975 commented out extraeneous span 2015-11-10 20:43:31 -08:00
Henry
1d0af0b3b6 Drop Gesture 2015-11-10 20:27:04 -08:00
Charles Hacskaylo
6d2fe9d7eb [Frontend] Misc CSS and markup updates, converting to flex
open #199
IN-PROGRESS
IMPORTANT: plots are not laying out correctly,
need to figure out why
2015-11-10 18:33:58 -08:00
Victor Woeltjen
c5736cafb1 [Documentation] Add process documentation
Bring over process documentation (except for calendar),
nasa/openmctweb#223.
2015-11-10 17:27:43 -08:00
Charles Hacskaylo
08ecf00916 [Frontend] Misc CSS updates to clean up layout
open #199
IN-PROGRESS
Testing with Time Controller visible;
2015-11-10 17:14:12 -08:00
Charles Hacskaylo
9f3c353ab4 [Frontend] Updated markup to use latest flexbox classes
open #199
2015-11-10 16:30:49 -08:00
Henry
e3cac49c4b Fixed UUID import 2015-11-10 16:26:04 -08:00
Victor Woeltjen
93d969ad67 [Plot] Add tests
...to verify that data is requeried when user changes
domain or range selection.
2015-11-10 16:17:43 -08:00
Charles Hacskaylo
59ea2ea361 Grabbing recompiled CSS files 2015-11-10 16:14:34 -08:00
Charles Hacskaylo
608df8f7b8 Merging in latest github master; resolved conflicts 2015-11-10 16:13:46 -08:00
Victor Woeltjen
7dc6f553ac [Plot] Expose alternate domain values correctly
...from example telemetry (sine wave generator), to support
testing of switching among domains within plot.
2015-11-10 16:12:36 -08:00
Victor Woeltjen
b30e72081c [Plot] Update domain format
...on change in user's domain selection.
2015-11-10 16:12:16 -08:00
Victor Woeltjen
d60bf94501 [Plot] Remove unnecessary fallback 2015-11-10 16:03:42 -08:00
Victor Woeltjen
a88fadcb49 [Plot] Allow lookup of alternate ranges 2015-11-10 16:02:18 -08:00
Victor Woeltjen
7264a711a3 Merge pull request #274 from nasa/open250
Review and integrate open250
2015-11-10 15:20:06 -08:00
Victor Woeltjen
ae7a1618e8 [Plot] Listen for domain/range changes
nasa/openmctweb#218
2015-11-10 15:16:47 -08:00
Charles Hacskaylo
d6d95fed19 [Code style] Cleaned out comments
open #250
open #274
scss, html scoured for commented
dead code, leftover TO-DOs and
other unnecessary comments;
2015-11-10 15:12:09 -08:00
Charles Hacskaylo
d712a79ba4 [Frontend] Allow Inspector to utilize split pane during editing
open #279
IN-PROGRESS
Split pane markup added to object-inspector.html;
Tweaks to layout CSS;
2015-11-10 14:40:14 -08:00
Victor Woeltjen
fdf6148811 [Layout] Enforce minimum size on drop
Addresses nasa/openmctweb#271, ensuring frames in a layout
are not too tiny to use, even if the grid size is small.
2015-11-09 17:58:20 -08:00
Victor Woeltjen
62e7adc0b0 Merge pull request #269 from nasa/open220
[Documentation] Fix broken links and strange characters in Developer Guide
2015-11-09 17:30:57 -08:00
Charles Hacskaylo
72e0304fc0 [Merge] Safety merge-in of latest master
open #250
2015-11-09 17:19:02 -08:00
Charles Hacskaylo
e1110a2bc4 [Frontend] Fixed Create menu in mobile
open #250
open #157
Fixed CSS selector that wasn't properly
targeting the Create menu in a mobile
context;
2015-11-09 17:14:59 -08:00
Henry
7172c45404 [Documentation] #220 Fix broken links and strange characters in Developer Guide 2015-11-09 17:11:18 -08:00
Charles Hacskaylo
d8ced8f635 [Frontend] Hide/show Create button in mobile
open #250
open #157
Create button now hidden by default in mobile via
usage of CSS; can be re-displayed by including
'example/mobile' bundle;
2015-11-09 17:10:57 -08:00
Victor Woeltjen
e3e44f74d6 [Topic] Catch errors from listeners 2015-11-09 16:55:22 -08:00
Victor Woeltjen
acdd9622d2 [Topic] Add test case
...which specifies desired behavior for nasa/openmctweb#231.
2015-11-09 16:51:39 -08:00
Victor Woeltjen
2866574dc0 [Actions] Define applicability
Define applicability of Move/Copy/Link using appliesTo, to avoid
errors being thrown due to lack of context during instantiation.
Addresses immediate cause of nasa/openmctweb#120.
2015-11-09 16:28:04 -08:00
Charles Hacskaylo
cfc9b61e25 [Frontend] Adjusted margin strategy in left pane elements
open #250
Changed flex-elem to use margin-bottom instead of top;
Added margin-top to .search-results element;
2015-11-09 16:21:50 -08:00
Victor Woeltjen
066fd55590 [Actions] Test error handling 2015-11-09 16:18:35 -08:00
Charles Hacskaylo
c0dc30edb7 [Frontend] Fixed padding in search results
open #250
2015-11-09 15:42:49 -08:00
Charles Hacskaylo
2a201df435 [Frontend] Consolidated treeview elements markup
open #250
Removed un-needed markup around treeview
includes and mct-reps; moved CSS class defs into
mct-include and mct-rep for search and tree
respectively;
2015-11-09 15:42:24 -08:00
Victor Woeltjen
07179f7290 [Action] Catch errors
Catch errors during action instantiation, to avoid suppressing
whole context menus on single failures; nasa/openmctweb#120.
2015-11-09 15:42:19 -08:00
Charles Hacskaylo
55d3a27917 [Frontend] Fix to z-indexing for search "types" menu
open #250
2015-11-09 15:22:53 -08:00
Charles Hacskaylo
a5fa11749c [Frontend] Min/max widths on panes adjusted
open #250
Moved new min/max definitions into desktop-only
portion of layout.scss to not affect mobile layout;
2015-11-09 15:14:50 -08:00
Charles Hacskaylo
2b92c1619e [Frontend] Min/max widths on panes adjusted
open #250
Fixed min and max widths for panes to prevent
weird pane expand/collapse behaviors, like
Inspector covering the main view area;
Added min-width to .holder-all element;
2015-11-09 15:10:52 -08:00
Charles Hacskaylo
fd135a16af [Frontend] Restoring dropped Snow theme constants
open #250
Snow theme constants missing were causing the Snow
theme CSS to not compile - this commit restores those
values;
TO-DO: values defined are a bit out of sync between Espresso
and Snow and need to be realigned;
2015-11-09 14:22:34 -08:00
Henry
aed49d89e3 [Documentation] Fix broken links and strange characters in Developer Guide 2015-11-09 13:46:27 -08:00
Henry
05f8739952 Diffs 2015-11-09 13:46:27 -08:00
Henry
bf39aa1b1d Fixed broken links@ 2015-11-09 13:46:22 -08:00
Charles Hacskaylo
4e79de6156 [Frontend] Apply flex layout to object header elements
open #250
open #260
vista#132
Major refactoring to markup and CSS to apply
flex layout strategy to object headers;
Flex necessary to fix 'overflow: hidden' setting
applied in open90 to object-browse-bar that
was preventing the view switcher menu from
appearing;
Browse, edit, mobile, frames in layouts, etc. all
visually checked in a first go round;
Mobile classes tweaked to fix left and right
margin problems resulting from open90 changes;
z-indexing of Inspector pane and splitters changed
to allow primary pane elements to overflow beneath
when primary pane width is severely constrained;
2015-11-06 17:42:54 -08:00
Henry
78004ebf37 Fixed broken linkes 2015-11-06 17:40:43 -08:00
akhenry
51968954a9 Merge pull request #255 from nasa/open215
[Creation] Add creation capability
2015-11-06 16:00:12 -08:00
Victor Woeltjen
64607b8e56 [Creation] Remove errant comments 2015-11-06 15:47:33 -08:00
Victor Woeltjen
cb432051dc [Creation] Tweak lazy initialization approach 2015-11-06 14:32:47 -08:00
Victor Woeltjen
c184a9ce7c [Creation] Complete rename of capability 2015-11-06 14:31:26 -08:00
Victor Woeltjen
62e2114349 [Creation] Move test cases
Move test cases from instantiation capability over to
instantiate service.
2015-11-06 14:30:39 -08:00
Victor Woeltjen
cca1928b82 [Creation] Use instantiate from objectService
Use instantiate from DomainObjectProvider, to remove redundant
code around DomainObject instantiation.
2015-11-06 14:23:34 -08:00
Victor Woeltjen
81b136eab1 [Creation] Use instantiate service
...from instantiation capability.
2015-11-06 14:15:22 -08:00
Victor Woeltjen
d059116782 [Creation] Rename creation capability
...to instantiation, to distinguish from creation (which
typically includes persistence.)
2015-11-06 14:07:53 -08:00
Victor Woeltjen
bdc99950c6 [Creation] Add instantiate service
...to allow insantiating domain objects completely
externally from any other domain object. Desired by
code review feedback for nasa/openmctweb#255.
2015-11-06 13:56:12 -08:00
Charles Hacskaylo
76e15f2963 Merge remote-tracking branch 'github/master' into open250 2015-11-06 13:32:28 -08:00
Victor Woeltjen
96a7c12d69 Merge pull request #249 from nasa/open127
[UI] Progress indicator for pending operations (e.g. duplicate)
2015-11-06 10:57:42 -08:00
Henry
148a5eb248 JSLint issue 2015-11-06 10:14:59 -08:00
Henry
31d3ec5d20 Removed usage of function.prototype.bind 2015-11-06 10:06:17 -08:00
Pete Richards
7564384b57 Merge remote-tracking branch 'github-open/open241' into open-master 2015-11-06 09:59:20 -08:00
Pete Richards
639546bf86 Merge remote-tracking branch 'github-open/open229b' into open-master 2015-11-06 09:54:42 -08:00
Pete Richards
932e3cb7b0 Merge remote-tracking branch 'github-open/open244' into open-master 2015-11-06 09:46:51 -08:00
Pete Richards
cbffc221fb Merge remote-tracking branch 'github-open/prod-uisymbols' into open-master 2015-11-06 09:44:21 -08:00
Henry
2f658348a8 Fixed JSLint 2015-11-05 17:40:22 -08:00
Henry
793ed7ebe6 [UI] Progress indicator for pending operations - Refactoring for code clarity 2015-11-05 17:32:52 -08:00
Charles Hacskaylo
063e97fcb5 [Frontend] Cleanups and enhancements to search
open #250
Fixed margin/spacing problems with results element;
Added transition to results display;
Begin adding # results found / no results messaging;
Moved class .off to _globals.scss;
2015-11-05 17:04:19 -08:00
Henry
e1c6c76612 Refactored some CopyService functions out to CopyTask 2015-11-05 16:39:46 -08:00
Henry
aa2a835cb1 Created CopyTask class 2015-11-05 16:19:01 -08:00
Victor Woeltjen
3741a02d2a [Creation] Test CreationCapability 2015-11-05 16:15:12 -08:00
Victor Woeltjen
f14cad4a39 [Creation] Add JSDoc 2015-11-05 16:05:29 -08:00
Charles Hacskaylo
c0ac3a0f96 [Frontend] Convert main left pane elements to flex layout
open #250
Significant changes to flex classes, markup in
browse.html and search.html to support better
flex layout;
Search results now scrolls properly;
Significant refactoring and cleanups in search and _search.scss;
2015-11-05 15:44:55 -08:00
Victor Woeltjen
09bae63de7 [Creation] Update CreationService spec 2015-11-05 15:36:44 -08:00
Victor Woeltjen
62b9eb5180 [Creation] Simplify creationService
Add the newly-created domain object directly, instead of via
its id.
2015-11-05 15:36:33 -08:00
Victor Woeltjen
3f26be885e [Creation] Move uuid
...into core, since it is used by the Creation capability.
2015-11-05 15:24:57 -08:00
Victor Woeltjen
7ab318d57b [Creation] Fix method invocation 2015-11-05 15:21:47 -08:00
Victor Woeltjen
65a33f8af5 [Creation] Clean up creationService
Remove unused dependency, update JSDoc
2015-11-05 15:15:23 -08:00
Victor Woeltjen
331b4e9259 [Creation] Use creation capability
...from creationService to initially instantiate a domain object
before persisting it.
2015-11-05 15:13:33 -08:00
Victor Woeltjen
474afdf8ef [Creation] Expose creation capability
...adding usage of  to avoid circular dependencies.
2015-11-05 15:08:52 -08:00
Victor Woeltjen
3f4ccd93ab [Creation] Add creation capability
...allowing domain objects to be instantiated in-memory
without persisting them. nasa/openmctweb#215
2015-11-05 15:05:54 -08:00
akhenry
92cf86837b Merge pull request #207 from nasa/open1239
[Plugins] Bring over Timeline, Clocks/Timers
2015-11-05 13:42:32 -08:00
Victor Woeltjen
5274923c49 [Licenses] Add license headers
...to sources for Clocks/Timers and Timelines, as noted in
review nasa/openmctweb#207
2015-11-05 12:45:51 -08:00
akhenry
a356e01b14 Merge pull request #219 from nasa/open213
[Mobile] Don't move DOM nodes
2015-11-05 12:09:22 -08:00
Henry
21a37db15b #127 fixed failing test caused by fix for persistence spaces 2015-11-05 11:50:56 -08:00
akhenry
a20bbd98f5 Merge pull request #224 from nasa/open-docs-css
[Documentation] Add styling
2015-11-05 11:46:57 -08:00
Henry
5b3f780204 [UI] Progress indicator for pending operations (e.g. duplicate) #249- Fixed serious issue with persistence 2015-11-05 11:38:41 -08:00
Henry
43e920d3b6 Reverted to local storage 2015-11-05 10:27:50 -08:00
Charles Hacskaylo
8ca22cc510 [Frontend] Convert main left pane elements to flex layout
open #250
Markup mods in browse.html;
Renamed .holder-create-and-search to
.holder-treeview-elements;
TO-DO: fix search results to scroll properly;
2015-11-05 10:11:59 -08:00
Andrew Henry
3443780ac7 Improved commenting 2015-11-04 22:09:28 -08:00
Andrew Henry
8e85675732 Made changes to error reporting 2015-11-04 22:07:26 -08:00
Andrew Henry
2bdc95eb95 Restored MoveActionSpec.js and LinkActionSpec.js 2015-11-04 21:11:26 -08:00
Andrew Henry
f2efb07d93 Remove UUID path 2015-11-04 21:05:55 -08:00
Andrew Henry
863c3f1720 Fixed jslint issues 2015-11-04 20:48:22 -08:00
Andrew Henry
b73f9fc19e Merged from master 2015-11-04 20:30:49 -08:00
Andrew Henry
10e711f717 Removed commented code 2015-11-04 20:26:24 -08:00
Andrew Henry
529dde57b9 Added test for notification to CopyActionSpec 2015-11-04 20:26:24 -08:00
Henry
7d1a1acc11 Adding tests for Copy Action 2015-11-04 20:26:23 -08:00
Henry
5e1b0f38b7 Migrated to using notifications and fixed tests 2015-11-04 20:26:23 -08:00
Andrew Henry
4e69ca50fb Fixed blocking dialog 2015-11-04 20:26:23 -08:00
Andrew Henry
05481dcab5 reverted AbstractComposeAction 2015-11-04 20:26:23 -08:00
Andrew Henry
fa7131ad5c Refactoring to use promises notifications 2015-11-04 20:26:23 -08:00
Henry
bd1c3cb7da All test cases passing + added test cases for copy 2015-11-04 20:26:23 -08:00
Henry
cbd21212d1 Original tests that are still valid are passing 2015-11-04 20:26:23 -08:00
Henry
5cd458a733 Updating tests 2015-11-04 20:26:23 -08:00
Andrew Henry
2f90a89065 Fixed more failing tests 2015-11-04 20:26:23 -08:00
Henry
4312857fd4 Fixed failing tests 2015-11-04 20:26:22 -08:00
Andrew Henry
6c4c53dde7 Debugging test failures 2015-11-04 20:26:17 -08:00
Charles Hacskaylo
e49b55024f [Frontend] Inspector-related fixes
open #247
Modded styles applied to .object-browse-bar to
use overflow:hidden instead of visible;
2015-11-04 16:00:22 -08:00
Charles Hacskaylo
5f1f54fa91 [Frontend] Inspector-related fixes
open #243
Enlarged size of mini-tab icon when panes are collapsed;
Increased size of edge margin to allow for larger icons;
2015-11-04 15:47:13 -08:00
Charles Hacskaylo
f4325e2bb3 [Frontend] Inspector-related fixes
open #244
Moved older .l-flex class out of layout and
into archetypes, updated definition;
2015-11-04 15:20:42 -08:00
Charles Hacskaylo
e09cf91def [Frontend] Inspector-related fixes
open #244
Fixing scroll issue in Inspector via flex layout;
Added new _archetypes.scss file for .l-flex* and .col styles;
moved .col and associated mixin out of _layout.scss
and into _archetypes;
2015-11-04 15:03:56 -08:00
Charles Hacskaylo
ff1e1251f6 [Frontend] Integrating new Inspect icon from prod-uisymbols
open #244
open #188
2015-11-04 14:29:21 -08:00
Charles Hacskaylo
5697a39ec3 [Production] Changed target icon e615 to eye
open #188
Jay request;
e615 is no-gleam and replaces the crosshair glpyh;
gleam version is e616
2015-11-04 13:55:52 -08:00
Charles Hacskaylo
32fb84a3cd [Merge] Merging in latest master
open #188
2015-11-04 13:52:31 -08:00
Victor Woeltjen
2815d97682 Merge pull request #236 from nasa/open232
Review and integrate open232
2015-11-04 13:15:21 -08:00
Victor Woeltjen
ab01f64cea Merge remote-tracking branch 'github/master' into open236
Resolve CSS conflicts for nasa/openmctweb#236

Conflicts:
	platform/commonUI/general/res/sass/controls/_controls.scss
	platform/commonUI/themes/espresso/res/css/theme-espresso.css
	platform/commonUI/themes/snow/res/css/theme-snow.css
2015-11-04 13:02:17 -08:00
Victor Woeltjen
e5aa2b4f87 [Themes] Update developer guide
Add documentation of the theme property of stylesheets extensions
to the developer guide.
2015-11-04 12:01:09 -08:00
Victor Woeltjen
522ce02302 [Themes] Add missing semicolon
...to satisfy JSLint.
2015-11-04 11:54:19 -08:00
Victor Woeltjen
e32eb11e60 [Themes] Update bundle declarations
Update bundle declarations to provide a THEME constant for
use in filtering out theme-specific CSS additions.
2015-11-04 11:53:10 -08:00
Victor Woeltjen
bda1bf9f9a [Themes] Match themes from stylesheet loader 2015-11-04 11:49:27 -08:00
Victor Woeltjen
226f0932da [Themes] Add test cases
Add test cases to verify that stylesheets are excluded/included
according to theme, when a theme has been specified.

nasa/openmctweb#241
2015-11-04 11:48:49 -08:00
Victor Woeltjen
15f9bc083c Merge pull request #240 from nasa/open233b
[Inspector] Introduce inspector pane
2015-11-04 11:24:27 -08:00
Victor Woeltjen
1c4a4e475b [Inspector] Simplify splitter communication 2015-11-04 10:53:23 -08:00
Victor Woeltjen
f7839b758d Merge remote-tracking branch 'github/master' into open233b
Resolve conflicts on nasa/openmctweb#233

Conflicts:
	platform/commonUI/general/bundle.json
	platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json
	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/_main.scss
	platform/commonUI/general/res/sass/user-environ/_layout.scss
	platform/commonUI/themes/espresso/res/css/theme-espresso.css
	platform/commonUI/themes/espresso/res/sass/_constants.scss
	platform/commonUI/themes/snow/res/css/theme-snow.css
2015-11-04 09:28:19 -08:00
Victor Woeltjen
ac529be55c [Time Conductor] Don't emit view event
Don't emit an event when plot is instantiated; this is no
longer needed, as time conductor broadcasts its bounds
whenever views change.
2015-11-03 17:01:22 -08:00
Victor Woeltjen
99376391a9 Merge remote-tracking branch 'github/master' into open229b
Conflicts:
	platform/features/conductor/src/ConductorRepresenter.js
2015-11-03 16:58:40 -08:00
Pete Richards
9523c918fb Merge remote-tracking branch 'github-open/open182' into open-master 2015-11-03 15:52:14 -08:00
Pete Richards
b8b9b1f79a Merge remote-tracking branch 'github-open/open227' into open-master 2015-11-03 15:43:08 -08:00
Victor Woeltjen
4300338b9c Merge pull request #186 from nasa/open155
[Notifications] Add notification infrastructure
2015-11-03 15:38:41 -08:00
Charles Hacskaylo
6a42d0c7a1 [Frontend] Put overflow: auto back onto .object-holder
open #232
2015-11-03 15:28:53 -08:00
Victor Woeltjen
c0ed19fd92 Merge remote-tracking branch 'github/master' into open229b
Merge latest into topic branch for nasa/openmctweb#229
in preparation for pull request
2015-11-03 15:27:36 -08:00
Victor Woeltjen
df484c1800 [Time Conductor] Update TelemetryHandler spec 2015-11-03 15:27:08 -08:00
Victor Woeltjen
5940f94644 [Time Conductor] Cancel requests
Don't callback for any telemetry requests from a TelemetryHandle
if the handle has been destroyed.
2015-11-03 15:24:38 -08:00
Victor Woeltjen
0dccaab9cb [Search] Declare UI components as templates
Declare Search UI components as templates instead of
representations so that they are not removed from the
DOM when no domain object is supplied. Fixes
nasa/openmctweb#234
2015-11-02 14:07:22 -08:00
Victor Woeltjen
8d65335786 [Time Conductor] Remove check for domain existence 2015-11-02 12:31:40 -08:00
Victor Woeltjen
2d1faeba8c [Time Conductor] Update FormatService JSDoc 2015-11-02 12:30:18 -08:00
Victor Woeltjen
cecc52f0a9 [Time Conductor] Update formatService usages
...to remove checks for unknown formats.
2015-11-02 12:28:46 -08:00
Victor Woeltjen
a1d765f271 [Time Conductor] Throw errors for unknown formats
Per code review, nasa/openmctweb#204
2015-11-02 12:23:13 -08:00
Charles Hacskaylo
946a6d4a04 Updated crosshair symbol for inspect
open #90
2015-11-02 11:04:38 -08:00
Charles Hacskaylo
91a4138334 Added crosshair symbol for inspect
prod-uisymbols
open #90
2015-11-02 10:14:28 -08:00
Victor Woeltjen
ae928a138c [Representation] Update compilation approach
Update compilation approach for templateLinker to more
closely resemble ng-include; minimizes likelihood of
subtle behavioral differences (e.g. incorrect size
selection for split pane)
2015-10-30 16:37:47 -07:00
Charles Hacskaylo
d926110b4e Merge remote-tracking branch 'github/open155' into open155c
open #186
open #155
Re-rendering css;
2015-10-30 16:26:49 -07:00
Charles Hacskaylo
485e6a9de1 [wtf] Merge open155 > github/master
open #155
open #186
WTF yet again getting merge conflicts when remerging open155;
2015-10-30 16:24:20 -07:00
Charles Hacskaylo
1e6731e6f2 Merge open155 > github/master
open155
open186
Trying a third time to resolve conflicts between open155 and master;
2015-10-30 16:20:57 -07:00
Victor Woeltjen
454a63e1f1 [Representation] Destroy scopes before adding
Destroy representation scope before adding elements back into
the DOM; avoids having a momentary activation of watches and
listeners on those scopes before they are replaced with newly
compiled content for new scopes.
2015-10-30 16:18:01 -07:00
Victor Woeltjen
b487fa4438 [Representation] Update TemplateLinker spec
...to reflect creation of a new scope each time a template
is changed.
2015-10-30 16:01:24 -07:00
Victor Woeltjen
560454e7c2 [Representation] Verify change before representing
An mct-representation may have a refresh triggered either by
a key change or a domain object change; both will typically
happen in the same digest cycle. Track what prior state was
an abort refreshes if nothing will change.
2015-10-30 15:55:56 -07:00
Victor Woeltjen
04594ea536 [Representation] Rebuild scopes on every change
Create new scopes on every changeTemplate request, even if
the same template is being viewed; presume that we want a
new instance of the same template. Avoids scope reuse for
cases such as switching from a plot of one object to a
plot of another object.
2015-10-30 15:32:20 -07:00
Victor Woeltjen
a45dfc3822 [Representation] Don't reuse scopes
Addresses nasa/openmctweb#227
2015-10-30 15:09:35 -07:00
Victor Woeltjen
f7f6b8d612 [Time Conductor] Don't broadcast on telemetry:view
Instead, use delay from throttling initial bounds broadcast to
avoid broadcasting bounds prematurely.
2015-10-30 14:59:32 -07:00
Victor Woeltjen
e4a14b7603 [Time Conductor] Consistently throttle broadcast
Consistently throttle broadcast of bounds to minimize redundant
broadcasts, nasa/openmctweb#229
2015-10-30 14:56:52 -07:00
Victor Woeltjen
5706fa4567 Merge branch 'open182' into open229 2015-10-30 14:54:37 -07:00
Victor Woeltjen
796d6b800a [Time Conductor] Add JSDoc for params 2015-10-30 14:08:11 -07:00
Victor Woeltjen
b12bb55495 [Time Conductor] Update text on format change
...in a date-time field.
2015-10-30 13:57:21 -07:00
Victor Woeltjen
f42498ab60 [Time Conductor] Update specs
...to reflect changes to how unspecified versus unknown formats
are handled.
2015-10-30 13:53:33 -07:00
Victor Woeltjen
7f571415dc [Time Conductor] Change format handling
Use default format when no format is specified, and throw an
error when a specified format is unrecognized, from both
date-time field controller and time range controller.
2015-10-30 13:28:01 -07:00
Victor Woeltjen
4f9a65a5fe [Time Conductor] Use default format
...from TelemetryFormatter, and log when a requested format
is unavailable.
2015-10-30 13:17:53 -07:00
Victor Woeltjen
6db7f056dc [Time Conductor] Warn about unknown formats 2015-10-30 13:11:13 -07:00
Victor Woeltjen
5a1d774b47 [Time Conductor] Rename default domain
To UTC, instead of just Time.
2015-10-30 13:05:37 -07:00
Victor Woeltjen
101e3bb346 [Time Conductor] Remove checks for undefined domain
Per code review, nasa/openmctweb#204
2015-10-30 13:04:29 -07:00
Henry
bc82a5bf7e Added additional test for notifications specified as string message 2015-10-30 10:56:16 -07:00
Henry
58198636ed Fixed jslint complaints 2015-10-30 10:32:01 -07:00
Henry
86bf6c6dff Minor refactoring and renaming of variables 2015-10-30 10:30:39 -07:00
Henry
0e07fb860e Added convenience methods for alert and error to the NotificationService 2015-10-30 10:28:08 -07:00
Henry
b3d4f48e2e Allow string or model to simplify message specification 2015-10-30 10:22:24 -07:00
Victor Woeltjen
b6d08726fb [Time Conductor] Remove duplicate format 2015-10-30 09:34:23 -07:00
Andrew Henry
4eaeea1e14 Fixed bugs in copy 2015-10-29 21:39:50 -07:00
Henry
f44819a7fe Improvements to copy notifications 2015-10-29 17:40:17 -07:00
Henry
05722d9b11 Added error handling 2015-10-29 17:15:20 -07:00
Henry
92a3fa3e4c Added error handling, and refactored CopyAction slightly 2015-10-29 16:40:51 -07:00
Victor Woeltjen
dd83662e0f [Documentation] Add styling 2015-10-29 12:30:13 -07:00
Charles Hacskaylo
9c90eb52a4 [Production] Added collapse left and right pane symbols
open #188
2015-10-29 11:30:01 -07:00
Andrew Henry
e37fa75289 Added basic notifications on copy 2015-10-28 17:16:53 -07:00
Andrew Henry
ee314ab387 Added notifications 2015-10-28 17:05:05 -07:00
Andrew Henry
8fb6ab61ba Fixed folders 2015-10-28 14:56:34 -07:00
Andrew Henry
929f06e6c1 Working on folders 2015-10-28 13:35:52 -07:00
Andrew Henry
e9e6ddd791 Trying to fix drop on folders 2015-10-28 13:01:45 -07:00
Andrew Henry
2539e4008f Improved handling of virtual panels 2015-10-28 12:53:50 -07:00
Victor Woeltjen
90389ea910 [Time Conductor] Increase test specificity
Explicitly check for boolean values (not just truthy/falsy values)
per feedback from code review, nasa/openmctweb#204.
2015-10-28 09:56:50 -07:00
Victor Woeltjen
d1bc93cd31 [Mobile] Don't move DOM nodes
When including/excluding a DOM element via mct-device,
use replaceWith() instead of parent().append() to preserve
original ordering of DOM elements from template.
nasa/openmctweb#213.
2015-10-28 09:50:48 -07:00
Victor Woeltjen
0541f6edfa [Time Conductor] Add JSDoc to plot
Add JSDoc to scripts/methods added to the Plot plug-in to support
integration of custom formats for timestamps.
2015-10-28 08:47:04 -07:00
Victor Woeltjen
0ad22f6842 [Time Conductor] Add JSDoc to new bundle
Add JSDoc to platform/commonUI/formats, introduced to support
different time formats from the time conductor.
nasa/openmctweb#182.
2015-10-28 08:29:56 -07:00
Victor Woeltjen
00c0019122 [Time Conductor] Add test cases
...to cover FormatProvider.
2015-10-27 17:44:57 -07:00
Victor Woeltjen
e80d094174 [Time Conductor] Add test cases
...to cover UTCTimeFormat.
2015-10-27 17:39:16 -07:00
Henry
3e7264d6b8 Initial implementation of virtual panel 2015-10-27 17:38:31 -07:00
Victor Woeltjen
60ba80d307 [Time Conductor] Add empty specs
...to platform/commonUI/formats bundle, introduced to support
formatting of non-UTC time domains for time conductor.
2015-10-27 17:34:28 -07:00
Victor Woeltjen
c89aa026b0 [Time Conductor] Add JSDoc for Format interface 2015-10-27 17:31:02 -07:00
Victor Woeltjen
8a3f77d784 [Time Conductor] Simplify bundle name 2015-10-27 17:26:08 -07:00
Victor Woeltjen
15a5c593fa [Time Conductor] Add spec for formatter
Add spec to telemetryFormatter wrapper used by plot to isolate
changes to domain/range formats.
2015-10-27 17:25:08 -07:00
Victor Woeltjen
9e8152719f [Time Conductor] Add spec
Add spec for DateTimeFieldController, bringing over test cases
removed from TimeRangeController.
2015-10-27 17:12:03 -07:00
Victor Woeltjen
55745d281f [Time Conductor] Update PlotAxis spec
...to reflect ability to change domain selection without
reinstantiation, supporting integration of domain-driven
formatting of X axis values in a plot.
2015-10-27 16:18:13 -07:00
Victor Woeltjen
8ba112498b [Time Conductor] Add test case for formats
Add test case to TimeRangeController to reflect that it responds
to changes in format selection.
2015-10-27 15:57:44 -07:00
Victor Woeltjen
44fc9423df Merge branch 'open-master' into open182
Merge in latest from master branch into topic branch
for nasa/openmctweb#182
2015-10-27 15:54:18 -07:00
Victor Woeltjen
bd8bbc6e8f [Time Conductor] Update PlotController spec
...and add check to updateValues in PlotController, to reflect
changes made to restore support for domain switching.
2015-10-27 15:52:11 -07:00
Victor Woeltjen
2ee53b17db [Time Conductor] Update ConductorTelemetryDecorator spec
...to reflect that TimeConductor exposes whole domain metadata, not
just key.
2015-10-27 15:46:21 -07:00
Victor Woeltjen
60e97eb94a [Time Conductor] Update ConductorRepresenter spec
...to reflect that TimeConductor exposes whole domain metadata, not
just key.
2015-10-27 15:43:31 -07:00
Victor Woeltjen
ce5a650d8c [Time Conductor] Update TimeConductor spec
...to reflect that whole domain metadata, not just key, is exposed.
2015-10-27 15:40:34 -07:00
Victor Woeltjen
5ff2e6b652 [Time Conductor] Simplify passing in of axis type
...in PlotAxis. Also avoids triggering failures of existing tests.
2015-10-27 15:39:20 -07:00
Victor Woeltjen
f30a2dd791 [Time Conductor] Update telemetryFormatter spec 2015-10-27 15:37:08 -07:00
Victor Woeltjen
920c83771d [Time Conductor] Update spec
...for TimeRangeController to reflect separation of date-time
inputs into a separate control.

Additionally, removed unused function.
2015-10-27 14:06:02 -07:00
Victor Woeltjen
cc8a7e513f [Time Conductor] Rename bundle
Rename platform/time to platform/commonUI/formatting; nothing
particularly specific to time about these interfaces, and
removal of non-formatting-related methods makes this essentially
a UI concern.
2015-10-27 13:11:04 -07:00
Victor Woeltjen
9dce3a04cc [Time Conductor] Remove obsolete code
Remove code related to handling text input from TimeRangeController;
moved into DateTimeFieldController.
2015-10-27 13:07:58 -07:00
Victor Woeltjen
18cdaf1b53 [Time Conductor] Fix extension definition
For date time field controller; refer to correct implementation.
2015-10-27 13:03:04 -07:00
Victor Woeltjen
e5d4376f06 [Time Conductor] Use date time field
...from template for time controller.
2015-10-27 13:01:27 -07:00
Victor Woeltjen
6784c6567b [Time Conductor] Add date-time field
Add mct-control which includes both the date-time picker and
its corresponding text entry area, per code review feedback
from nasa/openmctweb#204.
2015-10-27 13:00:42 -07:00
Victor Woeltjen
71618ce4b9 [Time Conductor] Hide date-picker for non-UTC formats 2015-10-27 12:40:14 -07:00
Victor Woeltjen
e5ebbdaf7f [Time Conductor] Use domain formats in scrolling list 2015-10-27 12:37:53 -07:00
Victor Woeltjen
6b805183b0 [Time Conductor] Parse negative values
...in example telemetry
2015-10-27 12:35:15 -07:00
Victor Woeltjen
9723c65016 [Time Conductor] Retain domain selection in plot
Avoid various cases where domain selection is temporarily
overwritten due to transient plot state (e.g. because no
telemetry metadata is yet available due to asynchronous
retrieval of delegates.)
2015-10-27 12:09:54 -07:00
Victor Woeltjen
7bd0e279b0 Merge remote-tracking branch 'github/master' into open182
Merge latest from master branch into topic branch for
nasa/openmctweb#182
2015-10-27 11:49:36 -07:00
Victor Woeltjen
caee1f520f [Time Conductor] Remove unused watches from plot 2015-10-27 11:46:41 -07:00
Victor Woeltjen
b375ede217 [Time Conductor] Recognize domain changes in plot 2015-10-27 11:39:23 -07:00
Victor Woeltjen
0bd1d53d25 [Time Conductor] Update plot to support different formats
...for telemetry domain values.
2015-10-27 11:22:19 -07:00
Victor Woeltjen
3fe386fcd6 [Time Conductor] Use formatService from telemetryFormatter 2015-10-27 11:21:44 -07:00
Victor Woeltjen
82b321b3f9 [Time Conductor] Update displayed text when format changes 2015-10-27 10:28:32 -07:00
Victor Woeltjen
3bdaae292e [Time Conductor] Parse deltas relative to generation start 2015-10-27 10:27:29 -07:00
Victor Woeltjen
b627de45ba [Time Conductor] Fix bundle definition
...such that the delta domain exposes its format, and its format
is exposed correctly under the formats extension category.
Supports testing of time conductor support for alternative
time formatting.
2015-10-27 10:01:32 -07:00
Victor Woeltjen
2056f3aed0 [Time Conductor] Update property name
Renamed system to format per code review feedback,
nasa/openmctweb#204
2015-10-27 10:00:35 -07:00
Victor Woeltjen
b928b7d3f2 [Time Conductor] Fix time calculation in example telemetry 2015-10-27 09:54:09 -07:00
Victor Woeltjen
df6cd8f403 [Time Conductor] Expose domain options
...for example telemetry, to test domain selection.
2015-10-27 09:50:59 -07:00
Victor Woeltjen
c6b7121cf0 [Time Conductor] Expose getFormat correctly
...as an instance method of FormatProvider
2015-10-27 09:45:17 -07:00
Victor Woeltjen
86c61f7543 [Time Conductor] Fix extension definition
...for FormatProvider. Depends should be an array.
2015-10-27 09:41:32 -07:00
Victor Woeltjen
741fc57442 [Time Conductor] Add alternate domain
Begin adding a more timelike alternately-formatted domain
to sine waves; the 'delta' can be expressed as UTC timestamps
but will be formatted for display as a time relative to
when sine wave generation began.
2015-10-27 09:39:48 -07:00
Henry
19bdf743fc Added save/cancel 2015-10-26 14:14:56 -07:00
Victor Woeltjen
20cb2ff239 [Clocks/Timers] Bring in latest
Merge in latest from master branch to support review of
changes, nasa/openmctweb#207
2015-10-26 10:42:41 -07:00
Victor Woeltjen
ed9a5b0890 [Time Conductor] Roll back changes to example telemetry
In particular, remove the timeService implementation; this is made
obsolete by a switch to a simpler format-based approach.
2015-10-26 10:06:58 -07:00
Victor Woeltjen
aa23d358cc [Time Conductor] Use formatService instead of timeService 2015-10-26 10:03:49 -07:00
Victor Woeltjen
0f34d38451 [Time Conductor] Remove obsolete formatting classes 2015-10-26 09:57:14 -07:00
Victor Woeltjen
f8ee244475 [Time Conductor] Expose FormatProvider 2015-10-26 09:56:37 -07:00
Victor Woeltjen
322d1c8389 [Time Conductor] Add formatProvider
...to handle lookup of extensions of category 'formats'
2015-10-26 09:54:57 -07:00
Victor Woeltjen
c45bf45475 [Time Conductor] Remove non-format-like methods
...from UTCTimeSystem, and rename to UTCTimeFormat. Per code
review feedback from nasa/openmctweb#182.
2015-10-26 09:48:54 -07:00
Henry
95ea33b441 Removed notification from bundles 2015-10-23 17:02:25 -07:00
Henry
896dd8d2c7 Fixed jslint errors 2015-10-23 16:30:51 -07:00
Henry
789b640b9b Refactored dismiss and minimize out of NotificationService and on to returned Notification type 2015-10-23 16:28:42 -07:00
Victor Woeltjen
8acf01ebdf [Tests] Declare deps for moment-duration-format
...in karma test runners.
2015-10-23 16:03:57 -07:00
Victor Woeltjen
ddb567aeb5 [Clocks/Timers] Declare dependency of moment-duration-format
...to ensure that moment is loaded first, such that
the plugin can correctly install itself.
nasa/openmctweb#204
2015-10-23 15:46:47 -07:00
Victor Woeltjen
a43c8f2ce8 [Timeline] Disable timelines due to missing styles
WTD-1239.
2015-10-23 14:14:24 -07:00
Victor Woeltjen
fffe07e7e6 [Timeline] Remove namespacing from specs 2015-10-23 14:06:55 -07:00
Victor Woeltjen
26db524f0e [Timelines] Rename bundle 2015-10-23 13:57:15 -07:00
Victor Woeltjen
4fcef33c58 [Timelines] De-namespace timeline's DateTimeController 2015-10-23 13:56:34 -07:00
Victor Woeltjen
dc9369c0f1 [Timelines] Remove namespacing from controllers
WTD-1239
2015-10-23 13:54:19 -07:00
Victor Woeltjen
c5b786e5e0 [Timeline] De-namespace capabilities
WTD-1239.
2015-10-23 13:52:48 -07:00
Victor Woeltjen
3e0534c4c3 [Timeline] Update namespacing in templates
WTD-1239
2015-10-23 13:49:46 -07:00
Victor Woeltjen
19ad4c8174 [Timelines] Change namespacing for directives
WTD-1239
2015-10-23 13:48:07 -07:00
Victor Woeltjen
8159c365b5 [Timeline] Remove namespacing from README
WTD-1239
2015-10-23 13:45:54 -07:00
Victor Woeltjen
307047d3ac [Clocks/Timers] Remove namespacing from specs
WTD-1239
2015-10-23 13:44:39 -07:00
Victor Woeltjen
83f135e48c Merge remote-tracking branch 'github/master' into open1239 2015-10-23 13:39:09 -07:00
Henry
e05858e26b Added newline to end of source files 2015-10-23 12:11:37 -07:00
Henry
89046ecad5 fixed jslint error 2015-10-23 12:03:56 -07:00
Henry
fa7431d68b Added test case to DialogServiceSpec 2015-10-23 12:01:48 -07:00
Henry
78b528b4a5 Added additional test cases, and some tidying 2015-10-23 11:48:37 -07:00
Henry
e3ef68bc6f Fixed jslint errors 2015-10-22 16:41:09 -07:00
Henry
83276d70d3 Removed MessageSeverity enum and MessageController 2015-10-22 16:29:10 -07:00
Victor Woeltjen
111b3bac09 [Time Conductor] Remove dateService
Replaced by timeService
2015-10-22 16:27:21 -07:00
Victor Woeltjen
67cf8d8cee [Time Conductor] Support index domain from sine wave 2015-10-22 16:24:55 -07:00
Victor Woeltjen
b4dd95490c [Time Conductor] Don't treat defaults as invalid 2015-10-22 16:07:21 -07:00
Victor Woeltjen
16e4c32709 [Time Conductor] Remove now dependency, fix domain switch
Remove dependency on now (current time can be retrieved via
timeService); fix domain-switching behavior such that changes
to time systems are reflected in changes to default bounds.
2015-10-22 16:05:09 -07:00
Victor Woeltjen
a154c9c870 [Time Conductor] Use timeService from control 2015-10-22 15:51:12 -07:00
Victor Woeltjen
1e71df5ce9 [Time Conductor] Implement timeService in sinewave telemetry
Switch from initial dateService interface to more practical
timeService interface.
2015-10-22 15:27:40 -07:00
Victor Woeltjen
5e9f38dadd [Time Conductor] Add dependency to UTCTimeProvider 2015-10-22 15:20:54 -07:00
Victor Woeltjen
552435b009 [Time Conductor] Add bundle for time handling 2015-10-22 15:20:12 -07:00
Henry
109ae3323d Added jsdoc and moved MessageController to dialogs from notifications 2015-10-22 15:10:53 -07:00
Henry
0053989de8 renamed dialog and notification 'actions' to 'options' 2015-10-22 14:14:21 -07:00
Henry
0628398b01 Moved notifications examples from 'testing' to examples 2015-10-22 13:30:34 -07:00
Victor Woeltjen
4ff03b081d [Time Conductor] Suppress date picker for non-UTC time systems 2015-10-22 13:08:37 -07:00
Victor Woeltjen
e8d7093eb5 [Time Conductor] Use time systems from time conductor 2015-10-22 13:07:04 -07:00
Victor Woeltjen
9bc4327c59 [Time Conductor] Add non-time-like domain
Add a non-time-like domain to sine wave generator telemetry,
to support integration of custom domain formatting into
time conductor.
2015-10-22 12:51:18 -07:00
Victor Woeltjen
c0fda5b572 [Time Conductor] Add JSDoc
Add typedefs relevant to the date aggregator; in particular,
document properties used to determine how to format timestamps
associated with a telemetry point.
2015-10-22 12:41:46 -07:00
Victor Woeltjen
950578f09b [Time Conductor] Hide datetime pickers for non-UTC domains 2015-10-22 12:20:15 -07:00
Victor Woeltjen
117470068a [Time Conductor] Use dateService from TimeRangeController 2015-10-22 12:17:08 -07:00
Victor Woeltjen
0d47b7c47d [Time Conductor] Expose dateService in bundle definition 2015-10-22 12:10:12 -07:00
Victor Woeltjen
c882b2d4c3 [Time Conductor] Implement date provider
Implement UTCDateProvider sufficient to pass spec.
2015-10-22 12:08:34 -07:00
Victor Woeltjen
794231143e [Time Conductor] Add spec for UTCDateProvider
Add test cases for UTCDateProvider, which will provide default
date/time formatting/parsing.
2015-10-22 11:55:38 -07:00
Victor Woeltjen
6b42d3bf4b [Time Conductor] Test DateAggregator 2015-10-22 11:54:46 -07:00
Henry
296d9f5acd Temporarily disable test 2015-10-22 11:38:30 -07:00
Victor Woeltjen
1c5101eca6 [Time Conductor] Add DateAggregator
Add DateAggregator, to allow composite services to expose
different ways of parsing/formatting dates.
nasa/openmctweb#182.
2015-10-22 11:30:57 -07:00
Henry
7468c0e150 Deploy to heroku 2015-10-22 11:30:06 -07:00
Henry
dc5feb8b1a Added some documentation to notification and dialog launchers 2015-10-22 10:54:48 -07:00
Henry
0fb9f3731a Edit mode and cancel buttons work 2015-10-22 10:09:09 -07:00
Henry
fdfb524eef Fixed scope of editMode variable 2015-10-21 12:06:11 -07:00
Henry
ef250f58de Marged style updates 2015-10-21 12:01:59 -07:00
Henry
15ed91f651 Added save buttons 2015-10-21 11:54:35 -07:00
Charles Hacskaylo
074254a513 Frontend] Styling for New Edit Mode
open #198
Minor tweak to placeholder init content;
2015-10-21 11:38:03 -07:00
Charles Hacskaylo
4c84789d5d Frontend] Styling for New Edit Mode
open #198
.l-flex styles refined;
Animation refinement;
.s-btn default vertical-align = top;
.tool-bar style tweaked;
Added title-label back into edit-action-buttons.html;
2015-10-21 11:35:36 -07:00
Andrew Henry
92573b817f Added drag to enable edit mode 2015-10-20 21:03:36 -07:00
Charles Hacskaylo
5382cca435 [Frontend] Styling for New Edit Mode
open #198
In-progress styling of toolbar elements;
Revamped edit-action-buttons.html to use only icons;
2015-10-20 15:43:53 -07:00
Charles Hacskaylo
15c1bf20ab [Frontend] Styling for New Edit Mode
open #198
Refined CSS classing and animation timing;
2015-10-20 14:41:02 -07:00
Charles Hacskaylo
685dd2114d [Frontend] Styling for New Edit Mode
open #198
Added Save and Cancel buttons;
Additional transition styling;
tool-bar styles refined;
2015-10-20 14:11:59 -07:00
Charles Hacskaylo
6e30a25a6f [Frontend] Added new glyph
prod-uisymbols
Added e612 Save icon;
2015-10-20 12:44:09 -07:00
Henry
6d08c81b3b First iteration of duplication complete 2015-10-20 12:18:30 -07:00
Charles Hacskaylo
42fa5bfd7e [Frontend] Initial styles for New Edit Mode
open #198
Refactored elems in browse-object.html to use
flex layout;
New flex-row and flex-col general CSS classes;
New pulseBorder animation mixin;
2015-10-20 11:39:28 -07:00
Andrew Henry
89e763b515 Incremental commit of Duplication 2015-10-20 09:25:31 -07:00
Henry
2a1388772a Incremental commit of duplication 2015-10-19 17:32:43 -07:00
Andrew Henry
fa3821b50f Update of CopyService with new copy algorithm (incomplete) 2015-10-18 20:58:17 -07:00
Henry
f08725b6a2 Fixed jshint errors 2015-10-14 16:22:11 -07:00
Henry
301b73c6c6 Banner notifications are not maximized if 'info' message 2015-10-14 16:22:10 -07:00
Henry
912e70d219 Fixed failing tests, and added stopPropagation to prevent maximizing of notifications on action click or dismiss 2015-10-14 16:22:10 -07:00
Henry
1d41939418 Fixed failing tests 2015-10-14 16:22:10 -07:00
Henry
ee382be38d Added transitions and severity classes 2015-10-14 16:22:10 -07:00
Charles Hacskaylo
34ea3ad9bb [Frontend] Banner message animations; class renaming
open #163
open #170
Added transition animations to message banners;
Renamed $colorStatus* class names to map more
closely to severity constants;
2015-10-14 16:22:10 -07:00
Henry
2ba6f18c59 Making changes to implement display queue 2015-10-14 16:22:10 -07:00
Henry
b2a09599a0 Modified messages dialog launcher 2015-10-14 16:22:10 -07:00
Henry
11264759ec Added highest severity calculation in NotifiationService 2015-10-14 16:22:10 -07:00
Andrew Henry
c0ff6de27b Added notification indicator 2015-10-14 16:22:10 -07:00
Henry
60dda8a7a4 Updated 2015-10-14 16:21:54 -07:00
Henry
82ae9e72c1 Integrated notifications list 2015-10-09 14:17:55 -07:00
Henry
85300d3743 Refactored DialogService a little 2015-10-09 11:57:47 -07:00
Henry
fe3e3325e1 Merge branch 'open170' into open155 2015-10-09 11:00:09 -07:00
Henry
2b97d61d6c Further integration work 2015-10-09 10:59:36 -07:00
Charles Hacskaylo
954fdd5906 [Frontend] Sanding/positioning and Cancel button added to Messasges dialog
open #159
open #170
Added Cancel button to Messages dialog in DialogService.js;
Important tweaks to layout of messages to allow
bottom-bar to align to bottom in singleton dialog view;
Revised status colors in theme's constants files;
2015-10-08 19:10:26 -07:00
Henry
8267058487 Begun integration of Notifications framework with Charles' code 2015-10-08 15:08:26 -07:00
Henry
4a913376ac Merge branch 'open170' into open155 2015-10-08 13:57:25 -07:00
Henry
5ff3c71523 Fixed the Banner Controller which was not returning reference to controller 2015-10-08 13:56:59 -07:00
Henry
ba614fe2d6 Trying to sort out error 2015-10-08 13:46:42 -07:00
Henry
5e713f279b Moved some more vars 2015-10-08 13:18:47 -07:00
Henry
df590107cb Moved some more vars 2015-10-08 13:17:12 -07:00
Henry
fc8630dbc6 Moved some vars 2015-10-08 13:15:31 -07:00
Henry
12a94f828a Added some more semicolons 2015-10-08 13:14:30 -07:00
Charles Hacskaylo
0e840ae003 [Frontend] Messages major work
open #159
open #170
CSS, markup and JS test files initially complete;
Templates renamed for consistency;
message-type icons styled;
Added severity constant "alert";
TO-DO: check refactored CSS against mobile,
see what's broken;
2015-10-08 13:09:41 -07:00
Henry
e1e5919f68 Added some semicolons 2015-10-08 13:08:43 -07:00
Henry
b2cd66bd5d Merged in charles' changes 2015-10-08 11:26:31 -07:00
Henry
af1fa6e77a added semicolons to test spec 2015-10-08 11:13:32 -07:00
Henry
5ff90f7254 Added more tests, some refactoring 2015-10-08 11:03:48 -07:00
Charles Hacskaylo
0ca9e5c952 [Frontend] Message list initially working
open #159
open #170
Thank you @akhenry;
launchMessages function added to DialogLaunchController.js;
New message-list.html template;
message.html is now its own include;
blocking-message.html renamed to
overlay-blocking-message.html;
2015-10-08 09:37:43 -07:00
Charles Hacskaylo
dbcad51325 [Frontend] Tiny mod to dialog-launch.html
open #159
open #170
2015-10-07 21:32:34 -07:00
Charles Hacskaylo
8ee93d9603 [Frontend] Tweaks to dialog-launch; added ui-symbols
open #159
open #170
2015-10-07 18:26:11 -07:00
Charles Hacskaylo
ac59df9595 [Frontend] Added type-icon to message dialogs
open #159
open #170
Percent complete added to progress-bar.html;
Refined overlay height;
2015-10-07 17:56:25 -07:00
Charles Hacskaylo
182eff977c [Frontend] Dialog and overlay layout/positioning mods
open #159
open #170
Restructured overlay size and positioning approach
for better flexibility;
Getting new dialogs and the overlay to
play nicely in mobile context;
2015-10-07 16:36:55 -07:00
Henry
3af23b7bc5 Added test cases for notification service 2015-10-07 14:30:19 -07:00
Charles Hacskaylo
7f529eec68 [Frontend] Mods to OverlayService
open #159
open #170
OverlayService can now be passed typeClass,
which is added to the CSS class of the overlay's
mct-include tag - intent is to allow the overlay
to size itself based on the type of content to be
displayed;
2015-10-07 12:11:30 -07:00
Charles Hacskaylo
ad4292f1e9 [Frontend] Mods to DialogService model and dialogs
open #159
open #170
Properly re-cast model.hint and added model.actionText;
Moved progressText into progress-bar.html;
Tweaks to dialog styles;
Tweaked styles for progress bar;
Normalized various dialog templates markup;
2015-10-07 11:45:08 -07:00
Charles Hacskaylo
6840e596a5 [Frontend] Adding progress-bar.html template
open #159
open #170
2015-10-07 10:25:47 -07:00
Charles Hacskaylo
30fd8c451e [Frontend] Progress bar as include; progress dialog
open #163
open #170
Progress bar now mct-include;
Progress dialog sanded;
Dialog launcher modded;
2015-10-06 16:10:27 -07:00
Henry
bf0014f1b9 Temporary commit 2015-10-06 14:45:10 -07:00
Charles Hacskaylo
2aeebff652 Merging in Andrew's work so far on progress and blocking dialogs
open #163
open #170

Squashed commit of the following:

commit ec7edb58ca
Author: Henry <akhenry@aitutaki.ndc.nasa.gov>
Date:   Mon Oct 5 10:39:06 2015 -0700

    Rename dialogSeverity to messageServity for reuse with notifications

commit d20abe01dd
Author: Henry <akhenry@aitutaki.ndc.nasa.gov>
Date:   Fri Oct 2 16:40:29 2015 -0700

    Fixed docs

commit 227da18498
Author: Henry <akhenry@aitutaki.ndc.nasa.gov>
Date:   Fri Oct 2 16:27:41 2015 -0700

    Added semicolon

commit 22d424f96e
Author: Henry <akhenry@aitutaki.ndc.nasa.gov>
Date:   Fri Oct 2 16:26:29 2015 -0700

    Fixed code errors

commit 2c77c3647c
Author: Henry <akhenry@aitutaki.ndc.nasa.gov>
Date:   Fri Oct 2 16:24:01 2015 -0700

    Initial commit of blocking dialog service with test code to demonstrate usage
2015-10-06 14:41:58 -07:00
Charles Hacskaylo
471a25a625 [Frontend] Progress bar/ message banner markup and styling
open #170
Major work on progress bar;
2015-10-06 14:34:53 -07:00
Charles Hacskaylo
d606ee421f [Frontend] New template for message-banner
open #159
open #170
Added markup and beginning of styling;
Temporarily added mct-include elem to bottombar.html;
2015-10-02 18:37:01 -07:00
Charles Hacskaylo
926aed72c3 [Frontend] Style and display changes to status block
open #159
open #170
Refined structure in status block markup and css;
Added status-related color constants to theme scss files;
2015-10-02 17:42:31 -07:00
Charles Hacskaylo
7014808c13 [Frontend] Style and display changes to status block
open #159
open #170
Moved classes from _bottom-bar.scss into _layout.scss
and new file _messages.scss;
Removed  _bottom-bar.scss;
Revised display behavior of .status.block to show label on
hover;
2015-10-02 15:41:02 -07:00
Victor Woeltjen
8ce8080253 [Timelines] Begin removing namespacing
Begin de-namespacing timelines/activities for inclusion
in open source. WTD-1239
2015-09-15 08:34:15 -07:00
Victor Woeltjen
96f72b3765 [Clocks] Add license, change keys
Un-namespace keys in clock plugin, and add licensing
info for moment-duration-format. WTD-1239
2015-09-14 16:52:56 -07:00
Victor Woeltjen
c932e953bc [Plugins] Bring over timeline, clock plugins
WTD-1239
2015-09-14 16:45:41 -07:00
305 changed files with 24296 additions and 5544 deletions

2
.gitignore vendored
View File

@@ -28,3 +28,5 @@ node_modules
# Protractor logs
protractor/logs
# npm-debug log
npm-debug.log

View File

@@ -345,6 +345,41 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
---
### moment-duration-format
#### Info
* Link: https://github.com/jsmreese/moment-duration-format
* Version: 1.3.0
* Authors: John Madhavan-Reese
* Description: Duration parsing/formatting
#### License
Copyright 2014 John Madhavan-Reese
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

View File

@@ -15,19 +15,23 @@
"platform/containment",
"platform/execution",
"platform/telemetry",
"platform/features/clock",
"platform/features/events",
"platform/features/imagery",
"platform/features/layout",
"platform/features/pages",
"platform/features/plot",
"platform/features/scrolling",
"platform/features/events",
"platform/features/timeline",
"platform/forms",
"platform/identity",
"platform/persistence/aggregator",
"platform/persistence/local",
"platform/persistence/queue",
"platform/policy",
"platform/entanglement",
"platform/search",
"platform/status",
"example/imagery",
"example/eventGenerator",

View File

@@ -1,3 +1,6 @@
test:
override:
- exit 0
deployment:
production:
branch: master
@@ -5,7 +8,7 @@ deployment:
- ./build-docs.sh
- git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master
openmctweb-staging-un:
branch: search
branch: open199
heroku:
appname: openmctweb-staging-un
openmctweb-staging-deux:

9
docs/footer.html Normal file
View File

@@ -0,0 +1,9 @@
<hr>
<cite>
This document is styled using
<a href="https://github.com/jasonm23/markdown-css-themes">
https://github.com/jasonm23/markdown-css-themes
</a>.
</cite>
</body>
</html>

View File

@@ -20,7 +20,7 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global require,process,GLOBAL*/
/*global require,process,__dirname,GLOBAL*/
/*jslint nomen: false */
@@ -47,6 +47,8 @@ GLOBAL.window = GLOBAL.window || GLOBAL; // nomnoml expects window to be define
nomnoml = require('nomnoml'),
toc = require("markdown-toc"),
Canvas = require('canvas'),
header = fs.readFileSync(path.resolve(__dirname, 'header.html')),
footer = fs.readFileSync(path.resolve(__dirname, 'footer.html')),
options = require("minimist")(process.argv.slice(2));
// Convert from nomnoml source to a target PNG file.
@@ -115,9 +117,9 @@ GLOBAL.window = GLOBAL.window || GLOBAL; // nomnoml expects window to be define
// Prepend table of contents
markdown =
[ TOC_HEAD, toc(markdown).content, "", markdown ].join("\n");
this.push("<html><body>\n");
this.push(header);
this.push(marked(markdown));
this.push("\n</body></html>\n");
this.push(footer);
done();
};
return transform;
@@ -186,12 +188,12 @@ GLOBAL.window = GLOBAL.window || GLOBAL; // nomnoml expects window to be define
var destination = file.replace(options['in'], options.out),
destPath = path.dirname(destination),
streamOptions = {};
if (file.match(/png$/)){
if (file.match(/png$/)) {
streamOptions.encoding = null;
} else {
streamOptions.encoding = 'utf8';
}
mkdirp(destPath, function (err) {
fs.createReadStream(file, streamOptions)
.pipe(fs.createWriteStream(destination, streamOptions));

7
docs/header.html Normal file
View File

@@ -0,0 +1,7 @@
<html>
<head>
<link rel="stylesheet"
href="http://jasonm23.github.io/markdown-css-themes/avenir-white.css">
</head>
<body>

View File

@@ -58,13 +58,13 @@ of the software.
These layers are:
* [_Framework_](Framework.md): The framework layer is responsible for
* [_Framework_](framework.md): The framework layer is responsible for
managing the interactions between application components. It has no
application-specific knowledge; at this layer, we have only
established an abstraction by which different software components
may communicate and/or interact.
* [_Platform_](Platform.md): The platform layer defines the general look, feel, and
behavior of Open MCT Web. This includes user-facing components like
* [_Platform_](platform.md): The platform layer defines the general look,
feel, and behavior of Open MCT Web. This includes user-facing components like
Browse mode and Edit mode, as well as underlying elements of the
information model and the general service infrastructure.
* _Application_: The application layer defines specific features of

View File

@@ -129,7 +129,7 @@ The framework's role in the application is to manage connections between
bundles. All application-specific behavior is provided by individual bundles, or
as the result of their collaboration.
The framework is described in more detail in the [Framework Overview](../architecture/Framework.md#Overview) of the
The framework is described in more detail in the [Framework Overview](../architecture/framework.md#overview) of the
architecture guide.
### Tiers
@@ -186,7 +186,8 @@ as well as the framework layer's role in mediating between these components.
Once the framework layer has wired these software components together, however,
the application's logical architecture emerges.
An overview of the logical architecture of the platform is given in the [Platform Architecture](../architecture/Platform.md#PlatformArchitecture)
An overview of the logical architecture of the platform is given in the
[Platform Architecture](../architecture/platform.md#platform-architecture)
section of the Platform guide
### Web Services
@@ -233,7 +234,7 @@ The application is composed of bundles. Plug-ins are bundles.
non-persistent state associated with a domain object.
* __category__: A machine-readable identifier for a group that something may
belong to.
* __composition __: In the context of a domain object, this refers to the set of
* __composition__: In the context of a domain object, this refers to the set of
other domain objects that compose or are contained by that object. A domain
object's composition is the set of domain objects that should appear immediately
beneath it in a tree hierarchy. A domain object's composition is described in
@@ -244,10 +245,10 @@ identifiers asynchronously.
readable description of a thing; usually a single sentence or short paragraph.
(Most often used in the context of extensions, domain object models, or other
similar application-specific objects.)
* __domain object __: A meaningful object to the user; a distinct thing in the
* __domain object__: A meaningful object to the user; a distinct thing in the
work support by Open MCT Web. Anything that appears in the left-hand tree is a
domain object.
* __extension __: An extension is a unit of functionality exposed to the platform
* __extension__: An extension is a unit of functionality exposed to the platform
in a declarative fashion by a bundle. The term 'extension category' is used to
distinguish types of extensions from specific extension instances.
* __id__: A string which uniquely identifies a domain object.
@@ -609,8 +610,8 @@ path relative to the bundle's resource directory (`res` by default.)
### Composite Services
Composite services are described in the [relevant section](../architecture/Framework.md#Composite-Services)
of the framework guide.
Composite services are described in the [Composite Services](../architecture/framework.md#composite-services)
section of the framework guide.
A component should include the following properties in its extension definition:
@@ -676,6 +677,40 @@ If the provided capability has no invoke method, the return value here functions
as `getCapability` including returning `undefined` if the capability is not
exposed.
### Identifier Syntax
For most purposes, a domain object identifier can be treated as a purely
symbolic string; these are typically generated by Open MCT Web and plug-ins
should rarely be concerned with its internal structure.
A domain object identifier has one or two parts, separated by a colon.
* If two parts are present, the part before the colon refers to the space
in which the domain object resides. This may be a persistence space or
a purely symbolic space recognized by a specific model provider. The
part after the colon is the key to use when looking up the domain object
model within that space.
* If only one part is present, the domain object has no space specified,
and may presume to reside in the application-configured default space
defined by the `PERSISTENCE_SPACE` constant.
* Both the key and the space identifier may consist of any combination
of alphanumeric characters, underscores, dashes, and periods.
Some examples:
* A domain object with the identifier `foo:xyz` would have its model
loaded using key `xyz` from persistence space `foo`.
* A domain object with the identifier `bar` would have its model loaded
using key `bar` from the space identified by the `PERSISTENCE_SPACE`
constant.
```bnf
<identifier> ::= <space> ":" <key> | <key>
<space> ::= <id char>+
<key> ::= <id char>+
<id char> ::= <letter> | <digit> | "-" | "." | "_"
```
## Domain Object Actions
An `Action` is behavior that can be performed upon/using a `DomainObject`. An
@@ -724,8 +759,8 @@ interpretations for specific sources.
### Telemetry Responses
When returned from the `telemetryService` (see [Services](#Services) section),
telemetry series data will be packaged in a `source -> key -> TelemetrySeries`
When returned from the `telemetryService` (see [Telemetry Services](#telemetry-service)
section), telemetry series data will be packaged in a `source -> key -> TelemetrySeries`
fashion. That is, telemetry is passed in an object containing key-value pairs.
Keys identify telemetry sources; values are objects containing additional
key-value pairs. In this object, keys identify individual telemetry series (and
@@ -1042,7 +1077,7 @@ Angular templates which need to interact with information (e.g. the domain
object being represented) provided by the platform. This information is passed
in through the template's scope, such that simple representations may be created
by providing only templates. (More complex representations will need controllers
which are referenced from templates. See [https://docs.angularjs.org/guide/controller ]()
which are referenced from templates. See https://docs.angularjs.org/guide/controller
for more information on controllers in Angular.)
A representation's scope will contain:
@@ -1074,7 +1109,7 @@ representing domain objects in general. For example, support for the _gestures_
extension category is added by a _representer_.
A representer needs only provide an implementation. When an `mct-representation`
is linked (see [https://docs.angularjs.org/guide/directive ]() or when the
is linked (see https://docs.angularjs.org/guide/directive ) or when the
domain object being represented changes, a new _representer_ of each declared
type is instantiated. The constructor arguments for a _representer_ are the same
as the arguments to the link function in an Angular directive: `scope` the
@@ -1106,6 +1141,8 @@ property:
* `stylesheetUrl`: Path and filename, including extension, for the stylesheet to
include. This path is relative to the bundle's resources folder (by default,
`res`)
* `theme`: Optional; if present, this stylesheet will only be included if this
value matches the `THEME` constant.
To control the order of CSS files, use priority (see the section on Extension
Definitions above.)
@@ -1155,7 +1192,7 @@ capability.
(as should appear in the _Create_ or the _Edit Properties_ dialog.) Each
property is described by an object containing the following properties:
* `control`: The key of the control (see `mct-control` and the `controls`
[extension category](#Controls)) to use for editing this property.
[extension category](#controls-category)) to use for editing this property.
* `property`: A string which will be used as the name of the property in the
domain object's model that the value for this property should be stored
under. If this value should be stored in an object nested within the domain
@@ -1178,7 +1215,7 @@ the list of version information in the About dialog.
dialog.
To control the ordering of line items within the About dialog, use `priority`.
(See section on [Extension Definitions](#ExtensionDefinitions) above.)
(See section on [Extensions](#extensions) above.)
This extension category does not have implementations.
@@ -1200,7 +1237,7 @@ applicable for domain objects which have the capabilities identified by these
strings.
* `delegation`: Optional boolean, intended to be used in conjunction with
`needs`; if present, allow required capabilities to be satisfied by means of
capability delegation. (See [Delegation](#Delegation))
capability delegation. (See [Delegation](#delegation-capability))
* `toolbar`: Optional; a definition for the toolbar which may appear in a
toolbar when using this view in Edit mode. This should be specified as a
structure for mct-toolbar , with additional properties available for each item in
@@ -1231,8 +1268,8 @@ A view's selection state is, conceptually, a set of JavaScript objects. The
presence of methods/properties on these objects determine which toolbar controls
are visible, and what state they manage and/or behavior they invoke.
This set may contain up to two different objects: The _view proxy _, which is
used to make changes to the view as a whole, and the _ selected object _, which is
This set may contain up to two different objects: The _view proxy_, which is
used to make changes to the view as a whole, and the _selected object_, which is
used to represent some state within the view. (Future versions of Open MCT Web
may support multiple selected objects.)
@@ -1251,6 +1288,22 @@ object, or the current view proxy.
* `all()`: Get an array of all objects in the selection state. Will include
either or both of the view proxy and selected object.
## Workers Category
The `workers` extension category allows scripts to be run as web workers
using the `workerService`.
An extension of this category has no implementation. The following properties
are supported:
* `key`: A symbolic string used to identify this worker.
* `workerUrl`: The path, relative to this bundle's `src` folder, where
this worker's source code resides.
* `shared`: Optional; a boolean flag which, if true, indicates that this
worker should be instantiated as a
[`SharedWorker`](https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker/SharedWorker).
Default value is `false`.
# Directives
Open MCT Web defines several Angular directives that are intended for use both
@@ -1561,7 +1614,8 @@ extension mechanism is insufficient to achieve a desired result.
### Action Service
The [Action Service](../architecture/platform#action-service) (`actionService`)
The [Action Service](../architecture/platform.md#action-service)
(`actionService`)
provides `Action` instances which are applicable in specific contexts. See Core
API for additional notes on the interface for actions. The `actionService` has
the following interface:
@@ -1571,7 +1625,8 @@ in the specified action context.
### Capability Service
The [Capability Service](../architecture/platform#capability-service) (`capabilityService`)
The [Capability Service](../architecture/platform.md#capability-service)
(`capabilityService`)
provides constructors for capabilities which will be exposed for a given domain
object.
@@ -1691,7 +1746,7 @@ allowed within the application. It has the following interface:
* `allow(category, candidate, context, [callback])`: Check if this decision
should be allowed. Returns a boolean. Its arguments are interpreted as:
* `category`: A string identifying which kind of decision is being made. See
the [section on Categories](#PolicyCategories) for categories supported by
the [section on Categories](#policy-categories) for categories supported by
the platform; plugins may define and utilize policies of additional
categories, as well.
* `candidate`: An object representing the thing which shall or shall not be
@@ -1717,7 +1772,7 @@ When acquiring telemetry for display, it is recommended that the
`telemetryHandler` service be used instead of this service. The
`telemetryHandler` has additional support for subscribing to and requesting
telemetry data associated with domain objects or groups of domain objects. See
the [Other Services](#Other-Services) section for more information.
the [Other Services](#other-services) section for more information.
The `telemetryService` has the following interface:
@@ -1844,6 +1899,14 @@ the TelemetrySeries itself, in that order.
* `getSeries(domainObject)`: Get the latest `TelemetrySeries` (as resulted from
a previous `request(...)` call) available for this domain object.
### Worker Service
The `workerService` may be used to run web workers defined via the
`workers` extension category. It has the following method:
* `run(key)`: Run the worker identified by the provided `key`. Returns
a `Worker` (or `SharedWorker`, if the specified worker is defined
as a shared worker); if the `key` is unknown, returns `undefined`.
# Models
Domain object models in Open MCT Web are JavaScript objects describing the
@@ -2051,6 +2114,31 @@ objects which has a `relationships` property in their model, whose value is an
object containing key-value pairs, where keys are strings identifying
relationship types, and values are arrays of domain object identifiers.
## Status Capability
The `status` capability provides a way to flag domain objects as possessing
certain states, represented as simple strings. These states, in turn, are
reflected on `mct-representation` elements as classes (prefixed with
`s-status-`.) The `status` capability has the following interface:
* `get()`: Returns an array of all status strings that currently apply
to this object.
* `set(status, state)`: Adds or removes a status flag to this domain object.
The `status` argument is the string to set; `state` is a boolean
indicating whether this status should be included (true) or removed (false).
* `listen(callback)`: Listen for changes in status. The provided `callback`
will be invoked with an array of all current status strings whenever status
changes.
Plug-ins may add and/or recognize arbitrary status flags. Flags defined
and/or supported by the platform are:
Status | CSS Class | Meaning
-----------|--------------------|-----------------------------------
`editing` | `s-status-editing` | Domain object is being edited.
`pending` | `s-status-pending` | Domain object is partially loaded.
## Telemetry Capability
The telemetry capability provides a means for accessing telemetry data
@@ -2152,7 +2240,7 @@ 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/]().
https://maven.apache.org/ .
Invoking mvn clean install will:
@@ -2169,7 +2257,7 @@ download build dependencies.
## Test Suite
Open MCT Web uses Jasmine [http://jasmine.github.io/]() for automated testing.
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`.
@@ -2260,30 +2348,30 @@ Examples of deployment strategies (and the conditions under which they make the
most sense) include:
* If the external services that Open MCT Web will utilize are all running on
Apache Tomcat [https://tomcat.apache.org/](), then it makes sense to run Open
[Apache Tomcat](https://tomcat.apache.org/), then it makes sense to run Open
MCT Web from the same Tomcat instance as a separate web application. The
`.war` artifact produced by the command line build facilitates this deployment
option. (See [https://tomcat.apache.org/tomcat-8.0-doc/deployer-howto.html() for
option. (See https://tomcat.apache.org/tomcat-8.0-doc/deployer-howto.html for
general information on deploying in Tomcat.)
* If a variety of external services will be running from a variety of
hosts/ports, then it may make sense to use a web server that supports proxying,
such as the Apache HTTP Server [http://httpd.apache.org/](). In this
such as the [Apache HTTP Server](http://httpd.apache.org/). In this
configuration, the HTTP server would be configured to proxy (or reverse proxy)
requests at specific paths to the various external services, while providing
Open MCT Web as flat files from a different path.
* If a single server component is being developed to handle all server-side
needs of an Open MCT Web instance, it can make sense to serve Open MCT Web (as
flat files) from the same component using an embedded HTTP server such as Nancy
[http://nancyfx.org/]().
flat files) from the same component using an embedded HTTP server such as
[Nancy](http://nancyfx.org/).
* If no external services are needed (or if the 'external services' will just
be generating flat files to read) it makes sense to utilize a lightweight flat
file HTTP server such as Lighttpd [http://www.lighttpd.net/](). In this
file HTTP server such as [Lighttpd](http://www.lighttpd.net/). In this
configuration, Open MCT Web sources/resources would be placed at one path, while
the files generated by the external service are placed at another path.
* If all external services support CORS, it may make sense to have an HTTP
server that is solely responsible for making Open MCT Web sources/resources
available, and to have Open MCT Web contact these external services directly.
Again, lightweight HTTP servers such as Lighttpd [http://www.lighttpd.net/]()
Again, lightweight HTTP servers such as [Lighttpd](http://www.lighttpd.net/)
are useful in this circumstance. The downside of this option is that additional
configuration effort is required, both to enable CORS on the external services,
and to ensure that Open MCT Web can correctly locate these services.
@@ -2323,7 +2411,17 @@ default paths to reach external services are all correct.
### Configuration Constants
The following constants have global significance:
* `PERSISTENCE_SPACE`: The space in which domain objects should be persisted
(or read from) when not otherwise specified. Typically this will not need
to be overridden by other bundles, but persistence adapters may wish to
consume this constant in order to provide persistence for that space.
The following configuration constants are recognized by Open MCT Web bundles:
* Common UI elements - `platform/commonUI/general`
* `THEME`: A string identifying the current theme symbolically. Individual
stylesheets (the `stylesheets` extension category) may specify an optional
`theme` property which will be matched against this before inclusion.
* CouchDB adapter - `platform/persistence/couch`
* `COUCHDB_PATH`: URL or path to the CouchDB database to be used for domain
object persistence. Should not include a trailing slash.

View File

@@ -32,6 +32,7 @@
<li><a href="architecture/">Architecture Overview</a></li>
<li><a href="guide/">Developer Guide</a></li>
<li><a href="tutorials/">Tutorials</a></li>
<li><a href="process/">Development Process</a></li>
</ul>
</body>
</html>

156
docs/src/process/index.md Normal file
View File

@@ -0,0 +1,156 @@
# Development Cycle
Development of Open MCT Web occurs on an iterative cycle of
sprints and releases.
* A _sprint_ is three weeks in duration, and represents a
set of improvements that can be completed and tested by the
development team. Software at the end of the sprint is
"semi-stable"; it will have undergone reduced testing and may carry
defects or usability issues of lower severity, particularly if
there are workarounds.
* A _release_ occurs every four sprints. Releases are stable, and
will have undergone full acceptance testing to ensure that the
software behaves correctly and usably.
## Roles
The sprint process assumes the presence of a __project manager.__
The project manager is responsible for
making tactical decisions about what development work will be
performed, and for coordinating with stakeholders to arrive at
higher-level strategic decisions about desired functionality
and characteristics of the software, major external milestones,
and so forth.
In the absence of a dedicated project manager, this role may be rotated
among members of the development team on a per-sprint basis.
Responsibilities of the project manager including:
* Maintaining (with agreement of stakeholders) a "road map" of work
planned for future releases/sprints; this should be higher-level,
usually expressed as "themes",
with just enough specificity to gauge feasibility of plans,
relate work back to milestones, and identify longer-term
dependencies.
* Determining (with assistance from the rest of the team) which
issues to work on in a given sprint and how they shall be
assigned.
* Pre-planning subsequent sprints to ensure that all members of the
team always have a clear direction.
* Scheduling and/or ensuring adherence to
[process points](#process-points).
* Responding to changes within the sprint (shifting priorities,
new issues) and re-allocating work for the sprint as needed.
## Sprint Calendar
Certain [process points](#process-points) are regularly scheduled in
the sprint cycle.
### Sprints by Release
Allocation of work among sprints should be planned relative to release
goals and milestones. As a general guideline, higher-risk work (large
new features which may carry new defects, major refactoring, design
changes with uncertain effects on usability) should be allocated to
earlier sprints, allowing for time in later sprints to ensure stability.
| Sprint | Focus |
|:------:|:--------------------------------------------------------|
| __1__ | Prototyping, design, experimentation. |
| __2__ | New features, refinements, enhancements. |
| __3__ | Feature completion, low-risk enhancements, bug fixing. |
| __4__ | Stability & quality assurance. |
### Sprints 1-3
The first three sprints of a release are primarily centered around
development work, with regular acceptance testing in the third
week. During this third week, the top priority should be passing
acceptance testing (e.g. by resolving any blockers found); any
resources not needed for this effort should be used to begin work
for the subsequent sprint.
| Week | Mon | Tue | Wed | Thu | Fri |
|:-----:|:-------------------------:|:------:|:---:|:----------------------------:|:-----------:|
| __1__ | Sprint plan | Tag-up | | | |
| __2__ | | Tag-up | | | Code freeze |
| __3__ | Sprint acceptance testing | Triage | | _Sprint acceptance testing*_ | Ship |
&ast; If necessary.
### Sprint 4
The software must be stable at the end of the fourth sprint; because of
this, the fourth sprint is scheduled differently, with a heightened
emphasis on testing.
| Week | Mon | Tue | Wed | Thu | Fri |
|-------:|:-------------------------:|:------:|:---:|:----------------------------:|:-----------:|
| __1__ | Sprint plan | Tag-up | | | Code freeze |
| __2__ | Acceptance testing | Triage | | | |
| __3__ | _Acceptance testing*_ | Triage | | _Acceptance testing*_ | Ship |
&ast; If necessary.
## Process Points
* __Sprint plan.__ Project manager allocates issues based on
theme(s) for sprint, then reviews with team. Each team member
should have roughly two weeks of work allocated (to allow time
in the third week for testing of work completed.)
* Project manager should also sketch out subsequent sprint so
that team may begin work for that sprint during the
third week, since testing and blocker resolution is unlikely
to require all available resources.
* __Tag-up.__ Check in and status update among development team.
May amend plan for sprint as-needed.
* __Code freeze.__ Any new work from this sprint
(features, bug fixes, enhancements) must be integrated by the
end of the second week of the sprint. After code freeze
(and until the end of the sprint) the only changes that should be
merged into the master branch should directly address issues
needed to pass acceptance testing.
* __Acceptance Testing.__ Structured testing with predefined
success criteria. No release should ship without passing
acceptance tests. Time is allocated in each sprint for subsequent
rounds of acceptance testing if issues are identified during a
prior round. Specific details of acceptance testing need to be
agreed-upon with relevant stakeholders and delivery recipients,
and should be flexible enough to allow changes to plans
(e.g. deferring delivery of some feature in order to ensure
stability of other features.) Baseline testing includes:
* __Testathon.__ Multi-user testing, involving as many users as
is feasible, plus development team. Open-ended; should verify
completed work from this sprint, test exploratorily for
regressions, et cetera.
* __24-Hour Test.__ A test to verify that the software remains
stable after running for longer durations. May include some
combination of automated testing and user verification (e.g.
checking to verify that software remains subjectively
responsive at conclusion of test.)
* __Automated Testing.__ Automated testing integrated into the
build. (These tests are verified to pass more often than once
per sprint, as they run before any merge to master, but still
play an important role in acceptance testing.)
* __Sprint Acceptance Testing.__ Subset of Acceptance Testing
which should be performed before shipping at the end of any
sprint. Time is allocated for a second round of
Sprint Acceptance Testing if the first round is not passed.
* __Triage.__ Team reviews issues from acceptance testing and uses
success criteria to determine whether or not they should block
release, then formulates a plan to address these issues before
the next round of acceptance testing. Focus here should be on
ensuring software passes that testing in order to ship on time;
may prefer to disable malfunctioning components and fix them
in a subsequent sprint, for example.
* __Ship.__ Tag a code snapshot that has passed acceptance
testing and deploy that version. (Only true if acceptance
testing has passed by this point; if acceptance testing has not
been passed, will need to make ad hoc decisions with stakeholders,
e.g. "extend the sprint" or "defer shipment until end of next
sprint.")

File diff suppressed because it is too large Load Diff

View File

@@ -62,7 +62,7 @@ define(
// so it's not checked for here, just formatted for display
// differently.
return (i + offset) * 1000 + firstTime * 1000 -
(domain === 'yesterday' ? ONE_DAY : 0);
(domain === 'yesterday' ? (ONE_DAY * 1000) : 0);
};
generatorData.getRangeValue = function (i, range) {

View File

@@ -0,0 +1,12 @@
{
"name": "Mobile",
"description": "Allows elements with pertinence to mobile usage and development",
"extensions": {
"stylesheets": [
{
"stylesheetUrl": "css/mobile-example.css",
"priority": "mandatory"
}
]
}
}

26
example/mobile/res/config.rb Executable file
View File

@@ -0,0 +1,26 @@
# Require any additional compass plugins here.
# require "compass-growl"
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "css"
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "js"
# You can select your preferred output style here (can be overridden via the command line):
# :expanded, :compressed, :nested
output_style = :nested
# To enable relative paths to assets via compass helper functions. Uncomment:
relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass vfn_platform/static/sass scss && rm -rf sass && mv scss sass

View File

@@ -0,0 +1,103 @@
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/************************** FEATURES */
/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */
/************************** RATIOS */
/************************** LAYOUT */
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/************************** LIMITS */
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
/************************** MOBILE TREE MENU DIMENSIONS */
/************************** WINDOW DIMENSIONS FOR RWD */
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/* REQUIRES mobile/_constants */
@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) {
/* line 28, ../sass/mobile-example.scss */
.create-btn-holder {
display: block !important; } }

View File

@@ -0,0 +1,31 @@
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
@import "../../../../platform/commonUI/general/res/sass/constants";
@import "../../../../platform/commonUI/general/res/sass/mobile/constants";
@import "../../../../platform/commonUI/general/res/sass/mobile/mixins";
@include phoneandtablet {
// Show the Create button
.create-btn-holder {
display: block !important;
}
}

View File

@@ -0,0 +1,2 @@
Example of using multiple persistence stores by exposing a root
object with a different space prefix.

View File

@@ -0,0 +1,23 @@
{
"extensions": {
"roots": [
{
"id": "scratch:root",
"model": {
"type": "folder",
"composition": [],
"name": "Scratchpad"
},
"priority": "preferred"
}
],
"components": [
{
"provides": "persistenceService",
"type": "provider",
"implementation": "ScratchPersistenceProvider.js",
"depends": [ "$q" ]
}
]
}
}

View File

@@ -0,0 +1,79 @@
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/*global define,window*/
define(
[],
function () {
'use strict';
/**
* The ScratchPersistenceProvider keeps JSON documents in memory
* and provides a persistence interface, but changes are lost on reload.
* @memberof example/scratchpad
* @constructor
* @implements {PersistenceService}
* @param q Angular's $q, for promises
*/
function ScratchPersistenceProvider($q) {
this.$q = $q;
this.table = {};
}
ScratchPersistenceProvider.prototype.listSpaces = function () {
return this.$q.when(['scratch']);
};
ScratchPersistenceProvider.prototype.listObjects = function (space) {
return this.$q.when(
space === 'scratch' ? Object.keys(this.table) : []
);
};
ScratchPersistenceProvider.prototype.createObject = function (space, key, value) {
if (space === 'scratch') {
this.table[key] = JSON.stringify(value);
}
return this.$q.when(space === 'scratch');
};
ScratchPersistenceProvider.prototype.readObject = function (space, key) {
return this.$q.when(
(space === 'scratch' && this.table[key]) ?
JSON.parse(this.table[key]) : undefined
);
};
ScratchPersistenceProvider.prototype.deleteObject = function (space, key, value) {
if (space === 'scratch') {
delete this.table[key];
}
return this.$q.when(space === 'scratch');
};
ScratchPersistenceProvider.prototype.updateObject =
ScratchPersistenceProvider.prototype.createObject;
return ScratchPersistenceProvider;
}
);

View File

@@ -34,7 +34,6 @@ module.exports = function(config) {
// List of files / patterns to load in the browser.
// By default, files are also included in a script tag.
files: [
'**/moment*',
{pattern: 'example/**/*.js', included: false},
{pattern: 'platform/**/*.js', included: false},
{pattern: 'warp/**/*.js', included: false},

View File

@@ -1,9 +1,4 @@
{
"configuration": {
"paths": {
"uuid": "uuid"
}
},
"extensions": {
"routes": [
{
@@ -25,6 +20,7 @@
"$scope",
"$route",
"$location",
"$q",
"objectService",
"navigationService",
"urlService"
@@ -39,7 +35,8 @@
{
"key": "BrowseObjectController",
"implementation": "BrowseObjectController.js",
"depends": [ "$scope", "$location", "$route" ]
"depends": [ "$scope", "$location", "$route", "$q",
"navigationService" ]
},
{
"key": "CreateMenuController",
@@ -67,6 +64,7 @@
{
"key": "browse-object",
"templateUrl": "templates/browse-object.html",
"gestures": ["drop"],
"uses": [ "view" ]
},
{
@@ -152,14 +150,15 @@
"provides": "actionService",
"type": "provider",
"implementation": "creation/CreateActionProvider.js",
"depends": [ "typeService", "dialogService", "creationService", "policyService" ]
"depends": ["$q", "typeService",
"navigationService"]
},
{
"key": "CreationService",
"provides": "creationService",
"type": "provider",
"implementation": "creation/CreationService.js",
"depends": [ "persistenceService", "now", "$q", "$log" ]
"depends": [ "$q", "$log" ]
}
],
"runs": [
@@ -178,16 +177,6 @@
"copyright": "Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
"license": "license-mit",
"link": "https://github.com/sindresorhus/screenfull.js/blob/gh-pages/license"
},
{
"name": "Math.uuid.js",
"version": "1.4",
"description": "Unique identifer generation (code adapted.)",
"author": "Robert Kieffer",
"website": "https://github.com/broofa/node-uuid",
"copyright": "Copyright (c) 2010 Robert Kieffer",
"license": "license-mit",
"link": "http://opensource.org/licenses/MIT"
}
]
}

View File

@@ -19,16 +19,19 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<span ng-controller="BrowseObjectController">
<div class="object-browse-bar bar l-flex">
<div class="items-select left">
<div ng-controller="BrowseObjectController" class="abs l-flex-col"
ng-class="editMode ? 'edit-mode' : 'browse-mode'">
<div class="holder flex-elem l-flex-row object-browse-bar ">
<div class="items-select left flex-elem l-flex-row grows">
<mct-representation key="'back-arrow'"
mct-object="domainObject"
class="l-back"></mct-representation>
<mct-representation key="'object-header'" mct-object="domainObject">
class="flex-elem l-back"></mct-representation>
<mct-representation key="'object-header'"
mct-object="domainObject"
class="l-flex-row flex-elem grows object-header">
</mct-representation>
</div>
<div class="btn-bar right">
<div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
<mct-representation key="'switcher'"
mct-object="domainObject"
ng-model="representation">
@@ -41,8 +44,27 @@
</mct-representation>
</div>
</div>
<mct-representation key="representation.selected.key"
mct-object="representation.selected.key && domainObject"
class="abs object-holder">
</mct-representation>
</span>
<div class="holder l-flex-col flex-elem grows l-object-wrapper" ng-class="{ active:editMode, 'edit-main':editMode}">
<div class="holder l-flex-col flex-elem grows l-object-wrapper-inner">
<!-- Toolbar and Save/Cancel buttons -->
<div class="l-edit-controls flex-elem l-flex-row flex-align-end"
ng-class="{ active:editMode }">
<mct-toolbar name="mctToolbar"
structure="toolbar.structure"
ng-model="toolbar.state"
class="flex-elem grows">
</mct-toolbar>
<mct-representation key="'edit-action-buttons'"
mct-object="domainObject"
class='flex-elem conclude-editing'>
</mct-representation>
</div>
<mct-representation key="representation.selected.key"
mct-object="representation.selected.key && domainObject"
class="abs flex-elem grows object-holder-main scroll"
toolbar="toolbar">
</mct-representation>
</div><!--/ l-object-wrapper-inner -->
</div>
</div>

View File

@@ -20,7 +20,8 @@
at runtime from the About dialog for additional information.
-->
<div class="abs holder-all browse-mode" ng-controller="BrowseController">
<div class="abs holder-all" ng-controller="BrowseController"
mct-before-unload="beforeUnloadWarning()">
<mct-include key="'topbar-browse'"></mct-include>
<div class="abs holder holder-main browse-area s-browse-area browse-wrapper"
ng-controller="PaneController as modelPaneTree"
@@ -28,30 +29,23 @@
<mct-split-pane class='abs contents'
anchor='left'>
<div class='split-pane-component treeview pane left'>
<!--<a class="mini-tab-icon anchor-left toggle-pane toggle-search mobile-hide"
title="Enable search"
ng-click="modelPaneTree.toggle()"
ng-class="{ collapsed : !modelPaneTree.visible() }"
ng-style="{ opacity: modelPaneTree.visible()? 0:1 }"></a>-->
<div class="holder holder-create-and-search abs l-mobile">
<div class="abs holder l-flex-col holder-treeview-elements">
<mct-representation key="'create-button'"
mct-object="navigatedObject"
mct-device="desktop">
class="holder flex-elem create-btn-holder">
</mct-representation>
<mct-include key="'search'"
ng-model="treeModel"
class="holder l-flex-col flex-elem search-holder"
ng-class="{ active: treeModel.search, grows: treeModel.search }">
</mct-include>
<mct-representation key="'tree'"
mct-object="domainObject"
parameters="tree"
ng-model="treeModel"
class="holder flex-elem grows vscroll tree-holder"
ng-hide="treeModel.search">
</mct-representation>
<div class='holder search-holder abs'
ng-class="{active: treeModel.search}">
<mct-include key="'search'"
ng-model="treeModel">
</mct-include>
</div>
<div class='tree-holder abs mobile-tree-holder'
ng-hide="treeModel.search">
<mct-representation key="'tree'"
mct-object="domainObject"
parameters="tree"
ng-model="treeModel">
</mct-representation>
</div>
</div>
</div>
@@ -63,7 +57,7 @@
ng-click="modelPaneTree.toggle()"
ng-class="{ collapsed : !modelPaneTree.visible() }"></a>
<div class='holder holder-object-and-inspector abs l-mobile' id='content-area'
<div class='holder holder-object-and-inspector abs' id='content-area'
ng-controller="PaneController as modelPaneInspect"
ng-class="modelPaneInspect.visible() ? 'pane-inspect-showing' : 'pane-inspect-hidden'">
@@ -79,7 +73,7 @@
<div class="split-pane-component t-inspect pane right mobile-hide">
<mct-representation key="'object-inspector'"
mct-object="domainObject"
mct-object="navigatedObject"
ng-model="treeModel">
</mct-representation>
<a class="mini-tab-icon anchor-right mobile-hide toggle-pane toggle-inspect"

View File

@@ -19,12 +19,12 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div class='object-header'>
<span class='type-icon ui-symbol'>{{type.getGlyph()}}</span>
<!--span class='type-name mobile-important-hide'>{{type.getName()}}</span-->
<span class="l-elem-wrapper l-flex">
<span ng-if="parameters.mode" class='action'>{{parameters.mode}}</span>
<span class='title-label'>{{model.name}}</span>
<mct-representation key="'menu-arrow'" mct-object='domainObject'></mct-representation>
</span>
</div>
<span class='type-icon ui-symbol flex-elem'>{{type.getGlyph()}}</span>
<span class="l-elem-wrapper l-flex-row flex-elem grows">
<span ng-if="parameters.mode" class='action flex-elem'>{{parameters.mode}}</span>
<span class='title-label flex-elem flex-can-shrink'>{{model.name}}</span>
<mct-representation
key="'menu-arrow'"
mct-object='domainObject'
class="flex-elem"></mct-representation>
</span>

View File

@@ -26,12 +26,16 @@
* @namespace platform/commonUI/browse
*/
define(
[],
function () {
[
'../../../representation/src/gestures/GestureConstants',
'../../edit/src/objects/EditableDomainObject'
],
function (GestureConstants, EditableDomainObject) {
"use strict";
var ROOT_ID = "ROOT",
DEFAULT_PATH = "mine";
DEFAULT_PATH = "mine",
CONFIRM_MSG = "Unsaved changes will be lost if you leave this page.";
/**
* The BrowseController is used to populate the initial scope in Browse
@@ -43,7 +47,7 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function BrowseController($scope, $route, $location, objectService, navigationService, urlService) {
function BrowseController($scope, $route, $location, $q, objectService, navigationService, urlService) {
var path = [ROOT_ID].concat(
($route.current.params.ids || DEFAULT_PATH).split("/")
);
@@ -64,10 +68,21 @@ define(
// urlService.urlForLocation used to adjust current
// path to new, addressed, path based on
// domainObject
$location.path(urlService.urlForLocation("browse", domainObject));
$location.path(urlService.urlForLocation("browse", domainObject.hasCapability('editor') ? domainObject.getOriginalObject() : domainObject));
}
function setSelectedObject(domainObject) {
if (domainObject !== $scope.navigatedObject && isDirty() && !confirm(CONFIRM_MSG)) {
$scope.treeModel.selectedObject = $scope.navigatedObject;
} else {
if (domainObject !== $scope.navigatedObject && $scope.navigatedObject.hasCapability('editor')){
$scope.navigatedObject.getCapability('action').perform('cancel');
}
setNavigation(domainObject);
}
}
// Callback for updating the in-scope reference to the object
// that is currently navigated-to.
function setNavigation(domainObject) {
@@ -78,6 +93,7 @@ define(
}
function navigateTo(domainObject) {
// Check if an object has been navigated-to already...
// If not, or if an ID path has been explicitly set in the URL,
// navigate to the URL-specified object.
@@ -143,12 +159,25 @@ define(
selectedObject: navigationService.getNavigation()
};
function isDirty(){
var editorCapability = $scope.navigatedObject &&
$scope.navigatedObject.getCapability("editor"),
hasChanges = editorCapability && editorCapability.dirty();
return hasChanges;
}
$scope.beforeUnloadWarning = function() {
return isDirty() ?
"Unsaved changes will be lost if you leave this page." :
undefined;
}
// Listen for changes in navigation state.
navigationService.addListener(setNavigation);
// Also listen for changes which come from the tree
$scope.$watch("treeModel.selectedObject", setNavigation);
$scope.$watch("treeModel.selectedObject", setSelectedObject);
// Clean up when the scope is destroyed
$scope.$on("$destroy", function () {
navigationService.removeListener(setNavigation);

View File

@@ -22,8 +22,9 @@
/*global define,Promise*/
define(
[],
function () {
['../../../representation/src/gestures/GestureConstants',
'../../edit/src/objects/EditableDomainObject'],
function (GestureConstants, EditableDomainObject) {
"use strict";
/**
@@ -32,8 +33,10 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function BrowseObjectController($scope, $location, $route) {
function BrowseObjectController($scope, $location, $route, $q, navigationService) {
var navigatedObject;
function setViewForDomainObject(domainObject) {
var locationViewKey = $location.search().view;
function selectViewIfMatching(view) {
@@ -47,6 +50,9 @@ define(
((domainObject && domainObject.useCapability('view')) || [])
.forEach(selectViewIfMatching);
}
//$scope.editMode = domainObject.hasCapability('editor') ?
// true : false;
navigatedObject = domainObject;
}
function updateQueryParam(viewKey) {
@@ -67,6 +73,15 @@ define(
$scope.$watch('domainObject', setViewForDomainObject);
$scope.$watch('representation.selected.key', updateQueryParam);
$scope.cancelEditing = function() {
navigationService.setNavigation($scope.domainObject.getDomainObject());
}
$scope.doAction = function (action){
$scope[action] && $scope[action]();
}
}
return BrowseObjectController;

View File

@@ -25,8 +25,10 @@
* Module defining CreateAction. Created by vwoeltje on 11/10/14.
*/
define(
['./CreateWizard'],
function (CreateWizard) {
['./CreateWizard',
'uuid',
'../../../edit/src/objects/EditableDomainObject'],
function (CreateWizard, uuid, EditableDomainObject) {
"use strict";
/**
@@ -45,13 +47,11 @@ define(
* override this)
* @param {ActionContext} context the context in which the
* action is being performed
* @param {DialogService} dialogService the dialog service
* to use when requesting user input
* @param {CreationService} creationService the creation service,
* which handles the actual instantiation and persistence
* of the newly-created domain object
* @param {NavigationService} navigationService the navigation service,
* which handles changes in navigation. It allows the object
* being browsed/edited to be set.
*/
function CreateAction(type, parent, context, dialogService, creationService, policyService) {
function CreateAction(type, parent, context, $q, navigationService) {
this.metadata = {
key: 'create',
glyph: type.getGlyph(),
@@ -63,9 +63,8 @@ define(
this.type = type;
this.parent = parent;
this.policyService = policyService;
this.dialogService = dialogService;
this.creationService = creationService;
this.navigationService = navigationService;
this.$q = $q;
}
/**
@@ -73,45 +72,24 @@ define(
* This will prompt for user input first.
*/
CreateAction.prototype.perform = function () {
/*
Overview of steps in object creation:
var newModel = this.type.getInitialModel(),
parentObject = this.navigationService.getNavigation(),
newObject,
editableObject;
1. Show dialog
a. Prepare dialog contents
b. Invoke dialogService
2. Create new object in persistence service
a. Generate UUID
b. Store model
3. Mutate destination container
a. Get mutation capability
b. Add new id to composition
4. Persist destination container
a. ...use persistence capability.
*/
newModel.type = this.type.getKey();
newObject = parentObject.useCapability('instantiation', newModel);
editableObject = new EditableDomainObject(newObject, this.$q);
editableObject.setOriginalObject(parentObject);
editableObject.useCapability('mutation', function(model){
model.location = parentObject.getId();
});
// The wizard will handle creating the form model based
// on the type...
var wizard =
new CreateWizard(this.type, this.parent, this.policyService),
self = this;
// Create and persist the new object, based on user
// input.
function persistResult(formValue) {
var parent = wizard.getLocation(formValue),
newModel = wizard.createModel(formValue);
return self.creationService.createObject(newModel, parent);
if (newObject.hasCapability('composition') && this.type.getKey()!=='folder') {
this.navigationService.setNavigation(editableObject);
} else {
return editableObject.getCapability('action').perform('save');
}
function doNothing() {
// Create cancelled, do nothing
return false;
}
return this.dialogService.getUserInput(
wizard.getFormStructure(),
wizard.getInitialFormValue()
).then(persistResult, doNothing);
};

View File

@@ -46,11 +46,10 @@ define(
* introduced in this bundle), responsible for handling actual
* object creation.
*/
function CreateActionProvider(typeService, dialogService, creationService, policyService) {
function CreateActionProvider($q, typeService, navigationService) {
this.typeService = typeService;
this.dialogService = dialogService;
this.creationService = creationService;
this.policyService = policyService;
this.navigationService = navigationService;
this.$q = $q;
}
CreateActionProvider.prototype.getActions = function (actionContext) {
@@ -75,9 +74,8 @@ define(
type,
destination,
context,
self.dialogService,
self.creationService,
self.policyService
self.$q,
self.navigationService
);
});
};

View File

@@ -34,9 +34,9 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function CreateWizard(type, parent, policyService) {
function CreateWizard(type, parent, policyService, initialModel) {
this.type = type;
this.model = type.getInitialModel();
this.model = initialModel || type.getInitialModel();
this.properties = type.getProperties();
this.parent = parent;
this.policyService = policyService;

View File

@@ -25,8 +25,8 @@
* Module defining CreateService. Created by vwoeltje on 11/10/14.
*/
define(
["uuid"],
function (uuid) {
[],
function () {
"use strict";
var NON_PERSISTENT_WARNING =
@@ -42,11 +42,9 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function CreationService(persistenceService, now, $q, $log) {
this.persistenceService = persistenceService;
function CreationService($q, $log) {
this.$q = $q;
this.$log = $log;
this.now = now;
}
/**
@@ -70,26 +68,17 @@ define(
*/
CreationService.prototype.createObject = function (model, parent) {
var persistence = parent.getCapability("persistence"),
newObject = parent.useCapability("instantiation", model),
newObjectPersistence = newObject.getCapability("persistence"),
self = this;
// Persist the new domain object's model; it will be fully
// constituted as a domain object when loaded back, as all
// domain object models are.
function doPersist(space, id, model) {
return self.persistenceService.createObject(
space,
id,
model
).then(function () { return id; });
}
// Add the newly-created object's id to the parent's
// composition, so that it will subsequently appear
// as a child contained by that parent.
function addToComposition(id, parent, parentPersistence) {
function addToComposition() {
var compositionCapability = parent.getCapability('composition'),
addResult = compositionCapability &&
compositionCapability.add(id);
compositionCapability.add(newObject);
return self.$q.when(addResult).then(function (result) {
if (!result) {
@@ -97,7 +86,7 @@ define(
return undefined;
}
return parentPersistence.persist().then(function () {
return persistence.persist().then(function () {
return result;
});
});
@@ -105,21 +94,13 @@ define(
// We need the parent's persistence capability to determine
// what space to create the new object's model in.
if (!persistence) {
if (!persistence || !newObjectPersistence) {
self.$log.warn(NON_PERSISTENT_WARNING);
return self.$q.reject(new Error(NON_PERSISTENT_WARNING));
}
// We create a new domain object in three sequential steps:
// 1. Get a new UUID for the object
// 2. Create a model with that ID in the persistence space
// 3. Add that ID to
return self.$q.when(uuid()).then(function (id) {
model.persisted = self.now();
return doPersist(persistence.getSpace(), id, model);
}).then(function (id) {
return addToComposition(id, parent, persistence);
});
// Persist the new object, then add it to composition.
return newObjectPersistence.persist().then(addToComposition);
};

View File

@@ -30,9 +30,7 @@ define(
"use strict";
describe("The creation service", function () {
var mockPersistenceService,
mockNow,
mockQ,
var mockQ,
mockLog,
mockParentObject,
mockNewObject,
@@ -40,7 +38,9 @@ define(
mockPersistenceCapability,
mockCompositionCapability,
mockContextCapability,
mockCreationCapability,
mockCapabilities,
mockNewPersistenceCapability,
creationService;
function mockPromise(value) {
@@ -60,11 +60,6 @@ define(
}
beforeEach(function () {
mockPersistenceService = jasmine.createSpyObj(
"persistenceService",
[ "createObject" ]
);
mockNow = jasmine.createSpy('now');
mockQ = { when: mockPromise, reject: mockReject };
mockLog = jasmine.createSpyObj(
"$log",
@@ -76,7 +71,7 @@ define(
);
mockNewObject = jasmine.createSpyObj(
"newObject",
[ "getId" ]
[ "getId", "getCapability", "useCapability" ]
);
mockMutationCapability = jasmine.createSpyObj(
"mutation",
@@ -94,19 +89,22 @@ define(
"context",
["getPath"]
);
mockCreationCapability = jasmine.createSpyObj(
"creation",
["instantiate", "invoke"]
);
mockCapabilities = {
mutation: mockMutationCapability,
persistence: mockPersistenceCapability,
composition: mockCompositionCapability,
context: mockContextCapability
context: mockContextCapability,
instantiation: mockCreationCapability
};
mockPersistenceService.createObject.andReturn(
mockPromise(true)
mockNewPersistenceCapability = jasmine.createSpyObj(
"new-persistence",
[ "persist", "getSpace" ]
);
mockNow.andReturn(12321);
mockParentObject.getCapability.andCallFake(function (key) {
return mockCapabilities[key];
});
@@ -115,9 +113,16 @@ define(
});
mockParentObject.getId.andReturn('parentId');
mockPersistenceCapability.persist.andReturn(
mockPromise(true)
);
mockNewObject.getId.andReturn('newId');
mockNewObject.getCapability.andCallFake(function (c) {
return c === 'persistence' ?
mockNewPersistenceCapability : undefined;
});
mockPersistenceCapability.persist
.andReturn(mockPromise(true));
mockNewPersistenceCapability.persist
.andReturn(mockPromise(true));
mockMutationCapability.invoke.andReturn(mockPromise(true));
mockPersistenceCapability.getSpace.andReturn("testSpace");
@@ -125,10 +130,12 @@ define(
mockPromise([mockNewObject])
);
mockCompositionCapability.add.andReturn(mockPromise(true));
mockCreationCapability.instantiate.andReturn(mockNewObject);
mockCreationCapability.invoke.andCallFake(function (model) {
return mockCreationCapability.instantiate(model);
});
creationService = new CreationService(
mockPersistenceService,
mockNow,
mockQ,
mockLog
);
@@ -137,21 +144,18 @@ define(
it("allows new objects to be created", function () {
var model = { someKey: "some value" };
creationService.createObject(model, mockParentObject);
expect(mockPersistenceService.createObject).toHaveBeenCalledWith(
"testSpace",
jasmine.any(String), // the object id; generated UUID
model
);
expect(mockCreationCapability.instantiate)
.toHaveBeenCalledWith(model);
});
it("adds new id's to the parent's composition", function () {
it("adds new objects to the parent's composition", function () {
var model = { someKey: "some value" },
parentModel = { composition: ["notAnyUUID"] };
creationService.createObject(model, mockParentObject);
// Verify that a new ID was added
expect(mockCompositionCapability.add)
.toHaveBeenCalledWith(jasmine.any(String));
.toHaveBeenCalledWith(mockNewObject);
});
it("provides the newly-created object", function () {
@@ -207,11 +211,6 @@ define(
expect(mockLog.error).toHaveBeenCalled();
});
it("attaches a 'persisted' timestamp", function () {
var model = { someKey: "some value" };
creationService.createObject(model, mockParentObject);
expect(model.persisted).toEqual(mockNow());
});
});
}

View File

@@ -181,7 +181,7 @@ define(
* @typedef DialogOption
* @property {string} label a label to be displayed as the button
* text for this action
* @property {function} action a function to be called when the
* @property {function} callback a function to be called when the
* button is clicked
*/

View File

@@ -21,6 +21,11 @@
"key": "EditPanesController",
"implementation": "controllers/EditPanesController.js",
"depends": [ "$scope" ]
},
{
"key": "ElementsController",
"implementation": "controllers/ElementsController.js",
"depends": [ "$scope" ]
}
],
"directives": [
@@ -38,7 +43,7 @@
{
"key": "edit",
"implementation": "actions/EditAction.js",
"depends": [ "$location", "navigationService", "$log" ],
"depends": [ "$location", "navigationService", "$log", "$q" ],
"description": "Edit this object.",
"category": "view-control",
"glyph": "p"
@@ -67,7 +72,9 @@
"implementation": "actions/SaveAction.js",
"name": "Save",
"description": "Save changes made to these objects.",
"depends": [ "$location", "urlService" ],
"depends": [ "$q", "$location", "$injector", "urlService",
"navigationService", "policyService", "dialogService",
"creationService" ],
"priority": "mandatory"
},
{
@@ -76,7 +83,7 @@
"implementation": "actions/CancelAction.js",
"name": "Cancel",
"description": "Discard changes made to these objects.",
"depends": [ "$location", "urlService" ]
"depends": ["$injector", "navigationService"]
}
],
"policies": [

View File

@@ -21,10 +21,11 @@
-->
<span ng-controller="EditActionController">
<span ng-repeat="currentAction in editActions">
<a class='s-btn'
<a class='s-btn t-{{currentAction.getMetadata().key}}'
title='{{currentAction.getMetadata().name}}'
ng-click="currentAction.perform()"
ng-class="{ major: $index === 0, subtle: $index !== 0 }">
{{currentAction.getMetadata().name}}
ng-class="{ major: $index === 0 }">
<span class="title-label">{{currentAction.getMetadata().name}}</span>
</a>
</span>
</span>

View File

@@ -19,14 +19,21 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div class="current-elements abs" style="height: 100%;">
<!--p class="hint">Drop objects here to add them...</p-->
<ul class="tree">
<li ng-repeat="containedObject in composition">
<span class="tree-item">
<mct-representation key="'label'" mct-object="containedObject">
</mct-representation>
</span>
</li>
</ul>
<div ng-controller="ElementsController">
<mct-include key="'input-filter'"
class="flex-elem holder"
ng-model="filterBy">
</mct-include>
<div>{{searchText}}</div>
<div class="current-elements abs" style="height: 100%;">
<!--p class="hint">Drop objects here to add them...</p-->
<ul class="tree">
<li ng-repeat="containedObject in composition | filter:searchText">
<span class="tree-item">
<mct-representation key="'label'" mct-object="containedObject">
</mct-representation>
</span>
</li>
</ul>
</div>
</div>

View File

@@ -22,7 +22,8 @@
<div class='top-bar edit abs'>
<mct-representation key="'object-header'"
mct-object="domainObject"
parameters="{ mode: 'Edit' }">
parameters="{ mode: 'Edit' }"
class="l-flex-row flex-elem grows object-header">
</mct-representation>
<div class='buttons-main btn-bar buttons abs'>
<mct-representation key="'switcher'"

View File

@@ -33,10 +33,10 @@ define(
* @memberof platform/commonUI/edit
* @implements {Action}
*/
function CancelAction($location, urlService, context) {
function CancelAction($injector, navigationService, context) {
this.domainObject = context.domainObject;
this.$location = $location;
this.urlService = urlService;
this.navigationService = navigationService;
this.objectService = $injector.get('objectService');
}
/**
@@ -47,8 +47,7 @@ define(
*/
CancelAction.prototype.perform = function () {
var domainObject = this.domainObject,
$location = this.$location,
urlService = this.urlService;
self = this;
// Look up the object's "editor.completion" capability;
// this is introduced by EditableDomainObject which is
@@ -64,13 +63,10 @@ define(
return editor.cancel();
}
// Discard the current root view (which will be the editing
// UI, which will have been pushed atop the Browise UI.)
//Discard current 'editable' object, and retrieve original
// un-edited object.
function returnToBrowse() {
$location.path($location.path(urlService.urlForLocation(
"browse",
domainObject
)));
return self.navigationService.setNavigation(self.domainObject.getOriginalObject());
}
return doCancel(getEditorCapability())

View File

@@ -25,8 +25,8 @@
* Module defining EditAction. Created by vwoeltje on 11/14/14.
*/
define(
[],
function () {
['../objects/EditableDomainObject'],
function (EditableDomainObject) {
"use strict";
// A no-op action to return in the event that the action cannot
@@ -46,7 +46,7 @@ define(
* @constructor
* @implements {Action}
*/
function EditAction($location, navigationService, $log, context) {
function EditAction($location, navigationService, $log, $q, context) {
var domainObject = (context || {}).domainObject;
// We cannot enter Edit mode if we have no domain object to
@@ -65,14 +65,20 @@ define(
this.domainObject = domainObject;
this.$location = $location;
this.navigationService = navigationService;
this.$q = $q;
}
/**
* Enter edit mode.
*/
EditAction.prototype.perform = function () {
this.navigationService.setNavigation(this.domainObject);
this.$location.path("/edit");
var editableObject;
if (!this.domainObject.hasCapability("editor")) {
editableObject = new EditableDomainObject(this.domainObject, this.$q);
editableObject.getCapability('status').set('editing', true);
this.navigationService.setNavigation(editableObject);
}
//this.$location.path("/edit");
};
/**
@@ -83,10 +89,11 @@ define(
*/
EditAction.appliesTo = function (context) {
var domainObject = (context || {}).domainObject,
type = domainObject && domainObject.getCapability('type');
type = domainObject && domainObject.getCapability('type'),
isEditMode = domainObject && domainObject.getDomainObject ? true : false;
// Only allow creatable types to be edited
return type && type.hasFeature('creation');
return type && type.hasFeature('creation') && !isEditMode;
};
return EditAction;

View File

@@ -23,7 +23,8 @@
define(
function () {
['../../../browse/src/creation/CreateWizard'],
function (CreateWizard) {
'use strict';
/**
@@ -34,10 +35,26 @@ define(
* @implements {Action}
* @memberof platform/commonUI/edit
*/
function SaveAction($location, urlService, context) {
function SaveAction($q, $location, $injector, urlService, navigationService, policyService, dialogService, creationService, context) {
this.domainObject = (context || {}).domainObject;
this.$location = $location;
this.injectObjectService = function(){
this.objectService = $injector.get("objectService");
}
this.urlService = urlService;
this.navigationService = navigationService;
this.policyService = policyService;
this.dialogService = dialogService;
this.creationService = creationService;
this.$q = $q;
}
SaveAction.prototype.getObjectService = function(){
// Lazily acquire object service (avoids cyclical dependency)
if (!this.objectService) {
this.injectObjectService();
}
return this.objectService;
}
/**
@@ -50,25 +67,138 @@ define(
SaveAction.prototype.perform = function () {
var domainObject = this.domainObject,
$location = this.$location,
urlService = this.urlService;
urlService = this.urlService,
self = this;
function resolveWith(object){
return function() {return object};
}
function doWizardSave(parent) {
var context = domainObject.getCapability("context");
var wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService, domainObject.getModel());
function mergeObjects(fromObject, toObject){
Object.keys(fromObject).forEach(function(key) {
toObject[key] = fromObject[key];
});
}
// Create and persist the new object, based on user
// input.
function buildObjectFromInput(formValue) {
var parent = wizard.getLocation(formValue),
formModel = wizard.createModel(formValue);
formModel.location = parent.getId();
//Replace domain object model with model collected
// from user form.
domainObject.useCapability("mutation", function(){
//Replace object model with the model from the form
return formModel;
});
return domainObject;
}
function doNothing() {
// Create cancelled, do nothing
return false;
}
function getAllComposees(domainObject){
return domainObject.useCapability('composition');
}
function addComposeesToObject(object){
return function(composees){
return self.$q.all(composees.map(function (composee) {
return object.getCapability('composition').add(composee);
})).then(resolveWith(object));
}
}
/**
* Add the composees of the 'virtual' object to the
* persisted object
* @param object
* @returns {*}
*/
function composeNewObject(object){
if (self.$q.when(object.hasCapability('composition') && domainObject.hasCapability('composition'))) {
return getAllComposees(domainObject)
.then(addComposeesToObject(object))
}
}
return self.dialogService
.getUserInput(wizard.getFormStructure(), wizard.getInitialFormValue())
.then(buildObjectFromInput, doNothing)
//.then(composeNewObject)
//.then(object.getCapability("persistence"));
}
function persistObject(object){
return (object.hasCapability('editor') && object.getCapability('editor').save(true) || object.getCapability('persistence').persist())
.then(resolveWith(object));
/*
if (object.hasCapability('editor')){
return object.getCapability('editor').save(true)
.then(resolveWith(object));
} else {
return object.useCapability(persistence);
}*/
}
function fetchObject(objectId){
return self.getObjectService().getObjects([objectId]).then(function(objects){
return objects[objectId];
})
}
function getParent(object){
return fetchObject(object.getModel().location);
}
function locateObjectInParent(parent){
parent.getCapability('composition').add(domainObject.getId());
return parent;
}
// Invoke any save behavior introduced by the editor capability;
// this is introduced by EditableDomainObject which is
// used to insulate underlying objects from changes made
// during editing.
function doSave() {
return domainObject.getCapability("editor").save();
//WARNING: HACK
//This is a new 'virtual object' that has not been persisted
// yet.
if (!domainObject.getModel().persisted){
return getParent(domainObject)
.then(doWizardSave)
.then(persistObject)
.then(getParent)//Parent may have changed based
// on user selection
.then(locateObjectInParent)
.then(persistObject)
.then(function(){return fetchObject(domainObject.getId());})
} else {
return domainObject.getCapability("editor").save()
.then(resolveWith(domainObject.getOriginalObject()));
}
}
// Discard the current root view (which will be the editing
// UI, which will have been pushed atop the Browise UI.)
function returnToBrowse() {
return $location.path(urlService.urlForLocation(
"browse",
domainObject
));
// UI, which will have been pushed atop the Browse UI.)
function returnToBrowse(object) {
if (object) {
self.navigationService.setNavigation(object);
}
return object;
}
//return doSave().then(returnToBrowse);
return doSave().then(returnToBrowse);
};

View File

@@ -80,6 +80,7 @@ define(
EditorCapability.prototype.save = function (nonrecursive) {
var domainObject = this.domainObject,
editableObject = this.editableObject,
self = this,
cache = this.cache;
// Update the underlying, "real" domain object's model
@@ -95,8 +96,10 @@ define(
return domainObject.getCapability('persistence').persist();
}
editableObject.getCapability("status").set("editing", false);
return nonrecursive ?
resolvePromise(doMutate()).then(doPersist) :
resolvePromise(doMutate()).then(doPersist).then(function(){self.cancel()}) :
resolvePromise(cache.saveAll());
};
@@ -109,6 +112,8 @@ define(
* @memberof platform/commonUI/edit.EditorCapability#
*/
EditorCapability.prototype.cancel = function () {
this.editableObject.getCapability("status").set("editing", false);
//TODO: Reset the cache as well here.
return resolvePromise(undefined);
};

View File

@@ -0,0 +1,46 @@
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/*global define,Promise*/
define(
[],
function () {
"use strict";
/**
* The ElementsController prepares the elements view for display
*
* @constructor
*/
function ElementsController($scope) {
function filterBy(text){
if (typeof text === 'undefined')
return $scope.searchText;
else
$scope.searchText = text;
}
$scope.filterBy = filterBy;
}
return ElementsController;
}
);

View File

@@ -78,7 +78,9 @@ define(
// different versions of the same editable domain object
// are not shown in different sections of the same Edit
// UI, which might thereby fall out of sync.
var cache;
var cache,
originalObject = domainObject,
cachedObject;
// Constructor for EditableDomainObject, which adheres
// to the same shared cache.
@@ -102,12 +104,22 @@ define(
capability;
};
editableObject.setOriginalObject = function(object) {
originalObject = object;
};
editableObject.getOriginalObject = function() {
return originalObject;
};
return editableObject;
}
cache = new EditableDomainObjectCache(EditableDomainObjectImpl, $q);
cachedObject = cache.getEditableObject(domainObject);
return cache.getEditableObject(domainObject);
return cachedObject;
}
return EditableDomainObject;

View File

@@ -69,7 +69,9 @@ define(
*/
EditableDomainObjectCache.prototype.getEditableObject = function (domainObject) {
var type = domainObject.getCapability('type'),
EditableDomainObject = this.EditableDomainObject;
EditableDomainObject = this.EditableDomainObject,
editableObject,
statusListener;
// Track the top-level domain object; this will have
// some special behavior for its context capability.
@@ -86,10 +88,12 @@ define(
}
// Provide an editable form of the object
return new EditableDomainObject(
editableObject = new EditableDomainObject(
domainObject,
this.cache.getCachedModel(domainObject)
);
return editableObject;
};
/**

View File

@@ -48,6 +48,8 @@ define(
function EditRepresenter($q, $log, scope) {
var self = this;
this.scope = scope;
// Mutate and persist a new version of a domain object's model.
function doPersist(model) {
var domainObject = self.domainObject;
@@ -100,6 +102,8 @@ define(
this.key = (representation || {}).key;
// Track the represented object
this.domainObject = representedObject;
this.scope.editMode = representedObject.hasCapability("editor");
// Ensure existing watches are released
this.destroy();
};

View File

@@ -18,7 +18,7 @@
"runs": [
{
"implementation": "StyleSheetLoader.js",
"depends": [ "stylesheets[]", "$document" ]
"depends": [ "stylesheets[]", "$document", "THEME" ]
}
],
"stylesheets": [
@@ -76,7 +76,7 @@
{
"key": "TreeNodeController",
"implementation": "controllers/TreeNodeController.js",
"depends": [ "$scope", "$timeout" ]
"depends": [ "$scope", "$timeout", "navigationService" ]
},
{
"key": "ActionGroupController",
@@ -194,6 +194,11 @@
{
"key": "MCT_SCROLL_Y_ATTRIBUTE",
"value": "mctScrollY"
},
{
"key": "THEME",
"value": "unspecified",
"priority": "fallback"
}
],
"containers": [

View File

@@ -1,19 +1,27 @@
{
"metadata": {
"name": "WTD Symbols",
"lastOpened": 1446490786311,
"created": 1446489891263
"lastOpened": 1446670352108,
"created": 1446670349721
},
"iconSets": [
{
"selection": [
{
"order": 113,
"order": 116,
"id": 93,
"prevSize": 32,
"code": 58902,
"name": "icon-eye-open-no-gleam",
"tempChar": ""
},
{
"order": 115,
"id": 92,
"prevSize": 32,
"code": 58901,
"name": "icon-crosshair",
"tempChar": ""
"name": "icon-eye-open",
"tempChar": ""
},
{
"order": 110,
@@ -21,7 +29,7 @@
"prevSize": 32,
"code": 58899,
"name": "icon-collapse-pane-left",
"tempChar": ""
"tempChar": ""
},
{
"order": 111,
@@ -29,7 +37,7 @@
"prevSize": 32,
"code": 58900,
"name": "icon-collapse-pane-right",
"tempChar": ""
"tempChar": ""
},
{
"order": 109,
@@ -37,7 +45,7 @@
"prevSize": 32,
"code": 58898,
"name": "icon-save",
"tempChar": ""
"tempChar": ""
},
{
"order": 108,
@@ -45,7 +53,7 @@
"prevSize": 32,
"code": 58897,
"name": "icon-dataset",
"tempChar": ""
"tempChar": ""
},
{
"order": 90,
@@ -53,7 +61,7 @@
"prevSize": 32,
"code": 58896,
"name": "icon-bell",
"tempChar": ""
"tempChar": ""
},
{
"order": 91,
@@ -61,7 +69,7 @@
"prevSize": 32,
"code": 58889,
"name": "icon-hourglass",
"tempChar": ""
"tempChar": ""
},
{
"order": 92,
@@ -74,7 +82,7 @@
58890
],
"name": "icon-info-v15",
"tempChar": ""
"tempChar": ""
},
{
"order": 93,
@@ -82,7 +90,7 @@
"prevSize": 32,
"code": 58887,
"name": "icon-x-in-circle",
"tempChar": ""
"tempChar": ""
},
{
"order": 94,
@@ -90,7 +98,7 @@
"prevSize": 32,
"code": 58881,
"name": "icon-datatable",
"tempChar": ""
"tempChar": ""
},
{
"order": 95,
@@ -98,7 +106,7 @@
"prevSize": 32,
"code": 58882,
"name": "icon-tabular-scrolling",
"tempChar": ""
"tempChar": ""
},
{
"order": 96,
@@ -106,7 +114,7 @@
"prevSize": 32,
"code": 58884,
"name": "icon-tabular",
"tempChar": ""
"tempChar": ""
},
{
"order": 97,
@@ -114,7 +122,7 @@
"prevSize": 32,
"code": 58885,
"name": "icon-calendar",
"tempChar": ""
"tempChar": ""
},
{
"order": 98,
@@ -122,7 +130,7 @@
"prevSize": 32,
"code": 58886,
"name": "icon-paint-bucket",
"tempChar": ""
"tempChar": ""
},
{
"order": 99,
@@ -130,7 +138,7 @@
"prevSize": 32,
"code": 123,
"name": "icon-pointer-left",
"tempChar": ""
"tempChar": ""
},
{
"order": 100,
@@ -138,7 +146,7 @@
"prevSize": 32,
"code": 125,
"name": "icon-pointer-right",
"tempChar": ""
"tempChar": ""
},
{
"order": 101,
@@ -146,7 +154,7 @@
"prevSize": 32,
"code": 80,
"name": "icon-person",
"tempChar": ""
"tempChar": ""
},
{
"order": 102,
@@ -154,7 +162,7 @@
"prevSize": 32,
"code": 232,
"name": "icon-chain-links",
"tempChar": ""
"tempChar": ""
},
{
"order": 103,
@@ -162,7 +170,7 @@
"prevSize": 32,
"code": 115,
"name": "icon-database-in-brackets",
"tempChar": ""
"tempChar": ""
},
{
"order": 104,
@@ -170,7 +178,7 @@
"prevSize": 32,
"code": 114,
"name": "icon-refresh",
"tempChar": ""
"tempChar": ""
},
{
"order": 105,
@@ -178,7 +186,7 @@
"prevSize": 32,
"code": 108,
"name": "icon-lock",
"tempChar": ""
"tempChar": ""
},
{
"order": 106,
@@ -186,7 +194,7 @@
"prevSize": 32,
"code": 51,
"name": "icon-box-with-dashed-lines",
"tempChar": ""
"tempChar": ""
},
{
"order": 10,
@@ -194,7 +202,7 @@
"prevSize": 32,
"code": 58880,
"name": "icon-box-with-arrow-cursor",
"tempChar": ""
"tempChar": ""
},
{
"order": 11,
@@ -202,7 +210,7 @@
"prevSize": 32,
"code": 65,
"name": "icon-activity-mode",
"tempChar": ""
"tempChar": ""
},
{
"order": 12,
@@ -210,7 +218,7 @@
"prevSize": 32,
"code": 97,
"name": "icon-activity",
"tempChar": ""
"tempChar": ""
},
{
"order": 87,
@@ -218,7 +226,7 @@
"prevSize": 32,
"code": 33,
"name": "icon-alert-rect",
"tempChar": ""
"tempChar": ""
},
{
"order": 14,
@@ -226,7 +234,7 @@
"prevSize": 32,
"code": 58883,
"name": "icon-alert-triangle",
"tempChar": ""
"tempChar": ""
},
{
"order": 15,
@@ -234,7 +242,7 @@
"prevSize": 32,
"code": 238,
"name": "icon-arrow-double-down",
"tempChar": ""
"tempChar": ""
},
{
"order": 16,
@@ -242,7 +250,7 @@
"prevSize": 32,
"code": 235,
"name": "icon-arrow-double-up",
"tempChar": ""
"tempChar": ""
},
{
"order": 2,
@@ -250,7 +258,7 @@
"prevSize": 32,
"code": 118,
"name": "icon-arrow-down",
"tempChar": ""
"tempChar": ""
},
{
"order": 19,
@@ -258,7 +266,7 @@
"prevSize": 32,
"code": 60,
"name": "icon-arrow-left",
"tempChar": ""
"tempChar": ""
},
{
"order": 20,
@@ -266,7 +274,7 @@
"prevSize": 32,
"code": 62,
"name": "icon-arrow-right",
"tempChar": ""
"tempChar": ""
},
{
"order": 21,
@@ -274,7 +282,7 @@
"prevSize": 32,
"code": 236,
"name": "icon-arrow-tall-down",
"tempChar": ""
"tempChar": ""
},
{
"order": 22,
@@ -282,7 +290,7 @@
"prevSize": 32,
"code": 237,
"name": "icon-arrow-tall-up",
"tempChar": ""
"tempChar": ""
},
{
"order": 23,
@@ -290,7 +298,7 @@
"prevSize": 32,
"code": 94,
"name": "icon-arrow-up",
"tempChar": ""
"tempChar": ""
},
{
"order": 24,
@@ -298,7 +306,7 @@
"prevSize": 32,
"code": 73,
"name": "icon-arrows-out",
"tempChar": ""
"tempChar": ""
},
{
"order": 25,
@@ -306,7 +314,7 @@
"prevSize": 32,
"code": 58893,
"name": "icon-arrows-right-left",
"tempChar": ""
"tempChar": ""
},
{
"order": 33,
@@ -314,7 +322,7 @@
"prevSize": 32,
"code": 53,
"name": "icon-arrows-up-down",
"tempChar": ""
"tempChar": ""
},
{
"order": 26,
@@ -322,7 +330,7 @@
"prevSize": 32,
"code": 42,
"name": "icon-asterisk",
"tempChar": ""
"tempChar": ""
},
{
"order": 27,
@@ -330,7 +338,7 @@
"prevSize": 32,
"code": 72,
"name": "icon-autoflow-tabular",
"tempChar": ""
"tempChar": ""
},
{
"order": 28,
@@ -338,7 +346,7 @@
"prevSize": 32,
"code": 224,
"name": "icon-box",
"tempChar": ""
"tempChar": ""
},
{
"order": 29,
@@ -346,7 +354,7 @@
"prevSize": 32,
"code": 50,
"name": "icon-check",
"tempChar": ""
"tempChar": ""
},
{
"order": 30,
@@ -354,7 +362,7 @@
"prevSize": 32,
"code": 67,
"name": "icon-clock",
"tempChar": ""
"tempChar": ""
},
{
"order": 31,
@@ -362,7 +370,7 @@
"prevSize": 32,
"code": 46,
"name": "icon-connectivity",
"tempChar": ""
"tempChar": ""
},
{
"order": 32,
@@ -370,7 +378,7 @@
"prevSize": 32,
"code": 100,
"name": "icon-database-query",
"tempChar": ""
"tempChar": ""
},
{
"order": 17,
@@ -378,7 +386,7 @@
"prevSize": 32,
"code": 68,
"name": "icon-database",
"tempChar": ""
"tempChar": ""
},
{
"order": 35,
@@ -386,7 +394,7 @@
"prevSize": 32,
"code": 81,
"name": "icon-dictionary",
"tempChar": ""
"tempChar": ""
},
{
"order": 36,
@@ -394,7 +402,7 @@
"prevSize": 32,
"code": 242,
"name": "icon-duplicate",
"tempChar": ""
"tempChar": ""
},
{
"order": 37,
@@ -402,7 +410,7 @@
"prevSize": 32,
"code": 102,
"name": "icon-folder-new",
"tempChar": ""
"tempChar": ""
},
{
"order": 38,
@@ -410,7 +418,7 @@
"prevSize": 32,
"code": 70,
"name": "icon-folder",
"tempChar": ""
"tempChar": ""
},
{
"order": 39,
@@ -418,7 +426,7 @@
"prevSize": 32,
"code": 95,
"name": "icon-fullscreen-collapse",
"tempChar": ""
"tempChar": ""
},
{
"order": 40,
@@ -426,7 +434,7 @@
"prevSize": 32,
"code": 122,
"name": "icon-fullscreen-expand",
"tempChar": ""
"tempChar": ""
},
{
"order": 41,
@@ -434,7 +442,7 @@
"prevSize": 32,
"code": 71,
"name": "icon-gear",
"tempChar": ""
"tempChar": ""
},
{
"order": 49,
@@ -442,7 +450,7 @@
"prevSize": 32,
"code": 227,
"name": "icon-image",
"tempChar": ""
"tempChar": ""
},
{
"order": 42,
@@ -450,7 +458,7 @@
"prevSize": 32,
"code": 225,
"name": "icon-layers",
"tempChar": ""
"tempChar": ""
},
{
"order": 43,
@@ -458,7 +466,7 @@
"prevSize": 32,
"code": 76,
"name": "icon-layout",
"tempChar": ""
"tempChar": ""
},
{
"order": 44,
@@ -466,7 +474,7 @@
"prevSize": 32,
"code": 226,
"name": "icon-line-horz",
"tempChar": ""
"tempChar": ""
},
{
"order": 75,
@@ -474,7 +482,7 @@
"prevSize": 32,
"code": 244,
"name": "icon-link",
"tempChar": ""
"tempChar": ""
},
{
"order": 46,
@@ -482,7 +490,7 @@
"prevSize": 32,
"code": 88,
"name": "icon-magnify-in",
"tempChar": ""
"tempChar": ""
},
{
"order": 47,
@@ -490,7 +498,7 @@
"prevSize": 32,
"code": 89,
"name": "icon-magnify-out",
"tempChar": ""
"tempChar": ""
},
{
"order": 48,
@@ -498,7 +506,7 @@
"prevSize": 32,
"code": 77,
"name": "icon-magnify",
"tempChar": ""
"tempChar": ""
},
{
"order": 34,
@@ -506,7 +514,7 @@
"prevSize": 32,
"code": 109,
"name": "icon-menu",
"tempChar": ""
"tempChar": ""
},
{
"order": 50,
@@ -514,7 +522,7 @@
"prevSize": 32,
"code": 243,
"name": "icon-move",
"tempChar": ""
"tempChar": ""
},
{
"order": 51,
@@ -522,7 +530,7 @@
"prevSize": 32,
"code": 121,
"name": "icon-new-window",
"tempChar": ""
"tempChar": ""
},
{
"order": 52,
@@ -530,7 +538,7 @@
"prevSize": 32,
"code": 111,
"name": "icon-object",
"tempChar": ""
"tempChar": ""
},
{
"order": 73,
@@ -538,7 +546,7 @@
"prevSize": 32,
"code": 63,
"name": "icon-object-unknown",
"tempChar": ""
"tempChar": ""
},
{
"order": 53,
@@ -546,7 +554,7 @@
"prevSize": 32,
"code": 86,
"name": "icon-packet",
"tempChar": ""
"tempChar": ""
},
{
"order": 54,
@@ -554,7 +562,7 @@
"prevSize": 32,
"code": 234,
"name": "icon-page",
"tempChar": ""
"tempChar": ""
},
{
"order": 55,
@@ -562,7 +570,7 @@
"prevSize": 32,
"code": 241,
"name": "icon-pause",
"tempChar": ""
"tempChar": ""
},
{
"order": 56,
@@ -570,7 +578,7 @@
"prevSize": 32,
"code": 112,
"name": "icon-pencil",
"tempChar": ""
"tempChar": ""
},
{
"order": 65,
@@ -578,7 +586,7 @@
"prevSize": 32,
"code": 79,
"name": "icon-people",
"tempChar": ""
"tempChar": ""
},
{
"order": 57,
@@ -586,7 +594,7 @@
"prevSize": 32,
"code": 239,
"name": "icon-play",
"tempChar": ""
"tempChar": ""
},
{
"order": 58,
@@ -594,7 +602,7 @@
"prevSize": 32,
"code": 233,
"name": "icon-plot-resource",
"tempChar": ""
"tempChar": ""
},
{
"order": 59,
@@ -602,7 +610,7 @@
"prevSize": 32,
"code": 43,
"name": "icon-plus",
"tempChar": ""
"tempChar": ""
},
{
"order": 60,
@@ -610,7 +618,7 @@
"prevSize": 32,
"code": 45,
"name": "icon-minus",
"tempChar": ""
"tempChar": ""
},
{
"order": 61,
@@ -618,7 +626,7 @@
"prevSize": 32,
"code": 54,
"name": "icon-sine",
"tempChar": ""
"tempChar": ""
},
{
"order": 62,
@@ -626,7 +634,7 @@
"prevSize": 32,
"code": 228,
"name": "icon-T",
"tempChar": ""
"tempChar": ""
},
{
"order": 63,
@@ -634,7 +642,7 @@
"prevSize": 32,
"code": 116,
"name": "icon-telemetry-panel",
"tempChar": ""
"tempChar": ""
},
{
"order": 64,
@@ -642,7 +650,7 @@
"prevSize": 32,
"code": 84,
"name": "icon-telemetry",
"tempChar": ""
"tempChar": ""
},
{
"order": 18,
@@ -650,7 +658,7 @@
"prevSize": 32,
"code": 246,
"name": "icon-thumbs-strip",
"tempChar": ""
"tempChar": ""
},
{
"order": 67,
@@ -658,7 +666,7 @@
"prevSize": 32,
"code": 83,
"name": "icon-timeline",
"tempChar": ""
"tempChar": ""
},
{
"order": 68,
@@ -666,7 +674,7 @@
"prevSize": 32,
"code": 245,
"name": "icon-timer",
"tempChar": ""
"tempChar": ""
},
{
"order": 69,
@@ -674,7 +682,7 @@
"prevSize": 32,
"code": 90,
"name": "icon-trash",
"tempChar": ""
"tempChar": ""
},
{
"order": 70,
@@ -682,7 +690,7 @@
"prevSize": 32,
"code": 229,
"name": "icon-two-parts-both",
"tempChar": ""
"tempChar": ""
},
{
"order": 71,
@@ -690,7 +698,7 @@
"prevSize": 32,
"code": 231,
"name": "icon-two-parts-one-only",
"tempChar": ""
"tempChar": ""
},
{
"order": 72,
@@ -698,7 +706,7 @@
"prevSize": 32,
"code": 120,
"name": "icon-x-heavy",
"tempChar": ""
"tempChar": ""
},
{
"order": 66,
@@ -706,7 +714,7 @@
"prevSize": 32,
"code": 58946,
"name": "icon-x",
"tempChar": ""
"tempChar": ""
}
],
"id": 2,
@@ -722,13 +730,43 @@
"prevSize": 32,
"icons": [
{
"id": 92,
"id": 93,
"paths": [
"M514 2c-282.8 0-512 229.2-512 512s229.2 512 512 512 512-229.2 512-512-229.2-512-512-512zM860.2 450h-282.2v-282.2c69.6 12.8 133.8 46.2 185 97.4 51 51 84.4 115.2 97.2 184.8zM450 167.8v282.2h-282.2c12.8-69.6 46.2-133.8 97.4-185 51-51 115.2-84.4 184.8-97.2zM167.8 578h282.2v282.2c-69.6-12.8-133.8-46.2-185-97.4-51-51-84.4-115.2-97.2-184.8zM578 860.2v-282.2h282.2c-12.8 69.6-46.2 133.8-97.4 185-51 51-115.2 84.4-184.8 97.2z"
"M512 64c-261 0-480.6 195.4-512 448 31.4 252.6 251 448 512 448s480.6-195.4 512-448c-31.4-252.6-251-448-512-448zM768.2 734.6c-71.4 62.8-162.8 97.4-257.6 97.4s-186.2-34.6-257.6-97.4c-66.6-58.6-110.6-137.2-125-222.6 0 0 0-0.2 0-0.2 76.8-154 220.8-257.6 384-257.6s307.2 103.8 384 257.6c0 0 0 0.2 0 0.2-14.4 85.4-61.2 164-127.8 222.6z",
"M512 288c-123.8 0-224 100.2-224 224s100.2 224 224 224 224-100.2 224-224-100.2-224-224-224zM576 544c-53 0-96-43-96-96s43-96 96-96 96 43 96 96c0 53-43 96-96 96z"
],
"attrs": [
{
"fill": "rgb(0, 0, 0)"
"fill": "rgb(6, 161, 75)"
},
{
"fill": "rgb(6, 161, 75)"
}
],
"isMulticolor": false,
"grid": 0,
"tags": [
"icon-eye-open-no-gleam"
],
"colorPermutations": {
"125525525516161751": [
1,
1
]
}
},
{
"id": 92,
"paths": [
"M512 64c-261 0-480.6 195.4-512 448 31.4 252.6 251 448 512 448s480.6-195.4 512-448c-31.4-252.6-251-448-512-448zM768.2 734.6c-71.4 62.8-162.8 97.4-257.6 97.4s-186.2-34.6-257.6-97.4c-66.6-58.6-110.6-137.2-125-222.6 0 0 0-0.2 0-0.2 76.8-154 220.8-257.6 384-257.6s307.2 103.8 384 257.6c0 0 0 0.2 0 0.2-14.4 85.4-61.2 164-127.8 222.6z",
"M512 288c-123.8 0-224 100.2-224 224s100.2 224 224 224 224-100.2 224-224-100.2-224-224-224z"
],
"attrs": [
{
"fill": "rgb(6, 161, 75)"
},
{
"fill": "rgb(6, 161, 75)"
}
],
"isMulticolor": false,
@@ -738,7 +776,8 @@
],
"colorPermutations": {
"125525525516161751": [
0
1,
1
]
}
},

View File

@@ -92,6 +92,7 @@
<glyph unicode="&#xe612;" glyph-name="icon-save" d="M192.2 384c-0.2 0-0.2 0 0 0l-0.2-448h640v447.8c0 0 0 0-0.2 0.2h-639.6zM978.8 749.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-576c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128v448c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-448c70.4 0 128 57.6 128 128v576c0 35.2-20.4 84.4-45.2 109.2zM704 704c0-35.2-28.8-64-64-64h-448c-35.2 0-64 28.8-64 64v192h320v-192h128v192h128v-192z" />
<glyph unicode="&#xe613;" glyph-name="icon-collapse-pane-left" d="M256 960h-256v-1024h256c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM512 640l512-320v640z" />
<glyph unicode="&#xe614;" glyph-name="icon-collapse-pane-right" d="M768 960h256v-1024h-256c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192zM512 640l-512-320v640z" />
<glyph unicode="&#xe615;" glyph-name="icon-crosshair" d="M514 958c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM860.2 510h-282.2v282.2c69.6-12.8 133.8-46.2 185-97.4 51-51 84.4-115.2 97.2-184.8zM450 792.2v-282.2h-282.2c12.8 69.6 46.2 133.8 97.4 185 51 51 115.2 84.4 184.8 97.2zM167.8 382h282.2v-282.2c-69.6 12.8-133.8 46.2-185 97.4-51 51-84.4 115.2-97.2 184.8zM578 99.8v282.2h282.2c-12.8-69.6-46.2-133.8-97.4-185-51-51-115.2-84.4-184.8-97.2z" />
<glyph unicode="&#xe615;" glyph-name="icon-eye-open" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224z" />
<glyph unicode="&#xe616;" glyph-name="icon-eye-open-no-gleam" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224zM576 416c-53 0-96 43-96 96s43 96 96 96 96-43 96-96c0-53-43-96-96-96z" />
<glyph unicode="&#xe642;" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,147 @@
/*****************************************************************************
* 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 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.
*
* 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. 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.
*****************************************************************************/
/********************************************* COLUMN LAYOUTS STYLES */
@mixin cols($totalCols, $span) {
$cw: 100% / $totalCols;
min-width: (500px / $totalCols) * $span;
@if ($totalCols != $span) {
width: ($cw * $span) - $ueColMargin;
} @else {
width: $cw;
}
}
.cols {
@include clearfix;
.col {
@include box-sizing(border-box);
@include clearfix;
float: left;
margin-left: $ueColMargin;
padding-left: $interiorMargin;
position: relative;
&:first-child {
margin-left: 0;
padding-left: 0;
}
}
&.cols-2 {
$nc: 2;
.col-1 {
@include cols($nc, 1);
}
}
&.cols-2-ff {
// 2 columns, first column is fixed, second is fluid
.col-100px {
width: 100px;
}
}
&.cols-6 {
$nc: 6;
.col-1 {
@include cols($nc, 1);
}
}
&.cols-16 {
$nc: 16;
.col-1 {
@include cols($nc, 1);
}
.col-2 {
@include cols($nc, 2);
}
.col-7 {
@include cols($nc, 7);
}
}
&.cols-32 {
$nc: 32;
.col-2 {
@include cols($nc, 2);
}
.col-15 {
@include cols($nc, 15);
}
}
.l-row {
@include clearfix;
padding: $interiorMargin 0;
}
}
/********************************************* FLEX STYLES */
.l-flex-row,
.l-flex-col {
@include display-flex;
@include flex-wrap(nowrap);
.flex-elem {
min-height: 0; // Needed to allow element to shrink within parent
position: relative;
&:not(.grows) {
@include flex(0 0 auto);
&.flex-can-shrink {
@include flex(0 1 auto);
}
}
&.grows {
@include flex(1 1 auto);
}
}
.flex-container {
// Apply to wrapping elements, mct-includes, etc.
@include display-flex;
@include flex-wrap(nowrap);
@include flex(1 1 auto);
min-height:0;
}
}
.l-flex-row {
@include flex-direction(row);
&.flex-elem { @include flex(1 1 auto); }
.flex-elem {
height: inherit;
line-height: inherit;
min-width: 0;
}
.flex-container { @include flex-direction(row); }
}
.l-flex-col {
@include flex-direction(column);
.flex-elem {
min-height: 0;
&.holder:not(:last-child) { margin-bottom: $interiorMarginLg; }
}
.flex-container { @include flex-direction(column); }
}
.flex-fixed {
@include flex(0 0 auto);
}
.flex-justify-end {
@include justify-content(flex-end);
}

View File

@@ -35,21 +35,29 @@ $ltGamma: 20%;
$btnFontSizeToH: 0.45;
/************************** LAYOUT */
$ueTopBarH: 24px; // Change when breadcrumb is enabled
$ueTopBarH: 24px;
$ueTopBarEditH: 30px;
$ueTopBarBtnH: 35px;
$ueFooterH: 25px;
$ueColMargin: 1.5%;
$ueAppLogoW: 105px;
$ueEditToolBarH: 25px;
$ueBrowseLeftPaneTreeW: 25%;
$ueBrowseRightPaneInspectW: 20%;
$ueCollapsedPaneEdgeM: 20px;
$ueCollapsedPaneEdgeM: 22px;
$uePaneMiniTabH: $ueTopBarH;
$uePaneMiniTabW: 9px;
$uePaneMiniTabCollapsedW: 11px;
$ueEditLeftPaneW: 75%;
$treeSearchInputBarH: 25px;
$ueTimeControlH: (33px, 20px, 20px);
// Panes
$ueBrowseLeftPaneTreeMinW: 150px;
$ueBrowseLeftPaneTreeMaxW: 35%;
$ueBrowseLeftPaneTreeW: 25%;
$ueBrowseRightPaneInspectMinW: 200px;
$ueBrowseRightPaneInspectMaxW: 35%;
$ueBrowseRightPaneInspectW: 20%;
$ueDesktopMinW: 600px;
// Overlay
$ovrTopBarH: 45px;
$ovrFooterH: 24px;

View File

@@ -51,14 +51,11 @@ a.disabled {
@include animation-name(pulse, 0.2);
}
@include keyframes(pulse) {
0% { opacity: 0.5; }
100% { opacity: 1; }
}
@mixin pulse($dur: 500ms, $iteration: infinite) {
//@include customKeyframes(pulse, 0.2);
@mixin pulse($dur: 500ms, $iteration: infinite, $opacity0: 0.5, $opacity100: 1) {
@include keyframes(pulse) {
0% { opacity: $opacity0; }
100% { opacity: $opacity100; }
}
@include animation-name(pulse);
@include animation-duration($dur);
@include animation-direction(alternate);
@@ -66,6 +63,19 @@ a.disabled {
@include animation-timing-function(ease-in-out);
}
@mixin pulseBorder($c: red, $dur: 500ms, $iteration: infinite, $delay: 0s, $opacity0: 0, $opacity100: 1) {
@include keyframes(pulseBorder) {
0% { border-color: rgba($c, $opacity0); }
100% { border-color: rgba($c, $opacity100); }
}
@include animation-name(pulseBorder);
@include animation-duration($dur);
@include animation-direction(alternate);
@include animation-iteration-count($iteration);
@include animation-timing-function(ease);
@include animation-delay($delay);
}
.pulse {
@include pulse(750ms);
}

View File

@@ -121,7 +121,12 @@ mct-container {
text-align: center;
}
.scrolling {
.ellipsis {
@include ellipsize();
}
.scrolling,
.scroll {
overflow: auto;
}
@@ -142,6 +147,16 @@ mct-container {
display: none !important;
}
.off {
visibility: hidden;
opacity: 0;
height: 0;
margin: 0;
padding: 0;
border: 0;
margin: 0 !important;
}
.sep {
color: rgba(#fff, 0.2);
}

View File

@@ -23,7 +23,7 @@
.l-inspect,
.l-inspect table tr td {
font-size: 0.7rem;
font-size: 0.75rem;
}
.l-inspect {
@@ -31,6 +31,9 @@
background: $colorInspectorBg;
color: $colorInspectorFg;
line-height: 140%;
.flex-elem.holder:not(:last-child) { margin-bottom: $interiorMargin; }
.pane-header {
color: pushBack($colorInspectorFg, 20%);
font-size: 0.8rem;
@@ -44,6 +47,21 @@
}
}
.split-layout {
.split-pane-component.pane {
&.bottom {
height: 30%;
min-height: 20%;
max-height: 80%;
}
}
}
ul {
@include box-sizing(border-box);
padding-right: $interiorMargin;
}
ul li,
em {
display: block;
@@ -104,4 +122,23 @@
width: 4px;
}
}
}
.holder-elements {
.current-elements {
position: relative;
.tree-item {
.t-object-label {
// Elements pool is a flat list, so don't indent items.
left: 0;
.t-item-icon {
font-size: 1em;
width: 1em;
}
.t-title-label {
left: 20px + $interiorMargin;
}
}
}
}
}
}

View File

@@ -21,6 +21,7 @@
*****************************************************************************/
@import "effects";
@import "global";
@import "archetypes";
@import "about";
@import "text";
@import "icons";

View File

@@ -64,6 +64,12 @@
}
}
@mixin trans-prop-nice-resize($t: 0.5s, $tf: ease-in-out) {
@include transition-property(height, width, top, right, bottom, left, opacity);
@include transition-duration($t);
@include transition-timing-function($tf);
}
@mixin trans-prop-nice-resize-h($dur: 500ms, $delay: 0) {
@include transition-property(height, bottom, top);
@include transition-duration($dur);
@@ -309,11 +315,11 @@
}
}
@mixin input-base($bg: $colorBodyBg, $fg: $colorBodyFg) {
@mixin input-base($bg: $colorInputBg, $fg: $colorInputFg, $shdw: rgba(black, 0.6) 0 1px 3px) {
@include appearance(none);
@include border-radius($controlCr);
@include box-sizing(border-box);
@include box-shadow(inset rgba(black, 0.4) 0 1px 3px);
@include box-shadow(inset $shdw);
background: $bg;
border: none;
color: $fg;
@@ -323,7 +329,7 @@
}
}
@mixin nice-input($bg: $colorBodyBg, $fg: $colorBodyFg) {
@mixin nice-input($bg: $colorInputBg, $fg: $colorInputFg) {
@include input-base($bg, $fg);
padding: 0 $interiorMarginSm;
}

View File

@@ -35,6 +35,7 @@ $pad: $interiorMargin * $baseRatio;
@include box-sizing(border-box);
padding: 0 $pad;
font-size: 0.7rem;
vertical-align: top;
.icon {
font-size: 0.8rem;
@@ -70,6 +71,18 @@ $pad: $interiorMargin * $baseRatio;
&.pause-play {
}
&.t-save:before {
content:'\e612';
font-family: symbolsfont;
margin-right: $interiorMarginSm;
}
&.t-cancel {
.title-label { display: none; }
&:before {
content:'\78';
font-family: symbolsfont;
}
}
&.pause-play {
.icon:before {
@@ -95,10 +108,7 @@ $pad: $interiorMargin * $baseRatio;
.s-icon-btn {
@extend .ui-symbol;
color: $colorBtnIcon;
&:hover {
color: lighten($colorBtnIcon, $ltGamma);
}
// Color and styling additionally in _controls.scss
}
.mini-tab {
@@ -225,6 +235,11 @@ $pad: $interiorMargin * $baseRatio;
overflow: hidden;
word-break: break-all;
&.collapsed {
$d: $uePaneMiniTabCollapsedW;
width: $d; font-size: $d;
}
&:before,
&:after {
position: absolute;

View File

@@ -21,246 +21,232 @@
*****************************************************************************/
.accordion {
$accordionHeadH: 18px;
margin-top: $interiorMargin;
&:first-child {
margin-top: 0;
}
.accordion-head {
$op: 0.2;
@include border-radius($basicCr * 0.75);
@include box-sizing("border-box");
background: rgba($colorBodyFg, $op);
cursor: pointer;
font-size: 0.75em;
line-height: $accordionHeadH;
margin-bottom: $interiorMargin;
padding: 0 $interiorMargin;
position: absolute;
top: 0;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: $accordionHeadH;
text-transform: uppercase;
&:hover {
background: rgba($colorBodyFg, $op * 2);
}
&:after {
content: "^";
display: block;
font-family: 'symbolsfont';
font-size: 0.9em;
position: absolute;
right: $interiorMargin;
text-transform: none;
top: 0;
}
&:not(.expanded):after {
content: "v";
}
}
.accordion-contents {
position: absolute;
top: $accordionHeadH + $interiorMargin;
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
}
$accordionHeadH: 18px;
margin-top: $interiorMargin;
&:first-child {
margin-top: 0;
}
.accordion-head {
$op: 0.2;
@include border-radius($basicCr * 0.75);
@include box-sizing("border-box");
background: rgba($colorBodyFg, $op);
cursor: pointer;
font-size: 0.75em;
line-height: $accordionHeadH;
margin-bottom: $interiorMargin;
padding: 0 $interiorMargin;
position: absolute;
top: 0;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: $accordionHeadH;
text-transform: uppercase;
&:hover {
background: rgba($colorBodyFg, $op * 2);
}
&:after {
content: "^";
display: block;
font-family: 'symbolsfont';
font-size: 0.9em;
position: absolute;
right: $interiorMargin;
text-transform: none;
top: 0;
}
&:not(.expanded):after {
content: "v";
}
}
.accordion-contents {
position: absolute;
top: $accordionHeadH + $interiorMargin;
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
}
}
.l-composite-control {
vertical-align: middle;
&.l-checkbox {
.composite-control-label {
line-height: 18px;
}
}
vertical-align: middle;
&.l-checkbox {
.composite-control-label {
line-height: 18px;
}
}
}
.l-control-group {
// Buttons that have a conceptual grouping - internal space between, and a divider between groups.
// @include test();
@include box-sizing(border-box);
border-left: 1px solid $colorInteriorBorder;
display: inline-block;
padding: 0 $interiorMargin;
position: relative;
&:first-child {
border-left: none;
padding-left: 0;
}
// Buttons that have a conceptual grouping - internal space between, and a divider between groups.
// @include test();
@include box-sizing(border-box);
border-left: 1px solid $colorInteriorBorder;
display: inline-block;
padding: 0 $interiorMargin;
position: relative;
&:first-child {
border-left: none;
padding-left: 0;
}
}
.l-local-controls {
// Control shown when hovering over an object, like plots and imagery
// Default position is upper right
$p: $interiorMargin;
position: absolute;
top: $p;
right: $p;
z-index: 5;
// Control shown when hovering over an object, like plots and imagery
// Default position is upper right
$p: $interiorMargin;
position: absolute;
top: $p;
right: $p;
z-index: 5;
}
.s-local-controls {
font-size: 0.7rem;
font-size: 0.7rem;
}
label.checkbox.custom {
$bg: pullForward($colorBodyBg, 10%);
$d: $formRowCtrlsH;
cursor: pointer;
display: inline-block;
line-height: $d;
margin-right: $interiorMargin * 4;
padding-left: $d + $interiorMargin;
position: relative;
vertical-align: middle; // was top
em {
color: $colorBodyFg;
display: inline-block;
height: $d;
min-width: $d;
&:before {
@include border-radius($basicCr * .75);
background: $bg;
//border-bottom: 1px solid lighten($bg, 10%);
@include box-shadow(inset rgba(black, 0.4) 0 1px 2px);
box-sizing: border-box;
content: " ";
font-family: 'symbolsfont';
font-size: 0.8em;
display: inline-block;
margin-right: $interiorMargin;
height: $d;
width: $d;
left: 0;
top: 0;
position: absolute;
text-align: center;
}
}
&.no-text {
overflow: hidden;
margin-right: 0;
padding-left: 0;
height: $d;
width: $d;
em {
overflow: hidden;
}
}
input {
display: none;
&:checked ~ em:before {
background: $colorCheck;
color: lighten($colorCheck, 50%);
content: "2";
}
}
$bg: pullForward($colorBodyBg, 10%);
$d: $formRowCtrlsH;
cursor: pointer;
display: inline-block;
line-height: $d;
margin-right: $interiorMargin * 4;
padding-left: $d + $interiorMargin;
position: relative;
vertical-align: middle; // was top
em {
color: $colorBodyFg;
display: inline-block;
height: $d;
min-width: $d;
&:before {
@include border-radius($basicCr * .75);
background: $bg;
@include box-shadow(inset rgba(black, 0.4) 0 1px 2px);
box-sizing: border-box;
content: " ";
font-family: 'symbolsfont';
font-size: 0.8em;
display: inline-block;
margin-right: $interiorMargin;
height: $d;
width: $d;
left: 0;
top: 0;
position: absolute;
text-align: center;
}
}
&.no-text {
overflow: hidden;
margin-right: 0;
padding-left: 0;
height: $d;
width: $d;
em {
overflow: hidden;
}
}
input {
display: none;
&:checked ~ em:before {
background: $colorCheck;
color: lighten($colorCheck, 50%);
content: "2";
}
}
}
.input-labeled {
margin-left: $interiorMargin;
label {
display: inline-block;
margin-right: $interiorMarginSm;
}
&.inline {
display: inline-block;
}
&:first-child {
margin-left: 0;
}
margin-left: $interiorMargin;
label {
display: inline-block;
margin-right: $interiorMarginSm;
}
&.inline {
display: inline-block;
}
&:first-child {
margin-left: 0;
}
}
.s-menu-btn label.checkbox.custom {
margin-left: 5px;
margin-left: 5px;
}
.item .checkbox {
&.checked label {
@include box-shadow(none);
border-bottom: none;
}
&.checked label {
@include box-shadow(none);
border-bottom: none;
}
}
.context-available {
$c: $colorKey;
color: $c;
&:hover {
color: lighten($c, 10%);
}
.context-available,
.s-icon-btn {
$c: $colorKey;
color: $c;
&:hover {
color: lighten($c, 10%);
}
}
.view-switcher {
@include trans-prop-nice-fade($controlFadeMs);
@include trans-prop-nice-fade($controlFadeMs);
}
/******************************************************** OBJECT-HEADER */
.object-header {
//@include test();
font-size: 1em;
font-size: 1em;
//> .title-label,
//> .type-icon,
//> .context-available {
// //@include tmpBorder(#6666ff);
// //vertical-align: middle;
//}
> .type-icon {
color: $colorObjHdrIc;
font-size: 120%;
float: left;
margin-right: $interiorMargin;
}
> .type-icon {
color: $colorObjHdrIc;
font-size: 120%;
float: left;
margin-right: $interiorMargin;
}
.l-elem-wrapper {
mct-representation {
// Holds the context-available item
// Must have min-width to make flex work properly
// in Safari
min-width: 0.7em;
}
}
.l-elem-wrapper {
//@include test(#66f, 0.2);
@include justify-content(flex-start);
mct-representation {
// Holds the context-available item
// Must have min-width to make flex work properly
// in Safari
min-width: 0.7em;
}
}
.action {
margin-right: $interiorMargin;
}
.action {
margin-right: $interiorMargin;
}
.title-label {
color: $colorObjHdrTxt;
@include ellipsize();
@include webkitProp(flex, '0 1 auto');
padding-right: 0.35em; // For context arrow. Done with em's so pad is relative to the scale of the text.
}
.title-label {
//@include test(green, 0.9);
color: $colorObjHdrTxt;
@include ellipsize();
//color: pushBack($colorBodyFg, 40%);
@include webkitProp(flex, '0 1 auto');
padding-right: 0.35em; // For context arrow. Done with em's so pad is relative to the scale of the text.
//position: relative;
}
.context-available {
font-size: 0.7em;
@include webkitProp(flex, '0 0 1');
}
.context-available {
font-size: 0.7em;
@include webkitProp(flex, '0 0 1');
//margin-right: $interiorMargin;
}
@include desktop {
.context-available {
@include trans-prop-nice(opacity, 0.25s);
opacity: 0;
}
&:hover {
.context-available {
opacity: 1;
}
}
}
@include desktop {
.context-available {
@include trans-prop-nice(opacity, 0.25s);
opacity: 0;
}
&:hover {
.context-available {
opacity: 1;
}
}
}
}
/******************************************************** PROGRESS BAR */
@@ -280,20 +266,20 @@ label.checkbox.custom {
.l-progress-bar {
// Assume will be determinate by default
display: inline-block;
overflow: hidden;
position: relative;
display: inline-block;
overflow: hidden;
position: relative;
.progress-amt-holder {
.progress-amt-holder {
@include absPosDefault(1px);
}
.progress-amt,
.progress-amt:before,
.progress-amt:after {
@include absPosDefault();
@include absPosDefault();
display: block;
content: '';
}
}
.progress-amt {
right: auto; // Allow inline width to control }
@@ -310,11 +296,10 @@ label.checkbox.custom {
@include border-radius($basicCr);
@include boxIncised(0.3, 4px);
background: $colorProgressBarOuter;
//border:1px solid $colorProgressBarOuter;
.progress-amt {
@include border-radius($basicCr);
@include boxShdw();
@include border-radius($basicCr - 1);
.progress-amt {
@include border-radius($basicCr);
@include boxShdw();
@include border-radius($basicCr - 1);
@include trans-prop-nice(width);
&:before {
background-color: $colorProgressBarAmt;
@@ -325,7 +310,7 @@ label.checkbox.custom {
transparent 5%, rgba(#fff,0.25) 30%, transparent 100%
));
}
}
}
&:not(.indeterminate) {
.progress-amt:before {
@@ -348,185 +333,177 @@ label.checkbox.custom {
/******************************************************** SLIDERS */
.slider {
$knobH: 100%; //14px;
.slot {
// @include border-radius($basicCr * .75);
//@include sliderTrack();
width: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.knob {
@include trans-prop-nice-fade(.25s);
background-color: $sliderColorKnob;
&:hover {
background-color: $sliderColorKnobHov;
}
position: absolute;
height: $knobH;
width: $sliderKnobW;
top: 0;
auto: 0;
bottom: auto;
left: auto;
}
.knob-l {
@include border-left-radius($sliderKnobW);
cursor: w-resize;
}
.knob-r {
@include border-right-radius($sliderKnobW);
cursor: e-resize;
}
.range {
@include trans-prop-nice-fade(.25s);
background-color: $sliderColorRange;
cursor: ew-resize;
position: absolute;
top: 0; //$tbOffset;
right: auto;
bottom: 0;
left: auto;
height: auto;
width: auto;
&:hover {
background-color: $sliderColorRangeHov;
}
}
$knobH: 100%; //14px;
.slot {
width: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.knob {
@include trans-prop-nice-fade(.25s);
background-color: $sliderColorKnob;
&:hover {
background-color: $sliderColorKnobHov;
}
position: absolute;
height: $knobH;
width: $sliderKnobW;
top: 0;
auto: 0;
bottom: auto;
left: auto;
}
.knob-l {
@include border-left-radius($sliderKnobW);
cursor: w-resize;
}
.knob-r {
@include border-right-radius($sliderKnobW);
cursor: e-resize;
}
.range {
@include trans-prop-nice-fade(.25s);
background-color: $sliderColorRange;
cursor: ew-resize;
position: absolute;
top: 0; //$tbOffset;
right: auto;
bottom: 0;
left: auto;
height: auto;
width: auto;
&:hover {
background-color: $sliderColorRangeHov;
}
}
}
/******************************************************** DATETIME PICKER */
.l-datetime-picker {
$r1H: 15px;
@include user-select(none);
font-size: 0.8rem;
padding: $interiorMarginLg !important;
width: 230px;
.l-month-year-pager {
$pagerW: 20px;
//@include test();
//font-size: 0.8rem;
height: $r1H;
margin-bottom: $interiorMargin;
position: relative;
.pager,
.val {
//@include test(red);
@extend .abs;
}
.pager {
width: $pagerW;
@extend .ui-symbol;
&.prev {
right: auto;
&:before {
content: "\3c";
}
}
&.next {
left: auto;
text-align: right;
&:before {
content: "\3e";
}
}
}
.val {
text-align: center;
left: $pagerW + $interiorMargin;
right: $pagerW + $interiorMargin;
}
}
.l-calendar,
.l-time-selects {
border-top: 1px solid $colorInteriorBorder
}
.l-time-selects {
line-height: $formInputH;
}
$r1H: 15px;
@include user-select(none);
font-size: 0.8rem;
padding: $interiorMarginLg !important;
width: 230px;
.l-month-year-pager {
$pagerW: 20px;
height: $r1H;
margin-bottom: $interiorMargin;
position: relative;
.pager,
.val {
@extend .abs;
}
.pager {
width: $pagerW;
@extend .ui-symbol;
&.prev {
right: auto;
&:before {
content: "\3c";
}
}
&.next {
left: auto;
text-align: right;
&:before {
content: "\3e";
}
}
}
.val {
text-align: center;
left: $pagerW + $interiorMargin;
right: $pagerW + $interiorMargin;
}
}
.l-calendar,
.l-time-selects {
border-top: 1px solid $colorInteriorBorder
}
.l-time-selects {
line-height: $formInputH;
}
}
/******************************************************** CALENDAR */
.l-calendar {
$colorMuted: pushBack($colorMenuFg, 30%);
ul.l-cal-row {
@include display-flex;
@include flex-flow(row nowrap);
margin-top: 1px;
&:first-child {
margin-top: 0;
}
li {
@include flex(1 0);
//@include test();
margin-left: 1px;
padding: $interiorMargin;
text-align: center;
&:first-child {
margin-left: 0;
}
}
&.l-header li {
color: $colorMuted;
}
&.l-body li {
@include trans-prop-nice(background-color, .25s);
cursor: pointer;
&.in-month {
background-color: $colorCalCellInMonthBg;
}
.sub {
color: $colorMuted;
font-size: 0.8em;
}
&.selected {
background: $colorCalCellSelectedBg;
color: $colorCalCellSelectedFg;
.sub {
color: inherit;
}
}
&:hover {
background-color: $colorCalCellHovBg;
color: $colorCalCellHovFg;
.sub {
color: inherit;
}
}
}
}
$colorMuted: pushBack($colorMenuFg, 30%);
ul.l-cal-row {
@include display-flex;
@include flex-flow(row nowrap);
margin-top: 1px;
&:first-child {
margin-top: 0;
}
li {
@include flex(1 0);
margin-left: 1px;
padding: $interiorMargin;
text-align: center;
&:first-child {
margin-left: 0;
}
}
&.l-header li {
color: $colorMuted;
}
&.l-body li {
@include trans-prop-nice(background-color, .25s);
cursor: pointer;
&.in-month {
background-color: $colorCalCellInMonthBg;
}
.sub {
color: $colorMuted;
font-size: 0.8em;
}
&.selected {
background: $colorCalCellSelectedBg;
color: $colorCalCellSelectedFg;
.sub {
color: inherit;
}
}
&:hover {
background-color: $colorCalCellHovBg;
color: $colorCalCellHovFg;
.sub {
color: inherit;
}
}
}
}
}
/******************************************************** BROWSER ELEMENTS */
@include desktop {
::-webkit-scrollbar {
@include border-radius(2px);
@include box-sizing(border-box);
@include box-shadow(inset $scrollbarTrackShdw);
background-color: $scrollbarTrackColorBg;
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
}
::-webkit-scrollbar {
@include border-radius(2px);
@include box-sizing(border-box);
@include box-shadow(inset $scrollbarTrackShdw);
background-color: $scrollbarTrackColorBg;
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
}
::-webkit-scrollbar-thumb {
$bg: $scrollbarThumbColor;
$hc: $scrollbarThumbColorHov;
$gr: 5%;
@include background-image(linear-gradient(lighten($bg, $gr), $bg 20px));
@include border-radius(2px);
@include box-sizing(border-box);
//@include boxShdwSubtle();
//border-top: 1px solid lighten($bg, 20%);
&:hover {
@include background-image(linear-gradient(lighten($hc, $gr), $hc 20px));
}
}
::-webkit-scrollbar-thumb {
$bg: $scrollbarThumbColor;
$hc: $scrollbarThumbColorHov;
$gr: 5%;
@include background-image(linear-gradient(lighten($bg, $gr), $bg 20px));
@include border-radius(2px);
@include box-sizing(border-box);
&:hover {
@include background-image(linear-gradient(lighten($hc, $gr), $hc 20px));
}
}
::-webkit-scrollbar-corner {
background: $scrollbarTrackColorBg;
}
}
::-webkit-scrollbar-corner {
background: $scrollbarTrackColorBg;
}
}

View File

@@ -6,10 +6,6 @@
}
}
.l-time-controller-visible {
}
mct-include.l-time-controller {
$minW: 500px;
$knobHOffset: 0px;
@@ -22,10 +18,10 @@ mct-include.l-time-controller {
$r2H: nth($ueTimeControlH,2);
$r3H: nth($ueTimeControlH,3);
@include absPosDefault();
//@include absPosDefault();
//@include test();
display: block;
top: auto;
//top: auto;
height: $r1H + $r2H + $r3H + ($interiorMargin * 2);
min-width: $minW;
font-size: 0.8rem;

View File

@@ -1,46 +1,32 @@
.l-time-display {
$transTime: 200ms;
// Layout
line-height: 140%;
&:hover {
.l-btn.control {
opacity: 1;
}
}
.l-elem-wrapper {
position: relative;
}
.l-elem {
display: inline-block;
}
&.l-timer {
.l-elem.l-value {
@include trans-prop-nice(left, $transTime);
position: absolute;
left: 0;
z-index: 1;
.ui-symbol.direction {
font-size: 0.8em;
}
}
&:hover .l-elem.l-value {
left: 20px;
.control {
@include trans-prop-nice((width, opacity), $transTime);
line-height: inherit;
margin-right: 0;
opacity: 0;
width: 0;
}
&:hover .control {
margin-right: $interiorMargin;
opacity: 1;
width: 1em;
}
}
// Look-and-feel
.l-elem {
.value.active,
&.value.active {
color: $colorKeyFg;
}
}
.l-btn.control {
@include trans-prop-nice-fade($transTime);
opacity: 0;
font-size: 0.65em;
vertical-align: top;
//line-height: 1em;
}
.value {
color: pullForward($colorBodyFg, 50%);
font-weight: 400;
.direction {
font-size: 0.8em;
}
}
}

View File

@@ -31,7 +31,6 @@
}
.form {
// @include test(orange);
color: $colorFormText;
.form-section {
position: relative;
@@ -112,12 +111,8 @@
.selector-list {
// Used in create overlay to display tree view
@include nice-input($colorInputBg, $colorInputFg);
@include nice-input();
$h: 150px;
//@include border-radius($basicCr);
//@include box-sizing(border-box);
//background: rgba(black, 0.2);
//padding: $interiorMargin;
position: relative;
height: $h;
// max-width: 50%;
@@ -162,13 +157,9 @@ label.form-control.checkbox {
}
}
input[type="text"] {
@include nice-input($colorInputBg, $colorInputFg);
&.filter {
&.ng-dirty {
// background: red;
}
}
input[type="text"],
input[type="search"] {
@include nice-input();
&.numeric {
text-align: right;
}
@@ -176,7 +167,6 @@ input[type="text"] {
textarea {
@include nice-textarea($colorInputBg, $colorInputFg);
// font-size: 0.9em;
position: absolute;
height: 100%;
width: 100%;

View File

@@ -21,20 +21,7 @@
*****************************************************************************/
.filter,
.t-filter {
input.filter,
input.t-filter-input {
@include subdued-input();
}
input.t-filter-input {
height: $formInputH;
width: 200px;
&:not(.ng-dirty) {
// TO-DO: Update compass install to support this
// @include input-placeholder {
// color: rgba(#fff, 0.3);
// font-style: italic;
// }
}
&:not(.ng-dirty) + .t-a-clear {
display: none;
}
@@ -76,13 +63,6 @@
background-color: $colorKey;
}
}
// &:not(ng-dirty)
}
.l-filter {
// Holds an input and a clear button
display:inline-block;
position: relative;
}
.top-bar {
@@ -100,4 +80,75 @@
.icon-filter {
font-size: 1.4em;
}
}
.l-filter {
$iconEdgeM: 4px;
$iconD: $formInputH - ($iconEdgeM * 2);
// Adds a magnifying glass before, holds an input and a clear button
display: inline-block;
position: relative;
input[type="search"] {
padding: 2px ($iconD + $interiorMargin);
}
.clear-icon,
.menu-icon,
&:before {
@include box-sizing(border-box);
display: inline-block;
line-height: inherit;
position: absolute;
top: 50%;
@include transform(translateY(-50%));
z-index: 1;
}
&:before {
// Magnify glass icon
content:'\4d';
left: $interiorMargin;
@include trans-prop-nice(color, 250ms);
pointer-events: none;
}
.clear-icon {
right: $iconEdgeM;
// Icon is visible only when there is text input
visibility: hidden;
opacity: 0;
&.show {
visibility: visible;
opacity: 1;
}
&:hover {
color: pullForward($colorInputIcon, 10%);
}
}
}
.s-filter {
input[type="search"] {
@include input-base();
}
.clear-icon,
.menu-icon,
&:before {
color: $colorInputIcon;
cursor: pointer;
font-family: symbolsfont;
@include trans-prop-nice((opacity, color), 150ms);
}
// Make icon lighten when hovering over search bar
&:hover:before {
color: pullForward($colorInputIcon, 10%);
}
.clear-icon {
// 'x' in circle icon
&:before {
content: '\e607';
}
}
}

View File

@@ -25,7 +25,6 @@
margin: 0 0 2px 0; // Needed to avoid dropshadow from being clipped by parent containers
}
padding: 0 $interiorMargin;
overflow: hidden;
position: relative;
line-height: $formInputH;
select {

View File

@@ -29,7 +29,7 @@
//@include test(red);
display: block;
position: absolute;
z-index: 1;
z-index: 3;
&:after {
// The handle
content:"";
@@ -43,7 +43,6 @@
}
}
&:active {
//@include test();
&:after {
background-color: $colorSplitterActive !important;
}
@@ -122,11 +121,3 @@
}
}
}
/*.browse-area .splitter {
top: 0; //$ueTopBarH + $interiorMarginLg;
}
.edit-area .splitter {
top: 0;
}*/

View File

@@ -20,6 +20,8 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* REQUIRES /platform/commonUI/general/res/sass/_constants.scss */
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
$mobileListIconSize: 30px;
$mobileTitleDescH: 35px;
@@ -32,51 +34,31 @@ $mobileTreeItemH: 35px;
$mobileTreeItemIndent: 20px;
$mobileTreeRightArrowW: 30px;
/************************** WINDOW DIMENSIONS FOR RWD */
/************************** DEVICE WIDTHS */
// IMPORTANT! Usage assumes that ranges are mutually exclusive and have no gaps
$phoMaxW: 514px;
$phoMaxH: 740px;
$tabMinW: 515px;
$tabMaxW: 799px;
$tabMinH: 741px;
$tabMaxH: 1024px;
$compMinW: 800px;
$compMinH: 1025px;
$tabMaxW: 1280px;
$desktopMinW: 1281px;
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
$screenPortrait: "screen and (orientation: portrait)";
$screenLandscape: "screen and (orientation: landscape)";
$mobileDevice: "(max-device-width: #{$tabMaxW}) and (max-device-height: #{$tabMaxH})";
$mobileDeviceEmu: "(max-device-width: #{$tabMaxH}) and (max-device-height: #{$tabMaxW})";
$mobileDevice: "(max-device-width: #{$tabMaxW})";
$phonePortraitCheck: "(max-width: #{$phoMaxW}) and (max-height: #{$phoMaxH})";
$phoneLandscapeCheck: "(max-height: #{$phoMaxW}) and (max-width: #{$phoMaxH})";
$tabWidPorCheck: "(min-width: #{$tabMinW}) and (max-width: #{$tabMaxW})";
$tabHeiPorCheck: "(min-height: #{$tabMinH}) and (max-height: #{$tabMaxH})";
$tabletPortraitCheck: "#{$tabWidPorCheck} and #{$tabHeiPorCheck}";
$tabWidLanCheck: "(min-height: #{$tabMinW}) and (max-height: #{$tabMaxW})";
$tabHeiLanCheck: "(min-width: #{$tabMinH}) and (max-width: #{$tabMaxH})";
$tabletLandscapeCheck: "#{$tabWidLanCheck} and #{$tabHeiLanCheck}";
$desktopPortraitCheck: "(min-device-width: #{$compMinW}) and (min-device-height: #{$compMinH})";
$desktopLandscapeCheck: "(min-device-width: #{$compMinH}) and (min-device-height: #{$compMinW})";
$phoneCheck: "(max-device-width: #{$phoMaxW})";
$tabletCheck: $mobileDevice;
$desktopCheck: "(min-device-width: #{$desktopMinW})";
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
$phonePortrait: "#{$screenPortrait} and #{$phonePortraitCheck} and #{$mobileDevice}";
$phoneLandscape: "#{$screenLandscape} and #{$phoneLandscapeCheck} and #{$mobileDevice}";
$phoneLandscapeEmu: "#{$screenLandscape} and #{$phoneLandscapeCheck} and #{$mobileDeviceEmu}";
$phonePortrait: "#{$screenPortrait} and #{$phoneCheck} and #{$mobileDevice}";
$phoneLandscape: "#{$screenLandscape} and #{$phoneCheck} and #{$mobileDevice}";
$tabletPortrait: "#{$screenPortrait} and #{$tabletPortraitCheck} and #{$mobileDevice}";
$tabletLandscape: "#{$screenLandscape} and #{$tabletLandscapeCheck} and #{$mobileDevice}";
$tabletLandscapeEmu: "#{$screenLandscape} and #{$tabletLandscapeCheck} and #{$mobileDeviceEmu}";
$tabletPortrait: "#{$screenPortrait} and #{$tabletCheck} and #{$mobileDevice}";
$tabletLandscape: "#{$screenLandscape} and #{$tabletCheck} and #{$mobileDevice}";
$desktopPortrait: "screen and #{$desktopPortraitCheck}";
$desktopLandscape: "screen and #{$desktopLandscapeCheck}";
$desktop: "screen and #{$desktopCheck}";
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
$proporMenuOnly: 90%;

View File

@@ -36,16 +36,23 @@
//@include test();
@include slMenuTransitions;
margin-left: 0 !important;
#content-area {
.holder-object-and-inspector {
@include slMenuTransitions;
left: $bodyMargin;
right: $bodyMargin;
opacity: 1;
}
}
.holder.holder-create-and-search {
right: $bodyMargin !important;
.create-btn-holder {
// Hide the create button by default in mobile;
// This can be overridden by the examples/mobile bundle
display: none;
}
.holder.holder-treeview-elements {
right: $bodyMargin !important;
}
// When the tree is hidden, these are the
// classes used for the left menu and the
@@ -55,10 +62,6 @@
// is hidden.
.pane.left.treeview {
@include trans-prop-nice(opacity, 150ms);
//right: 100% !important;
//width: auto !important;
//overflow-y: hidden;
//overflow-x: hidden;
opacity: 0 !important;
}
.pane.right.items {
@@ -72,7 +75,6 @@
// causing cut/copy/paste menu to
// not appear. Should me moved in
// future to properly work
//@include user-select(none);
// Sets the left tree menu when the tree is shown.
.pane.left.treeview {
@@ -100,8 +102,7 @@
}
.object-browse-bar {
//@include test();
left: 45px !important;
margin-left: 45px;
.context-available {
opacity: 1 !important;
}
@@ -148,7 +149,7 @@
.pane.right.items {
left: 0 !important;
@include transform(translateX($proporMenuOnly));
#content-area {
.holder-object-and-inspector {
opacity: 0;
}
}
@@ -159,4 +160,4 @@
.desktop-hide {
display: none;
}
}
}

View File

@@ -20,11 +20,12 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* REQUIRES /platform/commonUI/general/res/sass/mobile/_constants.scss */
// Phones in any orientation
@mixin phone {
@media #{$phonePortrait},
#{$phoneLandscape},
#{$phoneLandscapeEmu} {
#{$phoneLandscape} {
@content
}
}
@@ -38,8 +39,7 @@
// Phones in landscape orientation
@mixin phoneLandscape {
@media #{$phoneLandscape},
#{$phoneLandscapeEmu} {
@media #{$phoneLandscape} {
@content
}
}
@@ -47,8 +47,7 @@
// Tablets in any orientation
@mixin tablet {
@media #{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu} {
#{$tabletLandscape} {
@content
}
}
@@ -62,8 +61,7 @@
// Tablets in landscape orientation
@mixin tabletLandscape {
@media #{$tabletLandscape},
#{$tabletLandscapeEmu} {
@media #{$tabletLandscape} {
@content
}
}
@@ -72,10 +70,8 @@
@mixin phoneandtablet {
@media #{$phonePortrait},
#{$phoneLandscape},
#{$phoneLandscapeEmu},
#{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu} {
#{$tabletLandscape} {
@content
}
}
@@ -84,17 +80,14 @@
@mixin desktopandtablet {
@media #{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu},
#{$desktopPortrait},
#{$desktopLandscape} {
#{$desktop} {
@content
}
}
// Desktop monitors in any orientation
@mixin desktop {
@media #{$desktopPortrait},
#{$desktopLandscape} {
@media #{$desktop} {
@content
}
}

View File

@@ -22,21 +22,19 @@
// Override the Create menu for mobile
@include phoneandtablet {
.menu-element {
.super-menu {
$d: 250px;
width: $d;
height: $d;
.super-menu {
$d: 250px;
width: $d;
height: $d;
.pane {
&.left {
border-right: none;
padding-right: 0;
width: 100%;
}
&.right {
display: none;
}
.pane {
&.left {
border-right: none;
padding-right: 0;
width: 100%;
}
&.right {
display: none;
}
}
}

View File

@@ -20,11 +20,9 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
$yBarW: 60px;
$yLabelW: auto;
$yLabelW: 10px;
$xBarH: 32px;
$legendH: 20px;
//$colorHash: rgba(white, 0.3); // MOVED INTO CONSTANTS
//$styleHash: dashed; // MOVED INTO CONSTANTS
$swatchD: 8px;
$plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBarW); // Top, right, bottom, left
@@ -36,7 +34,6 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
height: 100%;
.gl-plot-axis-area {
// @include test(green);
position: absolute;
&.gl-plot-x {
top: auto;
@@ -59,7 +56,7 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
.gl-plot-coords {
@include box-sizing(border-box);
@include border-radius($controlCr);
background: black; //rgba($colorKey, 0.5);
background: black;
color: lighten($colorBodyFg, 30%);
padding: 2px 5px;
position: absolute;
@@ -88,11 +85,9 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
.gl-plot-label,
.l-plot-label {
// @include test(yellow);
color: $colorPlotLabelFg;
position: absolute;
text-align: center;
// text-transform: uppercase;
&.gl-plot-x-label,
&.l-plot-x-label {
@@ -117,20 +112,26 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
}
}
.gl-plot-y-options {
.gl-plot-x-options,
.gl-plot-y-options {
$h: 32px;
// @include test();
position: absolute;
top: 50%;
right: auto;
bottom: auto;
left: $yLabelW + $interiorMargin;
margin-top: $h / -2;
height: auto;
min-height: $h;
width: $h;
z-index: 2;
}
.gl-plot-x-options {
top: $interiorMargin;
}
.gl-plot-y-options {
@include transform(translateY(-50%));
min-width: 150px; // Need this due to enclosure of .select
top: 50%;
left: $yLabelW + $interiorMargin * 2;
}
.gl-plot-hash {
position: absolute;
border: 0 $colorPlotHash $stylePlotHash;
@@ -214,21 +215,13 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
display: inline-block;
height: $swatchD;
width: $swatchD;
//margin-right: $interiorMarginSm;
}
&[class*='s-limit'] {
.title-label {
//color: #fff;
}
}
}
}
.gl-plot-legend {
.plot-legend-item {
//@include test();
@include border-radius($smallCr);
//color: #fff;
line-height: 1.5em;
padding: 0px $itemPadLR;
.plot-color-swatch {
@@ -250,7 +243,6 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
.gl-plot-tick,
.tick-label {
// @include test(red);
font-size: 0.7rem;
position: absolute;
overflow: hidden;
@@ -277,7 +269,6 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
}
.gl-plot-tick {
// @include test(red);
&.gl-plot-x-tick-label {
top: $interiorMargin;
}

View File

@@ -20,126 +20,36 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.abs.search-holder {
//@include test(#990000);
height: $treeSearchInputBarH;
bottom: 0;
&.active {
height: auto;
bottom: 0;
}
top: 23px;
.holder-search {
// Moved a lot of stuff in here to _filter.scss
// to generalize approach to search input controls.
// Align with the top of the divider bar, below create button
//margin-top: 10px; // CH comment out
z-index:5;
}
.search {
$iconWidth: 20px;
$leftMargin: 6px;
$rightPadding: 5px;
@include webkitVal(display, flex);
//display: flex;
@include webkitProp(flex-direction, column);
//flex-direction: column;
height: 100%;
$textInputHeight: 19px;
$iconEdgeM: 4px;
$iconD: $treeSearchInputBarH - ($iconEdgeM*2);
.search-bar {
$textInputHeight: 19px; // This is equal to the default value, 19px
$iconEdgeM: 4px;
$iconD: $treeSearchInputBarH - ($iconEdgeM*2);
font-size: 0.8em;
max-width: 250px;
position: relative;
width: 100%;
.search-input,
.search-icon {
}
.search-input {
input[type="search"] {
height: $treeSearchInputBarH;
line-height: $treeSearchInputBarH;
padding-top: 0;
padding-bottom: 0;
position: relative;
width: 100%;
padding-left: $iconD + $interiorMargin !important;
padding-right: ($iconD * 2) + ($interiorMargin * 2) !important;
}
.search-icon,
.clear-icon,
.menu-icon {
//@include test(#008800);
@include box-sizing(border-box);
color: $colorInputIcon;
height: $iconD; width: $iconD;
line-height: $iconD;
position: absolute;
text-align: center;
top: $iconEdgeM;
}
.clear-icon,
.menu-icon {
cursor: pointer;
@include transition(color, .25s);
}
.search-input {
position: relative;
width: 100%;
padding-left: $iconD + $interiorMargin !important;
padding-right: ($iconD * 2) + ($interiorMargin * 2) !important;
// Make work for mct-control textfield
input {
width: 100%;
}
}
.search-icon {
//color: $colorItemFg;
left: $interiorMarginSm;
transition: visibility .15s, opacity .15s, color .2s;
pointer-events: none;
&.content {
// Make icon invisible whenever there is text input
//visibility: hidden;
//opacity: 0;
}
}
// Make icon invisible when the text input is focused
.search-input:focus + div.search-icon {
//visibility: hidden;
//opacity: 0;
}
// Make icon lighten when hovering over search bar
.search-input:hover + div.search-icon {
color: pullForward($colorInputIcon, 10%);
}
.clear-icon {
right: $iconD + $interiorMargin;
// Icon is visible only when there is text input
visibility: hidden;
opacity: 0;
transition: visibility .15s, opacity .15s, color .2s;
&.content {
visibility: visible;
opacity: 1;
}
&:hover {
color: pullForward($colorInputIcon, 10%);
}
}
.clear-icon {
right: $iconD + $interiorMargin;
}
.menu-icon {
// 'v' invoke menu icon
&:before { content: '\76'; }
font-size: 0.8em;
padding-right: $iconEdgeM;
right: $iconEdgeM;
@@ -152,43 +62,19 @@
.search-menu-holder {
float: right;
//margin-top: $textInputHeight - 2px;
//left: -50px;
left: -20px;
z-index: 1;
z-index: 70;
transition: visibility .05s, opacity .05s;
&.off {
visibility: hidden;
opacity: 0;
}
}
// Hovering reveals menu
.menu-icon:hover + div.search-menu-holder {
visibility: visible;
}
div.search-menu-holder:hover {
visibility: visible;
}
}
.active-filter-display {
//order: 2;
$s: 0.65em;
$p: $interiorMargin;
@include border-radius($basicCr);
@include box-sizing(border-box);
line-height: 130%;
padding: $p 0;
padding-left: $s * 2.25;
font-size: $s;
//background-color: rgba(#000, 0.3);
//border-radius: $basicCr;
margin-top: $interiorMarginSm;
.clear-filters-icon {
color: $colorInputIcon;
@@ -198,43 +84,28 @@
left: 1px;
cursor: pointer;
}
// Transition looks weird when the results list has none
//transition: visibility .2s, opacity .2s;
&.off {
visibility: hidden;
opacity: 0;
height: 0;
margin: 0;
padding: 0;
border: 0;
}
}
.search-scroll {
order: 3;
margin-top: 4px;
// Adjustable scrolling size
overflow-y: auto;
top: auto;
height: auto;
max-height: 100%;
position: relative;
.load-icon {
position: relative;
}
.search-results {
@include trans-prop-nice((opacity, visibility), 250ms);
margin-top: $interiorMarginLg; // Always include margin here to fend off the search input
padding-right: $interiorMargin;
.hint {
margin-bottom: $interiorMarginLg;
font-size: 0.65em;
opacity: 0.6;
}
&.active {
visibility: visible;
opacity: 1;
}
.load-more-button {
margin-top: $interiorMargin 0;
font-size: 0.8em;
position: relative;
left: 50%;
margin-left: -45px;
text-align: center;
width: 90px;
@include transform(translateX(-50%));
display: inline-block;
margin-top: $interiorMargin;
padding: 0 $interiorMarginLg;
font-size: 0.75em;
margin-left: 50%;
white-space: nowrap;
}
}

View File

@@ -143,6 +143,31 @@ ul.tree {
}
}
&.active {
// The item is being edited
background: $colorItemTreeEditingBg; //rgba($colorItemTreeSelectedBg, 0.2) !important;
pointer-events: none;
&:before {
// Pencil icon
@extend .ui-symbol;
@include pulse($dur: 1s, $opacity0: 0.25);
color: $colorItemTreeEditingFg;
content: '\70';
margin-left: $interiorMarginSm;
}
.t-object-label {
.t-item-icon,
.t-title-label {
color: $colorItemTreeEditingFg;
@include text-shadow(none);
}
.t-title-label {
font-style: italic;
}
}
.view-control, + .tree-item-subtree { display: none; }
}
&:not(.loading) {
cursor: pointer;
}
@@ -160,8 +185,9 @@ ul.tree {
}
}
.tree-item {
.tree-item,
.search-result-item.active {
.t-object-label {
left: $interiorMargin + $treeVCW;
}
}
}

View File

@@ -29,11 +29,13 @@
border-color: lighten($bc, 10%);
}
}
>.object-header.abs {
//@include test(red);
.object-top-bar {
font-size: 0.75em;
height: $ohH;
line-height: $ohH;
.left {
padding-right: $interiorMarginLg;
}
}
>.object-holder.abs {
top: $ohH + $interiorMargin;

View File

@@ -19,23 +19,6 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@mixin cols($totalCols, $span) {
$cw: 100% / $totalCols;
min-width: (500px / $totalCols) * $span;
@if ($totalCols != $span) {
width: ($cw * $span) - $ueColMargin;
} @else {
width: $cw;
}
}
/*.holder-all {
$myM: 0; // $interiorMarginSm;
top: $myM;
right: $myM;
bottom: $myM;
left: $myM;
}*/
.browse-area,
.edit-area,
@@ -48,7 +31,7 @@
}
.contents {
$myM: 0; //$interiorMargin;
$myM: 0;
box-sizing: border-box;
position: absolute;
top: $myM;
@@ -63,37 +46,6 @@
}
}
.bar {
.icon.major {
margin-right: $interiorMargin;
}
&.abs {
text-wrap: none;
white-space: nowrap;
&.left,
.left {
width: 45%;
right: auto;
}
&.right,
.right {
width: 45%;
left: auto;
text-align: right;
.icon.major {
margin-left: $interiorMargin * 3;
}
}
.l-flex,
&.l-flex {
.left,
.right {
width: auto;
}
}
}
}
.user-environ {
.browse-area,
.editor {
@@ -125,7 +77,6 @@
}
}
// from _bottom-bar.scss
.ue-bottom-bar {
@include absPosDefault(0);// New status bar design
top: auto;
@@ -134,12 +85,10 @@
background: $colorFooterBg;
color: lighten($colorBodyBg, 30%);
font-size: .7rem;
.status-holder {
@include box-sizing(border-box);
@include absPosDefault($interiorMargin);
@include ellipsize();
//line-height: $ueFooterH - ($interiorMargin * 2);
right: 120px;
text-transform: uppercase;
z-index: 1;
@@ -158,86 +107,6 @@
}
}
.cols {
@include clearfix;
.col {
@include box-sizing(border-box);
@include clearfix;
// background: rgba(#ffcc00, 0.2);
float: left;
margin-left: $ueColMargin;
padding-left: $interiorMargin;
position: relative;
&:first-child {
margin-left: 0;
padding-left: 0;
}
}
&.cols-2 {
$nc: 2;
.col-1 {
@include cols($nc, 1);
}
}
&.cols-2-ff {
// 2 columns, first column is fixed, second is fluid
.col-100px {
width: 100px;
}
}
&.cols-6 {
$nc: 6;
.col-1 {
@include cols($nc, 1);
}
}
&.cols-16 {
$nc: 16;
.col-1 {
@include cols($nc, 1);
}
.col-2 {
@include cols($nc, 2);
}
.col-7 {
@include cols($nc, 7);
}
}
&.cols-32 {
$nc: 32;
.col-2 {
@include cols($nc, 2);
}
.col-15 {
@include cols($nc, 15);
}
}
.l-row {
@include clearfix;
padding: $interiorMargin 0;
}
}
.browse-mode {
.split-layout {
.split-pane-component.pane {
//@include test(green);
&.treeview.left {
min-width: 150px;
max-width: 800px;
width: $ueBrowseLeftPaneTreeW;
}
&.t-inspect.right {
min-width: 200px;
max-width: 600px;
//padding-left: $ueCollapsedPaneEdgeM; // Allow room for mini-tab element
width: $ueBrowseRightPaneInspectW;
}
}
}
}
.edit-mode {
.split-layout {
.split-pane-component.pane.right {
@@ -258,7 +127,6 @@
text-transform: uppercase;
height: $ueTopBarH;
line-height: $ueTopBarH;
margin-bottom: $interiorMargin;
}
.primary-pane {
@@ -266,30 +134,7 @@
z-index: 2;
}
&.treeview.left {
//.create-btn-holder {
// //bottom: auto;
// //top: 0;
// height: $ueTopBarH;
// .wrapper.menu-element {
// position: absolute;
// bottom: $interiorMargin;
// }
//}
.holder-create-and-search{
}
.search-holder {
top: $ueTopBarH + $interiorMarginLg;
}
.tree-holder {
overflow: auto;
top: $ueTopBarH + $interiorMarginLg + $treeSearchInputBarH + $interiorMargin;
}
}
.mini-tab-icon.toggle-pane {
//@include test(blue, 0.3);
z-index: 5;
@include desktop {
$d: $uePaneMiniTabH;
@@ -334,7 +179,6 @@
}
}
}
&.items {
.object-browse-bar {
.left.abs,
@@ -346,32 +190,8 @@
}
.split-layout {
&.horizontal {
// Slides up and down
> .pane {
// @include test();
margin-top: $interiorMargin;
&:first-child {
margin-top: 0;
}
}
}
/* &.vertical {
// Slides left and right
> .pane.left {
> .holder {
left: $bodyMargin;
}
}
> .pane.right {
> .holder {
right: $bodyMargin;
}
}
}*/
// Specific elements margins
.holder.holder-create-and-search {
.holder.holder-treeview-elements {
top: $bodyMargin;
right: 0;
bottom: $bodyMargin;
@@ -387,29 +207,64 @@
top: $bodyMargin;
bottom: $bodyMargin;
}
.holder-inspector-elements {
.holder-inspector {
top: $bodyMargin;
bottom: $bodyMargin;
left: $bodyMargin;
right: $bodyMargin;
}
.holder-elements {
top: 0;
bottom: $bodyMargin;
left: $bodyMargin;
right: $bodyMargin;
}
}
}
.object-holder {
overflow: hidden; // Contained objects need to handle their own overflow now
@include absPosDefault(0, auto);
top: $ueTopBarH + $interiorMarginLg;
> ng-include {
@include absPosDefault(0, auto);
}
.l-object-wrapper {
@extend .abs;
.object-holder-main {
@extend .abs;
}
&.l-controls-visible {
&.l-time-controller-visible {
bottom: nth($ueTimeControlH,1) + nth($ueTimeControlH,2) +nth($ueTimeControlH,3) + ($interiorMargin * 3);
&.active {
@include pulseBorder($colorEditAreaFg, $dur: 1s, $opacity0: 0.3);
@include border-radius($controlCr);
background-color: $colorEditAreaBg;
border-color: $colorEditAreaFg;
border-width: 2px;
border-style: dotted;
.l-object-wrapper-inner {
@include absPosDefault(3px, hidden);
}
}
}
.l-object-wrapper-inner {
@include trans-prop-nice-resize(0.25s);
}
.l-edit-controls {
@include trans-prop-nice((opacity, height), 0.25s);
border-bottom: 1px solid $colorInteriorBorder;
line-height: $ueEditToolBarH;
height: 0px;
opacity: 0;
overflow: hidden;
&.active {
height: $ueEditToolBarH + $interiorMargin;
margin-bottom: $interiorMargin;
opacity: 1;
}
}
.object-browse-bar .s-btn,
.top-bar .buttons-main .s-btn,
.top-bar .s-menu-btn,
@@ -428,76 +283,41 @@
}
}
/***************************************************** OBJECT BROWSE BAR */
.object-browse-bar {
//@include test(blue);
@include absPosDefault(0, visible);
// Converting to use flexbox layout
@include box-sizing(border-box);
height: $ueTopBarH;
line-height: $ueTopBarH;
white-space: nowrap;
.left {
padding-right: $interiorMarginLg * 2;
padding-right: $interiorMarginLg;
.l-back {
display: inline-block;
float: left;
margin-right: $interiorMarginLg;
}
}
}
.l-flex {
@include webkitVal('display', 'flex');
@include webkitProp('flex-flow', 'row nowrap');
.left {
//@include test(red);
@include webkitProp(flex, '1 1 0');
padding-right: $interiorMarginLg;
}
}
// When the tree is hidden, these are the
// classes used for the left menu and the
// right representation.
// When the tree is hidden, these are the classes used for the left menu and the right representation.
.pane-tree-hidden {
// Sets the left tree menu when the tree is hidden.
//.pane.left.treeview,
.tree-holder,
.splitter-treeview,
.holder-create-and-search {
.holder-treeview-elements {
opacity: 0;
}
/*.holder-create-and-search {
@include trans-prop-nice((top, left), 250ms);
top: $ueTopBarH + $interiorMargin;
left: -1 * $bodyMargin !important;
.create-btn {
@include border-left-radius(0);
@include trans-prop-nice((width), 250ms);
width: $uePaneMiniTabW !important;
text-align: center !important;
padding: 0;
.title-label,
&:after {
display: none;
}
&:before {
font-size: 9px;
}
}
}*/
}
.pane-tree-showing {
// Sets the left tree menu when the tree is shown.
//.pane.left.treeview,
.tree-holder,
.splitter-treeview {
@include trans-prop-nice(opacity, $dur: 250ms, $delay: 250ms);
opacity: 1;
}
.holder-create-and-search {
.holder-treeview-elements {
@include trans-prop-nice(opacity, $dur: 250ms, $delay: 200ms);
}
}
@@ -511,6 +331,7 @@
}
}
}
.pane-inspect-hidden {
.l-object-and-inspector {
.l-inspect,
@@ -521,6 +342,24 @@
}
@include desktop {
.holder-all {
min-width: $ueDesktopMinW;
}
.split-layout {
.split-pane-component.pane {
&.treeview.left {
min-width: $ueBrowseLeftPaneTreeMinW;
max-width: $ueBrowseLeftPaneTreeMaxW;
width: $ueBrowseLeftPaneTreeW;
}
&.t-inspect.right {
min-width: $ueBrowseRightPaneInspectMinW;
max-width: $ueBrowseRightPaneInspectMaxW;
width: $ueBrowseRightPaneInspectW;
z-index: 3; // Must lift up beyond primary pane to allow overflow to go underneath
}
}
}
.pane.treeview.left .tree-holder {
padding-right: $interiorMargin;
}
@@ -530,8 +369,10 @@
.pane-inspect-hidden .l-object-and-inspector {
.pane.left { right: $ueCollapsedPaneEdgeM !important; }
}
.pane:not(.resizing) {
@include trans-prop-nice-resize-w(250ms);
}
.pane.primary-pane .object-browse-bar {
min-width: 200px; // Needed for nice display when primary pane is constrained severely via splitters
}
}

View File

@@ -20,7 +20,6 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.tool-bar {
border-bottom: 1px solid $colorInteriorBorder;
.l-control-group {
height: $btnToolbarH;
}

View File

@@ -6,10 +6,10 @@
</input>
<a class="ui-symbol icon icon-calendar"
ng-if="structure.format === 'utc' || !structure.format"
ng-click="pickerActive = !pickerActive">
ng-click="picker.active = !picker.active">
</a>
<mct-popup ng-if="pickerActive">
<div mct-click-elsewhere="pickerActive = false">
<mct-popup ng-if="picker.active">
<div mct-click-elsewhere="picker.active = false">
<mct-control key="'datetime-picker'"
ng-model="ngModel"
field="field"

View File

@@ -20,15 +20,13 @@
at runtime from the About dialog for additional information.
-->
<!-- look at action-button for example -->
<span class="t-filter l-filter"
<span class="t-filter l-filter s-filter"
ng-controller="GetterSetterController">
<input type="search"
class="t-filter-input"
ng-model="getterSetter.value"
placeholder="Filter..."/>
<a class="ui-symbol t-a-clear s-a-clear"
ng-show="getterSetter.value !== ''"
ng-model="getterSetter.value"/>
<a class="clear-icon"
ng-class="{show: !(getterSetter.value === '' || getterSetter.value === undefined)}"
ng-click="getterSetter.value = ''">
x
</a>
</span>

View File

@@ -19,45 +19,63 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<span class="l-inspect" ng-controller="ObjectInspectorController as controller">
<div class="abs holder holder-inspector-elements">
<div class="pane-header">Inspection</div>
<ul>
<li>
<em>Properties</em>
<div class="inspector-properties"
ng-repeat="data in metadata"
ng-class="{ first:$index === 0 }">
<div class="label">{{ data.name }}</div>
<div class="value">{{ data.value }}</div>
<div ng-controller="PaneController as modelPaneEdit">
<mct-split-pane class='abs contents split-layout' anchor='bottom'>
<div class="split-pane-component pane top">
<div class="abs holder holder-inspector l-flex-col">
<div class="pane-header flex-elem">Inspection</div>
<ul class="flex-elem grows vscroll">
<li>
<em>Properties</em>
<div class="inspector-properties"
ng-repeat="data in metadata"
ng-class="{ first:$index === 0 }">
<div class="label">{{ data.name }}</div>
<div class="value">{{ data.value }}</div>
</div>
</li>
<li ng-if="contextutalParents.length > 0">
<em title="The location of this linked object.">Location</em>
<span class="inspector-location"
ng-repeat="parent in contextutalParents"
ng-class="{ last:($index + 1) === contextualParents.length }">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent"
class="location-item">
</mct-representation>
</span>
</li>
<li ng-if="primaryParents.length > 0">
<em title="The location of the original object that this was linked from.">Original Location</em>
<span class="inspector-location"
ng-repeat="parent in primaryParents"
ng-class="{ last:($index + 1) === primaryParents.length }">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent"
class="location-item">
</mct-representation>
</span>
</li>
</ul>
</div><!--/ holder-inspector -->
</div><!--/ split-pane-component -->
<mct-splitter class="splitter-inspect mobile-hide" ng-show="editMode"></mct-splitter>
<div class="split-pane-component pane bottom" ng-show="editMode">
<div class="abs holder holder-elements l-flex-col">
<em class="flex-elem">Elements</em>
<mct-representation
key="'edit-elements'"
mct-object="domainObject"
class="flex-elem holder grows vscroll current-elements">
</mct-representation>
</div>
</div>
</li>
<li ng-if="contextutalParents.length > 0">
<em title="The location of this linked object.">Location</em>
<span class="inspector-location"
ng-repeat="parent in contextutalParents"
ng-class="{ last:($index + 1) === contextualParents.length }">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent"
class="location-item">
</mct-representation>
</span>
</li>
<li ng-if="primaryParents.length > 0">
<em title="The location of the original object that this was linked from.">Original Location</em>
<span class="inspector-location"
ng-repeat="parent in primaryParents"
ng-class="{ last:($index + 1) === primaryParents.length }">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent"
class="location-item">
</mct-representation>
</span>
</li>
</ul>
</div>
</mct-split-pane>
</div><!--/ PaneController -->
</span>

View File

@@ -39,6 +39,7 @@
class="mobile-hide"
key="'label'"
mct-object="domainObject"
parameters="{suppressMenuOnEdit: true}"
ng-click="treeNode.select()"
>
</mct-representation>

View File

@@ -38,8 +38,9 @@ define(
* @constructor
* @param {object[]} stylesheets stylesheet extension definitions
* @param $document Angular's jqLite-wrapped document element
* @param {string} activeTheme the theme in use
*/
function StyleSheetLoader(stylesheets, $document) {
function StyleSheetLoader(stylesheets, $document, activeTheme) {
var head = $document.find('head'),
document = $document[0];
@@ -62,8 +63,15 @@ define(
head.append(link);
}
// Stylesheets which specify themes should only be applied
// when that theme has been declared.
function matchesTheme(stylesheet) {
return stylesheet.theme === undefined ||
stylesheet.theme === activeTheme;
}
// Add all stylesheets from extensions
stylesheets.forEach(addStyleSheet);
stylesheets.filter(matchesTheme).forEach(addStyleSheet);
}
return StyleSheetLoader;

View File

@@ -69,9 +69,12 @@ define(
updateFromModel($scope.ngModel[$scope.field]);
}
$scope.picker = { active: false };
$scope.$watch('structure.format', setFormat);
$scope.$watch('ngModel[field]', updateFromModel);
$scope.$watch('textValue', updateFromView);
}
return DateTimeFieldController;

View File

@@ -51,6 +51,10 @@ define(
position = [ rect.left, rect.top ],
popup = popupService.display(div, position);
// TODO: Handle in CSS;
// https://github.com/nasa/openmctweb/issues/298
div.css('z-index', 75);
transclude(function (clone) {
div.append(clone);
});

View File

@@ -178,14 +178,10 @@ define(
return position;
}
// Dynamically apply a CSS class to elements when the user is actively resizing
function splitterState(state) {
var
children = $element.children(),
i;
for (i = 0; i < children.length; i++) {
children.eq(i).toggleClass('resizing');
}
// Dynamically apply a CSS class to elements when the user
// is actively resizing
function toggleClass(classToToggle) {
$element.children().toggleClass(classToToggle);
}
// Make sure anchor parameter is something we know
@@ -218,7 +214,7 @@ define(
// Interface exposed by controller, for mct-splitter to user
return {
position: getSetPosition,
action: splitterState,
toggleClass: toggleClass,
anchor: function () {
return anchor;
}

View File

@@ -54,7 +54,7 @@ define(
startMove: function () {
var splitter = element[0];
initialPosition = mctSplitPane.position();
mctSplitPane.action('startMove');
mctSplitPane.toggleClass('resizing');
},
// Handle user changes to splitter position
move: function (delta) {
@@ -66,9 +66,10 @@ define(
// Update the position of this splitter
mctSplitPane.position(initialPosition + pixelDelta);
},
// Grab the event when the user is done moving the splitter and pass it on
// Grab the event when the user is done moving
// the splitter and pass it on
endMove: function() {
mctSplitPane.action('endMove');
mctSplitPane.toggleClass('resizing');
}
};
}

View File

@@ -32,10 +32,11 @@ define(
mockPlainDocument,
mockHead,
mockElement,
testBundle,
loader;
beforeEach(function () {
var testBundle = {
testBundle = {
path: "a/b",
resources: "c"
};
@@ -72,6 +73,40 @@ define(
expect(mockElement.setAttribute)
.toHaveBeenCalledWith('href', "a/b/c/d.css");
});
describe("for themed stylesheets", function () {
var testTheme = "test-theme";
beforeEach(function () {
testStyleSheets = [{
stylesheetUrl: "themed.css",
bundle: testBundle,
theme: testTheme
}, {
stylesheetUrl: "bad-theme.css",
bundle: testBundle,
theme: 'bad-theme'
}];
loader = new StyleSheetLoader(
testStyleSheets,
mockDocument,
testTheme
);
});
it("includes matching themes", function () {
expect(mockElement.setAttribute)
.toHaveBeenCalledWith('href', "a/b/c/themed.css");
});
it("excludes mismatching themes", function () {
expect(mockElement.setAttribute)
.not.toHaveBeenCalledWith('href', "a/b/c/bad-theme.css");
});
});
});
}
);

View File

@@ -91,6 +91,10 @@ define(
expect(mockScope.textValue).toEqual("1977-05-25 17:30:00");
});
it("exposes toggle state for date-time picker", function () {
expect(mockScope.picker.active).toBe(false);
});
describe("when user input is invalid", function () {
var newText, oldValue;

View File

@@ -85,7 +85,7 @@ define(
function link(scope, element, attrs, ctrl, transclude) {
if (deviceMatches(attrs.mctDevice)) {
transclude(function (clone) {
element.parent().append(clone);
element.replaceWith(clone);
});
}
}

View File

@@ -26,13 +26,12 @@ define(
function (MCTDevice) {
"use strict";
var JQLITE_METHODS = [ 'parent', 'append' ];
var JQLITE_METHODS = [ 'replaceWith' ];
describe("The mct-device directive", function () {
var mockAgentService,
mockTransclude,
mockElement,
mockParent,
mockClone,
testAttrs,
directive;
@@ -48,11 +47,8 @@ define(
);
mockTransclude = jasmine.createSpy("$transclude");
mockElement = jasmine.createSpyObj(name, JQLITE_METHODS);
mockParent = jasmine.createSpyObj(name, JQLITE_METHODS);
mockClone = jasmine.createSpyObj(name, JQLITE_METHODS);
mockElement.parent.andReturn(mockParent);
mockTransclude.andCallFake(function (fn) {
fn(mockClone);
});
@@ -65,6 +61,15 @@ define(
directive = new MCTDevice(mockAgentService);
});
function expectInclusion() {
expect(mockElement.replaceWith)
.toHaveBeenCalledWith(mockClone);
}
function expectExclusion() {
expect(mockElement.replaceWith).not.toHaveBeenCalled();
}
it("is applicable at the attribute level", function () {
expect(directive.restrict).toEqual("A");
});
@@ -80,54 +85,54 @@ define(
it("restricts element inclusion for mobile devices", function () {
testAttrs.mctDevice = "mobile";
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isMobile.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("restricts element inclusion for tablet devices", function () {
testAttrs.mctDevice = "tablet";
mockAgentService.isMobile.andReturn(true);
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isTablet.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("restricts element inclusion for phone devices", function () {
testAttrs.mctDevice = "phone";
mockAgentService.isMobile.andReturn(true);
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isPhone.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("restricts element inclusion for desktop devices", function () {
testAttrs.mctDevice = "desktop";
mockAgentService.isMobile.andReturn(true);
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isMobile.andReturn(false);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("restricts element inclusion for portrait orientation", function () {
testAttrs.mctDevice = "portrait";
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isPortrait.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("restricts element inclusion for landscape orientation", function () {
@@ -135,11 +140,11 @@ define(
mockAgentService.isLandscape.andReturn(false);
mockAgentService.isPortrait.andReturn(true);
link();
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isLandscape.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
it("allows multiple device characteristics to be requested", function () {
@@ -148,17 +153,17 @@ define(
testAttrs.mctDevice = "portrait mobile";
link();
// Neither portrait nor mobile, not called
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isPortrait.andReturn(true);
link();
// Was portrait, but not mobile, so no
expect(mockParent.append).not.toHaveBeenCalled();
expectExclusion();
mockAgentService.isMobile.andReturn(true);
link();
expect(mockParent.append).toHaveBeenCalledWith(mockClone);
expectInclusion();
});
});
}

View File

@@ -1,12 +1,18 @@
{
"name": "Espresso",
"description": "Espresso theme: dark and rich",
"extensions": {
"stylesheets": [
{
"stylesheetUrl": "css/theme-espresso.css",
"priority": 1000
}
]
}
}
"name": "Espresso",
"description": "Espresso theme: dark and rich",
"extensions": {
"stylesheets": [
{
"stylesheetUrl": "css/theme-espresso.css",
"priority": 1000
}
],
"constants": [
{
"key": "THEME",
"value": "espresso"
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,8 @@ $colorFooterBg: #000;
$colorKey: #0099cc;
$colorKeySelectedBg: #005177;
$colorKeyFg: #fff;
$colorEditAreaBg: #31363e;
$colorEditAreaFg: #587ab5;
$colorInteriorBorder: rgba($colorBodyFg, 0.1);
$colorA: #ccc;
$colorAHov: #fff;
@@ -43,8 +45,6 @@ $colorPausedBg: #c56f01;
$colorPausedFg: #fff;
$colorCreateBtn: $colorKey;
$colorGridLines: rgba(#fff, 0.05);
$colorFormLines: rgba(#fff, 0.1);
$colorFormSectionHeader: rgba(#000, 0.2);
$colorInvokeMenu: #fff;
$colorObjHdrTxt: $colorBodyFg;
$colorObjHdrIc: pullForward($colorObjHdrTxt, 20%);
@@ -69,8 +69,8 @@ $colorFormValid: #33cc33;
$colorFormError: #cc0000;
$colorFormInvalid: #ff3300;
$colorFormLines: rgba(#fff, 0.1);
$colorFormSectionHeader: rgba(#000, 0.2);
$colorInputBg: rgba(#fff, 0.1);
$colorFormSectionHeader: rgba(#fff, 0.1);
$colorInputBg: rgba(#000, 0.1);
$colorInputFg: pullForward($colorBodyFg, 20%);
$colorFormText: rgba(#fff, 0.5);
$colorInputIcon: pushBack($colorBodyFg, 15%);
@@ -80,7 +80,7 @@ $colorInspectorBg: pullForward($colorBodyBg, 3%);
$colorInspectorFg: $colorBodyFg;
$colorInspectorPropName: pushBack($colorBodyFg, 15%);
$colorInspectorPropVal: pullForward($colorInspectorFg, 15%);
$colorInspectorSectionHeaderBg: pullForward($colorInspectorBg, 5%);
$colorInspectorSectionHeaderBg: $colorFormSectionHeader;
$colorInspectorSectionHeaderFg: pullForward($colorInspectorBg, 40%);
// Status colors, mainly used for messaging and item ancillary symbols
@@ -109,8 +109,8 @@ $colorLimitRedBg: rgba(red, 0.3);
$colorLimitRedIc: red;
// Bubble colors
$colorInfoBubbleFg: #666;
$colorInfoBubbleBg: #ddd;
$colorInfoBubbleFg: #666;
$colorThumbsBubbleFg: pullForward($colorBodyFg, 10%);
$colorThumbsBubbleBg: pullForward($colorBodyBg, 10%);
@@ -126,7 +126,7 @@ $colorItemBg: lighten($colorBodyBg, 5%);
$colorItemBgHov: pullForward($colorItemBg, 15%);
$colorItemFg: lighten($colorItemBg, 50%);
$colorItemFgDetails: lighten($colorItemBg, 30%);
$colorItemIc: $colorKey; //pullForward($colorItemFg, 20%);
$colorItemIc: $colorKey;
$colorItemSubIcons: $colorItemFgDetails;
$colorItemOpenIcon: $colorItemFgDetails;
$shdwItemText: rgba(black, 0.1) 0 1px 2px;
@@ -153,12 +153,14 @@ $colorItemTreeHoverBg: rgba($colorBodyFg, 0.1);
$colorItemTreeHoverFg: pullForward($colorBodyFg, 20%);
$colorItemTreeIcon: $colorKey;
$colorItemTreeIconHover: lighten($colorItemTreeIcon, 20%);
$colorItemTreeVCHover: $colorAlt1;
$colorItemTreeFg: $colorBodyFg;
$colorItemTreeSelectedBg: pushBack($colorKey, 15%);
$colorItemTreeSelectedFg: pullForward($colorBodyFg, 20%);
$colorItemTreeEditingBg: #344154;
$colorItemTreeEditingFg: $colorEditAreaFg;
$colorItemTreeVC: rgba(#fff, 0.3);
$colorItemTreeSelectedVC: $colorItemTreeVC;
$colorItemTreeVCHover: $colorAlt1;
$shdwItemTreeIcon: 0.6;
// Scrollbar
@@ -171,7 +173,7 @@ $scrollbarTrackShdw: rgba(#000, 0.7) 0 1px 5px;
// Splitter
$splitterD: 25px; // splitterD and HandleD should both be odd, or even
$splitterHandleD: 1px;
$colorSplitterBg: pullForward($colorBodyBg, 5%);
$colorSplitterBg: rgba(#fff, 0.1); //pullForward($colorBodyBg, 5%);
$splitterShdw: rgba(black, 0.4) 0 0 3px;
$splitterEndCr: none;
$colorSplitterHover: pullForward($colorBodyBg, 15%);
@@ -191,5 +193,5 @@ $colorCalCellInMonthBg: pushBack($colorMenuBg, 5%);
$colorAboutLink: #84b3ff;
// Loading
$colorLoadingBg: rgba($colorBodyFg, 0.2);
$colorLoadingFg: $colorAlt1;
$colorLoadingBg: rgba($colorBodyFg, 0.2);

View File

@@ -1,12 +1,18 @@
{
"name": "Sonw",
"description": "Snow theme: light and cool",
"extensions": {
"stylesheets": [
{
"stylesheetUrl": "css/theme-snow.css",
"priority": 1000
}
]
}
}
"name": "Snow",
"description": "Snow theme: light and cool",
"extensions": {
"stylesheets": [
{
"stylesheetUrl": "css/theme-snow.css",
"priority": 1000
}
],
"constants": [
{
"key": "THEME",
"value": "snow"
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,8 @@ $colorFooterBg: #000;
$colorKey: #0099cc;
$colorKeySelectedBg: $colorKey;
$colorKeyFg: #fff;
$colorEditAreaBg: #eafaff;
$colorEditAreaFg: #4bb1c7; //587ab5;
$colorInteriorBorder: rgba($colorBodyFg, 0.2);
$colorA: #999;
$colorAHov: $colorKey;
@@ -55,10 +57,10 @@ $colorMenuIc: $colorKey;
$colorMenuHovBg: pullForward($colorMenuBg, 10%);
$colorMenuHovFg: $colorMenuFg;
$colorMenuHovIc: $colorMenuIc;
$colorCreateMenuLgIcon: $colorKey;
$colorCreateMenuText: $colorBodyFg;
$shdwMenu: rgba(black, 0.5) 0 1px 5px;
$shdwMenuText: none;
$colorCreateMenuLgIcon: $colorKey;
$colorCreateMenuText: $colorBodyFg;
// Form colors
$colorCheck: $colorKey;
@@ -73,6 +75,14 @@ $colorInputFg: $colorBodyFg;
$colorFormText: pushBack($colorBodyFg, 10%);
$colorInputIcon: pushBack($colorBodyFg, 25%);
// Inspector
$colorInspectorBg: pullForward($colorBodyBg, 5%);
$colorInspectorFg: $colorBodyFg;
$colorInspectorPropName: pushBack($colorBodyFg, 20%);
$colorInspectorPropVal: pullForward($colorInspectorFg, 15%);
$colorInspectorSectionHeaderBg: pullForward($colorInspectorBg, 5%);
$colorInspectorSectionHeaderFg: pullForward($colorInspectorBg, 40%);
// Status colors, mainly used for messaging and item ancillary symbols
$colorStatusFg: #fff;
$colorStatusDefault: #ccc;
@@ -89,14 +99,6 @@ $shdwStatusIc: rgba(white, 0.8) 0 0px 5px;
$colorSelectBg: #ddd;
$colorSelectFg: $colorBodyFg;
// Inspector
$colorInspectorBg: pullForward($colorBodyBg, 5%);
$colorInspectorFg: $colorBodyFg;
$colorInspectorPropName: pushBack($colorBodyFg, 20%);
$colorInspectorPropVal: pullForward($colorInspectorFg, 15%);
$colorInspectorSectionHeaderBg: pullForward($colorInspectorBg, 5%);
$colorInspectorSectionHeaderFg: pullForward($colorInspectorBg, 40%);
// Limits and staleness colors//
$colorTelemFresh: pullForward($colorBodyFg, 20%);
$colorTelemStale: pushBack($colorBodyFg, 20%);
@@ -107,8 +109,8 @@ $colorLimitRedBg: rgba(red, 0.3);
$colorLimitRedIc: red;
// Bubble colors
$colorInfoBubbleFg: #666;
$colorInfoBubbleBg: $colorMenuBg;
$colorInfoBubbleFg: #666;
$colorThumbsBubbleFg: pullForward($colorBodyFg, 10%);
$colorThumbsBubbleBg: pullForward($colorBodyBg, 10%);
@@ -127,12 +129,11 @@ $colorItemFgDetails: pushBack($colorItemFg, 15%);
$colorItemIc: $colorKey;
$colorItemSubIcons: $colorItemFgDetails;
$colorItemOpenIcon: $colorItemFgDetails;
$shdwItemText: none; //rgba(black, 0.2) 0 1px 2px;
$shdwItemText: none;
$colorItemBgSelected: $colorKey;
// Tabular
$colorTabBorder: pullForward($colorBodyBg, 10%);
$colorItemTreeHoverFg: pullForward($colorBodyFg, 20%);
$colorTabBodyBg: $colorBodyBg;
$colorTabBodyFg: pullForward($colorBodyFg, 20%);
$colorTabHeaderBg: pullForward($colorBodyBg, 10%);
@@ -149,12 +150,15 @@ $colorPlotLabelFg: pushBack($colorPlotFg, 20%);
// Tree
$colorItemTreeHoverBg: rgba($colorBodyFg, 0.1);
$colorItemTreeHoverFg: pullForward($colorBodyFg, 20%);
$colorItemTreeIcon: $colorKey;
$colorItemTreeIconHover: $colorItemTreeIcon; //pushBack($colorItemTreeIcon, 20%);
$colorItemTreeVCHover: $colorKey;
$colorItemTreeFg: $colorBodyFg;
$colorItemTreeSelectedBg: pushBack($colorKey, 15%);
$colorItemTreeSelectedFg: $colorBodyBg;
$colorItemTreeEditingBg: #caf1ff; //#c6e3ff;
$colorItemTreeEditingFg: $colorEditAreaFg;
$colorItemTreeVC: $colorBodyFg;
$colorItemTreeSelectedVC: $colorBodyBg;
$shdwItemTreeIcon: none;

View File

@@ -1,4 +1,4 @@
@mixin containerSubtle($bg: $colorBodyBg, $fg: $colorBodyFg) {
@mixin containerSubtle($bg: $colorBodyBg, $fg: $colorBodyFg, $hover: false) {
@include containerBase($bg, $fg);
@include boxShdw($shdwBtns);
}

View File

@@ -2,6 +2,11 @@
"name": "Open MCT Web Core",
"description": "Defines core concepts of Open MCT Web.",
"sources": "src",
"configuration": {
"paths": {
"uuid": "uuid"
}
},
"extensions": {
"versions": [
{
@@ -33,7 +38,7 @@
"provides": "objectService",
"type": "provider",
"implementation": "objects/DomainObjectProvider.js",
"depends": [ "modelService", "capabilityService", "$q" ]
"depends": [ "modelService", "instantiate" ]
},
{
"provides": "capabilityService",
@@ -67,8 +72,7 @@
"persistenceService",
"$q",
"now",
"PERSISTENCE_SPACE",
"ADDITIONAL_PERSISTENCE_SPACES"
"PERSISTENCE_SPACE"
]
},
{
@@ -92,7 +96,7 @@
"provides": "actionService",
"type": "provider",
"implementation": "actions/ActionProvider.js",
"depends": [ "actions[]" ]
"depends": [ "actions[]", "$log" ]
},
{
"provides": "actionService",
@@ -110,6 +114,12 @@
"type": "provider",
"implementation": "views/ViewProvider.js",
"depends": [ "views[]", "$log" ]
},
{
"provides": "identifierService",
"type": "provider",
"implementation": "identifiers/IdentifierProvider.js",
"depends": [ "PERSISTENCE_SPACE" ]
}
],
"types": [
@@ -178,7 +188,7 @@
{
"key": "persistence",
"implementation": "capabilities/PersistenceCapability.js",
"depends": [ "persistenceService", "PERSISTENCE_SPACE" ]
"depends": [ "persistenceService", "identifierService" ]
},
{
"key": "metadata",
@@ -193,6 +203,11 @@
"key": "delegation",
"implementation": "capabilities/DelegationCapability.js",
"depends": [ "$q" ]
},
{
"key": "instantiation",
"implementation": "capabilities/InstantiationCapability.js",
"depends": [ "$injector", "identifierService" ]
}
],
"services": [
@@ -207,12 +222,18 @@
},
{
"key": "topic",
"implementation": "services/Topic.js"
"implementation": "services/Topic.js",
"depends": [ "$log" ]
},
{
"key": "contextualize",
"implementation": "services/Contextualize.js",
"depends": [ "$log" ]
},
{
"key": "instantiate",
"implementation": "services/Instantiate.js",
"depends": [ "capabilityService" ]
}
],
"roots": [
@@ -229,11 +250,18 @@
{
"key": "PERSISTENCE_SPACE",
"value": "mct"
},
}
],
"licenses": [
{
"key": "ADDITIONAL_PERSISTENCE_SPACES",
"value": [],
"description": "An array of additional persistence spaces to load models from."
"name": "Math.uuid.js",
"version": "1.4",
"description": "Unique identifer generation (code adapted.)",
"author": "Robert Kieffer",
"website": "https://github.com/broofa/node-uuid",
"copyright": "Copyright (c) 2010 Robert Kieffer",
"license": "license-mit",
"link": "http://opensource.org/licenses/MIT"
}
]
}

Some files were not shown because too many files have changed in this diff Show More