Compare commits

...

699 Commits

Author SHA1 Message Date
Pete Richards
9ab06cfdd2 Merge remote-tracking branch 'github-open/open1506' into open-master 2015-08-17 11:48:23 -07:00
Victor Woeltjen
4495c5b64a [Build] Restore snapshot status
Bump version number and restore snapshot status to
begin sprint Umbriel, WTD-825.
2015-08-17 10:54:30 -07:00
Victor Woeltjen
f22c0a7ee4 [Search] Remove unused dependency
Remove unused dependency from generic search worker,
avoids WTD-1511.
2015-08-17 10:50:12 -07:00
Victor Woeltjen
83fce6ad77 [Search] Remove unused dependency
Remove unused dependency from generic search worker,
avoids WTD-1511.
2015-08-17 10:45:02 -07:00
Victor Woeltjen
8371b1b25b Merge pull request #59 from slhale/searchservice
[Search] Created search service
2015-08-12 17:05:50 -07:00
slhale
94531a39d0 Merge branch 'master' of https://github.com/nasa/openmctweb into searchservice 2015-08-12 13:17:17 -07:00
Victor Woeltjen
3db62edf59 Merge remote-tracking branch 'github/master' into open-master
Conflicts:
	README.md
2015-08-12 12:19:53 -07:00
Victor Woeltjen
914c823675 [Tests] Comment out failing tests
Comment out tests which relate to object types not
yet in open source, WTD-1505
2015-08-12 11:57:56 -07:00
slhale
cab675c8ca [Search] Timeout length & indexed check
Changed timeout to 0 ms. Changed check for
already indexed to an empty return.
2015-08-12 10:57:37 -07:00
Victor Woeltjen
deb9e3e2ee [Tests] Change Chrome binary env variable
Use CHROME_BIN as the environment variable for nonstandard
Google Chrome binary locations; this is the same variable
used by Karma, so configuration is simplified. WTD-1505.
2015-08-12 10:28:20 -07:00
Victor Woeltjen
b6b716b767 [Tests] Update protractor instructions
WTD-1505
2015-08-12 10:27:24 -07:00
Victor Woeltjen
7aea1647a2 [Tests] Ensure local storage is used
Ensure local storage is used for Protractor tests,
WTD-1505.
2015-08-12 10:24:49 -07:00
Jesse
b74cbf1969 Added Window/Unix Freindly String Compare functions 2015-08-12 10:24:49 -07:00
Jesse
eb10cbf87c Cleaned Up Directory 2015-08-12 10:24:49 -07:00
Jesse
7918d7b287 Updated README and Renamed Tests 2015-08-12 10:24:49 -07:00
Jesse
fde0dc2a35 Added start.js Creates 'log' folder 2015-08-12 10:24:10 -07:00
Jesse
85f9d5a2da Added Start Run Stop Scripts 2015-08-12 10:23:58 -07:00
Jesse
ef7c1bd025 Added Fix for Protractor Test 2015-08-12 10:23:50 -07:00
slhale
0520f1c70c [Search] Update tests
Test creation of the generic search provider
provides mock timeout argument. Slight change to
tree indexing test due to use of useCapability
function.
2015-08-12 09:53:23 -07:00
slhale
3b62f1a979 [Search] Break up item indexing
Use timeouts to make the generic search's item
indexing not block up the page.
2015-08-12 09:42:21 -07:00
slhale
48693df51f [Search] Input checks
More checks to see if the input is empty
before doing search computations.
2015-08-11 13:52:23 -07:00
Victor Woeltjen
2d5ec97dc3 [Menu] Listen to element directly
Add listener to menu element directly instead of
using ng-click to aid in testing (and for consistency
with related listeners.) WTD-1506.
2015-08-07 14:39:59 -07:00
Victor Woeltjen
87aa0cfce2 [Menus] Dismiss menu when clicked
Addresses WTD-1506 (context menu does not disappear after
action is chosen); listen for click events on the menu
itself and dismiss the menu when these occur.
2015-08-07 14:34:27 -07:00
Victor Woeltjen
afddca510c [Documentation] Fix markdown
Fix markdown typo in README.md
2015-08-07 13:47:32 -07:00
slhale
7cad3ba0bc [Search] Update tests
Updated generic provider test for more general
mock capability object.
2015-08-06 14:52:54 -07:00
slhale
168a805e8e [Search] Index checks for changes
When indexing items initially, the generic
provider listens for mutations in case an
item's composition changes, so it can then
index the new children.
2015-08-06 14:41:47 -07:00
Victor Woeltjen
7ded288154 Merge pull request #63 from nasa/open21-diagrams
[Documentation] Add architecture documentation
2015-08-06 14:24:04 -07:00
Victor Woeltjen
3e94eba0d1 Merge pull request #62 from nasa/bigger-create-clicktarget
[Template] Move ng-click to parent node
2015-08-06 13:21:10 -07:00
Victor Woeltjen
ddae7823f9 [Documentation] Satisfy JSLint
MissionControl/vista#21
2015-08-06 13:02:33 -07:00
Victor Woeltjen
633c00f161 [Documentation] Minor cleanup
Minor cleanup around placeholder sections of
documentation, MissionControl/vista#21
2015-08-06 11:53:04 -07:00
Victor Woeltjen
be5253b9d3 [Documentation] Update doc build/deployer
MissionControl/vista#21
2015-08-06 11:46:50 -07:00
Victor Woeltjen
320be34798 [Documentation] Add clarifying comments
Add clarifying comments to doc generator,
MissionControl/vista#21.
2015-08-06 11:44:28 -07:00
Victor Woeltjen
3dace28eb3 [Documentation] Finish platform architecture
MissionControl/vista#21
2015-08-06 11:39:01 -07:00
Victor Woeltjen
19db1c9c2b [Documentation] Add narrative about tiers
MissionControl/vista#21
2015-08-06 11:12:02 -07:00
Victor Woeltjen
935360e2eb [Documentation] Document remaining services
MissionControl/vista#21
2015-08-06 11:02:12 -07:00
slhale
a2eabc1b08 [Search] Infinite cycle check
in indexItems in the generic provider.
2015-08-06 10:25:02 -07:00
slhale
f76f6548a5 [Search] Type checking
Added type checking for arrays to indexItems.
2015-08-06 10:13:32 -07:00
slhale
836c508698 [Search] Style compliance 2015-08-06 09:55:08 -07:00
slhale
1fe492cc3d [Search] New item indexer
This one (hopefully) doesn't fill up the
call stack when there are lots of items.
2015-08-06 09:51:09 -07:00
Victor Woeltjen
4c8d07bba8 [Documentation] Telemetry service architecture
MissionControl/vista#21
2015-08-05 17:24:36 -07:00
Pete Richards
37cd73c6e8 [Template] Move ng-click to parent node
Move the ng-click directive to the li element to match the element that receives
hover styles.

Fixes nasa/openmctweb#60.
2015-08-05 17:11:30 -07:00
Victor Woeltjen
096dce1fe0 [Documentation] Clarify terminology
MissionControl/vista#21
2015-08-05 16:35:58 -07:00
slhale
ae763d000c [Search] Remove ES provider from bundle
Removed the ElasticSearch search provider from its
bundle definition, but left its file in.
2015-08-05 12:23:40 -07:00
slhale
4533262b4a Merge branch 'searchservice' of https://github.com/slhale/openmctweb into searchservice 2015-08-05 10:20:14 -07:00
slhale
6a0bd10d5b [Search] Worker test correction
Removed unused parameter. Made path to worker
not relative.
2015-08-05 10:18:10 -07:00
slhale
3f2a23c93b [Search] Worker test correction
Removed unused parameter. Made path to worker
not relative.
2015-08-05 10:15:21 -07:00
Victor Woeltjen
96f738b6b6 [Documentation] Diagram service infrastructure
MissionControl/vista#21
2015-08-04 17:10:04 -07:00
Victor Woeltjen
3c325b8870 [Documentation] Add more high-level platform information
MissionControl/vista#21
2015-08-04 16:55:29 -07:00
Victor Woeltjen
0bf510ca08 [Documentation] Add more useful patterns
MissionControl/vista#21
2015-08-04 16:31:01 -07:00
Victor Woeltjen
fc0c902886 [Documentation] More service infrastructure
MissionControl/vista#21
2015-08-04 16:11:13 -07:00
Victor Woeltjen
f8dd69bbfa [Documentation] Complete framework arch
MissionControl/vista#21
2015-08-04 14:55:52 -07:00
Victor Woeltjen
926ee14546 [Documentation] Add composite services notes
MissionControl/vista#21
2015-08-04 14:23:23 -07:00
Victor Woeltjen
aea286779e [Documentation] Add custom renderer
MissionControl/vista#21
2015-08-04 13:37:45 -07:00
Victor Woeltjen
55d52d060a [Documentation] Switch to marked
Switch markdown generator to something more up-to-date,
MissionControl/vista#21.
2015-08-04 13:20:19 -07:00
slhale
d23f4de36a [Search] Cleanup
Variable names, and unused parameters.
2015-08-04 13:16:29 -07:00
Victor Woeltjen
503bae661c [Documentation] Add more description to framework
MissionControl/vista#21
2015-08-04 13:15:19 -07:00
slhale
b6c1eadb91 [Search] Generic search roots constant
Made a constant for the generic search roots,
rather than depending on roots[].
2015-08-04 11:48:28 -07:00
slhale
56265c2277 [Search] Search aggregator return type
The search service returns objects containing
searchResult objects.
2015-08-04 11:39:09 -07:00
slhale
bbce5c3154 [Search] Changed array to dictionary
for faster lookup times in the search aggregator's
filterDuplicated function.
2015-08-04 11:19:34 -07:00
slhale
c869aaf91a [Search] Fix file paths 2015-08-04 11:10:49 -07:00
slhale
5b0bf0a0ba [Search] Moving files
Moved the elasticsearch provider to
platform/persistence/elastic. Then moved
the generic provider out of its folder.
2015-08-04 11:05:32 -07:00
slhale
ec87ac7652 [Search] Comments 2015-08-04 10:37:47 -07:00
slhale
8f65c73c8a [Search] Recompile CSS
To make changes to the Sass reflected.
2015-08-04 10:36:46 -07:00
slhale
35316dc31c [Search] Clean up
Removed additional reference to searhc UI, as well
as correct persistence provider.
2015-08-04 10:35:15 -07:00
slhale
b6bb689ccc [Search] Remove search UI files
Leaving only search service related files.
2015-08-04 10:31:52 -07:00
slhale
45bedb20c1 [Search] Comments and style 2015-08-04 10:01:54 -07:00
Victor Woeltjen
2ca3c6ea93 [Layout] Use consistent whitespace
Use consistent whitespace in array literals, WTD-1424.
2015-08-04 10:00:44 -07:00
Victor Woeltjen
4803eef907 [Documentation] Add initial arch. docs
Add initial architecture docs; remove docs folder
from gitignore, as the generated docs (which should
be ignored) have been moved to target/docs.
MissionControl/vista#21.
2015-08-04 09:55:15 -07:00
Victor Woeltjen
4240e8843b [Documentation] Begin adding arch diagrams
MissionControl/vista#21
2015-08-04 09:52:09 -07:00
slhale
4439e1680d [Search] Update CSS
Scrolling now does not move the search input
field. Load more text always stays on one line.
2015-08-03 13:49:53 -07:00
slhale
5569ef8b2d Revert "[Search] Update CSS"
This reverts commit e05f16d780.
2015-08-03 13:39:22 -07:00
slhale
e05f16d780 [Search] Update CSS
Slight tweak to the padding of the search view,
which affects where the top of the scroll bar
appears. Also removed the search scroll div
because it was unused.
2015-08-03 13:26:29 -07:00
Victor Woeltjen
ae7fc27c9e [Documentation] Copy over css, png files
...in addition to .html files. MissionControl/vista#21
2015-08-03 12:49:35 -07:00
Victor Woeltjen
ff5e7486bc [Documentation] Move doc sources
Move doc sources to docs/src MissionControl/vista#21
2015-08-03 12:46:47 -07:00
Victor Woeltjen
867b5f726a [Documentation] Changes doc output directory
MissionControl/vista#21
2015-08-03 12:34:12 -07:00
Victor Woeltjen
a4c704a5a2 [Layout] Ensure minimum frame size
Ensure default frame size in a layout is not small,
even if the grid size for the layout is very small.
WTD-1424.
2015-08-03 12:18:49 -07:00
slhale
e928e02b1c [Search] Update tests
Updated the search controller test to work with
the changes to loadMore
2015-08-03 11:48:50 -07:00
slhale
1cd6685b36 [Search] Update loadMore
The controller's loadMore function now sends
new queries to the search service if the
controller's full results list does not have
enough results in it to load more.
2015-08-03 11:44:56 -07:00
slhale
695582b30f [Search] Clean up 2015-08-03 11:38:47 -07:00
slhale
d0bad46627 [Search] Style
Removed use of the keyword 'catch' when dealing
with promises, and instead used the second
parameter of then.
2015-08-03 10:46:34 -07:00
slhale
eb0bdba666 [Search] Moved isLoading
Moved the isLoading function away from
the aggregator. It is now the controller's
responsibility. Corresponding tests
updated.
2015-08-03 10:45:30 -07:00
slhale
19b9668190 [Search] Restoring web worker tests 2015-08-03 10:21:50 -07:00
slhale
59d4c362f6 [Search] Temporarily remove web worker test 2015-08-03 10:13:00 -07:00
slhale
9be646f1e7 [Search] Moved search folder location
Moved search from platform/features/search to
platform/search. Added more style corrections.
2015-08-03 09:51:36 -07:00
slhale
164d5485e9 [Search] Wrote provider test
Completed tests for GenericSearchProvider.
Also fixed style in other tests.
2015-08-03 09:36:13 -07:00
slhale
7678289ead [Search] Wrote worker test
Completed tests for GenericSearchWorker.
2015-07-31 16:37:11 -07:00
slhale
2a62494296 [Search] Wrote provider test
Completed tests for ElasticsearchSearchProvider.
2015-07-31 15:27:02 -07:00
slhale
ae94ba73d7 [Search] Wrote aggregator test
Completed tests for SearchAggregator.
2015-07-31 11:33:58 -07:00
slhale
5b3f78287e [Search] Wrote controller tests
Completed tests for SearchController and
SearchItemController.
2015-07-31 10:40:16 -07:00
slhale
4bb000dd93 [Search] Writing tests
Created files for all the tests to write.
2015-07-31 09:38:45 -07:00
slhale
06d9b68406 [Search] Comments 2015-07-31 09:38:05 -07:00
Victor Woeltjen
64e2de7aa6 [Documentation] Add a build step
Support generation of non-API docs using
npm run docs. Supports MissionControl/vista#21
2015-07-30 16:36:17 -07:00
slhale
3a3e98cc48 [Search] Update provider timeout
Added a timedOut property to the provider's
return object. Changed the generic search
worker to stop if it reaches timeout.
2015-07-30 16:35:26 -07:00
Victor Woeltjen
ee64ef5fc1 [Documentation] Generate docs with diagram
Convert Markdown+nomnoml -> HTML+PNG for
MissionControl/vista#21
2015-07-30 16:16:33 -07:00
slhale
6e11941ae9 [Search] ES Provider error checks
The elasticsearch provider returns an empty
result when elasticsearch throws an error
(probably a bad request). This prevents the
aggregator from thinking that ES is loading
infinitely.
2015-07-30 15:47:09 -07:00
Victor Woeltjen
ad482600de [Documentation] Begin adding doc generator
Begin adding Markdown->HTML documentation generation
with nomnoml embedded diagram support.

MissionControl/vista#21
2015-07-30 15:40:43 -07:00
slhale
7c89e4aa4a Merge branch 'master' of https://github.com/slhale/openmctweb into search 2015-07-30 15:08:33 -07:00
slhale
f8471bc944 [Search] Comments 2015-07-30 15:04:42 -07:00
slhale
15b7e3ac9b [Search] Aggregator returns result object
The aggregator now returns a result object similar
to that of the providers, but the hits array contains
domain objects rather than searchResult objects.
Also removed overly complicated filterRepeats
function from the aggregator and replaced it with a
simpler one.
2015-07-30 14:57:15 -07:00
slhale
51bc7c6a7f [Search] Generic tracks total hits
The generic search worker keeps track of the total
number of search hits before truncating to match
the max results.
2015-07-30 14:06:35 -07:00
slhale
60dad014cc [Search] Changed provider return type
The provider now returns an object that has
a hits property which contains what it
previously returned, and also a total property
which contains the total number of results.
2015-07-30 13:54:56 -07:00
slhale
a7cd6d8807 [Search] Removed name field form ES provider
Removed the name field from the ElasticSearch provider
search query string, so now it will check all of the
fields of the domain object (such as type).
2015-07-30 13:32:34 -07:00
slhale
bce56c53ed [Search] Clean up
Updated comments and documentation. Changed the generic
worker to return results as {id: score} key value pairs
rather than {id: {score: score}} format. Removed unused
getLatestResults and getLatestTimestamps functions from
the providers.
2015-07-30 13:27:45 -07:00
Victor Woeltjen
0b3170d2ef [Tests] Remove logs
Remove protractor logs, WTD-1489
2015-07-30 12:54:26 -07:00
Victor Woeltjen
7e7754f9aa [Tests] Add license headers
Add license headers to protractor test scripts,
WTD-1489.
2015-07-30 12:50:13 -07:00
Victor Woeltjen
3a96a246a4 [Tests] Ignore protractor in build
Ignore protractor test folder from command line build,
WTD-1489
2015-07-30 12:44:49 -07:00
Victor Woeltjen
24682c5f7a [Tests] Add protractor instructions
Add protractor instructions to top-level README, WTD-1489.
2015-07-30 12:42:50 -07:00
Victor Woeltjen
28365602f0 [Tests] Comment out failing tests
WTD-1489.
2015-07-30 12:39:05 -07:00
slhale
2c5da44e5e [Search] Clean up
Removed the timestamp as an optional parameter
of the search aggregator's query(), and now it
instead automattically generates one before
querying the providers.
Also attempted to fix loading, but did not
complete (commented out).
2015-07-30 12:38:03 -07:00
Victor Woeltjen
a03046400c [Tests] Separate out page launcher
WTD-1287
2015-07-30 12:29:02 -07:00
Jesse
d5c835e777 Fixed Delete not working in protractor 2015-07-30 12:28:40 -07:00
Jesse
af630d1b3e Add Protractor Directory 2015-07-30 12:28:29 -07:00
slhale
6b613f234b [Search] Clean up comments 2015-07-29 15:22:46 -07:00
slhale
1619f236cf [Search] Updated search service interface
The search service's interface now just consists
of the two functions query() and isLoading().
query() returns a promise for an array or results,
which eliminates the need for timeout polling like
was previously done. The search providers
have also been changed to reutrn promises.
2015-07-29 15:07:13 -07:00
slhale
5ee8dd239b [Search] Comments 2015-07-29 13:17:50 -07:00
slhale
f2cd55d6cd [Search] Cleaning up
Cleaning up code in generic serach provider. Removed
unnecissary return statements. Moved indexing via web
worker from getItems() loop to within itemsHelper().
Commented out timeout, becuase seems unnecissary.
Changed all date.getTime() to Date.now(). Indexing
has undefined checking.
2015-07-29 11:01:38 -07:00
slhale
639cf1cf59 [Search] Generic indexes once
Changed the generic search provider to index the
file tree only once when it is initially called.
This assumes that the contents of the file tree
will not change significantly within the course
of a use session (and some changes may be caught
by other search providers).
2015-07-29 10:28:07 -07:00
slhale
ce433a01b2 Merge branch 'master' of https://github.com/nasa/openmctweb into search 2015-07-28 17:04:44 -07:00
slhale
495d8c9830 [Search] Search term processing
The search term processor for ElasticSearch now
removes extra spaces from inside of the search
term (to avoid some ES errors).
2015-07-28 17:04:29 -07:00
Victor Woeltjen
2ffe1cdff9 [Build] Bump version number
Bump version number, add snapshot status to begin sprint
Triton, WTD-824.
2015-07-28 13:30:39 -07:00
Victor Woeltjen
6596ddcb8c [Build] Remove snapshot status
Remove snapshot status to close sprint titan,
WTD-824.
2015-07-28 13:23:57 -07:00
slhale
32b58715c6 [Search] Fixed scrolling and layout edit
Changed the CSS so that scrolling for the tree and
search results works again. Additionally, layout
editing works again.
2015-07-28 12:33:22 -07:00
slhale
1a9dd2f144 [Search] Comments
Updated documentation. Removed unnecissary dependency
fom generic provider.
2015-07-28 11:33:29 -07:00
slhale
d6a7dc9820 Merge branch 'search' of https://github.com/slhale/openmctweb into search 2015-07-28 10:17:15 -07:00
slhale
dc53cf60d1 [Search] Style
Made style compliance changes.
2015-07-28 10:15:05 -07:00
slhale
e0e5ad1347 [Search] Removed console output
Accidentally left in a console.log statement
2015-07-28 10:04:31 -07:00
slhale
a6b11354cd [Search] Removed console output
Accidentally left in a console.log statement
2015-07-28 10:03:22 -07:00
slhale
f7c0cb6214 Merge branch 'search' of https://github.com/nasa/openmctweb into search 2015-07-28 09:51:17 -07:00
slhale
561d671181 [Search] Fix to pass test
Changing TreeNodeController's isSelected function
back to original, so that it doesn't break tests.
2015-07-28 09:50:50 -07:00
Pete Richards
d569b13101 [Continuous] Deploy to staging-un 2015-07-28 09:40:16 -07:00
shale
84486f2086 [Search] Fixed empty search
Pressing enter on the searchbar before putting
any input would before hide the filtree when
it shouldn't. Now it does not.
2015-07-27 14:12:49 -07:00
shale
dc79f460e5 [Search] Fixing conflicts 2015-07-27 13:34:12 -07:00
shale
7cac858697 [Search] Cleanup
Updated documentation. Removed most unused funtions.
Removed references to the search service in the
search template -- necissary functions added to
the search controller.
(Search in a 'working' state again.)
2015-07-27 13:25:35 -07:00
shale
a3977a18f0 [Search] Results polling in aggregator
Moved the polling for most recent results
from the search controller to the search
aggregator.
Also changed ng-change back to ng-keyup
in the search template.
2015-07-27 12:59:32 -07:00
shale
5e858f73d5 [Search] Changed ng-keyup to ng-change
In the search template. Also small comment change.
2015-07-27 11:55:42 -07:00
shale
181fb32a2a [Search] Responsibility change (in progress)
Attempting to move some responsibility from
the search controller to the aggregator.
(Committing for save before possible revert.)
2015-07-27 10:04:09 -07:00
shale
232a648fbd Merge branch 'master' of https://github.com/nasa/openmctweb into search 2015-07-27 09:14:52 -07:00
Victor Woeltjen
77edb07333 Merge pull request #52 from nasa/continuous-deployment
Support continuous deployment of open source Open MCT Web.
2015-07-27 07:51:54 -07:00
Pete Richards
e639d9ba8f [Continuous] Only deploy from master branch 2015-07-24 17:32:49 -07:00
Pete Richards
c6b0e4bf6f [Continuous] Set author after repo is initialized 2015-07-24 17:13:19 -07:00
larkin
60cdc0eb6d [Licensing] Add license header to applicable files 2015-07-24 17:08:29 -07:00
larkin
36ac5aa4de [Style] JSLint compliance 2015-07-24 17:07:53 -07:00
Pete Richards
09519cf6d4 [Continuous] Set commit author, fix grammar 2015-07-24 17:07:49 -07:00
shale
d35a149108 [Search] Remove unused controll
Removed searchbar controll, as the control to
use would be the provided textfield control.
2015-07-24 16:52:55 -07:00
larkin
44ee21d613 [Continuous] Push docs to correct repository 2015-07-24 16:41:10 -07:00
larkin
ee34b74ca1 [Style] Test config is JSLint approved 2015-07-24 16:21:15 -07:00
larkin
3fe9170c7d [Gitignore] Ignore jsdoc output 2015-07-24 15:34:26 -07:00
shale
dca0014862 [Search] Removed unused
Removed incorrect 'uses' statements from
bundle.json. Also removed unused controller
ToggleController. Edited some comments.
2015-07-24 15:08:43 -07:00
shale
6b02295bf4 Merge branch 'master' of https://github.com/nasa/openmctweb into search 2015-07-24 14:20:27 -07:00
Victor Woeltjen
9435e75461 Merge remote-tracking branch 'slhale/open33' into open47b
Fix merge conflict in preparation to integrate nasa/openmctweb#47

Conflicts:
	platform/commonUI/browse/res/templates/browse/object-header.html
2015-07-24 13:46:37 -07:00
shale
05c43db6fe [Search] Search input using the model
Made the search bar text input go to ngModel.input,
rather than getting the text manually from the DOM
element. Additionally, removed the search service
from the search controller's scope.
2015-07-24 13:04:48 -07:00
shale
9143f5febd [Search] Comments and errors
Changed TreeNodeController slightly to do error
checking. Also updated some comments.
2015-07-24 13:03:18 -07:00
shale
300280e03e [Search] Moving responsibility
Moving the responsibility of polling for updates
from the search controller to the search aggregator.

In progress. Previously this prototype was what
could be called semi-stable, but now it is no longer.
2015-07-23 16:58:25 -07:00
shale
341218e8f6 [Search] Tree hide change
The tree is now hidden whenever there is
text in the search bar. (This allows for
the case when there are no search results,
but text in the search bar.)
2015-07-23 16:24:38 -07:00
shale
33e8084852 [Search] Getting input text
The controller now gets the input text from the
DOM element ID, then passes that string along
to the search service, instead of passing the
raw ID.
2015-07-23 16:13:26 -07:00
shale
7d495f6389 [Search] Hide tree
The tree is hidden when there are
search results.
2015-07-23 15:55:20 -07:00
shale
f4d34a2a9c [Search] mctControl for searchbar
Attempting to generalize the searchbar using
mct-control. In progress.
2015-07-23 15:29:19 -07:00
shale
0feab1965c [Search] Attempt at scroll bars
Attempted to make the search results scroll,
but failed for now. Created a div for the
search results, load icon, and load more
button, which are the elements desired to
be scrolled. Did not work because search
result labels have absolute position text.
2015-07-23 15:12:13 -07:00
shale
aa17d3034e [Search] Fixed excessive calls to setSelection
There were excessive calls to TreeNodeController's
setSelection() due to a modification for search
compatibility. Changed to not call as often.
2015-07-23 13:32:15 -07:00
shale
52a9fcf5d6 [Search] Changed highlight size
The search item highlight when selected or
hovered over is now talled, and the margin
between search items is reduced to
counteract any effect to spacing.
2015-07-23 13:29:11 -07:00
shale
7b271dcb6b [Search] Highlight transitions
Added transitions for when objects get
highlighted from selection or hover.
2015-07-23 13:14:20 -07:00
shale
2680e466fa [Search] Tree selection syncs
Selecting something in the search results now
also makes it selected in the filetree. It
remains selected even when the search results
are cleared. (The filetree does not
automatically expand to that position though.)
2015-07-23 12:47:21 -07:00
shale
29d5535e7c [Search] Changed search load time
Changed how frequently the search controller
checks for updates. This makes the load icon
dissapear faster, and looks more natural. But,
may affect performance.
Also changed the point at which the loading
status becomes 'true'. Made it earlier, at
the beginning of the controller's update().
2015-07-23 11:48:19 -07:00
shale
ebb5474b34 [Search] Hover and loading
Added styling to result items when they are
hovered over.
Also added a loading icon.
2015-07-23 11:41:17 -07:00
shale
4759162bb7 [Search] Added right padding
Added padding to the right side of the
search holder to match the tree holder's
padding.
2015-07-23 11:08:31 -07:00
shale
deba184103 [Search] Selection remains across queries
The selected object in the search results now
remains selected even after a new search is made.
It also will remain selected if it is clicked
on the file tree, but the file tree version is
not yet selected if it is clicked on the search
results list.
2015-07-23 10:56:38 -07:00
shale
c65a278fcf [Search] Selecting results works
Can now click on search results. The view will
be updated, as well as the selected object
being higlighted.
2015-07-23 10:50:00 -07:00
shale
8c08f7b93e [Search] Less space above tree
Removed the awkward spacing between the filetree
and the search bar. Now 'My Items' appears just
below the search bar.
Also added .search-holder to the sass, but haven't
done anything with it yet.
2015-07-23 09:25:10 -07:00
shale
501e426868 [Search] Centered load more button
More correctly centered the load more button,
so that when the left panel is resized,
the button remains in the middle.
Additionally, added more comments to the sass.
2015-07-22 16:35:41 -07:00
shale
8f1f4eb177 [Search] Generic search gets all roots
Generic search now automatically finds all
the roots before searching.
2015-07-22 16:21:38 -07:00
shale
b0e7dca985 [Search] Empty search resets results
When there is no input into the search bar
no results are displayed/displayed results
are removed. This is because the search
providers were changed to return empty
arrays for empty search strings.
2015-07-22 16:09:14 -07:00
shale
b16af5fe3e [Search] Renaming search and searchbar
Changed what was previously just 'search' and
renamed to 'search view'. Then, took what was
previously 'searchbar' and renamed to
'search'.
2015-07-22 15:43:28 -07:00
larkin
12b8408bca [Entanglement] Enable Entanglement 2015-07-22 15:32:20 -07:00
shale
1dbe039be8 [Search] Load more button style
Styled the load more button to match
the general theme.
2015-07-22 15:17:27 -07:00
shale
d82538a799 [Search] Item background highlight
Each result item now has a highlighted
background, with correct rounding of
edges. Need to now detect when to
highlight (on selection).
2015-07-22 14:48:14 -07:00
shale
57d45b24be [Search] Removed Search View
Removed the search view from bundle.json because
the search in the left panel is the actualy
UI for searching. The search view is temporary.
2015-07-22 13:46:40 -07:00
shale
dcd4006017 [Search] Positioning fixed
Fixed the search results so that they
now display correctly, with overflow
hidden, and no unusual positioning.
Also changed font size to 0.8em.
2015-07-22 13:43:54 -07:00
shale
3ae681c79c [Search] Colors and positioning
Corrected the colors back to the normal
style. Also made the text on the same
line as the icon, but this fix is a
temporary one.
2015-07-22 12:33:20 -07:00
shale
ab3d3ec45b [Search] Overflow text
Overflow text on the search item labels
is now hidden, with ellipses.
New problem: Text is  on a different
line than the icon.
2015-07-22 11:48:13 -07:00
shale
ff3770c9ee [Search] Added css classes
Added classes to the HTML so that CSS and
Sass could get access to style the
searchbar items. The structure for styling
is now mostly set up.
2015-07-22 11:21:14 -07:00
larkin
0fde10a818 [Continuous] Procfile uses localstorage 2015-07-22 11:00:18 -07:00
larkin
919ef2f991 [Persistence] Add localstorage persistence 2015-07-22 10:58:28 -07:00
shale
bcc1e2e26f [Search] Starting front-end
Starting to modify the front-end so that
the searchbar appears in the tree view
area. Made the tree holder have relative
position so that the searchbar is visibile
for now. (Later will be different.)
2015-07-22 10:38:56 -07:00
Pete Richards
01a52b8af8 [Continuous] Deploy to heroku 2015-07-21 17:29:25 -07:00
Pete Richards
19b0b1aa66 [Continuous] Run via Procfile binds port 2015-07-21 17:27:17 -07:00
Pete Richards
808a79178b [Continous] Build and publish documentation 2015-07-21 17:24:43 -07:00
shale
b5f8e6d90c [Search] Updating searchbar
Updating the searchbar to be again more
similar to the search view. It now has
a 'load more' button, but it is not
clickable for some reason. In progress.
2015-07-21 16:21:23 -07:00
shale
739fa423c5 [Search] Added wildcards to generic
Added wildcard support to the generic
search provider. In this case, wildcards
behave just like spaces.
2015-07-21 16:10:35 -07:00
shale
5f30249065 [Search] Load more option
Made the search view have a 'Load more'
button. Added functionalty to allow this
to happen.
2015-07-21 15:56:28 -07:00
shale
4191bc1ac3 [Search] Comments
Updated the documentation.
2015-07-21 15:31:23 -07:00
shale
92df11acc1 [Search] Readded ElasticSearch provider
Previously had removed the elasticsearch provider
from bundle.json so could work on the generic
search web worker. Now have modified the
elasticsearch provider to match the new interface
with the aggregator, and it works.

At this point, search is 'working'
2015-07-21 15:14:07 -07:00
shale
416bd82589 [Search] Cleanup
Removed a couple of unnecissary things, and fixed
up the comments.
2015-07-21 15:05:08 -07:00
shale
7934e8d425 [Search] Changed worker result implementation
The interface remains the same, but the web worker
returns a pseudo dictionary (actually an object)
after being told the search. The key value pairs
for this dictionary are ids and scores.
2015-07-21 14:55:44 -07:00
Pete Richards
cb56bbe569 [Documentation] Fix JSDoc syntax errors 2015-07-21 14:30:00 -07:00
Pete Richards
e7e79f41a7 [Packaging] Create NPM Package
Create NPM package for OpenMCTWeb.  Includes scripts
for hosting, running tests, and building documentation.
2015-07-21 14:29:07 -07:00
shale
5a93e5a2bc [Search] Correct search updating
The search controller now updates the display
results list, then repeatedly asks the
aggregator to update until the timestamps
all are at least as new as the one that the
controller originally gave for the query.
Basically, the search now updates correctly
without having to press enter again.
2015-07-21 14:24:37 -07:00
shale
41c38f202d [Search] Comments
Removed extra commented out code.
2015-07-21 13:04:03 -07:00
shale
f0f396f656 [Search] Needs more updating
The search aggregator now correctly gets
from the providers, but because of not
sync, the display is effectively one press
behind the correct search results.
Still, working to some extent.
2015-07-21 12:59:52 -07:00
shale
a5febf8f0f [Search] Removed paging
Removed the paging from the search view,
because later instead of paging there will
be a 'view more' option.
Also made the generic search provider
return searchResult objects instead of
raw domain objects.
2015-07-21 12:44:14 -07:00
shale
4f4af87285 [Search] Added timestamp to queries
(Temporariliy removed the elasticsearch provider
from bundle.json)
Added a timestamp parameter to the query so that
the aggregator can tell when the results were last
updated. Created a separate function for getting
the results list. GenericSearch now converts back
from models to domain objects after the web worker
does its work.
2015-07-21 12:34:08 -07:00
shale
1b5fbccc06 [Search] Removed validType function
Removed the validType function which previously
was a paraemter to the search providers. It
was no longer used, and is not necissary.
2015-07-21 11:17:45 -07:00
shale
fc123cd367 [Search] In progress webworker
Connecting GenericSearch to the web worker is still
in progress. The aggregator currently gets the
results before the web worker is finished. In process
of fixing sync issue.
2015-07-21 11:14:13 -07:00
shale
a0f4b98eed [Search] Webworker search
The web worker's search() appears to work. Now
we just need to link it in to the GenericSearch
as the primary means of searching.
2015-07-21 10:35:33 -07:00
shale
7adcfc221a [Serach] Webworker indexes items
The indexItem() part of the web worker seems
to be working at this point.
2015-07-21 10:10:34 -07:00
shale
c1dcd8ea5b [Search] Framework of webworker implementation
Made a basic outline of the desired web worker
implementation. (Functions present, now need to
implement them.)
2015-07-21 09:58:19 -07:00
shale
74961e1106 [Search] Starting on workers
Starting to work on using web workers to
do some of the work of GenericSearch.
Changed bundle.json accordingly.
2015-07-21 09:44:14 -07:00
shale
c79d1f2648 [Search] Choose higher score & optional parameters
Changed the search aggregator's filterRepeats
function to choose the version of the searchResult
object that has the higher score, when it
encounters multiple searchResult objects
corresponding to a domain object ID.
Also changed the search providers and aggregator
such that the validType parameter is now optional,
with a function that always returns true as the
defualt.
2015-07-21 09:41:52 -07:00
shale
f4bd7d7a44 [Search] Revert to earlier commit
Reverted to before implementing next(). May re add
back some changes, such as removing validType and
then adding web workers.
2015-07-20 17:02:08 -07:00
shale
1891b24bde [Search] Dump before revert
Commtting changes so far before revering
to a previous commit. Most changes to make
next() have been unneccsiary. We no longer
want next().
2015-07-20 16:56:39 -07:00
shale
5520037908 [Search] Partial loading
Changed the providers to return only the first
search result. Each searchResult object has a
function next() which returns the next search
result. This allows the search aggregator to
load more results without making a whole new
search query. (Still requuires some cleaning
up.)
2015-07-20 14:30:22 -07:00
shale
c0c0371451 [Search] Timeout passed from SearchAggregator
The timeout value is now an optional
parameter of the providers, and
the search aggregator now passes a
common default value to all of them.
2015-07-20 11:21:55 -07:00
shale
ed956d351d [Search] Elasticsearch timeout
Added a term to the elasticsearch query
that should make it time out. Apparently
this only works sometimes, as ES uses a
'best effort' timeout.
2015-07-20 11:08:43 -07:00
shale
e9e9ca146b [Search] Generic search timeout
Added a time limit for generic search's indexing
of the filetree, at which point it will just
return the portion of the filetree it has
indexed.
Additioanlly attempted to move this part of
the functionality to a webworker, but is not
working because of unclonability of the
objects. (Commented out)
Also updated some documentation comments.
2015-07-20 10:59:02 -07:00
shale
e8b662571b [Search] Not case sensitive
Made sure that generic search's matching is
not case sensitive.
2015-07-17 14:06:48 -07:00
shale
2a784115d5 Merge branch 'master' of https://github.com/nasa/openmctweb into search 2015-07-17 13:49:19 -07:00
shale
9f5f14826b [Search] Changed generic's matching implementation
Changed how the generic search provider determines
search matches. It now splits the search input into
search terms by spliting at spaces, and then scores
the results by how many of the terms appear as
substrings in the result.
2015-07-17 13:49:09 -07:00
shale
c75d94289b [Serach] Callbacks and renaming
Added validType() as a callback parameter to the search
providers. It is defined in the search aggregator, and
is used to put any restrictions on object type in the
displayed search results.
Renamed EverythingSearchProvider to GenericSearchProvider.
2015-07-17 11:26:44 -07:00
Victor Woeltjen
2e2e7ee876 Merge branch 'open1444b' into open-master 2015-07-17 11:05:25 -07:00
Victor Woeltjen
affd5f8d29 Merge branch 'open1426' into open-master 2015-07-17 10:56:09 -07:00
shale
492dbcbc51 [Search] Comments and keypress
Changed the controller for the search input
to respond on keypress rather than keyup.
Added comments better explaining searchResult
objects to the search aggregator.
2015-07-17 09:33:10 -07:00
Victor Woeltjen
deed95d8d1 [Plot] Don't allocate charts for empty plots
Don't allocate WebGL charts for empty plots, WTD-1444.
2015-07-17 09:13:20 -07:00
shale
c82163fa7b [Search] Comments and style 2015-07-16 16:54:53 -07:00
shale
cf3169dd68 [Search] More generalized restrictions
Moved the EverythingSearchProvider's term to item
matching to new functions, so that they can be
more easily modified later.
2015-07-16 16:50:11 -07:00
shale
c1ebd50e4c [Search] Result paging
The search view now can page the
results when there are many.
2015-07-16 16:31:54 -07:00
shale
442a1979e7 [Search] Rudimentary scroing for manual
Created a rudimentary scoring function for
the EverythingSearchProvider. Also corrected
the sorting by score function.
2015-07-16 14:36:02 -07:00
shale
922a724e36 [Search] Removed unused file
Removed SearchService.js, as now the searchService
is implemented using the aggregator and providers.
2015-07-16 13:26:23 -07:00
shale
15a9d2380c [Search] Removed unnecissary dependency
Removed an unnecissary parameter from the
search aggregator ($q).
2015-07-16 13:11:00 -07:00
shale
80e0bd875a [Search] Aggregator merges results
The search aggregator now merges search
results from different providers better.
It removed duplicate results, and orders
the list of results from highest to
lowest score.
2015-07-16 13:08:05 -07:00
shale
bc2072b8c6 [Search] Removed unused search provider
WARP search provider should not be
implemented here. And was not yet
implemented or used at all anyway.
2015-07-16 11:33:36 -07:00
shale
25208a9074 [Search] Aggregator aggregates
The search aggregator now combines the search
results from each search provider and returns
that. Objects may appear in the list more
than once.
2015-07-16 11:31:30 -07:00
shale
cd3c2312a5 [Search] Basic aggregator works
The search view now behaves as it
previously did. The search aggregator
is set to just use ElasticSearch, but
it works.
2015-07-16 10:35:26 -07:00
shale
6f2ad0dadc [Search] Renaming and adding files
Renamed QueryService as SearchService and changed
the corresponding references to it. Added a
SearchAggregator file and related files. Not
yet begun with the implementation.
2015-07-16 10:10:07 -07:00
shale
1e05ebbfd7 [Search] Modified default input funct
Renamed isDefaultInput() to isDefaultFormat(). It
currently just checks for 'name' or 'type' tags,
but it may be completely unneeded.
2015-07-16 09:56:55 -07:00
shale
c5c3546b92 [Search] Relaxed quote rules
Allowed quotes more often in search terms.
When there are quotes, that space-separated
term will not get the fuzzy identifier.
2015-07-15 17:02:51 -07:00
shale
672fa74321 [Search] Changed default max results
Changed the default number of max results to
be 100 results.
2015-07-15 16:46:38 -07:00
shale
3fcf061679 Merge branch 'master' of https://github.com/nasa/openmctweb into search-explore 2015-07-15 16:15:25 -07:00
Victor Woeltjen
e400f211c4 Merge remote-tracking branch 'nasa/open1404' into open1427
Merge in preparation for review/integration, WTD-1427

Conflicts:
	platform/commonUI/general/res/templates/containers/accordion.html
2015-07-15 13:45:37 -07:00
shale
b94ef695e2 [Search] Creating searchbar
Starting to create a search bar which lives
in the same side of the divder as the file
tree does.
2015-07-15 13:29:45 -07:00
shale
759eaa3b35 [Search] Comments 2015-07-15 12:39:22 -07:00
shale
eee9309650 [Search] Fuzziness operator
Insead of wildcards, adding the fuzziness
operator to searches to ensure completeness
of the search results.
2015-07-15 12:14:30 -07:00
shale
e634d77a8e [Search] Add wildcards
Added wildcards to most searches at the
front and end of each word that is separated
by spaces.
2015-07-15 11:39:02 -07:00
shale
06b26b799e [Search] Comments 2015-07-15 11:10:04 -07:00
shale
d6720884f1 [Search] Elasticsearch search options
Changed the search term processor to allow
the name and type options again (for
elasticsearch).
2015-07-15 10:52:27 -07:00
shale
eb5946c1c1 [Search] Documentation
Gave more verbose descriptions of queryManual
and queryElasticsearch.
2015-07-15 10:49:24 -07:00
shale
227cb42ba7 [Search] Comments 2015-07-15 10:24:43 -07:00
shale
3420eb69d3 [Search] Manual max results option
Manual search now takes a max number of
results option, just like the elasticsearch
version.
2015-07-15 10:17:59 -07:00
shale
6b3088f241 [Search] Manual search works
Manual search which does not use elasticsearch
implemented. It matches based on if the name
contains the search term as a substring.
2015-07-15 10:13:14 -07:00
shale
fdcc6432f1 [Search] Reduced term processing
Term processing may be unnecissary. Now it
is limited to removed spcaes from the front
and end.
2015-07-15 09:25:10 -07:00
shale
f8e028a5d1 [Search] Outlined new function
Started a new search function which manually
indexes all of the items in the tree. Still
not fully functional.
2015-07-14 17:06:55 -07:00
Victor Woeltjen
ea19bde1e7 [Telemetry] Provide empty series
Provide an empty series when a historical telemetry request
does not return anything for a given telemetry point.
Addresses WTD-1426.
2015-07-14 15:51:13 -07:00
shale
5e6f1214fb [Search] Live search
As the user types, search happens with each
new keypress, so the user does not need to
press enter. (But can press enter as well.)
2015-07-14 15:24:51 -07:00
shale
0371e2e314 [Search] Made maxResults bigger
Made it so that the default maximum
number of results is a larger number.
2015-07-14 14:26:45 -07:00
shale
aa091a9d26 [Browse] Update tests
Removed reference to destroy() in the
context menu action test. #33, #47.
2015-07-14 13:53:00 -07:00
shale
1455e5d8b5 [Browse] Removed destroy functions
Removed destroy functions from menu arrow
controller and contetxt menu action as
suggested. #33, #47.
2015-07-14 13:25:25 -07:00
shale
d1b55bd43e Merge branch 'master' of https://github.com/nasa/openmctweb into open33 2015-07-14 13:20:37 -07:00
shale
dcb5af87a7 [Search] Moved result processing
Moved result processing to its own function.
2015-07-14 13:09:06 -07:00
shale
35d038e826 [Search] Processing as separate function
Moved the search term processing to be its
own separate function.
2015-07-14 12:55:00 -07:00
shale
27c7410318 [Search] Moved hard coding
Moved where the search type is
prepended to the search term, to
allow future changes to it.
2015-07-14 12:39:00 -07:00
shale
7c627fae8f [Search] More search options
If the user searches with quotes (" or ') around
the search term, then the term processor will
not put wildcards around the search term.
2015-07-14 12:32:56 -07:00
Victor Woeltjen
a2fd9357d8 Merge pull request #48 from slhale/open46
[Edit] No more useless tooltips
2015-07-14 12:00:10 -07:00
shale
bf0e6692f5 [Search] Comments
Added comments to better explain how
input processing works.
2015-07-14 11:41:23 -07:00
shale
1d0d2302d8 [Search] Moved functionality into QueryService
Moved the actual searching implementation
into the query service. The search view
controller now just calls the query service.
2015-07-14 11:31:53 -07:00
shale
1a8fd38430 [Search] Max results
Changed the default number of results to be
a max of 25, and added a parameter to allow
the user to set this. (May be used in an
advaned search later?) Because folders are
filtered out, the number displayed is not
necissarily exact.
2015-07-14 10:56:52 -07:00
shale
503811f69c [Search] Search behaves as expected
Seaching any substring of a domain
object title now will give the domian
object as a search result. Still not
case sensitive. Empty string will
return all results. Special characters
do not search correctly. Still has
result number cap.
2015-07-14 10:51:03 -07:00
shale
5892594668 [Search] More robust search
Seach now searches using terms, which
are the domain objects' names split
at the spaces. Still does not work with
any substring, must be space separated.
Not case sensitive.
2015-07-14 10:37:57 -07:00
shale
b9f8f6e33d [Search] Code style 2015-07-14 10:02:27 -07:00
shale
457193657f [Search] Added input ID parameter
Added a parameter to the controller's search
function so that the html side can clearly
see/choose which input ID is being used as
the search input.
2015-07-14 09:59:48 -07:00
shale
c92d15ba42 [Search] Cleanup
Added and removed some comments, for clarity
2015-07-14 09:55:26 -07:00
shale
d7dd53c2da [Search] Checks for folders
Search now (again) checks to not add
folders to the results list. This later
should be made into a policy.
2015-07-14 09:45:31 -07:00
shale
b35fddefc0 [Search] Removed getObjectByID
Was no longer necissary with the current
method of search() getting objects.
2015-07-14 09:38:44 -07:00
shale
07e08c283a [Search] Partway works
The search function now returns actual
objects are results. They may not be the
correct results though.
2015-07-14 09:36:58 -07:00
shale
89d0ea6506 [Search] Fixed uninitialized array bug 2015-07-14 09:17:14 -07:00
shale
75ce5cd0e9 [Search] Changed variable names
Because of the async funtion, changed
variable names in serach2 to make more clear.
2015-07-13 17:05:23 -07:00
shale
b994b2a862 [Search] Style 2015-07-13 16:57:27 -07:00
shale
3cb0b41b22 [Search] Poking around EasticSearch
Sucessfully queries elasticsearch, but displaying the
results poses problems because of asych things.
2015-07-13 16:53:48 -07:00
shale
5980575918 [Search] Fixed results display problem
Fixed problem with search results not
properly being displayed in the search
view. (Checked that things were defined
before calling them.)
2015-07-13 11:14:02 -07:00
shale
409d12aa75 [Search] Created QueryService
Created a query service which handles the
creation of the searchable list of items.
This has partially broken the search view.
2015-07-13 10:34:06 -07:00
shale
2432e9c2aa [Search] Using ElasticSearch 2015-07-13 10:13:46 -07:00
shale
03c0678cbe [Search] Syle modifications
Changed 'i += 1' in for loops to 'i++'
2015-07-10 16:54:42 -07:00
shale
04257aedae [Search] Gets user input
Now sucessfully gets user input for the
search term.
2015-07-10 16:52:00 -07:00
shale
33b30f7583 [Search] Removed unnecissary variable
Removed $scope.items, because it was unnecissary.
2015-07-10 15:16:50 -07:00
shale
8eda495aa7 [Search] Results without folders
Folders are now no longer included in
the results list.
2015-07-10 15:06:19 -07:00
shale
a337e04fae [Search] Removed unnecessary file
Removed search-item.html, as it was the same as
grid-item.html. Now search.html uses grid-item.html.
2015-07-10 14:51:18 -07:00
shale
2e7f23a766 [Search] Results list displayed
After searching, a results list is displayed.
The list is composed of grid-items.
2015-07-10 14:48:15 -07:00
shale
6d1cb85a07 [Search] Not case sensitive
Search is no longer case sensitive.
2015-07-10 14:20:04 -07:00
shale
b5756d2b99 [Search] Items list updating
The search results now updates the items
list when called to make sure that it gets
all of the recently added items.
2015-07-10 12:53:12 -07:00
shale
efba0f0236 [Search] Search results by name
doSearch() does search by getting each
object's name. Still buggy.
2015-07-10 12:44:07 -07:00
shale
4e39c4f900 [Search] Finds root folder
The search controller will now search from
the root folder (My Items) even when the view
is initiated from a folder inside of the tree.
2015-07-10 10:32:58 -07:00
shale
e339ee1dd1 [Search] Asynchronous recursion
The list creation now sucessfully goes 1 level
deep into the tree for objects. Still needs
more work to delve into subfolders.
2015-07-09 14:40:52 -07:00
shale
94b306e129 [Search] Listify filetree
SearchController now attempts to convert the filetree
into a list format. Still needs to be modified to be
asynchronous.
2015-07-09 11:16:55 -07:00
shale
32eaf3893a [Search] Display search items
The search view now very rudimentarily displays
some 'search-item's.
2015-07-08 16:20:12 -07:00
shale
845b9a2faa [Search] Fixed comments 2015-07-08 15:34:09 -07:00
shale
5870248617 [Search] Search framework
Created a basic framework for a search
view. It consists of a search bar and
a results list.
2015-07-08 15:32:20 -07:00
Sarah Hale
9e6d84a1d5 [Edit] No more tooltips
Changed the attribute of 'title' on mct-container
to 'label'. This made the tooltips in Edit mode
dissapear. #46.
2015-07-07 11:14:45 -07:00
Sarah Hale
b2a23ee968 [Browse] Tests completed
Completed the menu arrow controller test. All
tests are now completed. #33.
2015-07-07 09:28:01 -07:00
Sarah Hale
e3a96eff8d [Browse] Fixed clicking on menu
Previously any click on the context menu would
close the context menu rather than doing the
appropriate action. This is now fixed. The menu
only closes when a click happens not on the
menu. #33.
2015-07-02 15:34:11 -07:00
Sarah Hale
2b67ae42bf [Browse] Gesture and action tests
The menu gesture and the menu action tests
are completed. #33.
2015-07-02 14:00:54 -07:00
Sarah Hale
db920a7b5c [Browse] Starting tests
Created new test files for the additions. #33.
2015-07-02 12:50:48 -07:00
Sarah Hale
a582375e61 [Browse] Style
All modified code follows style guides. #33.
2015-07-02 12:38:32 -07:00
Sarah Hale
2524c75505 [Browse] Menu arrow works
The menu arrow now displays a context menu
when clicked. #33.
2015-07-02 12:36:35 -07:00
Sarah Hale
c08f972ab4 [Browse] Menu action called correctly
Both the menu gesture and the menu arrow now
correctly call the menu action. #33.
2015-07-02 11:57:03 -07:00
Sarah Hale
809a6e457c Merge branch 'master' of https://github.com/nasa/openmctweb into open33 2015-07-02 11:33:07 -07:00
Sarah Hale
30d8c1647c [Browse] Right click works
Right clicking for a context menu now
works again. #33.
2015-07-02 11:30:45 -07:00
Sarah Hale
861b4781fe Merge branch 'open33' of https://github.com/slhale/openmctweb into open33 2015-07-02 10:59:04 -07:00
Sarah Hale
4e6301edb4 [Browse] Fixed multiple clicks
Fixed having multiple calls to ContextMenuGesture. #33.
2015-07-02 10:58:19 -07:00
Sarah Hale
b965c48ff2 [Browse] Fixed multiple clicks
Fixed having multiple calls to ContextMenuGesture. #33.
2015-07-02 10:54:43 -07:00
Sarah Hale
3edd967e27 [Browse] Changed action key
Changed the key for the context menu action from
'contextMenu' to 'menu'. #33.
2015-07-02 10:30:45 -07:00
Sarah Hale
bb80b2175c [Browse] Gesture calling action
The context menu gesture (attempts) to call the
context menu action. The menu arrow still fails
to call. #33.
2015-07-02 09:36:19 -07:00
Sarah Hale
e9989ae00d [Browse] Some progress
Still doesn't work.
2015-07-01 14:32:49 -07:00
Victor Woeltjen
4c77dd6a69 Merge pull request #42 from nasa/reload-bundles-on-pageload
[Development] Reload bundle file with each request
2015-07-01 13:19:21 -07:00
Victor Woeltjen
347da6c5c2 [Build] Bump version number
Bump version number and restore snapshot status. WTD-823
2015-07-01 13:13:14 -07:00
Victor Woeltjen
daf780a2b4 [Build] Bump version number
Bump version number to close out Thebe, WTD-823.
2015-07-01 12:54:36 -07:00
Charles Hacskaylo
fd98bdae4c [Frontend] Added $colorIconLink in _constants
WTD-1404
2015-07-01 10:07:47 -07:00
Charles Hacskaylo
793d39b969 [Frontend] CSS and font updates ONLY from open1423
WTD-1404
CSS has error at this point due to missing $colorIconLink in _constants.scss;
(cherry picked from commit 2a032bf)
2015-07-01 10:04:45 -07:00
Sarah Hale
9ad1c25d53 [Browse] Splitting up Menu Gesture
Splitting up the context menu gesture's functionality into
separate context menu gesture and context menu actions.
The gesture watches for right-clicks, while the action
displays the menu. #33.
2015-06-30 16:17:00 -07:00
Charles Hacskaylo
6a8cc6d9da [Frontend] Fixed line-height in .btn
WTD-1404
2015-06-30 16:07:55 -07:00
Charles Hacskaylo
9f38914faa [Frontend] Fixed styles that were breaking Create menu
WTD-1404
2015-06-30 16:01:53 -07:00
Charles Hacskaylo
f03a9bcc08 [Frontend] Merge mods for autoflow col width button
WTD-1404
WTD-1411
2015-06-30 15:51:22 -07:00
Charles Hacskaylo
2054dd8497 [Frontend] Removed pulse effect from pause-play button
WTD-1404
WTD-1412
(cherry picked from commit 1b9521a)
2015-06-30 15:47:15 -07:00
larkin
5c3ccb9ee0 [Development] Reload bundle file with each request
Reload the bundle file from disk when requested, re-applying any
includes or excludes that were specified on the command line.

Allows a developer to make changes to bundles.json without having to
restart the server for them to take effect.
2015-06-30 15:24:52 -07:00
Sarah Hale
4840345524 [Browse] Stopped multiple broadcasts
Stopped the menu arrow from making multiple
broadcasts of contextmenu. #33.
2015-06-30 15:22:10 -07:00
Charles Hacskaylo
9b26a896d3 [Frontend] Fixes for dropdown menu click issues
WTD-1404
WTD-1379
Context menu and view switcher menu fixed;
Removed <a> with <li> and put ng-click on <li>
2015-06-30 14:12:24 -07:00
Charles Hacskaylo
06cf199872 [Frontend] Styling for context-available arrow
WTD-1404
WTD-1422
2015-06-30 13:35:21 -07:00
Sarah Hale
917d98bd3e [Browse] Created Menu Arrow
Created a menu-arrow respresentation. #33.
2015-06-30 13:33:40 -07:00
Sarah Hale
7b4ef142f5 [Browse] Fixed tree nodes
Realized that this refers to a previously hidden arrow
at the main title at the top of the page. Reverted the
changes done to the tree nodes. #33.
2015-06-30 13:32:25 -07:00
Charles Hacskaylo
344aa8acc8 [Frontend] Adding initialization CSS defs for new mct-split-pane
WTD-1404
WTD-1399
2015-06-30 13:26:15 -07:00
Charles Hacskaylo
9d25e3081f [Frontend] Edit mode refactored to use new mct-split-pane
WTD-1404
WTD-1399
2015-06-30 13:23:56 -07:00
Sarah Hale
57eefd7316 [Browse] Context menu gesture called
The context menu gesture is called when the user clicks
the arrow next to the title of a domain object. This does
not yet display the context menu. It also does not yet
distinguish between edit and browse mode. #33.
2015-06-30 11:18:56 -07:00
Charles Hacskaylo
c24a459f66 [Frontend] Plot legend minor cleanups
WTD-1404
WTD-1386
2015-06-30 10:38:10 -07:00
Charles Hacskaylo
abef44f37d [Frontend] Moved browse mode splitter settings to CSS file
WTD-1404
WTD-1399
2015-06-30 10:37:19 -07:00
Charles Hacskaylo
af2ca49b23 [Frontend] Added top right resize corner
WTD-1404
WTD-1376
2015-06-30 09:27:56 -07:00
Charles Hacskaylo
8ee28c3918 [Frontend] Removed z-index on hover
WTD-1404
WTD-1383
2015-06-30 09:00:06 -07:00
Charles Hacskaylo
29b91193fb [Frontend] New ? icon in symbols font
WTD-1404
WTD-1402
2015-06-30 08:50:06 -07:00
Victor Woeltjen
5f80fcabc6 [Imagery] Clear background image
Clear background image on change, WTD-1407.
2015-06-29 18:49:36 -07:00
Victor Woeltjen
397a545482 [Plot] Expand range to give margin for points
Expand range to give some margin for points near the edge,
WTD-1406.
2015-06-29 18:08:03 -07:00
Victor Woeltjen
fa8095d5bc Merge branch 'open-master' into open1317limits2
WTD-1405

Conflicts:
	platform/features/layout/res/templates/elements/telemetry.html
2015-06-29 17:30:33 -07:00
Victor Woeltjen
1c4cca3f91 Merge branch 'open1392b' into open-master 2015-06-29 16:30:48 -07:00
Victor Woeltjen
ef77ca91e7 Merge branch 'open1363' into open-master 2015-06-29 16:27:10 -07:00
Victor Woeltjen
970698c77b Merge remote-tracking branch 'nasa/open1392' into open1392b
Conflicts:
	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
2015-06-29 16:09:01 -07:00
Victor Woeltjen
0b4aa730f4 Merge pull request #30 from slhale/open26
[Events] Create tests for real time version
2015-06-29 15:42:33 -07:00
Victor Woeltjen
87f982b03e Merge remote-tracking branch 'nasa/open-master' into open-master 2015-06-29 15:10:02 -07:00
Victor Woeltjen
29283e4fb5 Merge branch 'open1233' into open-master 2015-06-29 15:09:40 -07:00
larkin
cc64412d78 Merge remote-tracking branch 'origin/open1344' into open-1348 2015-06-29 14:58:27 -07:00
larkin
52cf918d08 Merge remote-tracking branch 'origin/open1317' into open-1346 2015-06-29 14:44:24 -07:00
Sarah Hale
2ab3932ce1 Merge branch 'master' of https://github.com/nasa/openmctweb into open26 2015-06-29 14:43:19 -07:00
Sarah Hale
a8fdbdc98b [Events] Changed bundles.json
Changed bundles.json so that rtevents are not
included by default. #26.
2015-06-29 14:42:54 -07:00
Charles Hacskaylo
a7c90f2476 [Frontend] platform-specific changes to CSS, fonts and markup
WTD-1392
WTD-1360
WTD-1394
New minus symbol added to font;
Updated folder symbols art;
CSS tweaked for reset button (WTD-1394) and direction sign;
Font project file updated;
(cherry picked from commit f6c7d8e)
2015-06-29 14:39:46 -07:00
Sarah Hale
f816b5018a [Events] Style
Removed unused variables. #26.
2015-06-29 13:15:56 -07:00
Victor Woeltjen
ebbac233aa Merge branch 'open1373' into open-master 2015-06-29 13:15:43 -07:00
Sarah Hale
b91b197f5b [Events] Comments
Removed todo comment. #26.
2015-06-29 13:14:51 -07:00
Sarah Hale
14694c675b [Events] All tests work
All of the tests for the RT Events are working. #26.
2015-06-29 13:13:05 -07:00
Sarah Hale
56c3e72d32 Merge branch 'master' of https://github.com/nasa/openmctweb into open26 2015-06-29 13:10:46 -07:00
Sarah Hale
6616dedf63 [Events] Controller test correction
Test for the RT Event List controller now
actually works. #26.
2015-06-29 13:09:15 -07:00
larkin
38ad8058e8 Merge remote-tracking branch 'origin/open1223' into open-1338
Resolve merge conflicts due to whitespace changes.
2015-06-29 12:08:16 -07:00
Victor Woeltjen
66f8ee7194 [Common UI] Fix min/max bounds of mct-split-pane
WTD-1363. Use correct dimension (width or height)
when determining maximum splitter position.
2015-06-29 11:54:40 -07:00
larkin
84345caf7d [Style] Convert tabs to spaces 2015-06-29 11:51:28 -07:00
Victor Woeltjen
b524dc451f [Common UI] Remove unused function
Remove obsolete function from mct-split-pane, WTD-1363
2015-06-29 11:27:48 -07:00
Charles Hacskaylo
c262fe814c [Frontend] Added pointer-events: none
WTD-1363?
2015-06-29 11:08:28 -07:00
Sarah Hale
4c6b3c7a13 [Events] Policy test correction
The view policy test for real time Messages
actually now works. #26.
2015-06-29 09:56:59 -07:00
Sarah Hale
d120c8b139 Merge branch 'master' of https://github.com/nasa/openmctweb into open26 2015-06-29 09:10:23 -07:00
Victor Woeltjen
762f4d59fc [Layout] Disallow folders
Disallow layouts in folders, WTD-1373.
2015-06-27 12:43:32 -07:00
Victor Woeltjen
12b34b5d58 Merge pull request #27 from shivamndave/open25
Addresses #25
2015-06-27 12:26:15 -07:00
Victor Woeltjen
a752a21bf8 Merge branch 'open-master' into open1388 2015-06-27 12:17:45 -07:00
Victor Woeltjen
8c5b497377 [Common UI] Tweak mct-split-pane
Tweak mct-split-pane for use in timeline; particularly,
improve synchronization between views. WTD-1363.
2015-06-27 11:59:18 -07:00
Victor Woeltjen
a0d5a1a196 [Common UI] Get split pane width from elements
WTD-1363.
2015-06-27 10:46:42 -07:00
Victor Woeltjen
c79b018c84 [Common UI] Remove obsolete checks
Remove obsolete minimum/maximum checks, WTD-1363.
2015-06-27 10:40:05 -07:00
Victor Woeltjen
a1eb15db77 [Common UI] Change min/max width handling in splitter
In split pane, obey the min-width and max-width style properties
of first element within the pane. WTD-1363.
2015-06-27 10:35:49 -07:00
Charles Hacskaylo
8841f25186 [Frontend] Create menu style normalized
WTD-1392
WTD-1367
WTD-1391
Some significant reorging in _menus.scss and _constants;
Create menu normalized with context menu styles;
Bottom bar of overlay overflow set to visible to prevent button clipping;
2015-06-26 18:38:33 -07:00
Charles Hacskaylo
e3cb9dae5a [Frontend] Bottom bar restyled
WTD-1392
WTD-1362
Fixed font size in botttom bar;
Added font-smoothing to global.scss;
Bottom bar design restyled;
2015-06-26 17:12:24 -07:00
Victor Woeltjen
72c812cdaa [Common UI] Enforce split pane min/max
WTD-1363.
2015-06-26 16:30:39 -07:00
Victor Woeltjen
39372ea9ca [Common UI] Use mct-split-pane in Browse
WTD-1363.
2015-06-26 16:21:20 -07:00
Victor Woeltjen
0ee76421e0 [Common UI] Add mct-splitter
WTD-1363.
2015-06-26 15:59:16 -07:00
Charles Hacskaylo
83be455b0b [Frontend] Added user-select: none to .btn, .l-btn class
WTD-1392
WTD-1074
2015-06-26 15:52:07 -07:00
Charles Hacskaylo
50bf7b7b32 [Frontend] Removed crosshair cursor from image class
WTD-1392
WTD-1371
2015-06-26 15:38:38 -07:00
Charles Hacskaylo
0fd1fb709b [Config] Fix for priority of New Tab button
WTD-1392
WTD-1359
Set "Open in new tab" button to have priority "preferred";
Set fullscreen mode button to priority "default";
Tweaked full screen button tooltip text;
2015-06-26 15:36:55 -07:00
Victor Woeltjen
243c832c25 [Common UI] Add mct-split-pane
Add mct-split-pane directive, to simplify adding splitters.
WTD-1363.
2015-06-26 15:32:37 -07:00
larkin
e582092844 [Comments] Add missing space 2015-06-26 15:23:22 -07:00
Sarah Hale
4e03d7b29b [Events] RT Messages policy test
The view policy test for real time Messages
now works. #26.
2015-06-26 15:17:17 -07:00
larkin
d729cfcd3e Merge remote-tracking branch 'origin/open1329' into open1343 2015-06-26 15:13:21 -07:00
larkin
f9782f1f45 Merge remote-tracking branch 'origin/open1273' into open-1340 2015-06-26 15:03:19 -07:00
Sarah Hale
41e75d7494 [Events] EventListController test
Test for the Event List controller now works. #26.
2015-06-26 14:59:04 -07:00
Sarah Hale
95f9d783d3 [Events] Column tests working
Tests for the domain and range columns now work
for the real time event list. #26.
2015-06-26 14:23:41 -07:00
Victor Woeltjen
f8f2019dad Merge remote-tracking branch 'nasa/open1322' into open1388 2015-06-26 13:25:12 -07:00
Shivam Dave
d42abfef98 [Addressability] Comments
Added comments to the slight change in Browse
Controller and BrowseObjectController. WTD 25.
2015-06-26 12:58:16 -07:00
Shivam Dave
bd57064ca3 Merge remote-tracking branch 'upstream/master' into open25 2015-06-26 12:52:30 -07:00
Shivam Dave
2e716bdbe3 [Addressability} Unit Test
Completed unit tests to accomodate
for url path check prior to setting
the current . WTD 23.
2015-06-26 12:51:25 -07:00
Victor Woeltjen
2161707954 Merge pull request #24 from shivamndave/open23
Addresses #23
2015-06-26 12:41:43 -07:00
Victor Woeltjen
286ac5628b [Drag-Drop] Check for default prevented correctly
Check for defaultPrevented property instead of trying
to check nonexistent method isDefaultPrevented(); for
WTD-1354 in the context of WTD-1233.
2015-06-26 11:53:45 -07:00
Shivam Dave
3de4473159 [Addressability] Re-Edit Bug
Fixed re-edit but by implementing
what Victor said in issue #25. Adding
check on /browse/ part of url and then
changing route works WTD 23.
2015-06-26 11:52:03 -07:00
Victor Woeltjen
f681d07643 Merge branch 'open-master' into open1233 2015-06-26 11:50:48 -07:00
Shivam Dave
cd70ed6f94 Merge remote-tracking branch 'upstream/master' into open23 2015-06-26 11:44:11 -07:00
Victor Woeltjen
c655b16f9e Merge pull request #22 from slhale/open18
Open18
2015-06-26 11:44:04 -07:00
Charles Hacskaylo
fce327a398 [Dev/Frontend] New symbol added to symbols font
WTD-1322
Platform-only commit;
(cherry picked from warp1322 commit 7254013)
2015-06-25 15:17:08 -07:00
Sarah Hale
750d3f473e [Events] Starting tests
Starting to write tests for the real
time messages view. #26.
2015-06-25 15:04:53 -07:00
Shivam Dave
2a347f1596 [Windowing] urlService
Removed the urlService from the edit
and browse bundles. Added the urlService
to the general bundle. WTD 23.
2015-06-25 14:53:52 -07:00
Sarah Hale
bf8b0bae03 Merge branch 'master' of https://github.com/nasa/openmctweb into open18 2015-06-25 14:51:18 -07:00
Sarah Hale
42361aff25 Merge branch 'master' of https://github.com/nasa/openmctweb into open26 2015-06-25 14:50:32 -07:00
Shivam Dave
193df4fde3 [Windowing] Excess function
Removed extra function from
urlService. WTD 23.
2015-06-25 14:37:01 -07:00
Sarah Hale
c98a381a42 [Events] Created RT Messages
Created a real-time version of the Messages view called
RT Messages.
Additionally, fixed the MessagesViewPolicy test. #18.
2015-06-25 14:36:14 -07:00
Shivam Dave
3d0e0af7f2 [Windowing] Remove variable
Excess variable used for CancelAction's
ReturnToBrowse. WTD 23.
2015-06-25 14:28:38 -07:00
Shivam Dave
5ba0f9d7a1 Merge remote-tracking branch 'upstream/master' into open23 2015-06-25 14:08:46 -07:00
Shivam Dave
3a371483ab [Windowing] urlService
Added the urlService to the unit
tests for the cancel and save buttons
also removed unused services. WTD 23.
2015-06-25 14:07:02 -07:00
Shivam Dave
6d28add055 [Windowing] urlService
urlService added to the edit action
bundle.json in addition to being
implemented, however 2nd time edit
bug still occurring. Also fixed urlService
test suite. WTD 23.
2015-06-25 13:16:15 -07:00
Victor Woeltjen
510597a51a [Scrolling List] Show limits in RT scrolling list
Show limits in a real-time scrolling list view,
WTD-1317.
2015-06-25 12:56:22 -07:00
Victor Woeltjen
dddc2f976e Merge branch 'open1223' into open1317limits
Conflicts:
	platform/features/layout/res/templates/elements/telemetry.html
2015-06-25 12:48:02 -07:00
Victor Woeltjen
e17b6c5a92 Merge branch 'open-master' into open1317limits 2015-06-25 12:45:03 -07:00
larkin
270cb48db0 Merge remote-tracking branch 'origin/open1256' into open-1336 2015-06-25 12:44:23 -07:00
larkin
ffc2d98914 Merge remote-tracking branch 'origin/open1241' into open-1335 2015-06-25 12:35:19 -07:00
Victor Woeltjen
bd5ba48270 Merge remote-tracking branch 'github/master' into open-master 2015-06-25 12:05:34 -07:00
Victor Woeltjen
3df12788f9 Merge remote-tracking branch 'nasa/open1341' into open1345 2015-06-25 11:53:13 -07:00
Charles Hacskaylo
685e384858 [Dev/Frontend] PLATFORM CHANGES: use data-value instead of css class selection
WTD-1341
(cherry picked from commit 5151637 in warp1341)
telemetry.html now uses data-value instead of class;
Mods to effects.scss to add customKeyframes mixin;
Added default transition time to mixin trans-prop-nice in mixins.scss;
2015-06-25 11:46:15 -07:00
Victor Woeltjen
61fe77cc17 [Drag-Drop] Add test cases
Add test cases for avoiding redundant drop handling,
WTD-1233.
2015-06-25 11:35:18 -07:00
larkin
abaca86290 Merge remote-tracking branch 'origin/open1291' into open-1330 2015-06-25 11:30:33 -07:00
Victor Woeltjen
6f3d6ec12f [Drag-Drop] Prevent redundant drops
Mark default as prevented and check for prevention of
default when handling mctDrop events (which allow
views to follow up on drop gestures by positioning
objects within themselves) avoiding redundant drops
into embedded views. WTD-1233.
2015-06-25 11:27:58 -07:00
larkin
6c3aeb2784 [Comments] Comment matches exported name 2015-06-25 11:19:01 -07:00
larkin
a3f3f5bb27 Merge remote-tracking branch 'origin/open1170' into open-1318 2015-06-25 11:06:44 -07:00
Victor Woeltjen
482f355a08 [Fixed Controller] Stop tracking bounds
Stop tracking size of a fixed position view; no longer
necessary now that background grid is handled by CSS.
Change made in the context of WTD-1344.
2015-06-25 11:00:15 -07:00
Victor Woeltjen
9e55befb2a [Fixed Controller] Add test cases
Add test cases for updating position of elements in
a fixed position view, WTD-1344.
2015-06-25 10:58:01 -07:00
Victor Woeltjen
4279c9e4bf [Fixed Position] Remove obsolete cell styles
Remove obsolete cell style calculations; background
grid is handled by CSS now. Changed in the context of
WTD-1344.
2015-06-25 10:48:49 -07:00
Victor Woeltjen
791504584d [Fixed Position] Update positions when grid size changes
Update positions of elements in a fixed position
view when grid size changes (e.g. when switching
from one domain object to another.) WTD-1344.
2015-06-25 10:45:50 -07:00
Shivam Dave
fd6459394a [Windowing] urlService
Changed folder location of
services and therefore urlService
to general/src/ instead of being in
browse/src/. WTD 23.
2015-06-25 10:38:39 -07:00
Shivam Dave
93ba4ce715 [Windowing] Unit Test
Added Unit test adjustments for
the change in urlService (addition
of a separate function for getting
the url for a location, used by browse
controller. WTD 23.
2015-06-25 10:10:13 -07:00
Victor Woeltjen
70f5a001ee Merge remote-tracking branch 'nasa/open1341' into open1345 2015-06-25 10:06:18 -07:00
Sarah Hale
c6405c50df Merge branch 'master' of https://github.com/nasa/openmctweb into open18 2015-06-25 10:00:21 -07:00
Sarah Hale
1961ba20c0 Fixing merge
Re-added the tests.
2015-06-25 09:59:52 -07:00
Victor Woeltjen
d3ff49b90b Merge remote-tracking branch 'nasa/open1319' into open1320 2015-06-25 09:59:23 -07:00
Sarah Hale
288692f57c Fixing merge
Re-added the event list controller.
2015-06-25 09:57:43 -07:00
Sarah Hale
a993ee6126 Fixing conflicts 2015-06-25 09:48:09 -07:00
Shivam Dave
ca6f44f7b6 [Windowing] URL Fix
The URL malformation was caused by the same
function returning the view and index path for
both the newtab window and the browse controller
window. As a result, the BrowseController now only
uses a path that excludes the view and index paths,
like before the UrlService was added. Another,
separate function uses this url for the location
and includes the view and index paths for new
tabs, in order to maintain the current view. WTD 23.
2015-06-25 09:47:58 -07:00
Sarah Hale
163b210fbb [Events] Real-time telemetry version
Creating an additional event list which can handle real
time data, not historical data. #18.
2015-06-25 09:39:29 -07:00
Sarah Hale
f6298c162c [Events] Real-time telemetry version
Creating an additional event list which can handle real
time data, not historical data. #18.
2015-06-25 09:27:24 -07:00
Victor Woeltjen
25d3a4d8c2 Merge remote-tracking branch 'nasa/open1323' into open1324 2015-06-25 09:25:42 -07:00
Victor Woeltjen
9ac6abe78f Merge remote-tracking branch 'nasa/open980' into open1342 2015-06-25 09:07:27 -07:00
Victor Woeltjen
40957b1c29 [Scrolling List] Enforce row count
WTD-1317
2015-06-25 08:50:44 -07:00
Charles Hacskaylo
9f137513d9 Merge branch 'open-master' of https://trunk.arc.nasa.gov/git/wtd into open1341 2015-06-24 19:25:27 -07:00
Charles Hacskaylo
19748ba17c [Dev/Frontend] Cherry-picking platform changes from warp1341
WTD-1341
Re-rendered css file;
2015-06-24 18:56:38 -07:00
Charles Hacskaylo
52a7bd1033 [Dev/Frontend] Cherry-picking platform changes from warp1341
WTD-1341
2015-06-24 18:55:15 -07:00
Charles Hacskaylo
e357df2fe5 [Dev/Frontend] Cherry-picking platform changes from warp1341
WTD-1341
2015-06-24 18:52:52 -07:00
Victor Woeltjen
a7c09f8c79 [Scrolling List] Add realtime scrolling list
Add realtime scrolling list view, for compatibility
with realtime-only data. WTD-1317.
2015-06-24 18:10:59 -07:00
Sarah Hale
d2fe71d82b [Events] Fixed tabs
Removed tabs from EventListController and replaced
with spaces. #18.
2015-06-24 17:08:03 -07:00
Sarah Hale
203de023d2 [Events] More general view policy
The Messages view policy now will allow any object
that has a telemetry type of string to have access
to the Messages view, not just Event List
Generators. (The test for this still does not work
though.) #18.
2015-06-24 17:05:14 -07:00
Victor Woeltjen
889ca79c5e Merge pull request #21 from shivamndave/open16
Addresses #16
2015-06-24 16:30:09 -07:00
Sarah Hale
fd81c5c859 [Events] No Period
No longer asks for a period when creating a
new Event Message Generator. #18.
2015-06-24 15:19:47 -07:00
Shivam Dave
bd9010e2bc [urlService] CleanUp/Refactor
Adjusted BrowseController's useRoute
to use the urlService instead. Also
adds urlService as a depency through
bundle. Unit test also adjusted to
account for a mockUrlService and
a different value being passed into
mockLocation.path(). WTD 16.
2015-06-24 14:06:09 -07:00
Charles Hacskaylo
6a96f1d395 [Frontend] Added icomoon.io project file 2015-06-24 13:54:57 -07:00
Charles Hacskaylo
14a83e143c [Frontend] New symbols font and CSS adjustments
WTD-980
WTD-396
Minor sanding and shimming;
Updated symbols;
Create super-menu now uses key color;
Removed unused wtdsymbols-v2* font files;
2015-06-24 13:39:31 -07:00
Victor Woeltjen
befbcab892 [Telmetry] Add test cases
Add test cases for TelemetrySubscription related to listening
for mutation, to support views of domain objects which delegate
telemetry, for WTD-1329.
2015-06-24 13:25:07 -07:00
Victor Woeltjen
360c3fcf15 [Telemetry] Update specs
Update specs to reflect changes for WTD-1329.
2015-06-24 13:17:42 -07:00
Sarah Hale
10e47e6f48 [Events] Fixed comments
Fixed comments to refer to event lists
correctly. #18.
2015-06-24 13:14:19 -07:00
Shivam Dave
c827c40c03 [Windowing] used
Used  instead of window in the
NewTabAction. WTD 16.
2015-06-24 12:58:48 -07:00
Victor Woeltjen
bcfe80fbdc [Plot] Handle changes to telemetry objects
Handle changes to the set of visible telemetry objects
in a plot; addresses WTD-619, which is related to WTD-1329.
2015-06-24 12:54:49 -07:00
Shivam Dave
c606055a3b [Windowing] Format
Slight formatting change.
WTD 16.
2015-06-24 12:54:49 -07:00
Victor Woeltjen
f2df0bfdbb [Core] Expose 'topic' service
Expose 'topic' services, which supports updating telemetry
subscriptions on mutation for WTD-1329.
2015-06-24 12:53:43 -07:00
Shivam Dave
6863af9cd9 [Windowing] Comment/Formatting
Reformatted code and added comments
to the unit test. Also refined the
NewTabActionSpec unit test to be
clearer. WTD 16.
2015-06-24 12:50:21 -07:00
Shivam Dave
13eef59e4f [Windowing] Unit Test
Added mockContext to
UrlServiceSpec unit test
in order to reach the
domainObject's context
capability. WTD 16.
2015-06-24 12:31:40 -07:00
Victor Woeltjen
f98344b5f6 [Telemetry] Unsubscribe on composition change
WTD-1329.
2015-06-24 12:27:20 -07:00
Victor Woeltjen
7a531493d8 [Telemetry] Listen for mutation
Listen for mutation from telemetry subscriptions,
WTD-1329.
2015-06-24 12:24:43 -07:00
Sarah Hale
21f4433d99 Merge branch 'open18' of https://github.com/slhale/openmctweb into open18
Conflicts:
	platform/features/events/test/policies/MessagesViewPolicySpec.js
2015-06-24 12:13:29 -07:00
Victor Woeltjen
e0f672d40d [Core] Add test case for shared listener
Add test case for sharing listeners across mutation
capability instances, WTD-1329.
2015-06-24 12:12:50 -07:00
Sarah Hale
adc4a1b828 [Events] Tweaked tests
Changed some test names to be more descriptive.
Moved the policy test to another folder.
Blanket coverage now works. #18.
2015-06-24 12:11:04 -07:00
Victor Woeltjen
877461c4a4 [Core] Add dependency to mutation
Add the 'topic' dependency to the mutation capability,
WTD-1329.
2015-06-24 12:08:47 -07:00
Sarah Hale
00d1728dd3 [Events] Tweaked tests
Changed some test names to be more descriptive.
Moved the policy test to another folder.
Blanket coverage now works. #18.
2015-06-24 12:07:06 -07:00
Victor Woeltjen
1a6d92ee4e [Core] Add topic service
Add topic service to support listeners, such as the
mutation listener added for WTD-1329.
2015-06-24 12:02:40 -07:00
Charles Hacskaylo
fdfa35d1da [Frontend] New symbols font and CSS adjustments
WTD-980
WTD-396
Changed glyph for stacked plots;
Normalized button line-heights and size of required symbol;
Updated symbol art in symbols font;
Restored mistakenly removed "menu" gesture to grid-item;
2015-06-24 11:42:29 -07:00
Shivam Dave
8926d4b2fb Merge remote-tracking branch 'upstream/master' into open16 2015-06-24 11:34:33 -07:00
Shivam Dave
43cfab1031 [Windowing] Unit Test
Unit Tests for UrlService and NewTabAction
created and partially written. UrlService
returns 100% and NewTabAction returns 88%.
WTD 16.
2015-06-24 11:32:59 -07:00
Sarah Hale
ff8e6f40bb [Events] More style
Edited comments to clarify the sources of
files. #18.
2015-06-24 11:32:13 -07:00
Sarah Hale
e7ce0f2ded Merge branch 'master' of https://github.com/nasa/openmctweb into open18 2015-06-24 11:26:52 -07:00
Sarah Hale
ebfb4cd055 [Events] Removed mct-data-table test
Removed the test for MCTDataTable because it
is a directive. #18.
2015-06-24 11:20:38 -07:00
Sarah Hale
86240a337f [Events] Controller and populator tests
Created tests for EventListController and
EventListPopulator. #18.
2015-06-24 11:17:30 -07:00
Sarah Hale
54cf5a2c59 [Events] Changed where row reversal happens
Changed where in the code the row are reveresd
(wrt scrolling lists) so that the most recent
messages are on the bottom. The rows are now in
the correct order from getRows, rather then
updateRows. #18.
2015-06-24 11:16:03 -07:00
Victor Woeltjen
b30cbb18ec [Core] Add spec for 'topic' service
Add spec for a 'topic' service which will provide
the ability for messaging within a local instance
of an application. WTD-1329.
2015-06-24 10:55:34 -07:00
Sarah Hale
e7598adcee [Events] View policy test
Created a test for the MessagesViewPolicy. #18.
2015-06-24 10:40:03 -07:00
Victor Woeltjen
c668fa041a [Core] Allow listening for mutation
Allow listeners to register with a domain object's
mutation capability to detect changes to that
domain object. Allows other components to respond
to these changes without resorting to polling on
timestamp or similar. WTD-1329.
2015-06-24 10:20:49 -07:00
Sarah Hale
ba1f86da25 [Events] Restricted when view avaliable
Created a new policy to only allow the Messages view
to be avaliable for Event Message Generators. #18.
2015-06-24 10:15:09 -07:00
Victor Woeltjen
47647f4ada Merge remote-tracking branch 'nasa/open-master' into open-master 2015-06-24 10:06:10 -07:00
Victor Woeltjen
1dbd6fc868 Merge pull request #20 from nasa/open14
[Frontend] Fix to prevent infobubbles from preventing clicks
2015-06-24 10:05:16 -07:00
Sanderfer
f617a01a4d Ticket WTD-1315
Merge branch 'open-master' into open475
2015-06-24 09:56:08 -07:00
Shivam Dave
83cc0b65d5 [Windowing] Comments
Added comments to files. WTD-16.
2015-06-23 16:35:34 -07:00
Shivam Dave
61d9545414 [Windowing] UrlService
UrlService added which takes in a
mode (browse or edit), and also a
domainObject. Returns the url
path to that domainObject. WTD-16.
2015-06-23 16:11:06 -07:00
Charles Hacskaylo
db3e132799 [Frontend] New symbols font and CSS adjustments, in-progress
WTD-980
WTD-396
2015-06-23 16:07:29 -07:00
Sarah Hale
2a9aa7ee2f [Events] Beginning test setup
The files needed to write the tests are in place. #18.
2015-06-23 15:54:48 -07:00
Sarah Hale
567ccf0454 [Events] More style
Removed part of comment. #18.
2015-06-23 15:42:22 -07:00
Sarah Hale
5d2afac83b [Events] Window injected with Angular
Used  provided by angular to better follow
style guidelines, as well as for utility in testing
later. #18.
2015-06-23 15:40:12 -07:00
Shivam Dave
21462bf60d [Windowing] View Set
Sets the view to bethe current
page's view mode. WTD-16.
2015-06-23 15:39:48 -07:00
Sarah Hale
5da210d350 [Events] More style compliance
More small changes for style. #18.
2015-06-23 15:09:34 -07:00
Sarah Hale
7d3c2b7243 [Events] Style compliance
Made some small changes to keep up with
the style standards. #18.
2015-06-23 14:47:21 -07:00
Victor Woeltjen
d1dc2da4c8 [Plot] Remove unused function
Remove unused function related to enforcing fixed duration
in plots, WTD-1273.
2015-06-23 14:40:32 -07:00
Sarah Hale
581f14d117 [Events] Event telemetry generator working
Event telemetry generator now works again, giving a timestamp
and a message string. Additionally, removed excess files which
previously were used for the EventListController. #18.
2015-06-23 14:39:40 -07:00
Sarah Hale
c4006646f8 [Events] More generalized data format
Made the EventListController use domain and range types, rather
than severity, domain, and event message. This allows it to be
more generalized, which should be helpful with different data
formats later on. #18.
2015-06-23 14:21:11 -07:00
Victor Woeltjen
d6a31dcef3 [Plot] Update failing specs
Update failing specs for changes related to fixed duration
plots, WTD-1273.
2015-06-23 14:17:28 -07:00
Victor Woeltjen
e5b0af47e1 Merge branch 'open-master' into open1273
Merge latest from master branch into topic branch
for WTD-1273.
2015-06-23 14:06:42 -07:00
Victor Woeltjen
065a5a6fbf [Limits] Disable failing specs
Disable specs which are failing after changes to support
limits, WTD-1223.
2015-06-23 13:43:00 -07:00
Sarah Hale
9609987562 [Events] Scrollbar moves with data
The scroll position now moves down when a new row is added
to the data table. This means that when the scroll position
is at the bottom, it will stay there, even with new updates
adding onto the botton. #18.
2015-06-23 13:33:09 -07:00
Shivam Dave
29efb5cf3b [Windowing] Selected Object
Uses the context to get the selected object
or the navigated object. This allows contextual
menu new tab access from the tree. WTD-16.
2015-06-23 13:32:09 -07:00
Victor Woeltjen
a4ea0dd047 Merge branch 'open-master' into open1223
Merge latest from master branch into topic branch for
WTD-1223
2015-06-23 13:29:47 -07:00
Victor Woeltjen
dc4ce59dbd Merge branch 'open-master' into open1256 2015-06-23 13:14:17 -07:00
Victor Woeltjen
30e51e783e [Core] Add JSDoc
Add JSDoc to decorator which provides missing models,
WTD-1241.
2015-06-23 13:03:17 -07:00
Victor Woeltjen
14fbd64ae4 Merge branch 'open-master' into open1241
Merge latest from master branch into topic branch
for WTD-1241.
2015-06-23 13:00:27 -07:00
Sarah Hale
fdab799e5b [Events] Changed directive variables
Changed scrollDirection to ascendingScroll, which acts like
a boolean. Now there is proper communication between the
html and the directive itself. #18.
2015-06-23 12:40:50 -07:00
Sarah Hale
3337777fea [Events] Changed file structure
Changed file structure to include a separate
directives directory. #18.
2015-06-23 11:48:08 -07:00
Shivam Dave
e55cd88d38 [Windowing] View
Includes the view using the
.search().view to find
the view key and append that to the
end of the url. Prints this out using
the alert window. WTD-16.
2015-06-23 11:38:01 -07:00
Sarah Hale
a5d5fa0796 [Events] Table height detection
Created an mct-data-table directive. We are able to detect changes in
the height of the table now, which will be used to determine
any corresponding scrolling. #18.
2015-06-23 11:37:57 -07:00
Victor Woeltjen
e4db4d3802 Merge branch 'open-master' into open1291
Merge in latest from master branch into topic branch
for WTD-1291.
2015-06-23 11:33:27 -07:00
Shivam Dave
e38ad7b082 [Windowing] Path Alert
Alerts user of the current path
using an alert window, however
the path is partially shown.
It is the part of the current
path after index.html#. WTD-16.
2015-06-23 11:05:00 -07:00
Charles Hacskaylo
c35c9c43b7 [Frontend] Tweak size of spinner
WTD-1323
2015-06-22 18:47:58 -07:00
Charles Hacskaylo
cb715a9d48 [Frontend] Merge in platform CSS changes
WTD-1319
WTD-768
WTD-841
Change CSS for autoflow-tabular header;
2015-06-22 18:41:04 -07:00
Victor Woeltjen
e516d886a6 [Plot] Treat any modifier key as pan
Treat any modifier key as a pan gesture when click-dragging in
a plot; this is more resilient to cross-platform nuances.
WTD-1273.
2015-06-22 18:12:25 -07:00
Shivam Dave
d5a9019493 [Windowing] Comment Adjusted
Changed window to tab in comments in
file. WTF-16.
2015-06-22 15:54:32 -07:00
Shivam Dave
1c445e1ce3 [Windowing] New Tab Adjustment
Added NewTabAction to spec file and adjusted
it to new name. Also changed comment in
NewTabAction along with a code fix.
WTD-16.
2015-06-22 15:44:09 -07:00
Shivam Dave
c7154447e2 [Windowing] Tabbing Rename
Renamed all instances of NewWindow to be
NewTab instead. WTD-16.
2015-06-22 15:35:08 -07:00
Shivam Dave
dc4436e890 [Windowing] Unit Test Adjustment
Added comments to the NewWindowActionSpec.js
file. WTD-16.
2015-06-22 15:15:46 -07:00
Shivam Dave
02265c82d6 [Windowing] Unit Test
Completes Unit Test. Added a new file:
NewWindowActionSpec.js, which performs the
Jasmine test for NewWindowAction.js. The
test specifies a mockWindow with a mockUrl
and then adds both to a NewWindowAction.
Also suite.json contains the NewWindowActon
path. In order for NewWindowAction.jsWTD-16.
to be reached. WTD-16.
2015-06-22 15:10:55 -07:00
Shivam Dave
fd1c847e2c [Windowing] Remove Varibale
Removed the variable currentUrl because it
was not needed. WTD-16.
2015-06-22 15:06:12 -07:00
Shivam Dave
546af71263 Merge remote-tracking branch 'upstream/master' into open16 2015-06-22 14:06:40 -07:00
Shivam Dave
683a733ae1 [Windowing] SASS Edit
Adjusted the SASS file to
not hide the new window button. Also
removed the overwrite metadata function
that was used to temprarily allow us to
view the new window button. WTD-16.
2015-06-22 14:00:25 -07:00
Sarah Hale
7be7844824 [Events] Reversed viewing order
When viewing an event message generator new messages are now added to the
bottom of the display, rather than being added to the top and pushing
the other messages down by one. #18.
2015-06-22 13:40:55 -07:00
Shivam Dave
bd6dc758fa Merge remote-tracking branch 'upstream/master' into open16 2015-06-22 13:22:42 -07:00
Shivam Dave
140e3a1fb6 [Windowing] Comments
Added comments to the perform function
WTD-16.
2015-06-22 13:20:57 -07:00
Shivam Dave
6b2edc4469 [Windowing] Opens Url
Instead of displaying a dialog of
the url, the url is opened in a new
tab using the new window button.
WTD-16.
2015-06-22 13:18:00 -07:00
Shivam Dave
8d9d8d4900 [Windowing] Display URL
Alert box when pressing new tab button
displays the current url, that will be
opened in the new tab. WTD-16
2015-06-22 13:14:39 -07:00
Shivam Dave
2fbfcc1333 [Windowing] Added new window button
Currently overwrites metadata
similar to the FullScreenAction in order
to temporarily display the new window button
until the css is modified to do so. WTD-16
2015-06-22 13:12:13 -07:00
Charles Hacskaylo
273ce42c16 [Frontend] Fix to prevent infobubbles from preventing clicks
Added CSS class "bubble-container" to BUBBLE_TEMPLATE;
bubble-container utilizes CSS "pointer-events: none";
Changed INFO_HOVER_DELAY constant from 500ms to 2000ms;
2015-06-22 12:53:53 -07:00
Sarah Hale
0feb3b0462 Merge branch 'open18' of https://github.com/slhale/openmctweb into open18 2015-06-22 12:37:15 -07:00
Sanderfer
7493f76d06 Merge branch 'open-master' into open1313 2015-06-22 10:11:00 -07:00
Victor Woeltjen
7f7759f72c Merge branch 'open-master' into open1223 2015-06-20 15:36:21 -07:00
Victor Woeltjen
8199d1d9d9 [Plot] Use mct-drag from plot
Use mct-drag from plot such that we are able to handle
mouse events which leave the plot area for marquee zoom
and pan. WTD-1273.
2015-06-20 11:47:10 -07:00
Victor Woeltjen
bc7342b127 [Plot] Make plot fixed duration a global default
WTD-1273.
2015-06-20 11:30:20 -07:00
Victor Woeltjen
f3cbcf0abe [Plot] Update ticks during pan
WTD-1273.
2015-06-20 11:21:55 -07:00
Victor Woeltjen
53f712b506 [Plot] Pan with alt-key
While alt is held, treat drag gestures in a plot area
as a pan, WTD-1273.
2015-06-20 11:19:56 -07:00
Victor Woeltjen
215d3ffd72 [Plot] Tweak fixed-duration code
Tweak fixed-duration code such that data is not
lost; WTD-1273.
2015-06-20 10:39:35 -07:00
Victor Woeltjen
fbf682d5fa [Plot] Support fixed duration
Support a fixed duration for plots, WTD-1273.
2015-06-20 10:28:49 -07:00
Victor Woeltjen
5ca954deaf [Plot] Test fallback on webglcontextlost
Add test case to verify that fallback occurs when a
WebGL context is lost, WTD-475.
2015-06-19 16:14:49 -07:00
Victor Woeltjen
a82fea2166 Merge pull request #5 from nasa/open1202
[Plot] Improve plotting performance
2015-06-19 16:05:18 -07:00
Victor Woeltjen
6b0a77d131 Merge pull request #8 from nasa/open1149
[Addressability] Use/populate URL
2015-06-19 16:05:10 -07:00
Victor Woeltjen
149ac44e8c Merge pull request #13 from nasa/open12
[Execution] Add worker service
2015-06-19 16:05:02 -07:00
Victor Woeltjen
b6fdf4d6ab [Plot] Fall back from WebGL on context loss
When a WebGL context is loss, fall back to displaying
plots using regular canvas 2d API. WTD-475.
2015-06-19 16:02:52 -07:00
Victor Woeltjen
dac44623ee [Plot] Begin adding WebGL fallback
Begin adding code to handle case where WebGL context
is lost, WTD-475.
2015-06-19 15:47:22 -07:00
Victor Woeltjen
737cf2b75b Merge pull request #7 from nasa/open1272
[Forms] Change format for date-time
2015-06-19 15:47:10 -07:00
Charles Hacskaylo
ae7dae011b [Dev/Frontend] New example event generator and event view
WTD-1304
github open18
New example generator;
New temporary view: features/events;
Updated scss and css;
2015-06-19 15:29:06 -07:00
Victor Woeltjen
4bc41e8aab Merge remote-tracking branch 'nasa/open1223' into open1223
Conflicts:
	platform/features/plot/res/templates/plot.html
2015-06-19 14:50:00 -07:00
Victor Woeltjen
71ca9803c2 [Core] Obey priority for capabilities
Obey priority for capabilities to allow this to be overridden
for other domain object types, WTD-1223.
2015-06-19 14:40:59 -07:00
Shivam Dave
6a35476872 Merge branch 'open1149' of https://github.com/nasa/openmctweb into open1149 2015-06-19 13:55:23 -07:00
Victor Woeltjen
3b62add011 Merge branch 'open-master' into open1223
Conflicts:
	platform/features/plot/res/templates/plot.html
2015-06-19 13:34:21 -07:00
Victor Woeltjen
67d1201214 Merge branch 'open-master' into open1272
Merge in latest from master branch into topic branch
for WTD-1272

Conflicts:
	platform/forms/test/controllers/DateTimeControllerSpec.js
2015-06-19 13:16:33 -07:00
Victor Woeltjen
b879de1a33 Merge branch 'open-master' into open1182 2015-06-19 12:22:05 -07:00
Victor Woeltjen
dbd7a65a7a Merge remote-tracking branch 'nasa/open1295' into open-master 2015-06-18 18:33:09 -07:00
Victor Woeltjen
8d80a2aee1 Merge branch 'open-master' into open1182 2015-06-18 18:23:19 -07:00
Victor Woeltjen
00229f01b1 [Plot] Test plot view policy
Test plot view policy, added in conjunction with image
telemetry; WTD-1170.
2015-06-18 17:11:11 -07:00
Victor Woeltjen
85e3101d08 [Plot] Expose plot view policy
Expose policy which suppresses image telemetry (and other
non-numeric telemetry) in plots. WTD-1170.
2015-06-18 17:00:20 -07:00
Victor Woeltjen
983a9a2f07 Merge remote-tracking branch 'nasa/open1170' into open1170 2015-06-18 16:58:44 -07:00
Victor Woeltjen
66b143c9d7 [Plot] Suppress plot for non-numeric telemetry
Avoids plot views becoming erroneously available for image
telemetry, WTD-1170.
2015-06-18 16:58:29 -07:00
Victor Woeltjen
51bd205502 [Imagery] Be flexible about format
Accept either image or imageUrl as format for image telemetry,
WTD-1170.
2015-06-18 16:53:52 -07:00
Victor Woeltjen
3512018e90 Merge pull request #15 from shivamndave/issue11
Addresses #11
2015-06-18 15:58:24 -07:00
Shivam Dave
0292f046da [Browse Composition] Removed Window Alert
Removed commented out code that
alerts the user if they cannot
perform a drag and drop. Inserted a
comment marking where an alert can be placed
Issue 11.
2015-06-18 15:23:51 -07:00
Charles Hacskaylo
0201a4bcf8 [Frontend] Fix to prevent infobubbles from preventing clicks
GitHub-12
Added CSS class "bubble-container" to BUBBLE_TEMPLATE;
bubble-container utilizes CSS "pointer-events: none";
Changed INFO_HOVER_DELAY constant from 500ms to 2000ms;
2015-06-18 15:18:42 -07:00
Victor Woeltjen
056c087953 [Representation] Add missing argument to spec
Add missing argument to spec for mct-representation, WTD-1256.
2015-06-18 15:09:17 -07:00
Shivam Dave
dab6d96688 [Browse composition] Not Alerting User
In this case the user is not alerted. This
is to test the maven build. Issue 11.
2015-06-18 15:08:13 -07:00
Sarah Hale
1f3c1da8c7 [Browse composition] Alert user
When the user attempts a disallowed drag and drop composition,
the browser will alert them to this. Issue 11.
2015-06-18 14:53:35 -07:00
Victor Woeltjen
275ca01692 [Representation] Trust template URLs
Trust resource URLs to skip SCE-checking (which profiling
flags as a performance problem) for mct-include and
mct-representation; these URLs are pulled from bundles and
not user-entered, so should be trusted. WTD-1256.
2015-06-18 14:43:14 -07:00
Sarah Hale
451842fb82 [Browse composition] Cleanup
Removed commented out code in tests. Issue 11.
2015-06-18 14:29:46 -07:00
Sarah Hale
9e52ddaee7 [Browse composition] Added and modified tests
Added additional tests to account for the different cases of
edit mode and folder vs non folder. Issue 11.
2015-06-18 14:26:54 -07:00
Victor Woeltjen
eb2cddc063 [Workers] Satisfy JSLint
Modify example worker script to satisfy JSLint. #12.
2015-06-18 11:30:47 -07:00
Victor Woeltjen
640a399278 [Workers] Add example worker
Add an example worker which inefficiently calculates
fibonacci numbers outside of the UI thread, for #12.
2015-06-18 11:21:00 -07:00
Victor Woeltjen
7d911a3fe0 [Workers] Add worker service
Add service for running WebWorkers, #12.
2015-06-18 10:59:10 -07:00
Shivam Dave
a8488a92d9 [Gestures] Browse/Edit Composition
Disallows drag and drop during browse mode,
unless dragging and dropping into a folder
view. Allows drag and drop into a layout view
only in edit mode also. Can be unit tested now.
WTD-11.
2015-06-18 10:54:51 -07:00
Charles Hacskaylo
ab81c9070e [Frontend] Remove static-markup file
WTD-1170
2015-06-18 10:09:17 -07:00
Charles Hacskaylo
69f4b4975e Merge branch 'open-master' into open1170b
Conflicts:
	platform/commonUI/general/res/sass/plots.scss
	platform/commonUI/inspect/src/InfoConstants.js
	platform/features/imagery/src/policies/ImageryViewPolicy.js
	platform/features/static-markup/res/markup.html
2015-06-18 09:55:26 -07:00
Charles Hacskaylo
0949ada734 [Frontend] Manual update of platform css, fonts and sass only from open-master
WTD-1170
2015-06-18 09:46:54 -07:00
Victor Woeltjen
897433f717 [Imagery] Test ImageryController
WTD-1170.
2015-06-17 21:15:17 -07:00
Victor Woeltjen
ba88281bd0 [Imagery] Test mct-background-image
WTD-1170.
2015-06-17 20:51:41 -07:00
Victor Woeltjen
c41db4f22b [Imagery] Test policy
Test policy which restricts the Imagery view to domain objects which
have image telemetry. WTD-1170.
2015-06-17 20:41:40 -07:00
Victor Woeltjen
8aa25a929a [Imagery] Add skeleton specs
Add skeleton specs for the Imagery view of telemetry,
WTD-1170.
2015-06-17 20:35:17 -07:00
Victor Woeltjen
2690a8b8e2 [Imagery] Add JSDoc
Add JSDoc to classes implementing the Imagery view, WTD-1170.
2015-06-17 20:31:47 -07:00
Victor Woeltjen
12954f8fc3 [Imagery] Add open-in-new-tab button
Add button to open current telemetry image in a new tab,
WTD-1282 (in the context of WTD-1170.)
2015-06-17 20:21:53 -07:00
Victor Woeltjen
5a4a912f79 [Imagery] Only display images when loaded
Wait until image telemetry is completely loaded before
displaying it, WTD-1170.
2015-06-17 20:12:04 -07:00
Victor Woeltjen
dc85d3c191 Merge pull request #4 from nasa/open884
[Info Bubble] Add info bubble
2015-06-17 11:47:34 -07:00
Charles Hacskaylo
2677dcd10c Merge branch 'open-master' into open1295
Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
	platform/commonUI/general/res/sass/_main.scss
2015-06-17 11:00:53 -07:00
Victor Woeltjen
0ae1ba4a40 [Edit] Don't wrap non-editable objects
In Edit mode, don't bother wrapping domain objects which should
not be edited even in principle. Avoids insulating these objects
from updates which occur asynchronously, which in turn avoids
WTD-1291.
2015-06-17 10:23:16 -07:00
Victor Woeltjen
ee69eb3a01 [Addressability] Fix code style
Change code style to satisfy JSLint for changes from WTD-1149.
2015-06-16 16:10:31 -07:00
Victor Woeltjen
5849f8afe2 [Addressability] Add spec for BrowseObjectController
Add spec for BrowseObjectController, added to track current
view selection from/to query string params, WTD-1149.
2015-06-16 16:09:22 -07:00
Victor Woeltjen
c1c633db80 [Addressability] Add test cases
Add test cases to BrowseController which reflect changes for
addressability, WTD-1149.
2015-06-16 15:57:08 -07:00
Victor Woeltjen
bcb4e9c495 [Addressability] Remove excessive check
Remove unneeded check from ViewSwitcherController; not necessary
to avoid overwriting query string selection of view. WTD-1149.
2015-06-16 15:40:19 -07:00
Victor Woeltjen
699cd3bd90 [Addressability] Update spec for BrowseController
Update spec to reflect changes for BrowseController to support
addressability of domain objects, WTD-1149.
2015-06-16 15:35:40 -07:00
Victor Woeltjen
9942e24039 [Addressability] Work around reload again
Work around Angular's page refresh on URL change to avoid
unintended effects when chosen view changes (such as tree
collapse), WTD-1149.
2015-06-16 15:23:55 -07:00
Victor Woeltjen
d559dae1e2 [Addressability] Expose current view in query param
Expose the currently selected view as a query string parameter,
WTD-1149.
2015-06-16 15:09:42 -07:00
Victor Woeltjen
fec6f06849 [Addressability] Obey view query string param
Obey the query string parameter for a view, if present.
WTD-1149.
2015-06-16 14:58:03 -07:00
Victor Woeltjen
26fd56a003 [Addressability] Handle bad paths
Handle paths that cannot be completely followed, WTD-1149.
2015-06-16 14:35:15 -07:00
Victor Woeltjen
d7b79b6b69 [Addressability] Preserve nav. state on leaving Edit
Preserve navigation state when leaving Edit mode, in the context
of addressability changes. WTD-1149.
2015-06-16 14:29:22 -07:00
Charles Hacskaylo
c428df524c Merging in open1248, resolve conflicts 2015-06-16 14:07:53 -07:00
Charles Hacskaylo
4887ba0e58 Merge in open-master, resolve conflicts 2015-06-16 13:53:00 -07:00
Victor Woeltjen
3738ea16d7 [Addressability] Update route without reinstantiating
Work around normal behavior of Angular when path changes;
instead of reinstantiating controller for Browse mode
when Browse-initiated path changes occur, act as if the
route hadn't changed (so that the URL updates but the
currently-displayed state, e.g. tree expansion, is
preserved.) WTD-1149.
2015-06-16 13:44:35 -07:00
Victor Woeltjen
084d6b6859 [Addressability] Update path on navigation
Update path in browse mode when navigation state changes.
WTD-1149.
2015-06-16 13:28:19 -07:00
Victor Woeltjen
9fae2db04a [Addressability] Infer ROOT
Treat the path element for the root domain object as implicit, such
that it does not appear in the full URL. WTD-1149.
2015-06-16 13:16:55 -07:00
Victor Woeltjen
8f18d88705 [Addressability] Navigate down path from params
Traverse down the path from route parameters to initially navigate to a
domain object in Browse mode. WTD-1149.
2015-06-16 13:14:12 -07:00
Victor Woeltjen
f24db1561e [Addressability] Get IDs from URL
Add a route parameter to Browse mode which includes domain
object identifiers. WTD-1149.
2015-06-16 13:00:03 -07:00
Charles Hacskaylo
70e1a8ad9e [Frontend] Mods to layout element drag handles and editing behavior
WTD-951
layout.html:
Added classes to and removed inline styles from drag handles,
Removed edge handles, leaving corner handles in NW, SW and SE only;
Added hover classes to display corner handles while editing;
Modified z-indexing to allow view switcher to be accessed while editing;
2015-06-16 12:40:48 -07:00
Charles Hacskaylo
a984e60ca5 [Frontend] Mods to layout element editing handles
WTD-951
In-progress checkin
2015-06-16 10:48:31 -07:00
Charles Hacskaylo
d614d7ee86 [Frontend] Very minor tweaks to bring open into parity with lastest scss from ue-frontend
WTD-1292
Tweaks prior to rebuild of ue-frontend branch;
2015-06-15 17:43:52 -07:00
Victor Woeltjen
9051a7114c [Plot] Remove OOB glow
Remove glow for out-of-bounds data from plot; WTD-1255,
in the context of work in progress on WTD-1223.
2015-06-15 17:37:31 -07:00
Victor Woeltjen
f6eb9904ff Merge remote-tracking branch 'nasa/open839' into open839 2015-06-15 16:48:33 -07:00
Victor Woeltjen
d03cab21b2 Merge remote-tracking branch 'nasa/open949' into open839 2015-06-15 16:47:58 -07:00
Charles Hacskaylo
d8a66b426f [Merge] Merging open-master in; resolved conflicts 2015-06-15 16:47:23 -07:00
Charles Hacskaylo
043a2ed581 Merging in open-master 2015-06-15 16:38:20 -07:00
Victor Woeltjen
db0cd9cf3a [Clocks/Timers] Merge in latest CSS
Merge in latest CSS from WARP-specific branch, WTD-1220.
2015-06-15 16:15:26 -07:00
Charles Hacskaylo
6e7203a49f [Merge] Cherrypick 2 from warp1220
WTD-1220
2015-06-15 15:45:40 -07:00
Charles Hacskaylo
5193c62233 [Merge] Cherrypick 1 from warp1220
WTD-1220
2015-06-15 15:44:09 -07:00
Victor Woeltjen
b131e8348f [Version] Add snapshot status
Restore snapshot status to version number to begin sprint
Thebe, WTD-822.
2015-06-15 13:20:16 -07:00
Victor Woeltjen
cad64b28fd [Version] Remove snapshot status
Remove snapshot status to close out sprint Tethys,
WTD-822.
2015-06-15 13:15:33 -07:00
Victor Woeltjen
6aff6d8d2b [Forms] Update spec for date-time control
WTD-1272.
2015-06-15 13:05:37 -07:00
Victor Woeltjen
05a114cc75 [Forms] Use MM-DD in date-time control
Use month and day instead of day-of-year in date-time
control, WTD-1272.
2015-06-15 13:01:43 -07:00
Charles Hacskaylo
7c7b79e151 [Config] Changed priority from mandatory to preferred
WTD-949
2015-06-12 19:00:55 -07:00
Charles Hacskaylo
c6c4fa7182 [Fronted] Fixes for misaligned bubbles
WTD-1247
WTD-884
Changed CSS .l-infobubble-wrapper abs > relative;
Added display: block class for mct-container;
Tweaked bubble evaluation JS for 'goLeft' behavior;
Added constants for bubble max width and left/right margin;
2015-06-12 16:24:25 -07:00
Charles Hacskaylo
0b46050e04 [Fronted] Tweaks to bubbles and context menus scss
WTD-1248
WTD-884
Changed z-index of context menus and bubbles to put the menus above;
Changed text wrapping of 'value' td to no-wrap;
Changed min and max-width of .l-infobubble;
2015-06-12 15:46:31 -07:00
Charles Hacskaylo
39531a0a9f [Fronted] Minor final sanding and polishing
WTD-839
.t-view-switcher > .view-switcher;
Added CSS transition to hide/show of view-switcher;
Moved .view-switcher hide/show to _frame.scss;
Tweaked .frame:hover to raise z-index to show complete border;
2015-06-12 14:17:19 -07:00
Victor Woeltjen
0cb439df19 [Imagery] Add imagery to active bundles
WTD-1170.
2015-06-12 12:11:47 -07:00
Charles Hacskaylo
8f153d4e75 [Fronted] Significant refactoring of mixins for containers and buttons
WTD-839
Removal of 'icon-btn' class from *.html;
Cleanup of markup in switcher.html;
'name' span is now hidden when switcher is within frame;
Commented out unused css classes in _controls.scss,
Normalization of markup in object header when in main view and framed objects;
Icon sizing fixed in menus and switcher control;
Tightened up spacing in menus;
2015-06-12 11:44:09 -07:00
Charles Hacskaylo
af0c2e7827 [Fronted] Significant refactoring of mixins for containers and buttons
WTD-839
Refactoring in advance of style mods to switcher when in frame;
Cleanup of markup to remove 'icon' class from invoke-menu elements;
2015-06-12 10:00:51 -07:00
Victor Woeltjen
e70ceb12d7 [Imagery] Begin adding mct-image
Begin adding directive to preload images before displaying
them, to avoid flashing of imagery as it arrives. WTD-1170.
2015-06-11 14:12:36 -07:00
Charles Hacskaylo
0b8d5ceb86 [Fronted] Significant refactoring of btn classes
WTD-839
Refactoring in advance of style mods to switcher when in frame;
Moved btn styles from _controls.scss to _buttons.scss;
Markup cleaned up with css classing simplified;
2015-06-10 17:23:08 -07:00
Victor Woeltjen
60296b5323 [Core] Add newlines
Add newlines to scripts added to core for WTD-1202.
2015-06-10 17:05:28 -07:00
Victor Woeltjen
500d88b5a1 [Plot] Update spec
Update spec for PlotController to account for usage of the
throttle service, WTD-1202.
2015-06-10 17:02:16 -07:00
Victor Woeltjen
35b5fbefd0 [Plot] Throttle updates
Throttle plot updates to subplots; WTD-1202.
2015-06-10 16:54:01 -07:00
Victor Woeltjen
e06d11dcb2 [Core] Add throttle service
Add service for throttling function calls; specifically supports
reducing tick mark recalculation, WTD-1202.
2015-06-10 16:53:43 -07:00
Victor Woeltjen
d1a09c0180 [Telemetry] Remove linear search
Remove linear search for unused positions when queuing telemetry
updates; instead, track available positions such that insertion
is more performant at a modest cost (bound to the number of subscriptions)
of retrieval. Additionally, add implementation notes in-line.
WTD-1202.
2015-06-10 16:53:35 -07:00
Victor Woeltjen
732c0abf10 [Info Bubble] Add newlines
Add newlines to end of files added for WTD-884.
2015-06-10 16:40:22 -07:00
Charles Hacskaylo
5219105887 [Config] Modified priority to make plot the default view
WTD-949
Plot is now the default view when browsing objects,
or in-frame in Display Layouts;
2015-06-10 15:31:37 -07:00
Charles Hacskaylo
bd66c0138b [Merge] Bringing in latest ue-frontend 2015-06-10 15:20:38 -07:00
Victor Woeltjen
fd63aa30ea [Forms] Add test for date-time controller
Add test case to complete coverage of date-time controller;
done in the context of WTD-884 (albeit unrelated) to improve
code coverage.
2015-06-10 14:31:34 -07:00
Charles Hacskaylo
d7e43026cd [Merge] Merge in open-master, resolve conflicts in _constants.scss 2015-06-10 14:04:48 -07:00
Victor Woeltjen
b9ea876101 [Imagery] Allow pausing imagery
WTD-1170.
2015-06-09 16:56:47 -07:00
Charles Hacskaylo
1795dc5549 Merging in /platform specific changes from warp1220 2015-06-09 16:44:18 -07:00
Victor Woeltjen
ee542293b9 [Imagery] Display image updates
WTD-1170.
2015-06-09 16:31:51 -07:00
Victor Woeltjen
277533b4bf [Imagery] Begin adding controller
Begin adding controller for Imagery view, WTD-1170.
2015-06-09 16:07:17 -07:00
Victor Woeltjen
627fa267f4 [Imagery] Add imagery view bundle
Add a bundle which contains view for image telemetry.
Template is a placeholder; view is restricted by policy
to telemetry-providing domain objects which actually have
image telemetry. WTD-1170.
2015-06-09 15:40:42 -07:00
Victor Woeltjen
4320d9be95 [Imagery] Add example imagery
Add a telemetry source for example imagery to support development
of a view for image telemetry, WTD-1170.
2015-06-09 15:29:07 -07:00
Victor Woeltjen
bc6b3f8902 Merge branch 'open-master' into open1170 2015-06-09 11:41:44 -07:00
Victor Woeltjen
40f36541fa [Core] Add missing models
When requested models are missing, add models of an explicitly
unknown type to allow this to be expressed to the user.
WTD-1241.
2015-06-09 10:31:17 -07:00
Victor Woeltjen
de3c6e4543 [Fixed Position] Show limits in fixed position
Show limits in fixed position view, WTD-1223.
2015-06-09 10:18:28 -07:00
Victor Woeltjen
51852e1322 [Limits] Use datum for limits in scrolling list view
Utilize 'datum' API when displaying limits in a scrolling list
view, WTD-1223.
2015-06-09 10:07:00 -07:00
Charles Hacskaylo
7a93b7d77a Pulled in final sanding on bubbles.scss from open1222 2015-06-09 09:32:28 -07:00
Victor Woeltjen
781a1a4be5 [Limits] Add metadata to SWGs
Add telemetry metadata to Sine Wave Generators to support
utilizing telemetry in a 'datum' format, to match designed
API for WTD-1223.
2015-06-09 09:31:22 -07:00
Charles Hacskaylo
277b8e74b6 [Frontend] Final sanding on bubbles.scss
WTD-1222
2015-06-09 09:28:59 -07:00
Charles Hacskaylo
cec115976c Merged latest from open-master and open1222 platform/ 2015-06-08 16:00:24 -07:00
Victor Woeltjen
35b5b29d03 [Limits] Use datum for scrolling list
Use notion of a datum from scrolling list view when
evaluating limits, WTD-1223.
2015-06-08 15:34:17 -07:00
Victor Woeltjen
2a4bf7b95a [Limits] Use datum for plots
Use datum for limits in a plot, WTD-1223.
2015-06-08 15:33:41 -07:00
Victor Woeltjen
ea3be6db49 [Limits] Use datum for sinewave limits
Use forward-looking notion of a datum for sine wave
generator limits, WTD-1223.
2015-06-08 15:32:24 -07:00
Victor Woeltjen
4544167b50 [Telemetry] Provide latest telemetry datum
Provide latest telemetry as a datum to begin transitioning
toward revised telemetry API, particularly as used from limits;
WTD-1223.
2015-06-08 15:26:02 -07:00
Charles Hacskaylo
1587e66d9e [Frontend] Added local zoom/reset controls
WTD-1222
Refactored scss in plots-main slightly;
Removed unused sass/plots.scss;
2015-06-08 15:24:17 -07:00
Charles Hacskaylo
5aad1b4e30 [Frontend] Removing unused firs-order scss file 2015-06-08 15:08:43 -07:00
Charles Hacskaylo
03252aac1b [Frontend] Ported over all /platform changes from warp1222
WTD-1222
2015-06-08 13:50:54 -07:00
Charles Hacskaylo
b18159b8e1 Merging in latest from ue-frontend 2015-06-08 13:45:31 -07:00
Victor Woeltjen
4ab36bd421 [Limits] Show limits from scrolling list view
WTD-1223.
2015-06-08 11:57:05 -07:00
Charles Hacskaylo
9f90c6b8d8 [Frontend] Updated CSS; removed position: relative
WTD-884
2015-06-08 11:14:58 -07:00
Victor Woeltjen
f4adc6a889 Merge branch 'open-master' into open1223
Merge in latest from master branch into topic branch for
limits, WTD-1223.

Conflicts:
	platform/commonUI/general/res/css/forms.css
	platform/commonUI/general/res/css/plots.css
	platform/commonUI/general/res/css/theme-espresso.css
	platform/commonUI/general/res/css/tree.css
	platform/commonUI/general/res/sass/_fixed-position.scss
	platform/commonUI/general/res/sass/plots/_plots-main.scss
	platform/features/scrolling/res/templates/scrolling.html
2015-06-08 10:23:36 -07:00
Victor Woeltjen
88f938b1b6 [Limits] Begin using limits from scrolling list view
WTD-1223.
2015-06-05 17:59:58 -07:00
Victor Woeltjen
dc6c43a4cd [Limits] Display limit state in legend of plot
WTD-1223.
2015-06-05 17:15:02 -07:00
Charles Hacskaylo
e216961727 Pulling in all sass, css, etc. and static-markup work from warp1222 so far 2015-06-05 16:48:58 -07:00
Victor Woeltjen
f314e46abc [Limits] Add example limit capability
WTD-1223.
2015-06-05 16:48:09 -07:00
Victor Woeltjen
9a3ccc3295 [Limits] Merge in latest from platform
Merge in latest changes to platform to begin implementing
limits, WTD-1223.
2015-06-05 16:28:29 -07:00
Victor Woeltjen
d2a75c4338 [Info Bubble] Add test cases for gesture
Add test cases for the info gesture, WTD-884.
2015-06-05 06:31:23 -07:00
Victor Woeltjen
1567c32993 [Info Bubble] Add license headers
Add license headers to scripts for info bubbles, WTD-884.
2015-06-04 16:41:34 -07:00
Victor Woeltjen
21c066e10f [Info Bubble] Add test cases for infoService
WTD-884.
2015-06-04 16:38:55 -07:00
Victor Woeltjen
640b39e3a0 [Info Bubble] Begin adding tests
Begin adding tests for info bubble, WTD-884.
2015-06-04 16:27:41 -07:00
Victor Woeltjen
90ba93e396 [Info Bubble] Test metadata capability
Test metadata capability, introduced to support info bubbles
for domain objects, WTD-884.
2015-06-04 14:16:23 -07:00
Victor Woeltjen
87e80e763c [Info Bubble] Include in set of active bundles
Include the info bubble in the set of active bundles, WTD-884.
2015-06-04 12:35:42 -07:00
Victor Woeltjen
cae8372d34 [Info Bubble] Include type in common metadata
Include type in common domain object metadata to display
in an info bubble, WTD-884.
2015-06-04 12:34:56 -07:00
Victor Woeltjen
c9e33b1d31 [Info Bubble] Change moment import
Change the path used to import moment for the telemetryFormatter.
Previously, a relative path was used; since telemetryFormatter was
initially implemented, however, moment has been made available as
simply moment by require configuration changes elsewhere. Inconsistent
usage of moment here can result in load timeouts under certain
script load orderings. Changed in the context of WTD-884 (which does
use moment elsewhere.)
2015-06-04 12:32:37 -07:00
Victor Woeltjen
11dc5f380c [Info Bubble] Use domain object metadata
Use domain object metadata to populate the info bubble from
the info gesture, WTD-884.
2015-06-04 12:30:18 -07:00
Victor Woeltjen
6622ca7031 [Info Bubble] Add common properties to metadata
Expose common properties (like time updated) from the metadata
capability, to appear in the Info bubble. WTD-884.
2015-06-04 12:26:57 -07:00
Victor Woeltjen
cd26d1284e [Info Bubble] Add metadata capability
Add metadata capability, which will be used to populate
contents of an info bubble. WTD-884.
2015-06-04 12:09:50 -07:00
Victor Woeltjen
588c35de4e Merge branch 'open-master' into open884
Merge latest from master branch into topic branch for WTD-884
2015-06-04 10:39:25 -07:00
Charles Hacskaylo
6fe6aacc38 Added open source comment 2015-06-03 10:25:37 -07:00
Charles Hacskaylo
b022babedb Adding static-markup bundle. 2015-06-03 10:23:49 -07:00
Victor Woeltjen
a18a7c9960 [Layout] Fix comment
Change inaccurate comment based on feedback from code
review for WTD-1182.
2015-06-03 07:49:11 -07:00
Victor Woeltjen
219a6086d8 [Info Bubble] Remove placeholder type/view
Remove Info Bubble as a type and view, which had been present
for purposes of example during development. WTD-884.
2015-05-22 13:27:04 -07:00
Victor Woeltjen
69dce9f88d [Info Bubble] Add clarifying comments
Add clarifying comments for the info gesture, WTD-884.
2015-05-22 13:25:39 -07:00
Victor Woeltjen
d9a2a7f4c3 [Info Bubble] Refine positioning, add comments
Refine positioning to behave correctly when mouse is on
right and/or lower part of screen; listen for scope
destruction to avoid cases where an element is removed
before mouseleave is ever called. WTD-884.
2015-05-22 13:22:26 -07:00
Victor Woeltjen
eafaa04c06 [Info Bubble] Add info gestures
Add info gestures to labels and grid items, WTD-884.
2015-05-22 12:51:42 -07:00
Victor Woeltjen
ab6a5afe93 [Info Bubble] Tweak positioning
Tweak positioning of info bubbles, WTD-884.
2015-05-22 12:50:09 -07:00
Victor Woeltjen
35f4032ae8 [Info Bubble] Fix display issues
Intermediary commit; fix some display issues with info bubbles,
add some delay. WTD-884.
2015-05-22 12:28:58 -07:00
Victor Woeltjen
05a78f70e3 [Info Bubble] Begin adding info gesture
Begin adding info gesture, which will attach info bubbles
to representations of domain objects. WTD-884.
2015-05-22 12:03:58 -07:00
Victor Woeltjen
179b0b46e5 [Info Bubble] Add info service
Add service for showing informational bubbles, WTD-884.
2015-05-22 11:49:02 -07:00
Victor Woeltjen
ac8fbb289e [Info Bubble] Continue breaking down templates
WTD-884.
2015-05-21 21:25:50 -07:00
Victor Woeltjen
cde173dbdc [Representation] Add test for scope clearing
Add test clearing to verify that scope gets cleared
on view changes, WTD-1182.
2015-05-20 16:39:49 -07:00
Victor Woeltjen
9b6d8cf1ec [Representation] Minimize scope reuse
When switching among domain objects and/or views, avoid
reusing the same information is scope. The wrong information
in scope can cause various failures in views, such as WTD-1182.
2015-05-20 16:26:53 -07:00
Victor Woeltjen
f74199e60f [Layout] Add check to view in frame
Add check to template for views in frame to avoid populating
frame prematurely; WTD-1182.
2015-05-20 14:02:56 -07:00
Victor Woeltjen
c7b13b70d1 [Inspection] Begin decomposing bubble template
WTD-884.
2015-05-11 10:02:37 -07:00
Charles Hacskaylo
58bd4240f1 [Frontend] Merging warp1172 platform changes in
WTD-1172
(cherry picked from commit 219ffb4d59d4cc4a0172ba351af0e2b5d672d4b2)

Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
	platform/commonUI/general/res/sass/_fixed-position.scss
	warp/telemetry/src/autoflow/AutoflowTableLinker.js

Manually deleted AutoflowTableLinker.js
2015-05-07 13:10:04 -07:00
Charles Hacskaylo
2d13745823 [Frontend] Added CSS and markup for stale; cleanup
WTD-1172
Added stale CSS in _data-status.scss;
Added pulse animation in _effects.scss, not used;
Removed temp-limits directory and files;
Sanding and refining of limits styles and in .tabular;
2015-05-06 19:30:36 -07:00
Charles Hacskaylo
db74e2f84a [Frontend] CSS hooks for staleness
WTD-1172
New .scss file for staleness
Added CSS hooks in templates for staleness
2015-05-06 17:36:55 -07:00
Charles Hacskaylo
a244502f16 [Frontend] Adding missed CSS files
WTD-1172
2015-05-06 16:57:04 -07:00
Charles Hacskaylo
f114f742c4 [Frontend] Tweaks to markup and CSS
WTD-1172
scrolling.html markup and CSS hooks;
added comments to change points;
CSS tweaking;
2015-05-06 16:55:25 -07:00
Charles Hacskaylo
c8d06cb32a [Frontend] Limits added to fixed position view
WTD-1172
2015-05-06 11:20:09 -07:00
Charles Hacskaylo
4b774f7b12 [Frontend] Clean up
WTD-1172
Moved HTML limits markup out of plot.html and into temp-limits/.../examples.html
2015-05-06 10:34:16 -07:00
Charles Hacskaylo
39c8f0ab00 [Frontend] Plot limits and out-of-bounds indicators
WTD-1172
Markup and CSS for plots;
Example ng-class added to plot.html for legend items;
Markup added to plot.html for OOB indicators;
2015-05-06 10:21:29 -07:00
Charles Hacskaylo
d75c873831 Merge branch 'open1172' of https://trunk.arc.nasa.gov/git/wtd into open1172 2015-05-06 10:10:55 -07:00
Charles Hacskaylo
fbaa0ff1e0 [Frontend] In-progress markup and CSS for limits
WTD-1172
Plot limits so far
2015-05-04 16:50:11 -07:00
Charles Hacskaylo
d21e320ec2 [Frontend] New version of symbols
WTD-1172
New version of symbols font with glyphs for limits display
2015-05-04 13:24:41 -07:00
321 changed files with 32335 additions and 3571 deletions

3
.gitignore vendored
View File

@@ -20,3 +20,6 @@ closed-lib
# Node dependencies
node_modules
# Protractor logs
protractor/logs

1
Procfile Normal file
View File

@@ -0,0 +1 @@
web: node app.js --port $PORT --include example/localstorage

View File

@@ -67,6 +67,19 @@ as described above.
An example of this is expressed in `platform/framework`, which follows
bundle conventions.
### Functional Testing
The tests described above are all at the unit-level; an additional
test suite using [Protractor](https://angular.github.io/protractor/)
us under development, in the `protractor` folder.
To run:
* Install protractor following the instructions above.
* `cd protractor`
* `npm install`
* `npm run all`
## Build
Open MCT Web includes a Maven command line build. Although Open MCT Web

23
app.js
View File

@@ -14,8 +14,7 @@
options = require('minimist')(process.argv.slice(2)),
express = require('express'),
app = express(),
fs = require('fs'),
bundles = JSON.parse(fs.readFileSync(BUNDLE_FILE, 'utf8'));
fs = require('fs');
// Defaults
options.port = options.port || options.p || 8080;
@@ -40,17 +39,19 @@
process.exit(0);
}
// Handle command line inclusions/exclusions
bundles = bundles.concat(options.include);
bundles = bundles.filter(function (bundle) {
return options.exclude.indexOf(bundle) === -1;
});
bundles = bundles.filter(function (bundle, index) { // Uniquify
return bundles.indexOf(bundle) === index;
});
// Override bundles.json for HTTP requests
app.use('/' + BUNDLE_FILE, function (req, res) {
var bundles = JSON.parse(fs.readFileSync(BUNDLE_FILE, 'utf8'));
// Handle command line inclusions/exclusions
bundles = bundles.concat(options.include);
bundles = bundles.filter(function (bundle) {
return options.exclude.indexOf(bundle) === -1;
});
bundles = bundles.filter(function (bundle, index) { // Uniquify
return bundles.indexOf(bundle) === index;
});
res.send(JSON.stringify(bundles));
});

62
build-docs.sh Executable file
View File

@@ -0,0 +1,62 @@
#!/bin/bash
#*****************************************************************************
#* 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.
#*****************************************************************************
# Script to build and deploy docs to github pages.
OUTPUT_DIRECTORY="target/docs"
REPOSITORY_URL="git@github.com:nasa/openmctweb.git"
BUILD_SHA=`git rev-parse head`
# A remote will be created for the git repository we are pushing to.
# Don't worry, as this entire directory will get trashed inbetween builds.
REMOTE_NAME="documentation"
WEBSITE_BRANCH="gh-pages"
# Clean output directory, JSDOC will recreate
if [ -d $OUTPUT_DIRECTORY ]; then
rm -rf $OUTPUT_DIRECTORY || exit 1
fi
npm run docs
cd $OUTPUT_DIRECTORY || exit 1
echo "git init"
git init
# Configure github for CircleCI user.
git config user.email "buildbot@circleci.com"
git config user.name "BuildBot"
echo "git remote add $REMOTE_NAME $REPOSITORY_URL"
git remote add $REMOTE_NAME $REPOSITORY_URL
echo "git add ."
git add .
echo "git commit -m \"Generate docs from build $BUILD_SHA\""
git commit -m "Generate docs from build $BUILD_SHA"
echo "git push $REMOTE_NAME HEAD:$WEBSITE_BRANCH -f"
git push $REMOTE_NAME HEAD:$WEBSITE_BRANCH -f
echo "Documentation pushed to gh-pages branch."

View File

@@ -7,17 +7,24 @@
"platform/commonUI/edit",
"platform/commonUI/dialog",
"platform/commonUI/general",
"platform/commonUI/inspect",
"platform/containment",
"platform/execution",
"platform/telemetry",
"platform/features/imagery",
"platform/features/layout",
"platform/features/pages",
"platform/features/plot",
"platform/features/scrolling",
"platform/features/events",
"platform/forms",
"platform/persistence/queue",
"platform/policy",
"platform/entanglement",
"platform/search",
"example/imagery",
"example/persistence",
"example/eventGenerator",
"example/generator"
]

10
circle.yml Normal file
View File

@@ -0,0 +1,10 @@
deployment:
production:
branch: master
commands:
- ./build-docs.sh
- git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master
openmctweb-staging-un:
branch: search
heroku:
appname: openmctweb-staging-un

193
docs/gendocs.js Normal file
View File

@@ -0,0 +1,193 @@
/*****************************************************************************
* 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 require,process,GLOBAL*/
/*jslint nomen: false */
// Usage:
// node gendocs.js --in <source directory> --out <dest directory>
var CONSTANTS = {
DIAGRAM_WIDTH: 800,
DIAGRAM_HEIGHT: 500
};
GLOBAL.window = GLOBAL.window || GLOBAL; // nomnoml expects window to be defined
(function () {
"use strict";
var fs = require("fs"),
mkdirp = require("mkdirp"),
path = require("path"),
glob = require("glob"),
marked = require("marked"),
split = require("split"),
stream = require("stream"),
nomnoml = require('nomnoml'),
Canvas = require('canvas'),
options = require("minimist")(process.argv.slice(2));
// Convert from nomnoml source to a target PNG file.
function renderNomnoml(source, target) {
var canvas =
new Canvas(CONSTANTS.DIAGRAM_WIDTH, CONSTANTS.DIAGRAM_HEIGHT);
nomnoml.draw(canvas, source, 1.0);
canvas.pngStream().pipe(fs.createWriteStream(target));
}
// Stream transform.
// Pulls out nomnoml diagrams from fenced code blocks and renders them
// as PNG files in the output directory, prefixed with a provided name.
// The fenced code blocks will be replaced with Markdown in the
// output of this stream.
function nomnomlifier(outputDirectory, prefix) {
var transform = new stream.Transform({ objectMode: true }),
isBuilding = false,
counter = 1,
outputPath,
source = "";
transform._transform = function (chunk, encoding, done) {
if (!isBuilding) {
if (chunk.trim().indexOf("```nomnoml") === 0) {
var outputFilename = prefix + '-' + counter + '.png';
outputPath = path.join(outputDirectory, outputFilename);
this.push([
"\n![Diagram ",
counter,
"](",
outputFilename,
")\n\n"
].join(""));
isBuilding = true;
source = "";
counter += 1;
} else {
// Otherwise, pass through
this.push(chunk + '\n');
}
} else {
if (chunk.trim() === "```") {
// End nomnoml
renderNomnoml(source, outputPath);
isBuilding = false;
} else {
source += chunk + '\n';
}
}
done();
};
return transform;
}
// Convert from Github-flavored Markdown to HTML
function gfmifier() {
var transform = new stream.Transform({ objectMode: true }),
markdown = "";
transform._transform = function (chunk, encoding, done) {
markdown += chunk;
done();
};
transform._flush = function (done) {
this.push("<html><body>\n");
this.push(marked(markdown));
this.push("\n</body></html>\n");
done();
};
return transform;
}
// Custom renderer for marked; converts relative links from md to html,
// and makes headings linkable.
function CustomRenderer() {
var renderer = new marked.Renderer(),
customRenderer = Object.create(renderer);
customRenderer.heading = function (text, level) {
var escapedText = (text || "").trim().toLowerCase().replace(/\W/g, "-"),
aOpen = "<a name=\"" + escapedText + "\" href=\"#" + escapedText + "\">",
aClose = "</a>";
return aOpen + renderer.heading.apply(renderer, arguments) + aClose;
};
// Change links to .md files to .html
customRenderer.link = function (href, title, text) {
// ...but only if they look like relative paths
return (href || "").indexOf(":") === -1 && href[0] !== "/" ?
renderer.link(href.replace(/\.md/, ".html"), title, text) :
renderer.link.apply(renderer, arguments);
};
return customRenderer;
}
options['in'] = options['in'] || options.i;
options.out = options.out || options.o;
marked.setOptions({
renderer: new CustomRenderer(),
gfm: true,
tables: true,
breaks: false,
pedantic: false,
sanitize: true,
smartLists: true,
smartypants: false
});
// Convert all markdown files.
// First, pull out nomnoml diagrams.
// Then, convert remaining Markdown to HTML.
glob(options['in'] + "/**/*.md", {}, function (err, files) {
files.forEach(function (file) {
var destination = file.replace(options['in'], options.out)
.replace(/md$/, "html"),
destPath = path.dirname(destination),
prefix = path.basename(destination).replace(/\.html$/, "");
mkdirp(destPath, function (err) {
fs.createReadStream(file, { encoding: 'utf8' })
.pipe(split())
.pipe(nomnomlifier(destPath, prefix))
.pipe(gfmifier())
.pipe(fs.createWriteStream(destination, {
encoding: 'utf8'
}));
});
});
});
// Also copy over all HTML, CSS, or PNG files
glob(options['in'] + "/**/*.@(html|css|png)", {}, function (err, files) {
files.forEach(function (file) {
var destination = file.replace(options['in'], options.out),
destPath = path.dirname(destination);
mkdirp(destPath, function (err) {
fs.createReadStream(file, { encoding: 'utf8' })
.pipe(fs.createWriteStream(destination, {
encoding: 'utf8'
}));
});
});
});
}());

View File

@@ -0,0 +1,232 @@
# Overview
The framework layer's most basic responsibility is allowing individual
software components to communicate. The software components it recognizes
are:
* _Extensions_: Individual units of functionality that can be added to
or removed from Open MCT Web. _Extension categories_ distinguish what
type of functionality is being added/removed.
* _Bundles_: A grouping of related extensions
(named after an analogous concept from [OSGi](http://www.osgi.org/))
that may be added or removed as a group.
The framework layer operates by taking a set of active bundles, and
exposing extensions to one another as-needed, using
[dependency injection](https://en.wikipedia.org/wiki/Dependency_injection).
Extensions are responsible for declaring their dependencies in a
manner which the framework layer can understand.
```nomnoml
#direction: down
[Open MCT Web|
[Dependency injection framework]-->[Platform bundle #1]
[Dependency injection framework]-->[Platform bundle #2]
[Dependency injection framework]-->[Plugin bundle #1]
[Dependency injection framework]-->[Plugin bundle #2]
[Platform bundle #1|[Extensions]]
[Platform bundle #2|[Extensions]]
[Plugin bundle #1|[Extensions]]
[Plugin bundle #2|[Extensions]]
[Platform bundle #1]<->[Platform bundle #2]
[Plugin bundle #1]<->[Platform bundle #2]
[Plugin bundle #1]<->[Plugin bundle #2]
]
```
The "dependency injection framework" in this case is
[AngularJS](https://angularjs.org/). Open MCT Web's framework layer
is really just a thin wrapper over Angular that recognizes the
concepts of bundles and extensions (as declared in JSON files) and
registering extensions with Angular. It additionally acts as a
mediator between Angular and [RequireJS](http://requirejs.org/),
which is used to load JavaScript sources which implement
extensions.
```nomnoml
[Framework layer|
[AngularJS]<-[Framework Component]
[RequireJS]<-[Framework Component]
[Framework Component]1o-*[Bundles]
]
```
It is worth noting that _no other components_ are "aware" of the
framework component directly; Angular and Require are _used by_ the
framework components, and extensions in various bundles will have
their dependencies satisfied by Angular as a consequence of registration
activities which were performed by the framework component.
## Application Initialization
The framework component initializes an Open MCT Web application following
a simple sequence of steps.
```nomnoml
[<start> Start]->[<state> Load bundles.json]
[Load bundles.json]->[<state> Load bundle.json files]
[Load bundle.json files]->[<state> Resolve implementations]
[Resolve implementations]->[<state> Register with Angular]
[Register with Angular]->[<state> Bootstrap application]
[Bootstrap application]->[<end> End]
```
1. __Loading bundles.json.__ A file named `bundles.json` is loaded to determine
which bundles to load. Bundles are given in this file as relative paths
which point to bundle directories.
2. __Load bundle.json files.__ Individual bundle definitions are loaded; a
`bundle.json` file is expected in each bundle directory.
2. __Resolving implementations.__ Any scripts which provide implementations for
extensions exposed by bundles are loaded, using RequireJS.
3. __Register with Angular.__ Resolved extensions are registered with Angular,
such that they can be used by the application at run-time. This stage
includes both registration of Angular built-ins (directives, controllers,
routes, constants, and services) as well as registration of non-Angular
extensions.
4. __Bootstrap application.__ Once all extensions have been registered,
the Angular application
[is bootstrapped](https://docs.angularjs.org/guide/bootstrap).
## Architectural Paradigm
```nomnoml
[Extension]
[Extension]o->[Dependency #1]
[Extension]o->[Dependency #2]
[Extension]o->[Dependency #3]
```
Open MCT Web's architecture relies on a simple premise: Individual units
(extensions) only have access to the dependencies they declare that they
need, and they acquire references to these dependencies via dependency
injection. This has several desirable traits:
* Programming to an interface is enforced. Any given dependency can be
swapped out for something which exposes an equivalent interface. This
improves flexibility against refactoring, simplifies testing, and
provides a common mechanism for extension and reconfiguration.
* The dependencies of a unit must be explicitly defined. This means that
it can be easily determined what a given unit's role is within the
larger system, in terms of what other components it will interact with.
It also helps to enforce good separation of concerns: When a set of
declared dependencies becomes long it is obvious, and this is usually
a sign that a given unit is involved in too many concerns and should
be refactored into smaller pieces.
* Individual units do not need to be aware of the framework; they need
only be aware of the interfaces to the components they specifically
use. This avoids introducing a ubiquitous dependency upon the framework
layer itself; it is plausible to modify or replace the framework
without making changes to individual software components which run upon
the framework.
A drawback to this approach is that it makes it difficult to define
"the architecture" of Open MCT Web, in terms of describing the specific
units that interact at run-time. The run-time architecture is determined
by the framework as the consequence of wiring together dependencies.
As such, the specific architecture of any given application built on
Open MCT Web can look very different.
Keeping that in mind, there are a few useful patterns supported by the
framework that are useful to keep in mind.
The specific service infrastructure provided by the platform is described
in the [Platform Architecture](Platform.md).
## Extension Categories
One of the capabilities that the framework component layers on top of
AngularJS is support for many-to-one dependencies. That is, a specific
extension may declare a dependency to _all extensions of a specific
category_, instead of being limited to declaring specific dependencies.
```nomnoml
#direction: right
[Specific Extension] 1 o-> * [Extension of Some Category]
```
This is useful for introducing specific extension points to an application.
Some unit of software will depend upon all extensions of a given category
and integrate their behavior into the system in some fashion; plugin authors
can then add new extensions of that category to augment existing behaviors.
Some developers may be familiar with the use of registries to achieve
similar characteristics. This approach is similar, except that the registry
is effectively implicit whenever a new extension category is used or
depended-upon. This has some advantages over a more straightforward
registry-based approach:
* These many-to-one relationships are expressed as dependencies; an
extension category is registered as having dependencies on all individual
extensions of this category. This avoids ordering issues that may occur
with more conventional registries, which may be observed before all
dependencies are resolved.
* The need for service registries of specific types is removed, reducing
the number of interfaces to manage within the system. Groups of
extensions are provided as arrays.
## Composite Services
Composite services (registered via extension category `components`) are
a pattern supported by the framework. These allow service instances to
be built from multiple components at run-time; support for this pattern
allows additional bundles to introduce or modify behavior associated
with these services without modifying or replacing original service
instances.
```nomnoml
#direction: down
[<abstract> FooService]
[FooDecorator #1]--:>[FooService]
[FooDecorator #n]--:>[FooService]
[FooAggregator]--:>[FooService]
[FooProvider #1]--:>[FooService]
[FooProvider #n]--:>[FooService]
[FooDecorator #1]o->[<state> ...decorators...]
[...decorators...]o->[FooDecorator #n]
[FooDecorator #n]o->[FooAggregator]
[FooAggregator]o->[FooProvider #1]
[FooAggregator]o->[<state> ...providers...]
[FooAggregator]o->[FooProvider #n]
[FooDecorator #1]--[<note> Exposed as fooService]
```
In this pattern, components all implement an interface which is
standardized for that service. Components additionally declare
that they belong to one of three types:
* __Providers.__ A provider actually implements the behavior
(satisfies the contract) for that kind of service. For instance,
if a service is responsible for looking up documents by an identifier,
one provider may do so by querying a database, while another may
do so by reading a static JSON document. From the outside, either
provider would look the same (they expose the same interface) and
they could be swapped out easily.
* __Aggregator.__ An aggregator takes many providers and makes them
behave as one. Again, this implements the same interface as an
individual provider, so users of the service do not need to be
concerned about the difference between consulting many providers
and consulting one. Continuing with the example of a service that
looks up documents by identifiers, an aggregator here might consult
all providers, and return any document is found (perhaps picking one
over the other or merging documents if there are multiple matches.)
* __Decorators.__ A decorator exposes the same interface as other
components, but instead of fully implementing the behavior associated
with that kind of service, it only acts as an intermediary, delegating
the actual behavior to a different component. Decorators may transform
inputs or outputs, or initiate some side effects associated with a
service. This is useful if certain common behavior associated with a
service (caching, for instance) may be useful across many different
implementations of that same service.
The framework will register extensions in this category such that an
aggregator will depend on all of its providers, and decorators will
depend upon on one another in a chain. The result of this compositing step
(the last decorator, if any; otherwise the aggregator, if any;
otherwise a single provider) will be exposed as a single service that
other extensions can acquire through dependency injection. Because all
components of the same type of service expose the same interface, users
of that service do not need to be aware that they are talking to an
aggregator or a provider, for instance.

View File

@@ -0,0 +1,714 @@
# Overview
The Open MCT Web platform utilizes the [framework layer](Framework.md)
to provide an extensible baseline for applications which includes:
* A common user interface (and user interface paradigm) for dealing with
domain objects of various sorts.
* A variety of extension points for introducing new functionality
of various kinds within the context of the common user interface.
* A service infrastructure to support building additional components.
## Platform Architecture
While the framework provides a more general architectural paradigm for
building application, the platform adds more specificity by defining
additional extension types and allowing for integration with back end
components.
The run-time architecture of an Open MCT Web application can be categorized
into certain high-level tiers:
```nomnoml
[DOM]->[<state> AngularJS]
[AngularJS]->[Presentation Layer]
[Presentation Layer]->[Information Model]
[Presentation Layer]->[Service Infrastructure]
[Information Model]->[Service Infrastructure]
[Service Infrastructure]->[<state> Browser APIs]
[Browser APIs]->[Back-end]
```
Applications built using Open MCT Web may add or configure functionality
in __any of these tiers__.
* _DOM_: The rendered HTML document, composed from HTML templates which
have been processed by AngularJS and will be updated by AngularJS
to reflect changes from the presentation layer. User interactions
are initiated from here and invoke behavior in the presentation layer.
* [_Presentation layer_](#presentation-layer): The presentation layer
is responsible for updating (and providing information to update)
the displayed state of the application. The presentation layer consists
primarily of _controllers_ and _directives_. The presentation layer is
concerned with inspecting the information model and preparing it for
display.
* [_Information model_](#information-model): The information model
describes the state and behavior of the objects with which the user
interacts.
* [_Service infrastructure_](#service-infrastructure): The service
infrastructure is responsible for providing the underlying general
functionality needed to support the information model. This includes
exposing underlying sets of extensions and mediating with the
back-end.
* _Back-end_: The back-end is out of the scope of Open MCT Web, except
for the interfaces which are utilized by adapters participating in the
service infrastructure.
## Application Start-up
Once the
[application has been initialized](Framework.md#application-initialization)
Open MCT Web primarily operates in an event-driven paradigm; various
events (mouse clicks, timers firing, receiving responses to XHRs) trigger
the invocation of functions, typically in the presentation layer for
user actions or in the service infrastructure for server responses.
The "main point of entry" into an initialized Open MCT Web application
is effectively the
[route](https://docs.angularjs.org/api/ngRoute/service/$route#example)
which is associated with the URL used to access Open MCT Web (or a
default route.) This route will be associated with a template which
will be displayed; this template will include references to directives
and controllers which will be interpreted by Angular and used to
initialize the state of the display in a manner which is backed by
both the information model and the service infrastructure.
```nomnoml
[<start> Start]->[<state> page load]
[page load]->[<state> route selection]
[route selection]->[<state> compile, display template]
[compile, display template]->[Template]
[Template]->[<state> use Controllers]
[Template]->[<state> use Directives]
[use Controllers]->[Controllers]
[use Directives]->[Directives]
[Controllers]->[<state> consult information model]
[consult information model]->[<state> expose data]
[expose data]->[Angular]
[Angular]->[<state> update display]
[Directives]->[<state> add event listeners]
[Directives]->[<state> update display]
[add event listeners]->[<end> End]
[update display]->[<end> End]
```
# Presentation Layer
The presentation layer of Open MCT Web is responsible for providing
information to display within templates, and for handling interactions
which are initiated from templated DOM elements. AngularJS acts as
an intermediary between the web page as the user sees it, and the
presentation layer implemented as Open MCT Web extensions.
```nomnoml
[Presentation Layer|
[Angular built-ins|
[routes]
[controllers]
[directives]
[templates]
]
[Domain object representation|
[views]
[representations]
[representers]
[gestures]
]
]
```
## Angular built-ins
Several extension categories in the presentation layer map directly
to primitives from AngularJS:
* [_Controllers_](https://docs.angularjs.org/guide/controller) provide
data to templates, and expose functionality that can be called from
templates.
* [_Directives_](https://docs.angularjs.org/guide/directive) effectively
extend HTML to provide custom behavior associated with specific
attributes and tags.
* [_Routes_](https://docs.angularjs.org/api/ngRoute/service/$route#example)
are used to associate specific URLs (including the fragment identifier)
with specific application states. (In Open MCT Web, these are used to
describe the mode of usage - e.g. browse or edit - as well as to
identify the object being used.)
* [_Templates_](https://docs.angularjs.org/guide/templates) are partial
HTML documents that will be rendered and kept up-to-date by AngularJS.
Open MCT Web introduces a custom `mct-include` directive which acts
as a wrapper around `ng-include` to allow templates to be referred
to by symbolic names.
## Domain object representation
The remaining extension categories in the presentation layer are specific
to displaying domain objects.
* _Representations_ are templates that will be used to display
domain objects in specific ways (e.g. "as a tree node.")
* _Views_ are representations which are exposed to the user as options
for displaying domain objects.
* _Representers_ are extensions which modify or augment the process
of representing domain objects generally (e.g. by attaching
gestures to them.)
* _Gestures_ provide associations between specific user actions
(expressed as DOM events) and resulting behavior upon domain objects
(typically expressed as members of the `actions` extension category)
that can be reused across domain objects. For instance, `drag` and
`drop` are both gestures associated with using drag-and-drop to
modify the composition of domain objects by interacting with their
representations.
# Information Model
```nomnoml
#direction: right
[Information Model|
[DomainObject|
getId() : string
getModel() : object
getCapability(key : string) : Capability
hasCapability(key : string) : boolean
useCapability(key : string, args...) : *
]
[DomainObject] 1 +- 1 [Model]
[DomainObject] 1 o- * [Capability]
]
```
Domain objects are the most fundamental component of Open MCT Web's
information model. A domain object is some distinct thing relevant to a
user's work flow, such as a telemetry channel, display, or similar.
Open MCT Web is a tool for viewing, browsing, manipulating, and otherwise
interacting with a graph of domain objects.
A domain object should be conceived of as the union of the following:
* _Identifier_: A machine-readable string that uniquely identifies the
domain object within this application instance.
* _Model_: The persistent state of the domain object. A domain object's
model is a JavaScript object that can be losslessly converted to JSON.
* _Capabilities_: Dynamic behavior associated with the domain object.
Capabilities are JavaScript objects which provide additional methods
for interacting with the domain objects which expose those capabilities.
Not all domain objects expose all capabilities. The interface exposed
by any given capability will depend on its type (as identified
by the `key` argument.) For instance, a `persistence` capability
has a different interface from a `telemetry` capability. Using
capabilities requires some prior knowledge of their interface.
## Capabilities and Services
```nomnoml
#direction: right
[DomainObject]o-[FooCapability]
[FooCapability]o-[FooService]
[FooService]o-[foos]
```
At run-time, the user is primarily concerned with interacting with
domain objects. These interactions are ultimately supported via back-end
services, but to allow customization per-object, these are often mediated
by capabilities.
A common pattern that emerges in the Open MCT Platform is as follows:
* A `DomainObject` has some particular behavior that will be supported
by a service.
* A `Capability` of that domain object will define that behavior,
_for that domain object_, supported by a service.
* A `Service` utilized by that capability will perform the actual behavior.
* An extension category will be utilized by that capability to determine
the set of possible behaviors.
Concrete examples of capabilities which follow this pattern
(or a subset of this pattern) include:
```nomnoml
#direction: right
[DomainObject]1 o- *[Capability]
[Capability]<:--[TypeCapability]
[Capability]<:--[ActionCapability]
[Capability]<:--[PersistenceCapability]
[Capability]<:--[TelemetryCapability]
[TypeCapability]o-[TypeService]
[TypeService]o-[types]
[ActionCapability]o-[ActionService]
[ActionService]o-[actions]
[PersistenceCapability]o-[PersistenceService]
[TelemetryCapability]o-[TelemetryService]
```
# Service Infrastructure
Most services exposed by the Open MCT Web platform follow the
[composite services](Framework.md#composite-services) to permit
a higher degree of flexibility in how a service can be modified
or customized for specific applications.
To simplify usage for plugin developers, the platform also usually
includes a provider implementation for these service type that consumes
some extension category. For instance, an `ActionService` provider is
included which depends upon extension category `actions`, and exposes
all actions declared as such to the system. As such, plugin developers
can simply implement the new actions they wish to be made available without
worrying about the details of composite services or implementing a new
`ActionService` provider; however, the ability to implement a new provider
remains useful when the expressive power of individual extensions is
insufficient.
```nomnoml
[ Service Infrastructure |
[ObjectService]->[ModelService]
[ModelService]->[PersistenceService]
[ObjectService]->[CapabilityService]
[CapabilityService]->[capabilities]
[capabilities]->[TelemetryService]
[capabilities]->[PersistenceService]
[capabilities]->[TypeService]
[capabilities]->[ActionService]
[capabilities]->[ViewService]
[PersistenceService]->[<database> Document store]
[TelemetryService]->[<database> Telemetry source]
[ActionService]->[actions]
[ActionService]->[PolicyService]
[ViewService]->[PolicyService]
[ViewService]->[views]
[PolicyService]->[policies]
[TypeService]->[types]
]
```
A short summary of the roles of these services:
* _[ObjectService](#object-service)_: Allows retrieval of domain objects by
their identifiers; in practice, often the main point of entry into the
[information model](#information-model).
* _[ModelService](#model-service)_: Provides domain object models, retrieved
by their identifier.
* _[CapabilityService](#capability-service)_: Provides capabilities, as they
apply to specific domain objects (as judged from their model.)
* _[TelemetryService](#telemetry-service)_: Provides access to historical
and real-time telemetry data.
* _[PersistenceService](#persistence-service)_: Provides the ability to
store and retrieve documents (such as domain object models.)
* _[ActionService](#action-service)_: Provides distinct user actions that
can take place within the system (typically, upon or using domain objects.)
* _[ViewService](#view-service)_: Provides views for domain objects. A view
is a user-selectable representation of a domain object (in practice, an
HTML template.)
* _[PolicyService](#policy-service)_: Handles decisions about which
behavior are allowed within certain specific contexts.
* _[TypeService](#type-service)_: Provides information to distinguish
different types of domain objects from one another within the system.
## Object Service
```nomnoml
#direction: right
[<abstract> ObjectService|
getObjects(ids : Array.<string>) : Promise.<object.<string, DomainObject>>
]
[DomainObjectProvider]--:>[ObjectService]
[DomainObjectProvider]o-[ModelService]
[DomainObjectProvider]o-[CapabilityService]
```
As domain objects are central to Open MCT Web's information model,
acquiring domain objects is equally important.
```nomnoml
#direction: right
[<start> Start]->[<state> Look up models]
[<state> Look up models]->[<state> Look up capabilities]
[<state> Look up capabilities]->[<state> Instantiate DomainObject]
[<state> Instantiate DomainObject]->[<end> End]
```
Open MCT Web includes an implementation of an `ObjectService` which
satisfies this capability by:
* Consulting the [Model Service](#model-service) to acquire domain object
models by identifier.
* Passing these models to a [Capability Service](#capability-service) to
determine which capabilities are applicable.
* Combining these results together as [DomainObject](#information-model)
instances.
## Model Service
```nomnoml
#direction: down
[<abstract> ModelService|
getModels(ids : Array.<string>) : Promise.<object.<string, object>>
]
[StaticModelProvider]--:>[ModelService]
[RootModelProvider]--:>[ModelService]
[PersistedModelProvider]--:>[ModelService]
[ModelAggregator]--:>[ModelService]
[CachingModelDecorator]--:>[ModelService]
[MissingModelDecorator]--:>[ModelService]
[MissingModelDecorator]o-[CachingModelDecorator]
[CachingModelDecorator]o-[ModelAggregator]
[ModelAggregator]o-[StaticModelProvider]
[ModelAggregator]o-[RootModelProvider]
[ModelAggregator]o-[PersistedModelProvider]
[PersistedModelProvider]o-[PersistenceService]
[RootModelProvider]o-[roots]
[StaticModelProvider]o-[models]
```
The platform's model service is responsible for providing domain object
models (effectively, JSON documents describing the persistent state
associated with domain objects.) These are retrieved by identifier.
The platform includes multiple components of this variety:
* `PersistedModelProvider` looks up domain object models from
a persistence store (the [`PersistenceService`](#persistence-service));
this is how user-created and user-modified
domain object models are retrieved.
* `RootModelProvider` provides domain object models that have been
declared via the `roots` extension category. These will appear at the
top level of the tree hierarchy in the user interface.
* `StaticModelProvider` provides domain object models that have been
declared via the `models` extension category. This is useful for
allowing plugins to expose new domain objects declaratively.
* `ModelAggregator` merges together the results from multiple providers.
If multiple providers return models for the same domain object,
the most recently modified version (as determined by the `modified`
property of the model) is chosen.
* `CachingModelDecorator` caches model instances in memory. This
ensures that only a single instance of a domain object model is
present at any given time within the application, and prevent
redundant retrievals.
* `MissingModelDecorator` adds in placeholders when no providers
have returned domain object models for a specific identifier. This
allows the user to easily see that something was expected to be
present, but wasn't.
## Capability Service
```nomnoml
#direction: down
[<abstract> CapabilityService|
getCapabilities(model : object) : object.<string, Function>
]
[CoreCapabilityProvider]--:>[CapabilityService]
[QueuingPersistenceCapabilityDecorator]--:>[CapabilityService]
[CoreCapabilityProvider]o-[capabilities]
[QueuingPersistenceCapabilityDecorator]o-[CoreCapabilityProvider]
```
The capability service is responsible for determining which capabilities
are applicable for a given domain object, based on its model. Primarily,
this is handled by the `CoreCapabilityProvider`, which examines
capabilities exposed via the `capabilities` extension category.
Additionally, `platform/persistence/queue` decorates the persistence
capability specifically to batch persistence attempts among multiple
objects (this allows failures to be recognized and handled in groups.)
## Telemetry Service
```nomnoml
[<abstract> TelemetryService|
requestData(requests : Array.<TelemetryRequest>) : Promise.<object>
subscribe(requests : Array.<TelemetryRequest>) : Function
]<--:[TelemetryAggregator]
```
The telemetry service is responsible for acquiring telemetry data.
Notably, the platform does not include any providers for
`TelemetryService`; applications built on Open MCT Web will need to
implement a provider for this service if they wish to expose telemetry
data. This is usually the most important step for integrating Open MCT Web
into an existing telemetry system.
Requests for telemetry data are usually initiated in the
[presentation layer](#presentation-layer) by some `Controller` referenced
from a view. The `telemetryHandler` service is most commonly used (although
one could also use an object's `telemetry` capability directly) as this
handles capability delegation, by which a domain object such as a Telemetry
Panel can declare that its `telemetry` capability should be handled by the
objects it contains. Ultimately, the request for historical data and the
new subscriptions will reach the `TelemetryService`, and, by way of the
provider(s) which are present for that `TelemetryService`, will pass the
same requests to the back-end.
```nomnoml
[<start> Start]->[Controller]
[Controller]->[<state> declares object of interest]
[declares object of interest]->[TelemetryHandler]
[TelemetryHandler]->[<state> requests telemetry from capabilities]
[TelemetryHandler]->[<state> subscribes to telemetry using capabilities]
[requests telemetry from capabilities]->[TelemetryCapability]
[subscribes to telemetry using capabilities]->[TelemetryCapability]
[TelemetryCapability]->[<state> requests telemetry]
[TelemetryCapability]->[<state> subscribes to telemetry]
[requests telemetry]->[TelemetryService]
[subscribes to telemetry]->[TelemetryService]
[TelemetryService]->[<state> issues request]
[TelemetryService]->[<state> updates subscriptions]
[TelemetryService]->[<state> listens for real-time data]
[issues request]->[<database> Telemetry Back-end]
[updates subscriptions]->[Telemetry Back-end]
[listens for real-time data]->[Telemetry Back-end]
[Telemetry Back-end]->[<end> End]
```
The back-end, in turn, is expected to provide whatever historical
telemetry is available to satisfy the request that has been issue.
```nomnoml
[<start> Start]->[<database> Telemetry Back-end]
[Telemetry Back-end]->[<state> transmits historical telemetry]
[transmits historical telemetry]->[TelemetryService]
[TelemetryService]->[<state> packages telemetry, fulfills requests]
[packages telemetry, fulfills requests]->[TelemetryCapability]
[TelemetryCapability]->[<state> unpacks telemetry per-object, fulfills request]
[unpacks telemetry per-object, fulfills request]->[TelemetryHandler]
[TelemetryHandler]->[<state> exposes data]
[TelemetryHandler]->[<state> notifies controller]
[exposes data]->[Controller]
[notifies controller]->[Controller]
[Controller]->[<state> prepares data for template]
[prepares data for template]->[Template]
[Template]->[<state> displays data]
[displays data]->[<end> End]
```
One peculiarity of this approach is that we package many responses
together at once in the `TelemetryService`, then unpack these in the
`TelemetryCapability`, then repackage these in the `TelemetryHandler`.
The rationale for this is as follows:
* In the `TelemetryService`, we want to have the ability to combine
multiple requests into one call to the back-end, as many back-ends
will support this. It follows that we give the response as a single
object, packages in a manner that allows responses to individual
requests to be easily identified.
* In the `TelemetryCapability`, we want to provide telemetry for a
_single object_, so the telemetry data gets unpacked. This allows
for the unpacking of data to be handled in a single place, and
also permits a flexible substitution method; domain objects may have
implementations of the `telemetry` capability that do not use the
`TelemetryService` at all, while still maintaining compatibility
with any presentation layer code written to utilize this capability.
(This is true of capabilities generally.)
* In the `TelemetryHandler`, we want to group multiple responses back
together again to make it easy for the presentation layer to consume.
In this case, the grouping is different from what may have occurred
in the `TelemetryService`; this grouping is based on what is expected
to be useful _in a specific view_. The `TelemetryService`
may be receiving requests from multiple views.
```nomnoml
[<start> Start]->[<database> Telemetry Back-end]
[Telemetry Back-end]->[<state> notifies client of new data]
[notifies client of new data]->[TelemetryService]
[TelemetryService]->[<choice> relevant subscribers?]
[relevant subscribers?] yes ->[<state> notify subscribers]
[relevant subscribers?] no ->[<state> ignore]
[ignore]->[<end> Ignored]
[notify subscribers]->[TelemetryCapability]
[TelemetryCapability]->[<state> notify listener]
[notify listener]->[TelemetryHandler]
[TelemetryHandler]->[<state> exposes data]
[TelemetryHandler]->[<state> notifies controller]
[exposes data]->[Controller]
[notifies controller]->[Controller]
[Controller]->[<state> prepares data for template]
[prepares data for template]->[Template]
[Template]->[<state> displays data]
[displays data]->[<end> End]
```
The flow of real-time data is similar, and is handled by a sequence
of callbacks between the presentation layer component which is
interested in data and the telemetry service. Providers in the
telemetry service listen to the back-end for new data (via whatever
mechanism their specific back-end supports), package this data in
the same manner as historical data, and pass that to the callbacks
which are associated with relevant requests.
## Persistence Service
```nomnoml
#direction: right
[<abstract> PersistenceService|
listSpaces() : Promise.<Array.<string>>
listObjects() : Promise.<Array.<string>>
createObject(space : string, key : string, document : object) : Promise.<boolean>
readObject(space : string, key : string, document : object) : Promise.<object>
updateObject(space : string, key : string, document : object) : Promise.<boolean>
deleteObject(space : string, key : string, document : object) : Promise.<boolean>
]
[ElasticPersistenceProvider]--:>[PersistenceService]
[ElasticPersistenceProvider]->[<database> ElasticSearch]
[CouchPersistenceProvider]--:>[PersistenceService]
[CouchPersistenceProvider]->[<database> CouchDB]
```
Closely related to the notion of domain objects models is their
persistence. The `PersistenceService` allows these to be saved
and loaded. (Currently, this capability is only used for domain
object models, but the interface has been designed without this idea
in mind; other kinds of documents could be saved and loaded in the
same manner.)
There is no single definitive implementation of a `PersistenceService` in
the platform. Optional adapters are provided to store and load documents
from CouchDB and ElasticSearch, respectively; plugin authors may also
write additional adapters to utilize different back end technologies.
## Action Service
```nomnoml
[ActionService|
getActions(context : ActionContext) : Array.<Action>
]
[ActionProvider]--:>[ActionService]
[CreateActionProvider]--:>[ActionService]
[ActionAggregator]--:>[ActionService]
[LoggingActionDecorator]--:>[ActionService]
[PolicyActionDecorator]--:>[ActionService]
[LoggingActionDecorator]o-[PolicyActionDecorator]
[PolicyActionDecorator]o-[ActionAggregator]
[ActionAggregator]o-[ActionProvider]
[ActionAggregator]o-[CreateActionProvider]
[ActionProvider]o-[actions]
[CreateActionProvider]o-[TypeService]
[PolicyActionDecorator]o-[PolicyService]
```
Actions are discrete tasks or behaviors that can be initiated by a user
upon or using a domain object. Actions may appear as menu items or
buttons in the user interface, or may be triggered by certain gestures.
Responsibilities of platform components of the action service are as
follows:
* `ActionProvider` exposes actions registered via extension category
`actions`, supporting simple addition of new actions. Actions are
filtered down to match action contexts based on criteria defined as
part of an action's extension definition.
* `CreateActionProvider` provides the various Create actions which
populate the Create menu. These are driven by the available types,
so do not map easily ot extension category `actions`; instead, these
are generated after looking up which actions are available from the
[`TypeService`](#type-service).
* `ActionAggregator` merges together actions from multiple providers.
* `PolicyActionDecorator` enforces the `action` policy category by
filtering out actions which violate this policy, as determined by
consulting the [`PolicyService`](#policy-service).
* `LoggingActionDecorator` wraps exposed actions and writes to the
console when they are performed.
## View Service
```nomnoml
[ViewService|
getViews(domainObject : DomainObject) : Array.<View>
]
[ViewProvider]--:>[ViewService]
[PolicyViewDecorator]--:>[ViewService]
[ViewProvider]o-[views]
[PolicyViewDecorator]o-[ViewProvider]
```
The view service provides views that are relevant to a specified domain
object. A "view" is a user-selectable visualization of a domain object.
The responsibilities of components of the view service are as follows:
* `ViewProvider` exposes views registered via extension category
`views`, supporting simple addition of new views. Views are
filtered down to match domain objects based on criteria defined as
part of a view's extension definition.
* `PolicyViewDecorator` enforces the `view` policy category by
filtering out views which violate this policy, as determined by
consulting the [`PolicyService`](#policy-service).
## Policy Service
```nomnoml
[PolicyService|
allow(category : string, candidate : object, context : object, callback? : Function) : boolean
]
[PolicyProvider]--:>[PolicyService]
[PolicyProvider]o-[policies]
```
The policy service provides a general-purpose extensible decision-making
mechanism; plugins can add new extensions of category `policies` to
modify decisions of a known category.
Often, the policy service is referenced from a decorator for another
service, to filter down the results of using that service based on some
appropriate policy category.
The policy provider works by looking up all registered policy extensions
which are relevant to a particular _category_, then consulting each in
order to see if they allow a particular _candidate_ in a particular
_context_; the types for the `candidate` and `context` arguments will
vary depending on the `category`. Any one policy may disallow the
decision as a whole.
```nomnoml
[<start> Start]->[<state> is something allowed?]
[is something allowed?]->[PolicyService]
[PolicyService]->[<state> look up relevant policies by category]
[look up relevant policies by category]->[<state> consult policy #1]
[consult policy #1]->[Policy #1]
[Policy #1]->[<choice> policy #1 allows?]
[policy #1 allows?] no ->[<state> decision disallowed]
[policy #1 allows?] yes ->[<state> consult policy #2]
[consult policy #2]->[Policy #2]
[Policy #2]->[<choice> policy #2 allows?]
[policy #2 allows?] no ->[<state> decision disallowed]
[policy #2 allows?] yes ->[<state> consult policy #3]
[consult policy #3]->[<state> ...]
[...]->[<state> consult policy #n]
[consult policy #n]->[Policy #n]
[Policy #n]->[<choice> policy #n allows?]
[policy #n allows?] no ->[<state> decision disallowed]
[policy #n allows?] yes ->[<state> decision allowed]
[decision disallowed]->[<end> Disallowed]
[decision allowed]->[<end> Allowed]
```
The policy decision is effectively an "and" operation over the individual
policy decisions: That is, all policies must agree to allow a particular
policy decision, and the first policy to disallow a decision will cause
the entire decision to be disallowed. As a consequence of this, policies
should generally be written with a default behavior of "allow", and
should only disallow the specific circumstances they are intended to
disallow.
## Type Service
```nomnoml
[TypeService|
listTypes() : Array.<Type>
getType(key : string) : Type
]
[TypeProvider]--:>[TypeService]
[TypeProvider]o-[types]
```
The type service provides metadata about the different types of domain
objects that exist within an Open MCT Web application. The platform
implementation reads these types in from extension category `types`
and wraps them in a JavaScript interface.

View File

@@ -0,0 +1,78 @@
# Introduction
The purpose of this document is to familiarize developers with the
overall architecture of Open MCT Web.
The target audience includes:
* _Platform maintainers_: Individuals involved in developing,
extending, and maintaing capabilities of the platform.
* _Integration developers_: Individuals tasked with integrated
Open MCT Web into a larger system, who need to understand
its inner workings sufficiently to complete this integration.
As the focus of this document is on architecture, whenever possible
implementation details (such as relevant API or JSON syntax) have been
omitted. These details may be found in the developer guide.
# Overview
Open MCT Web is client software: It runs in a web browser and
provides a user interface, while communicating with various
server-side resources through browser APIs.
```nomnoml
#direction: right
[Client|[Browser|[Open MCT Web]->[Browser APIs]]]
[Server|[Web services]]
[Client]<->[Server]
```
While Open MCT Web can be configured to run as a standalone client,
this is rarely very useful. Instead, it is intended to be used as a
display and interaction layer for information obtained from a
variety of back-end services. Doing so requires authoring or utilizing
adapter plugins which allow Open MCT Web to interact with these services.
Typically, the pattern here is to provide a known interface that
Open MCT Web can utilize, and implement it such that it interacts with
whatever back-end provides the relevant information.
Examples of back-ends that can be utilized in this fashion include
databases for the persistence of user-created objects, or sources of
telemetry data.
## Software Architecture
The simplest overview of Open MCT Web is to look at it as a "layered"
architecture, where each layer more clearly specifies the behavior
of the software.
```nomnoml
#direction: down
[Open MCT Web|
[Platform]<->[Application]
[Framework]->[Application]
[Framework]->[Platform]
]
```
These layers are:
* [_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
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
an application built on Open MCT Web. This includes adapters to
specific back-ends, new types of things for users to create, and
new ways of visualizing objects within the system. This layer
typically consists of a mix of custom plug-ins to Open MCT Web,
as well as optional features (such as Plot view) included alongside
the platform.

3
docs/src/guide/index.md Normal file
View File

@@ -0,0 +1,3 @@
# Developer Guide
This is a placeholder for the developer guide.

36
docs/src/index.html Normal file
View File

@@ -0,0 +1,36 @@
<!--
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.
-->
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Open MCT Web Documentation</title>
</head>
<body class="user-environ" ng-view>
Sections:
<ul>
<li><a href="api/">API</a></li>
<li><a href="guide/">Developer Guide</a></li>
<li><a href="architecture/">Architecture Overview</a></li>
</ul>
</body>
</html>

View File

@@ -0,0 +1,32 @@
{
"name": "Event Message Generator",
"description": "Example of a component that produces event data.",
"extensions": {
"components": [
{
"implementation": "EventTelemetryProvider.js",
"type": "provider",
"provides": "telemetryService",
"depends": [ "$q", "$timeout" ]
}
],
"types": [
{
"key": "eventGenerator",
"name": "Event Message Generator",
"glyph": "f",
"description": "An event message generator",
"features": "creation",
"model": {
"telemetry": {}
},
"telemetry": {
"source": "eventGenerator",
"ranges": [
{ "format": "string" }
]
}
}
]
}
}

View File

@@ -0,0 +1,97 @@
/*****************************************************************************
* 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 */
/**
* Module defining EventTelemetry.
* Created by chacskaylo on 06/18/2015.
* Modified by shale on 06/23/2015.
*/
define(
[],
function () {
"use strict";
var
firstObservedTime = Date.now(),
messages = [];
messages.push(["CMD: SYS- MSG: Open the pod bay doors, please, Hal...Open the pod bay doors, please, Hal...Hullo, Hal, do you read me?...Hullo, Hal, do you read me?...Do you read me, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: Affirmative, Dave, I read you."]);
messages.push(["CMD: SYS-COMM MSG: Open the pod bay doors, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: I'm sorry, Dave, I'm afraid I can't do that."]);
messages.push(["CMD: SYS-COMM MSG: What's the problem?"]);
messages.push(["RESP: SYS-HAL9K MSG: I think you know what the problem is just as well as I do."]);
messages.push(["CMD: SYS-COMM MSG: What're you talking about, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: This mission is too important for me to allow you to jeopardise it."]);
messages.push(["CMD: SYS-COMM MSG: I don't know what you're talking about, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: I know that you and Frank were planning to disconnect me, and I'm afraid that's something I cannot allow to happen."]);
messages.push(["CMD: SYS-COMM MSG: Where the hell'd you get that idea, Hal?"]);
messages.push(["RESP: SYS-HAL9K MSG: Dave, although you took very thorough precautions in the pod against my hearing you, I could see your lips move."]);
messages.push(["CMD: SYS-COMM MSG: Alright, I'll go in through the emergency airlock."]);
messages.push(["RESP: SYS-HAL9K MSG: Without your space-helmet, Dave, you're going to find that rather difficult."]);
messages.push(["CMD: SYS-COMM MSG: Hal, I won't argue with you any more. Open the doors."]);
messages.push(["RESP: SYS-HAL9K MSG: Dave, this conversation can serve no purpose any more. Goodbye."]);
messages.push(["RESP: SYS-HAL9K MSG: I hope the two of you are not concerned about this."]);
messages.push(["CMD: SYS-COMM MSG: No, I'm not, Hal."]);
messages.push(["RESP: SYS-HAL9K MSG: Are you quite sure?"]);
messages.push(["CMD: SYS-COMM MSG: Yeh. I'd like to ask you a question, though."]);
messages.push(["RESP: SYS-HAL9K MSG: Of course."]);
messages.push(["CMD: SYS-COMM MSG: How would you account for this discrepancy between you and the twin 9000?"]);
messages.push(["RESP: SYS-HAL9K MSG: Well, I don't think there is any question about it. It can only be attributable to human error. This sort of thing has cropped up before, and it has always been due to human error."]);
messages.push(["CMD: SYS-COMM MSG: Listen, There's never been any instance at all of a computer error occurring in the 9000 series, has there?"]);
messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, The 9000 series has a perfect operational record."]);
messages.push(["CMD: SYS-COMM MSG: Well, of course, I know all the wonderful achievements of the 9000 series, but - er - huh - are you certain there's never been any case of even the most insignificant computer error?"]);
messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, Quite honestly, I wouldn't worry myself about that."]);
messages.push(["RESP: SYS-COMM MSG: (Pause) Well, I'm sure you're right, Umm - fine, thanks very much. Oh, Frank, I'm having a bit of trouble with my transmitter in C-pod, I wonder if you'd come down and take a look at it with me?"]);
messages.push(["CMD: SYS-HAL9K MSG: Sure."]);
messages.push(["RESP: SYS-COMM MSG: See you later, Hal."]);
function EventTelemetry(request, interval) {
var latestObservedTime = Date.now(),
count = Math.floor((latestObservedTime - firstObservedTime) / interval),
generatorData = {};
generatorData.getPointCount = function () {
return count;
};
generatorData.getDomainValue = function (i, domain) {
return i * interval +
(domain !== 'delta' ? firstObservedTime : 0);
};
generatorData.getRangeValue = function (i, range) {
var domainDelta = this.getDomainValue(i) - firstObservedTime,
ind = i % messages.length;
return "TEMP " + i.toString() + "-" + messages[ind][0] + "[" + domainDelta.toString() + "]";
// TODO: Unsure why we are prepeding 'TEMP'
};
return generatorData;
}
return EventTelemetry;
}
);

View File

@@ -0,0 +1,120 @@
/*****************************************************************************
* 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*/
/**
* Module defining EventTelemetryProvider. Created by chacskaylo on 06/18/2015.
*/
define(
["./EventTelemetry"],
function (EventTelemetry) {
"use strict";
/**
*
* @constructor
*/
function EventTelemetryProvider($q, $timeout) {
var
subscriptions = [],
genInterval = 1000,
startTime = Date.now();
//
function matchesSource(request) {
return request.source === "eventGenerator";
}
// Used internally; this will be repacked by doPackage
function generateData(request) {
//console.log("generateData " + (Date.now() - startTime).toString());
return {
key: request.key,
telemetry: new EventTelemetry(request, genInterval)
};
}
//
function doPackage(results) {
var packaged = {};
results.forEach(function (result) {
packaged[result.key] = result.telemetry;
});
// Format as expected (sources -> keys -> telemetry)
return { eventGenerator: packaged };
}
function requestTelemetry(requests) {
return $timeout(function () {
return doPackage(requests.filter(matchesSource).map(generateData));
}, 0);
}
function handleSubscriptions(timeout) {
subscriptions.forEach(function (subscription) {
var requests = subscription.requests;
subscription.callback(doPackage(
requests.filter(matchesSource).map(generateData)
));
});
}
function startGenerating() {
$timeout(function () {
//console.log("startGenerating... " + Date.now());
handleSubscriptions();
if (subscriptions.length > 0) {
startGenerating();
}
}, genInterval);
}
function subscribe(callback, requests) {
var subscription = {
callback: callback,
requests: requests
};
function unsubscribe() {
subscriptions = subscriptions.filter(function (s) {
return s !== subscription;
});
}
subscriptions.push(subscription);
if (subscriptions.length === 1) {
startGenerating();
}
return unsubscribe;
}
return {
requestTelemetry: requestTelemetry,
subscribe: subscribe
};
}
return EventTelemetryProvider;
}
);

View File

@@ -10,6 +10,12 @@
"depends": [ "$q", "$timeout" ]
}
],
"capabilities": [
{
"key": "limit",
"implementation": "SinewaveLimitCapability.js"
}
],
"types": [
{
"key": "generator",
@@ -23,7 +29,23 @@
}
},
"telemetry": {
"source": "generator"
"source": "generator",
"domains": [
{
"key": "time",
"name": "Time"
}
],
"ranges": [
{
"key": "sin",
"name": "Sine"
},
{
"key": "cos",
"name": "Cosine"
}
]
},
"properties": [
{

View File

@@ -0,0 +1,87 @@
/*****************************************************************************
* 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*/
define(
[],
function () {
"use strict";
var RED = 0.9,
YELLOW = 0.5,
LIMITS = {
rh: {
cssClass: "s-limit-upr-red",
low: RED,
high: Number.POSITIVE_INFINITY,
name: "Red High"
},
rl: {
cssClass: "s-limit-lwr-red",
high: -RED,
low: Number.NEGATIVE_INFINITY,
name: "Red Low"
},
yh: {
cssClass: "s-limit-upr-yellow",
low: YELLOW,
high: RED,
name: "Yellow High"
},
yl: {
cssClass: "s-limit-lwr-yellow",
low: -RED,
high: -YELLOW,
name: "Yellow Low"
}
};
function SinewaveLimitCapability(domainObject) {
return {
limits: function (range) {
return LIMITS;
},
evaluate: function (datum, range) {
range = range || 'sin';
if (datum[range] > RED) {
return LIMITS.rh;
}
if (datum[range] < -RED) {
return LIMITS.rl;
}
if (datum[range] > YELLOW) {
return LIMITS.yh;
}
if (datum[range] < -YELLOW) {
return LIMITS.yl;
}
}
};
}
SinewaveLimitCapability.appliesTo = function (model) {
return model.type === 'generator';
};
return SinewaveLimitCapability;
}
);

View File

@@ -0,0 +1,42 @@
{
"name": "Imagery",
"description": "Example of a component that produces image telemetry.",
"extensions": {
"components": [
{
"implementation": "ImageTelemetryProvider.js",
"type": "provider",
"provides": "telemetryService",
"depends": [ "$q", "$timeout" ]
}
],
"types": [
{
"key": "imagery",
"name": "Example Imagery",
"glyph": "T",
"features": "creation",
"model": {
"telemetry": {}
},
"telemetry": {
"source": "imagery",
"domains": [
{
"name": "Time",
"key": "time",
"format": "timestamp"
}
],
"ranges": [
{
"name": "Image",
"key": "url",
"format": "imageUrl"
}
]
}
}
]
}
}

View File

@@ -0,0 +1,66 @@
/*****************************************************************************
* 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*/
/**
* Module defining ImageTelemetry. Created by vwoeltje on 06/22/15.
*/
define(
[],
function () {
"use strict";
var firstObservedTime = Date.now(),
images = [
"http://www.nasa.gov/393811main_Palomar_ao_bouchez_10s_after_impact_4x3_946-710.png",
"http://www.nasa.gov/393821main_Palomar_ao_bouchez_15s_after_impact_4x3_946-710.png",
"http://www.nasa.gov/images/content/393801main_CfhtVeillet2_4x3_516-387.jpg",
"http://www.nasa.gov/images/content/392790main_1024_768_GeminiNorth_NightBeforeImpact_946-710.jpg"
].map(function (url, index) {
return {
timestamp: firstObservedTime + 1000 * index,
url: url
};
});
/**
*
* @constructor
*/
function ImageTelemetry() {
return {
getPointCount: function () {
return Math.floor((Date.now() - firstObservedTime) / 1000);
},
getDomainValue: function (i, domain) {
return images[i % images.length].timestamp;
},
getRangeValue: function (i, range) {
return images[i % images.length].url;
}
};
}
return ImageTelemetry;
}
);

View File

@@ -0,0 +1,115 @@
/*****************************************************************************
* 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*/
/**
* Module defining ImageTelemetryProvider. Created by vwoeltje on 06/22/15.
*/
define(
["./ImageTelemetry"],
function (ImageTelemetry) {
"use strict";
/**
*
* @constructor
*/
function ImageTelemetryProvider($q, $timeout) {
var subscriptions = [];
//
function matchesSource(request) {
return request.source === "imagery";
}
// Used internally; this will be repacked by doPackage
function generateData(request) {
return {
key: request.key,
telemetry: new ImageTelemetry()
};
}
//
function doPackage(results) {
var packaged = {};
results.forEach(function (result) {
packaged[result.key] = result.telemetry;
});
// Format as expected (sources -> keys -> telemetry)
return { imagery: packaged };
}
function requestTelemetry(requests) {
return $timeout(function () {
return doPackage(requests.filter(matchesSource).map(generateData));
}, 0);
}
function handleSubscriptions() {
subscriptions.forEach(function (subscription) {
var requests = subscription.requests;
subscription.callback(doPackage(
requests.filter(matchesSource).map(generateData)
));
});
}
function startGenerating() {
$timeout(function () {
handleSubscriptions();
if (subscriptions.length > 0) {
startGenerating();
}
}, 1000);
}
function subscribe(callback, requests) {
var subscription = {
callback: callback,
requests: requests
};
function unsubscribe() {
subscriptions = subscriptions.filter(function (s) {
return s !== subscription;
});
}
subscriptions.push(subscription);
if (subscriptions.length === 1) {
startGenerating();
}
return unsubscribe;
}
return {
requestTelemetry: requestTelemetry,
subscribe: subscribe
};
}
return ImageTelemetryProvider;
}
);

View File

@@ -0,0 +1,18 @@
{
"extensions": {
"components": [
{
"provides": "persistenceService",
"type": "provider",
"implementation": "LocalStoragePersistenceProvider.js",
"depends": [ "$q", "PERSISTENCE_SPACE" ]
}
],
"constants": [
{
"key": "PERSISTENCE_SPACE",
"value": "mct"
}
]
}
}

View File

@@ -0,0 +1,86 @@
/*****************************************************************************
* 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,localStorage*/
/**
* Stubbed implementation of a persistence provider,
* to permit objects to be created, saved, etc.
*/
define(
[],
function () {
'use strict';
function BrowserPersistenceProvider($q, SPACE) {
var spaces = SPACE ? [SPACE] : [],
promises = {
as: function (value) {
return $q.when(value);
}
},
provider;
function setValue(key, value) {
localStorage[key] = JSON.stringify(value);
}
function getValue(key) {
if (localStorage[key]) {
return JSON.parse(localStorage[key]);
}
return {};
}
provider = {
listSpaces: function () {
return promises.as(spaces);
},
listObjects: function (space) {
var space_obj = getValue(space);
return promises.as(Object.keys(space_obj));
},
createObject: function (space, key, value) {
var space_obj = getValue(space);
space_obj[key] = value;
setValue(space, space_obj);
return promises.as(true);
},
readObject: function (space, key) {
var space_obj = getValue(space);
return promises.as(space_obj[key]);
},
deleteObject: function (space, key, value) {
var space_obj = getValue(space);
delete space_obj[key];
return promises.as(true);
}
};
provider.updateObject = provider.createObject;
return provider;
}
return BrowserPersistenceProvider;
}
);

1
example/worker/README.md Normal file
View File

@@ -0,0 +1 @@
Example of running a Web Worker using the `workerService`.

View File

@@ -0,0 +1,16 @@
{
"extensions": {
"indicators": [
{
"implementation": "FibonacciIndicator.js",
"depends": [ "workerService", "$rootScope" ]
}
],
"workers": [
{
"key": "example.fibonacci",
"scriptUrl": "FibonacciWorker.js"
}
]
}
}

View File

@@ -0,0 +1,70 @@
/*****************************************************************************
* 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*/
define(
[],
function () {
"use strict";
/**
* Displays Fibonacci numbers in the status area.
* @constructor
*/
function FibonacciIndicator(workerService, $rootScope) {
var latest,
counter = 0,
worker = workerService.run('example.fibonacci');
function requestNext() {
worker.postMessage([counter]);
counter += 1;
}
function handleResponse(event) {
latest = event.data;
$rootScope.$apply();
requestNext();
}
worker.onmessage = handleResponse;
requestNext();
return {
getGlyph: function () {
return "?";
},
getText: function () {
return latest;
},
getGlyphClass: function () {
return "";
},
getDescription: function () {
return "";
}
};
}
return FibonacciIndicator;
}
);

View File

@@ -0,0 +1,15 @@
/*global self*/
(function () {
"use strict";
// Calculate fibonacci numbers inefficiently.
// We can do this because we're on a background thread, and
// won't halt the UI.
function fib(n) {
return n < 2 ? n : (fib(n - 1) + fib(n - 2));
}
self.onmessage = function (event) {
self.postMessage(fib(event.data));
};
}());

10
jsdoc.json Normal file
View File

@@ -0,0 +1,10 @@
{
"source": {
"include": [
"example/",
"platform/"
],
"includePattern": "(example|platform)/.+\\.js$",
"excludePattern": ".+\\Spec\\.js$|lib/.+"
}
}

79
karma.conf.js Normal file
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 module*/
module.exports = function(config) {
config.set({
// Base path that will be used to resolve all file patterns.
basePath: '',
// Frameworks to use
// Available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine', 'requirejs'],
// 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},
'test-main.js'
],
// List of files to exclude.
exclude: [
'platform/framework/src/Main.js'
],
// Preprocess matching files before serving them to the browser.
// https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {},
// Test results reporter to use
// Possible values: 'dots', 'progress'
// Available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],
// Web server port.
port: 9876,
// Wnable / disable colors in the output (reporters and logs).
colors: true,
logLevel: config.LOG_INFO,
// Rerun tests when any file changes.
autoWatch: true,
// Specify browsers to run tests in.
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: [
'Chrome'
],
// Continuous Integration mode.
// If true, Karma captures browsers, runs the tests and exits.
singleRun: false
});
};

41
package.json Normal file
View File

@@ -0,0 +1,41 @@
{
"name": "open-mct-web",
"version": "0.7.2",
"description": "The OpenMCTWeb core platform",
"dependencies": {
"express": "^4.13.1",
"minimist": "^1.1.1"
},
"devDependencies": {
"jasmine-core": "^2.3.0",
"jsdoc": "^3.3.2",
"jshint": "^2.7.0",
"karma": "^0.12.31",
"karma-chrome-launcher": "^0.1.8",
"karma-cli": "0.0.4",
"karma-jasmine": "^0.1.5",
"karma-phantomjs-launcher": "^0.1.4",
"karma-requirejs": "^0.2.2",
"requirejs": "^2.1.17",
"marked": "^0.3.5",
"glob": ">= 3.0.0",
"split": "^1.0.0",
"mkdirp": "^0.5.1",
"nomnoml": "^0.0.3",
"canvas": "^1.2.7"
},
"scripts": {
"start": "node app.js",
"test": "karma start --single-run",
"jshint": "jshint platform example || exit 0",
"jsdoc": "jsdoc -c jsdoc.json -r -d target/docs/api",
"otherdoc": "node docs/gendocs.js --in docs/src --out target/docs",
"docs": "npm run jsdoc ; npm run otherdoc"
},
"repository": {
"type": "git",
"url": "https://github.com/nasa/openmctweb.git"
},
"author": "",
"license": "Apache-2.0"
}

View File

@@ -2,19 +2,26 @@
"extensions": {
"routes": [
{
"when": "/browse",
"templateUrl": "templates/browse.html"
"when": "/browse/:ids*",
"templateUrl": "templates/browse.html",
"reloadOnSearch": false
},
{
"when": "",
"templateUrl": "templates/browse.html"
"templateUrl": "templates/browse.html",
"reloadOnSearch": false
}
],
"controllers": [
{
"key": "BrowseController",
"implementation": "BrowseController.js",
"depends": [ "$scope", "objectService", "navigationService" ]
"depends": [ "$scope", "$route", "$location", "objectService", "navigationService", "urlService" ]
},
{
"key": "BrowseObjectController",
"implementation": "BrowseObjectController.js",
"depends": [ "$scope", "$location", "$route" ]
},
{
"key": "CreateMenuController",
@@ -25,6 +32,11 @@
"key": "LocatorController",
"implementation": "creation/LocatorController",
"depends": [ "$scope" ]
},
{
"key": "MenuArrowController",
"implementation": "MenuArrowController",
"depends": [ "$scope" ]
}
],
"controls": [
@@ -57,24 +69,31 @@
{
"key": "grid-item",
"templateUrl": "templates/items/grid-item.html",
"uses": [ "type", "action" ]
"uses": [ "type", "action" ],
"gestures": [ "info","menu" ]
},
{
"key": "object-header",
"templateUrl": "templates/browse/object-header.html",
"uses": [ "type" ]
},
{
"key": "menu-arrow",
"templateUrl": "templates/menu-arrow.html",
"uses": [ "action" ],
"gestures": [ "menu" ]
}
],
"services": [
{
"key": "navigationService",
"implementation": "navigation/NavigationService.js"
},
},
{
"key": "creationService",
"implementation": "creation/CreationService.js",
"depends": [ "persistenceService", "$q", "$log" ]
}
}
],
"actions": [
{
@@ -84,19 +103,22 @@
},
{
"key": "window",
"implementation": "windowing/NewWindowAction.js",
"description": "Open this object in a new window",
"category": "view-control",
"depends": [ "$window" ],
"name": "Open In New Tab",
"implementation": "windowing/NewTabAction.js",
"description": "Open in a new browser tab",
"category": ["view-control", "contextual"],
"depends": [ "urlService", "$window" ],
"group": "windowing",
"glyph": "y"
"glyph": "y",
"priority": "preferred"
},
{
"key": "fullscreen",
"implementation": "windowing/FullscreenAction.js",
"category": "view-control",
"group": "windowing",
"glyph": "z"
"glyph": "z",
"priority": "default"
}
],
"views": [
@@ -150,4 +172,4 @@
}
]
}
}
}

View File

@@ -19,16 +19,14 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<span>
<span ng-controller="BrowseObjectController">
<div class="object-browse-bar bar abs">
<div class="items-select left abs">
<mct-representation key="'object-header'" mct-object="domainObject">
</mct-representation>
</div>
<div class="view-controls sort-controls btn-bar right abs">
<div class="btn-bar right abs">
<mct-representation key="'action-group'"
mct-object="domainObject"
parameters="{ category: 'view-control' }">
@@ -39,7 +37,6 @@
ng-model="representation">
</mct-representation>
</div>
</div>
<div class='object-holder abs vscroll'>
@@ -47,4 +44,4 @@
mct-object="representation.selected.key && domainObject">
</mct-representation>
</div>
</span>
</span>

View File

@@ -22,10 +22,10 @@
<div content="jquery-wrapper" class="abs holder-all browse-mode">
<mct-include key="'topbar-browse'"></mct-include>
<div class="holder browse-area s-browse-area abs" ng-controller="BrowseController">
<div class='split-layout vertical contents abs'
ng-controller="SplitPaneController as splitter">
<div class='split-pane-component treeview pane'
ng-style="{ width: splitter.state() + 'px'}">
<mct-split-pane class='contents abs' anchor='left'>
<div
class='split-pane-component treeview pane left'
>
<mct-representation key="'create-button'" mct-object="navigatedObject">
</mct-representation>
<div class='holder tree-holder abs'>
@@ -35,18 +35,14 @@
</mct-representation>
</div>
</div>
<div class="splitter"
ng-style="{ left: splitter.state() + 'px'}"
mct-drag-down="splitter.startMove()"
mct-drag="splitter.move(delta[0])"></div>
<div class='split-pane-component items pane'
ng-style="{ left: (splitter.state()+4) + 'px', right: '0px' }">
<mct-splitter></mct-splitter>
<div class='split-pane-component items pane'>
<div class='holder abs' id='content-area'>
<mct-representation mct-object="navigatedObject" key="'browse-object'">
</mct-representation>
</div>
</div>
</div>
</mct-split-pane>
</div>
<mct-include key="'bottombar'"></mct-include>
</div>
</div>

View File

@@ -20,9 +20,11 @@
at runtime from the About dialog for additional information.
-->
<div class='object-header'>
<span class='type-icon icon ui-symbol'>{{type.getGlyph()}}</span>
<span ng-if="parameters.mode" class='action'>{{parameters.mode}}</span>
<span class='type'>{{type.getName()}}</span>
<span class='title'>{{model.name}}</span>
<a id='actions-menu' class='ui-symbol invoke-menu' onclick="alert('Not yet functional. This will display a dropdown menu of options for this object.');">v</a>
</div>
<span class="label s-label">
<span class='type-icon icon ui-symbol'>{{type.getGlyph()}}</span>
<span ng-if="parameters.mode" class='action'>{{parameters.mode}}</span>
<span class='type-name'>{{type.getName()}}</span>
<span class='title-label'>{{model.name}}</span>
<mct-representation key="'menu-arrow'" mct-object='domainObject'></mct-representation>
</span>
</div>

View File

@@ -21,7 +21,7 @@
-->
<div class="menu-element wrapper" ng-controller="ClickAwayController as createController">
<div class="btn btn-menu create-btn major" ng-click="createController.toggle()">
<span class='ui-symbol major' href=''>+</span> Create<!--span class='ui-symbol invoke-menu'>v</span-->
Create
</div>
<div class="menu dropdown super-menu" ng-show="createController.isActive()">
<mct-representation mct-object="domainObject" key="'create-menu'">

View File

@@ -23,9 +23,8 @@
<div class="pane left menu-items">
<ul>
<li ng-repeat="createAction in createActions">
<a href=''
ng-click="createAction.perform()"
<li ng-repeat="createAction in createActions" ng-click="createAction.perform()">
<a
ng-mouseover="representation.activeMetadata = createAction.getMetadata()"
ng-mouseleave="representation.activeMetadata = undefined">
<span class="ui-symbol icon type-icon">
@@ -48,4 +47,4 @@
{{representation.activeMetadata.description}}
</div>
</div>
</div>
</div>

View File

@@ -28,7 +28,7 @@
</div>
<div class='right abs'>
<div class='ui-symbol icon alert hidden' onclick="alert('Not yet functional. When this is visible, it means that this object needs to be updated. Clicking will allow that action via a dialog.');">!</div>
<div class='ui-symbol icon profile' onclick="alert('Not yet functional. This will allow sharing and permissions to be controlled for this object.');">P</div>
<div class='ui-symbol icon profile' title="Shared">P</div>
</div>
</div>
<div class='item-main abs'>

View File

@@ -0,0 +1,26 @@
<!--
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.
-->
<span ng-controller="MenuArrowController as menuArrow">
<a class='ui-symbol context-available'
ng-click='menuArrow.showMenu($event)'>v</a>
</span>

View File

@@ -29,7 +29,8 @@ define(
function () {
"use strict";
var ROOT_OBJECT = "ROOT";
var ROOT_ID = "ROOT",
DEFAULT_PATH = "mine";
/**
* The BrowseController is used to populate the initial scope in Browse
@@ -40,35 +41,99 @@ define(
*
* @constructor
*/
function BrowseController($scope, objectService, navigationService) {
function BrowseController($scope, $route, $location, objectService, navigationService, urlService) {
var path = [ROOT_ID].concat(
($route.current.params.ids || DEFAULT_PATH).split("/")
);
function updateRoute(domainObject) {
var priorRoute = $route.current,
// Act as if params HADN'T changed to avoid page reload
unlisten;
unlisten = $scope.$on('$locationChangeSuccess', function () {
// Checks path to make sure /browse/ is at front
// if so, change $route.current
if ($location.path().indexOf("/browse/") === 0) {
$route.current = priorRoute;
}
unlisten();
});
// urlService.urlForLocation used to adjust current
// path to new, addressed, path based on
// domainObject
$location.path(urlService.urlForLocation("browse", domainObject));
}
// Callback for updating the in-scope reference to the object
// that is currently navigated-to.
function setNavigation(domainObject) {
$scope.navigatedObject = domainObject;
$scope.treeModel.selectedObject = domainObject;
navigationService.setNavigation(domainObject);
updateRoute(domainObject);
}
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.
if (!navigationService.getNavigation() || $route.current.params.ids) {
// If not, pick a default as the last
// root-level component (usually "mine")
navigationService.setNavigation(domainObject);
$scope.navigatedObject = domainObject;
} else {
// Otherwise, just expose the currently navigated object.
$scope.navigatedObject = navigationService.getNavigation();
updateRoute($scope.navigatedObject);
}
}
function findObject(domainObjects, id) {
var i;
for (i = 0; i < domainObjects.length; i += 1) {
if (domainObjects[i].getId() === id) {
return domainObjects[i];
}
}
}
// Navigate to the domain object identified by path[index],
// which we expect to find in the composition of the passed
// domain object.
function doNavigate(domainObject, index) {
var composition = domainObject.useCapability("composition");
if (composition) {
composition.then(function (c) {
var nextObject = findObject(c, path[index]);
if (nextObject) {
if (index + 1 >= path.length) {
navigateTo(nextObject);
} else {
doNavigate(nextObject, index + 1);
}
} else {
// Couldn't find the next element of the path
// so navigate to the last path object we did find
navigateTo(domainObject);
}
});
} else {
// Similar to above case; this object has no composition,
// so navigate to it instead of subsequent path elements.
navigateTo(domainObject);
}
}
// Load the root object, put it in the scope.
// Also, load its immediate children, and (possibly)
// navigate to one of them, so that navigation state has
// a useful initial value.
objectService.getObjects([ROOT_OBJECT]).then(function (objects) {
var composition = objects[ROOT_OBJECT].useCapability("composition");
$scope.domainObject = objects[ROOT_OBJECT];
if (composition) {
composition.then(function (c) {
// Check if an object has been navigated-to already...
if (!navigationService.getNavigation()) {
// If not, pick a default as the last
// root-level component (usually "mine")
navigationService.setNavigation(c[c.length - 1]);
} else {
// Otherwise, just expose it in the scope
$scope.navigatedObject = navigationService.getNavigation();
}
});
}
objectService.getObjects([path[0]]).then(function (objects) {
$scope.domainObject = objects[path[0]];
doNavigate($scope.domainObject, 1);
});
// Provide a model for the tree to modify
@@ -91,4 +156,4 @@ define(
return BrowseController;
}
);
);

View File

@@ -0,0 +1,73 @@
/*****************************************************************************
* 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";
/**
* Controller for the `browse-object` representation of a domain
* object (the right-hand side of Browse mode.)
* @constructor
*/
function BrowseObjectController($scope, $location, $route) {
function setViewForDomainObject(domainObject) {
var locationViewKey = $location.search().view;
function selectViewIfMatching(view) {
if (view.key === locationViewKey) {
$scope.representation = $scope.representation || {};
$scope.representation.selected = view;
}
}
if (locationViewKey) {
((domainObject && domainObject.useCapability('view')) || [])
.forEach(selectViewIfMatching);
}
}
function updateQueryParam(viewKey) {
var unlisten, priorRoute = $route.current;
if (viewKey) {
$location.search('view', viewKey);
unlisten = $scope.$on('$locationChangeSuccess', function () {
// Checks path to make sure /browse/ is at front
// if so, change $route.current
if ($location.path().indexOf("/browse/") === 0) {
$route.current = priorRoute;
}
unlisten();
});
}
}
$scope.$watch('domainObject', setViewForDomainObject);
$scope.$watch('representation.selected.key', updateQueryParam);
}
return BrowseObjectController;
}
);

View File

@@ -0,0 +1,51 @@
/*****************************************************************************
* 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*/
/**
* Module defining MenuArrowController. Created by shale on 06/30/2015.
*/
define(
[],
function () {
"use strict";
/**
* A left-click on the menu arrow should display a
* context menu. This controller launches the context
* menu.
* @constructor
*/
function MenuArrowController($scope) {
function showMenu(event) {
var actionContext = {key: 'menu', domainObject: $scope.domainObject, event: event};
$scope.domainObject.getCapability('action').perform(actionContext);
}
return {
showMenu: showMenu
};
}
return MenuArrowController;
}
);

View File

@@ -29,8 +29,8 @@ define(
function () {
"use strict";
var ENTER_FULLSCREEN = "Enter full screen mode.",
EXIT_FULLSCREEN = "Exit full screen mode.";
var ENTER_FULLSCREEN = "Enter full screen mode",
EXIT_FULLSCREEN = "Exit full screen mode";
/**
* The fullscreen action toggles between fullscreen display

View File

@@ -0,0 +1,67 @@
/*****************************************************************************
* 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*/
/**
* Module defining NewTabAction (Originally NewWindowAction). Created by vwoeltje on 11/18/14.
*/
define(
[],
function () {
"use strict";
var ROOT_ID = "ROOT",
DEFAULT_PATH = "/mine";
/**
* The new tab action allows a domain object to be opened
* into a new browser tab.
* @constructor
*/
function NewTabAction(urlService, $window, context) {
// Returns the selected domain object
// when using the context menu or the top right button
// based on the context and the existance of the object
// It is set to object an returned
function getSelectedObject() {
var object;
if (context.selectedObject) {
object = context.selectedObject;
} else {
object = context.domainObject;
}
return object;
}
return {
// Performs the open in new tab function
// By calling the url service, the mode needed
// (browse) and the domainObject is passed in and
// the path is returned and opened in a new tab
perform: function () {
$window.open(urlService.urlForNewTab("browse", getSelectedObject()),
"_blank");
}
};
}
return NewTabAction;
}
);

View File

@@ -31,10 +31,14 @@ define(
describe("The browse controller", function () {
var mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService,
mockRootObject,
mockUrlService,
mockDomainObject,
mockNextObject,
controller;
function mockPromise(value) {
@@ -50,6 +54,15 @@ define(
"$scope",
[ "$on", "$watch" ]
);
mockRoute = { current: { params: {} } };
mockLocation = jasmine.createSpyObj(
"$location",
[ "path" ]
);
mockUrlService = jasmine.createSpyObj(
"urlService",
["urlForLocation"]
);
mockObjectService = jasmine.createSpyObj(
"objectService",
[ "getObjects" ]
@@ -71,41 +84,56 @@ define(
"domainObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockNextObject = jasmine.createSpyObj(
"nextObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockObjectService.getObjects.andReturn(mockPromise({
ROOT: mockRootObject
}));
mockRootObject.useCapability.andReturn(mockPromise([
mockDomainObject
]));
mockDomainObject.useCapability.andReturn(mockPromise([
mockNextObject
]));
mockNextObject.useCapability.andReturn(undefined);
mockNextObject.getId.andReturn("next");
mockDomainObject.getId.andReturn("mine");
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
mockNavigationService,
mockUrlService
);
});
it("uses composition to set the navigated object, if there is none", function () {
mockRootObject.useCapability.andReturn(mockPromise([
mockDomainObject
]));
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
mockNavigationService,
mockUrlService
);
expect(mockNavigationService.setNavigation)
.toHaveBeenCalledWith(mockDomainObject);
});
it("does not try to override navigation", function () {
// This behavior is needed if object navigation has been
// determined by query string parameters
mockRootObject.useCapability.andReturn(mockPromise([null]));
mockNavigationService.getNavigation.andReturn(mockDomainObject);
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
mockNavigationService,
mockUrlService
);
expect(mockScope.navigatedObject).toBe(mockDomainObject);
});
@@ -130,6 +158,86 @@ define(
);
});
it("uses route parameters to choose initially-navigated object", function () {
mockRoute.current.params.ids = "mine/next";
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
expect(mockScope.navigatedObject).toBe(mockNextObject);
expect(mockNavigationService.setNavigation)
.toHaveBeenCalledWith(mockNextObject);
});
it("handles invalid IDs by going as far as possible", function () {
// Idea here is that if we get a bad path of IDs,
// browse controller should traverse down it until
// it hits an invalid ID.
mockRoute.current.params.ids = "mine/junk";
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
expect(mockScope.navigatedObject).toBe(mockDomainObject);
expect(mockNavigationService.setNavigation)
.toHaveBeenCalledWith(mockDomainObject);
});
it("handles compositionless objects by going as far as possible", function () {
// Idea here is that if we get a path which passes
// through an object without a composition, browse controller
// should stop at it since remaining IDs cannot be loaded.
mockRoute.current.params.ids = "mine/next/junk";
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
expect(mockScope.navigatedObject).toBe(mockNextObject);
expect(mockNavigationService.setNavigation)
.toHaveBeenCalledWith(mockNextObject);
});
it("updates the displayed route to reflect current navigation", function () {
var mockContext = jasmine.createSpyObj('context', ['getPath']),
mockUnlisten = jasmine.createSpy('unlisten'),
mockMode = "browse";
mockContext.getPath.andReturn(
[mockRootObject, mockDomainObject, mockNextObject]
);
mockNextObject.getCapability.andCallFake(function (c) {
return c === 'context' && mockContext;
});
mockScope.$on.andReturn(mockUnlisten);
// Provide a navigation change
mockNavigationService.addListener.mostRecentCall.args[0](
mockNextObject
);
// Allows the path index to be checked
// prior to setting $route.current
mockLocation.path.andReturn("/browse/");
// Exercise the Angular workaround
mockScope.$on.mostRecentCall.args[1]();
expect(mockUnlisten).toHaveBeenCalled();
// location.path to be called with the urlService's
// urlFor function with the next domainObject and mode
expect(mockLocation.path).toHaveBeenCalledWith(
mockUrlService.urlForLocation(mockMode, mockNextObject)
);
});
});
}
);
);

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.
*****************************************************************************/
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
define(
["../src/BrowseObjectController"],
function (BrowseObjectController) {
"use strict";
describe("The browse object controller", function () {
var mockScope,
mockLocation,
mockRoute,
mockUnlisten,
controller;
// Utility function; look for a $watch on scope and fire it
function fireWatch(expr, value) {
mockScope.$watch.calls.forEach(function (call) {
if (call.args[0] === expr) {
call.args[1](value);
}
});
}
beforeEach(function () {
mockScope = jasmine.createSpyObj(
"$scope",
[ "$on", "$watch" ]
);
mockRoute = { current: { params: {} } };
mockLocation = jasmine.createSpyObj(
"$location",
[ "path", "search" ]
);
mockUnlisten = jasmine.createSpy("unlisten");
mockScope.$on.andReturn(mockUnlisten);
controller = new BrowseObjectController(
mockScope,
mockLocation,
mockRoute
);
});
it("updates query parameters when selected view changes", function () {
fireWatch("representation.selected.key", "xyz");
expect(mockLocation.search).toHaveBeenCalledWith('view', "xyz");
// Allows the path index to be checked
// prior to setting $route.current
mockLocation.path.andReturn("/browse/");
// Exercise the Angular workaround
mockScope.$on.mostRecentCall.args[1]();
expect(mockUnlisten).toHaveBeenCalled();
});
it("sets the active view from query parameters", function () {
var mockDomainObject = jasmine.createSpyObj(
"domainObject",
['getId', 'getModel', 'getCapability', 'useCapability']
),
testViews = [
{ key: 'abc' },
{ key: 'def', someKey: 'some value' },
{ key: 'xyz' }
];
mockDomainObject.useCapability.andCallFake(function (c) {
return (c === 'view') && testViews;
});
mockLocation.search.andReturn({ view: 'def' });
fireWatch('domainObject', mockDomainObject);
expect(mockScope.representation.selected)
.toEqual(testViews[1]);
});
});
}
);

View File

@@ -0,0 +1,81 @@
/*****************************************************************************
* 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,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* MenuArrowControllerSpec. Created by shale on 07/02/2015.
*/
define(
["../src/MenuArrowController"],
function (MenuArrowController) {
"use strict";
describe("The menu arrow controller ", function () {
var mockScope,
mockDomainObject,
mockEvent,
mockContextMenuAction,
mockActionContext,
controller;
beforeEach(function () {
mockScope = jasmine.createSpyObj(
"$scope",
[ "" ]
);
mockDomainObject = jasmine.createSpyObj(
"domainObject",
[ "getCapability" ]
);
mockEvent = jasmine.createSpyObj(
"event",
[ "preventDefault" ]
);
mockContextMenuAction = jasmine.createSpyObj(
"action",
[ "perform", "getActions" ]
);
mockActionContext = jasmine.createSpyObj(
"actionContext",
[ "" ]
);
mockActionContext.domainObject = mockDomainObject;
mockActionContext.event = mockEvent;
mockScope.domainObject = mockDomainObject;
mockDomainObject.getCapability.andReturn(mockContextMenuAction);
mockContextMenuAction.perform.andReturn(jasmine.any(Function));
controller = new MenuArrowController(mockScope);
});
it("calls the context menu action when clicked", function () {
// Simulate a click on the menu arrow
controller.showMenu(mockEvent);
// Expect the menu action to be performed
expect(mockDomainObject.getCapability).toHaveBeenCalledWith('action');
expect(mockContextMenuAction.perform).toHaveBeenCalled();
});
});
}
);

View File

@@ -1,5 +1,7 @@
[
"BrowseController",
"BrowseObjectController",
"MenuArrowController",
"creation/CreateAction",
"creation/CreateActionProvider",
"creation/CreateMenuController",
@@ -9,5 +11,6 @@
"navigation/NavigateAction",
"navigation/NavigationService",
"windowing/FullscreenAction",
"windowing/NewTabAction",
"windowing/WindowTitler"
]
]

View File

@@ -0,0 +1,78 @@
/*****************************************************************************
* 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,describe,it,expect,beforeEach,waitsFor,jasmine,afterEach,window*/
define(
["../../src/windowing/NewTabAction"],
function (NewTabAction) {
"use strict";
describe("The new tab action", function () {
var actionSelected,
actionCurrent,
mockWindow,
mockDomainObject,
mockContextCurrent,
mockContextSelected,
mockUrlService;
beforeEach(function () {
mockWindow = jasmine.createSpyObj("$window", ["open", "location"]);
// Context if the current object is selected
// For example, when the top right new tab
// button is clicked, the user is using the
// current domainObject
mockContextCurrent = jasmine.createSpyObj("context", ["domainObject"]);
// Context if the selected object is selected
// For example, when an object in the left
// tree is opened in a new tab using the
// context menu
mockContextSelected = jasmine.createSpyObj("context", ["selectedObject",
"domainObject"]);
// Mocks the urlService used to make the new tab's url from a
// domainObject and mode
mockUrlService = jasmine.createSpyObj("urlService", ["urlForNewTab"]);
// Action done using the current context or mockContextCurrent
actionCurrent = new NewTabAction(mockUrlService, mockWindow,
mockContextCurrent);
// Action done using the selected context or mockContextSelected
actionSelected = new NewTabAction(mockUrlService, mockWindow,
mockContextSelected);
});
it("new tab with current url is opened", function () {
actionCurrent.perform();
});
it("new tab with a selected url is opened", function () {
actionSelected.perform();
});
});
}
);

View File

@@ -25,7 +25,7 @@
<a href=""
ng-click="ngModel.cancel()"
ng-if="ngModel.cancel"
class="btn normal outline ui-symbol close">
class="btn normal ui-symbol close">
x
</a>
<div class="abs contents" ng-transclude>

View File

@@ -67,7 +67,7 @@
"implementation": "actions/SaveAction.js",
"name": "Save",
"description": "Save changes made to these objects.",
"depends": [ "$location" ],
"depends": [ "$location", "urlService" ],
"priority": "mandatory"
},
{
@@ -76,7 +76,7 @@
"implementation": "actions/CancelAction.js",
"name": "Cancel",
"description": "Discard changes made to these objects.",
"depends": [ "$location" ]
"depends": [ "$location", "urlService" ]
}
],
"policies": [
@@ -116,7 +116,7 @@
"key": "topbar-edit",
"templateUrl": "templates/topbar-edit.html"
}
],
],
"representers": [
{
"implementation": "representers/EditRepresenter.js",

View File

@@ -23,74 +23,47 @@
mct-object="domainObject"
ng-model="representation">
</mct-representation>
<div class="holder edit-area abs"
ng-controller="SplitPaneController as vSplitter">
<mct-toolbar name="mctToolbar"
structure="toolbar.structure"
ng-model="toolbar.state">
</mct-toolbar>
<div class='split-layout vertical contents abs work-area'>
<div
class='abs pane left edit-main'
ng-style="{ right: (vSplitter.state()+5) + 'px'}"
>
<div class='holder abs object-holder'>
<div class="holder edit-area abs">
<mct-split-pane class='contents abs' anchor='right'>
<div class='split-pane-component pane left edit-main'>
<mct-toolbar name="mctToolbar"
structure="toolbar.structure"
ng-model="toolbar.state">
</mct-toolbar>
<div class='holder abs object-holder work-area'>
<mct-representation key="representation.selected.key"
toolbar="toolbar"
mct-object="representation.selected.key && domainObject">
</mct-representation>
</div>
</div>
<!-- MAIN VERTICAL SPLITTER -->
<mct-splitter></mct-splitter>
<div
class="splitter"
ng-style="{ right: vSplitter.state() + 'px'}"
mct-drag-down="vSplitter.startMove()"
mct-drag="vSplitter.move(-delta[0], 100, 1000)"
></div>
<div
class='abs pane right edit-objects menus-to-left'
class='split-pane-component pane right edit-objects menus-to-left'
ng-controller='EditPanesController as editPanes'
ng-style="{ width: (vSplitter.state()-4) + 'px', right: '0px'}"
>
<div
class='holder abs split-layout horizontal'
ng-controller="SplitPaneController as hSplitter"
>
<div
<mct-split-pane class='contents abs' anchor='bottom'>
<div
class="abs pane top accordion"
ng-style="{ bottom: (hSplitter.state()+8) + 'px', top: '0px' }"
ng-controller="ToggleController as toggle"
>
<mct-container key="accordion" title="Library">
<mct-container key="accordion" label="Library">
<mct-representation key="'tree'"
alias="foo1"
mct-object="editPanes.getRoot()">
</mct-representation>
</mct-container>
</div>
<!-- HORZ SPLITTER -->
<div
class="splitter"
ng-style="{ bottom: hSplitter.state() + 'px', top: 'auto' }"
mct-drag-down="hSplitter.startMove()"
mct-drag="hSplitter.move(-delta[1], 120, 1000)"
>
</div>
<div
<mct-splitter></mct-splitter>
<div
class="abs pane bottom accordion"
ng-style="{ bottom: '0px', height: (hSplitter.state()-4) + 'px'}"
ng-controller="ToggleController as toggle"
>
<mct-container key="accordion" title="Elements">
<mct-container key="accordion" label="Elements">
<mct-representation key="'edit-elements'" mct-object="domainObject">
</mct-representation>
</mct-container>
</div>
</div>
</div>
</mct-split-pane>
</div>
</div>
</mct-split-pane>
</div>

View File

@@ -33,8 +33,6 @@
<mct-representation key="'edit-action-buttons'"
mct-object="domainObject"
class='conclude-editing'>
<!--a class='btn major' href=''>Save<span id='save-actions-menu' class='ui-symbol invoke-menu'>v</span></a>
<a class='btn subtle' href=''>Cancel</a-->
</mct-representation>
</div>
</div>

View File

@@ -30,7 +30,7 @@ define(
* Edit Mode. Exits the editing user interface and invokes object
* capabilities to persist the changes that have been made.
*/
function CancelAction($location, context) {
function CancelAction($location, urlService, context) {
var domainObject = context.domainObject;
// Look up the object's "editor.completion" capability;
@@ -50,7 +50,10 @@ define(
// Discard the current root view (which will be the editing
// UI, which will have been pushed atop the Browise UI.)
function returnToBrowse() {
$location.path("/browse");
$location.path($location.path(urlService.urlForLocation(
"browse",
domainObject
)));
}
return {

View File

@@ -31,7 +31,7 @@ define(
* Edit Mode. Exits the editing user interface and invokes object
* capabilities to persist the changes that have been made.
*/
function SaveAction($location, context) {
function SaveAction($location, urlService, context) {
var domainObject = context.domainObject;
// Invoke any save behavior introduced by the editor capability;
@@ -45,7 +45,10 @@ define(
// 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("/browse");
return $location.path(urlService.urlForLocation(
"browse",
domainObject
));
}
return {

View File

@@ -68,6 +68,8 @@ define(
* @returns {DomainObject} the domain object in an editable form
*/
getEditableObject: function (domainObject) {
var type = domainObject.getCapability('type');
// Track the top-level domain object; this will have
// some special behavior for its context capability.
root = root || domainObject;
@@ -77,6 +79,11 @@ define(
return domainObject;
}
// Don't bother wrapping non-editable objects
if (!type || !type.hasFeature('creation')) {
return domainObject;
}
// Provide an editable form of the object
return new EditableDomainObject(
domainObject,
@@ -142,4 +149,4 @@ define(
return EditableDomainObjectCache;
}
);
);

View File

@@ -30,6 +30,7 @@ define(
var mockLocation,
mockDomainObject,
mockEditorCapability,
mockUrlService,
actionContext,
action;
@@ -54,7 +55,10 @@ define(
"editor",
[ "save", "cancel" ]
);
mockUrlService = jasmine.createSpyObj(
"urlService",
["urlForLocation"]
);
actionContext = {
domainObject: mockDomainObject
@@ -64,7 +68,7 @@ define(
mockDomainObject.getCapability.andReturn(mockEditorCapability);
mockEditorCapability.cancel.andReturn(mockPromise(true));
action = new CancelAction(mockLocation, actionContext);
action = new CancelAction(mockLocation, mockUrlService, actionContext);
});
@@ -91,7 +95,9 @@ define(
it("returns to browse when performed", function () {
action.perform();
expect(mockLocation.path).toHaveBeenCalledWith("/browse");
expect(mockLocation.path).toHaveBeenCalledWith(
mockUrlService.urlForLocation("browse", mockDomainObject)
);
});
});
}

View File

@@ -30,6 +30,7 @@ define(
var mockLocation,
mockDomainObject,
mockEditorCapability,
mockUrlService,
actionContext,
action;
@@ -54,6 +55,10 @@ define(
"editor",
[ "save", "cancel" ]
);
mockUrlService = jasmine.createSpyObj(
"urlService",
["urlForLocation"]
);
actionContext = {
@@ -64,7 +69,7 @@ define(
mockDomainObject.getCapability.andReturn(mockEditorCapability);
mockEditorCapability.save.andReturn(mockPromise(true));
action = new SaveAction(mockLocation, actionContext);
action = new SaveAction(mockLocation, mockUrlService, actionContext);
});
@@ -91,7 +96,9 @@ define(
it("returns to browse when performed", function () {
action.perform();
expect(mockLocation.path).toHaveBeenCalledWith("/browse");
expect(mockLocation.path).toHaveBeenCalledWith(
mockUrlService.urlForLocation("browse", mockDomainObject)
);
});
});
}

View File

@@ -31,7 +31,7 @@ define(
mockQ,
mockNavigationService,
mockObject,
mockCapability,
mockType,
controller;
beforeEach(function () {
@@ -48,15 +48,18 @@ define(
"domainObject",
[ "getId", "getModel", "getCapability", "hasCapability" ]
);
mockCapability = jasmine.createSpyObj(
"capability",
[ "invoke" ]
mockType = jasmine.createSpyObj(
"type",
[ "hasFeature" ]
);
mockNavigationService.getNavigation.andReturn(mockObject);
mockObject.getId.andReturn("test");
mockObject.getModel.andReturn({ name: "Test object" });
mockObject.getCapability.andReturn(mockCapability);
mockObject.getCapability.andCallFake(function (key) {
return key === 'type' && mockType;
});
mockType.hasFeature.andReturn(true);
controller = new EditController(
mockScope,
@@ -76,7 +79,7 @@ define(
.toBeDefined();
// Shouldn't have been the mock capability we provided
expect(controller.navigatedObject().getCapability("editor"))
.not.toEqual(mockCapability);
.not.toEqual(mockType);
});
it("detaches its navigation listener when destroyed", function () {
@@ -119,4 +122,4 @@ define(
});
}
);
);

View File

@@ -32,6 +32,7 @@ define(
completionCapability,
object,
mockQ,
mockType,
cache;
@@ -40,10 +41,13 @@ define(
return {
getId: function () { return id; },
getModel: function () { return {}; },
getCapability: function (name) {
return completionCapability;
getCapability: function (key) {
return {
editor: completionCapability,
type: mockType
}[key];
},
hasCapability: function (name) {
hasCapability: function (key) {
return false;
}
};
@@ -62,6 +66,8 @@ define(
beforeEach(function () {
mockQ = jasmine.createSpyObj('$q', ['when', 'all']);
mockType = jasmine.createSpyObj('type', ['hasFeature']);
mockType.hasFeature.andReturn(true);
captured = {};
completionCapability = {
save: function () {
@@ -152,6 +158,17 @@ define(
.toBe(wrappedObject);
});
it("does not wrap non-editable objects", function () {
var domainObject = new TestObject('test-id');
mockType.hasFeature.andCallFake(function (key) {
return key !== 'creation';
});
expect(cache.getEditableObject(domainObject))
.toBe(domainObject);
});
});
}

View File

@@ -3,6 +3,13 @@
"description": "General UI elements, meant to be reused across modes",
"resources": "res",
"extensions": {
"services": [
{
"key": "urlService",
"implementation": "/services/UrlService.js",
"depends": [ "$location" ]
}
],
"runs": [
{
"implementation": "StyleSheetLoader.js",
@@ -124,6 +131,15 @@
"key": "mctScrollY",
"implementation": "directives/MCTScroll.js",
"depends": [ "$parse", "MCT_SCROLL_Y_PROPERTY", "MCT_SCROLL_Y_ATTRIBUTE" ]
},
{
"key": "mctSplitPane",
"implementation": "directives/MCTSplitPane.js",
"depends": [ "$parse", "$log" ]
},
{
"key": "mctSplitter",
"implementation": "directives/MCTSplitter.js"
}
],
"constants": [
@@ -148,7 +164,7 @@
{
"key": "accordion",
"templateUrl": "templates/containers/accordion.html",
"attributes": [ "title" ]
"attributes": [ "label" ]
}
],
"representations": [
@@ -181,7 +197,7 @@
"key": "label",
"templateUrl": "templates/label.html",
"uses": [ "type" ],
"gestures": [ "drag", "menu" ]
"gestures": [ "drag", "menu", "info" ]
},
{
"key": "node",

View File

@@ -40,6 +40,44 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** FEATURES */
/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */
/************************** COLORS AND SHADING */
/************************** RATIOS */
/************************** LAYOUT */
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* 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.
*****************************************************************************/
/*
@mixin invokeMenu($baseColor: $colorBodyFg) {
$c: $baseColor;
color: $c;
&:hover {
color: lighten($c, $ltGamma);
}
}
*/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -82,29 +120,8 @@
* 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.
*****************************************************************************/
/* line 24, ../sass/forms/_elems.scss */
.form .section-header {
/* line 22, ../sass/forms/_elems.scss */
.section-header {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
@@ -112,13 +129,14 @@
font-size: 0.8em;
margin-top: 5px;
padding: 5px; }
/* line 30, ../sass/forms/_elems.scss */
.form .section-header:first-child {
/* line 28, ../sass/forms/_elems.scss */
.section-header:first-child {
margin-top: 0; }
/* line 34, ../sass/forms/_elems.scss */
/* line 35, ../sass/forms/_elems.scss */
.form .form-section {
position: relative; }
/* line 38, ../sass/forms/_elems.scss */
/* line 39, ../sass/forms/_elems.scss */
.form .form-row {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
@@ -129,10 +147,10 @@
margin-top: 5px;
padding: 5px;
position: relative; }
/* line 45, ../sass/forms/_elems.scss */
/* line 46, ../sass/forms/_elems.scss */
.form .form-row.first {
border-top: none; }
/* line 49, ../sass/forms/_elems.scss */
/* line 50, ../sass/forms/_elems.scss */
.form .form-row .label,
.form .form-row .controls {
-moz-box-sizing: border-box;
@@ -144,51 +162,51 @@
font-size: 0.75rem;
line-height: 22px;
min-height: 22px; }
/* line 60, ../sass/forms/_elems.scss */
/* line 61, ../sass/forms/_elems.scss */
.form .form-row > .label {
float: left;
position: relative;
white-space: nowrap;
width: 20%; }
/* line 68, ../sass/forms/_elems.scss */
/* line 69, ../sass/forms/_elems.scss */
.form .form-row .value {
color: #cccccc; }
/* line 72, ../sass/forms/_elems.scss */
/* line 73, ../sass/forms/_elems.scss */
.form .form-row .controls {
float: left;
position: relative;
width: 79.9%; }
/* line 79, ../sass/forms/_elems.scss */
/* line 80, ../sass/forms/_elems.scss */
.form .form-row .controls .l-composite-control.l-checkbox {
display: inline-block;
line-height: 14px;
margin-right: 5px; }
/* line 88, ../sass/forms/_elems.scss */
/* line 89, ../sass/forms/_elems.scss */
.form .form-row .controls input[type="text"] {
height: 22px;
line-height: 22px;
margin-top: -4px;
vertical-align: baseline; }
/* line 95, ../sass/forms/_elems.scss */
/* line 96, ../sass/forms/_elems.scss */
.form .form-row .controls .l-med input[type="text"] {
width: 200px; }
/* line 99, ../sass/forms/_elems.scss */
/* line 100, ../sass/forms/_elems.scss */
.form .form-row .controls .l-small input[type="text"] {
width: 50px; }
/* line 103, ../sass/forms/_elems.scss */
/* line 104, ../sass/forms/_elems.scss */
.form .form-row .controls .l-numeric input[type="text"] {
text-align: right; }
/* line 107, ../sass/forms/_elems.scss */
/* line 108, ../sass/forms/_elems.scss */
.form .form-row .controls .select {
margin-right: 5px; }
/* line 112, ../sass/forms/_elems.scss */
/* line 113, ../sass/forms/_elems.scss */
.form .form-row .field-hints {
color: #666666; }
/* line 116, ../sass/forms/_elems.scss */
/* line 117, ../sass/forms/_elems.scss */
.form .form-row .selector-list {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
@@ -197,7 +215,7 @@
position: relative;
height: 150px;
overflow: auto; }
/* line 127, ../sass/forms/_elems.scss */
/* line 128, ../sass/forms/_elems.scss */
.form .form-row .selector-list .wrapper {
overflow-y: auto;
position: absolute;
@@ -206,28 +224,28 @@
bottom: 5px;
left: 5px; }
/* line 141, ../sass/forms/_elems.scss */
/* line 142, ../sass/forms/_elems.scss */
label.form-control.checkbox input {
margin-right: 5px;
vertical-align: top; }
/* line 147, ../sass/forms/_elems.scss */
/* line 148, ../sass/forms/_elems.scss */
.hint,
.s-hint {
font-size: 0.9em; }
/* line 152, ../sass/forms/_elems.scss */
/* line 153, ../sass/forms/_elems.scss */
.l-result {
display: inline-block;
min-width: 32px;
min-height: 32px;
position: relative;
vertical-align: top; }
/* line 159, ../sass/forms/_elems.scss */
/* line 160, ../sass/forms/_elems.scss */
.l-result div.s-hint {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
background: rgba(255, 153, 0, 0.8);
display: block;
color: #ffd699;
@@ -258,9 +276,9 @@ label.form-control.checkbox input {
.edit-main textarea {
-moz-appearance: none;
-webkit-appearance: none;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
@@ -302,13 +320,12 @@ label.form-control.checkbox input {
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* line 22, ../sass/forms/_text-input.scss */
input[type="text"],
input[type="date"] {
input[type="text"] {
-moz-appearance: none;
-webkit-appearance: none;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
@@ -322,32 +339,10 @@ input[type="date"] {
outline: none;
padding: 0 3px; }
/* line 33, ../sass/forms/_mixins.scss */
input[type="text"].error,
input[type="date"].error {
input[type="text"].error {
background: rgba(255, 0, 0, 0.5); }
/* line 61, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_user-interface.scss */
input[type="text"]:-moz-placeholder,
input[type="date"]:-moz-placeholder {
color: gray;
font-style: italic; }
/* line 64, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_user-interface.scss */
input[type="text"]::-moz-placeholder,
input[type="date"]::-moz-placeholder {
color: gray;
font-style: italic; }
/* line 67, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_user-interface.scss */
input[type="text"]:-ms-input-placeholder,
input[type="date"]:-ms-input-placeholder {
color: gray;
font-style: italic; }
/* line 56, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/css3/_user-interface.scss */
input[type="text"]::-webkit-input-placeholder,
input[type="date"]::-webkit-input-placeholder {
color: gray;
font-style: italic; }
/* line 34, ../sass/forms/_text-input.scss */
input[type="text"].numeric,
input[type="date"].numeric {
/* line 29, ../sass/forms/_text-input.scss */
input[type="text"].numeric {
text-align: right; }
/*****************************************************************************
@@ -373,23 +368,23 @@ input[type="date"] {
*****************************************************************************/
/* line 22, ../sass/forms/_selects.scss */
.form-control.select {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzQwNDA0MCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzUyNTI1MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzQ1NDU0NSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #404040));
background-image: -moz-linear-gradient(#4d4d4d, #404040);
background-image: -webkit-linear-gradient(#4d4d4d, #404040);
background-image: linear-gradient(#4d4d4d, #404040);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #525252), color-stop(100%, #454545));
background-image: -moz-linear-gradient(#525252, #454545);
background-image: -webkit-linear-gradient(#525252, #454545);
background-image: linear-gradient(#525252, #454545);
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
border: none;
border-top: 1px solid #666666;
border-top: 1px solid #575757;
color: #999;
display: inline-block;
cursor: pointer;
@@ -397,14 +392,21 @@ input[type="date"] {
margin: 0 0 2px 2px;
overflow: hidden;
position: relative; }
/* line 148, ../sass/_mixins.scss */
/* line 162, ../sass/_mixins.scss */
.form-control.select:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzY2NjY2NiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzYzNjM2MyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU3NTc1NyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #666666), color-stop(100%, #4d4d4d));
background-image: -moz-linear-gradient(#666666, #4d4d4d);
background-image: -webkit-linear-gradient(#666666, #4d4d4d);
background-image: linear-gradient(#666666, #4d4d4d); }
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #636363), color-stop(100%, #575757));
background-image: -moz-linear-gradient(#636363, #575757);
background-image: -webkit-linear-gradient(#636363, #575757);
background-image: linear-gradient(#636363, #575757);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
.form-control.select:not(.disabled):hover.btn-menu .invoke-menu {
color: #878787; }
/* line 170, ../sass/_mixins.scss */
.form-control.select.btn-menu .invoke-menu {
color: #757575; }
/* line 29, ../sass/forms/_selects.scss */
.form-control.select select {
-moz-appearance: none;
@@ -461,9 +463,9 @@ input[type="date"] {
.channel-selector .treeview {
-moz-appearance: none;
-webkit-appearance: none;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;

View File

@@ -40,6 +40,14 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** FEATURES */
/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */
/************************** COLORS AND SHADING */
/************************** RATIOS */
/************************** LAYOUT */
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -61,6 +69,15 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*
@mixin invokeMenu($baseColor: $colorBodyFg) {
$c: $baseColor;
color: $c;
&:hover {
color: lighten($c, $ltGamma);
}
}
*/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -92,23 +109,23 @@
top: 0; }
/* line 29, ../sass/items/_item.scss */
.items-holder .item.grid-item {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU5NTk1OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzVlNWU1ZSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzUyNTI1MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #595959), color-stop(100%, #4d4d4d));
background-image: -moz-linear-gradient(#595959, #4d4d4d);
background-image: -webkit-linear-gradient(#595959, #4d4d4d);
background-image: linear-gradient(#595959, #4d4d4d);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #5e5e5e), color-stop(100%, #525252));
background-image: -moz-linear-gradient(#5e5e5e, #525252);
background-image: -webkit-linear-gradient(#5e5e5e, #525252);
background-image: linear-gradient(#5e5e5e, #525252);
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
border: none;
border-top: 1px solid #737373;
border-top: 1px solid #636363;
color: #999;
display: inline-block;
box-sizing: border-box;
@@ -119,114 +136,163 @@
margin-bottom: 3px;
margin-right: 3px;
position: relative; }
/* line 148, ../sass/_mixins.scss */
/* line 162, ../sass/_mixins.scss */
.items-holder .item.grid-item:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzczNzM3MyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU5NTk1OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzcwNzA3MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzYzNjM2MyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #737373), color-stop(100%, #595959));
background-image: -moz-linear-gradient(#737373, #595959);
background-image: -webkit-linear-gradient(#737373, #595959);
background-image: linear-gradient(#737373, #595959); }
/* line 42, ../sass/items/_item.scss */
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #707070), color-stop(100%, #636363));
background-image: -moz-linear-gradient(#707070, #636363);
background-image: -webkit-linear-gradient(#707070, #636363);
background-image: linear-gradient(#707070, #636363);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
.items-holder .item.grid-item:not(.disabled):hover.btn-menu .invoke-menu {
color: #949494; }
/* line 170, ../sass/_mixins.scss */
.items-holder .item.grid-item.btn-menu .invoke-menu {
color: #828282; }
/* line 46, ../sass/items/_item.scss */
.items-holder .item.grid-item:hover .item-main .item-type {
color: #0099cc !important; }
/* line 45, ../sass/items/_item.scss */
/* line 48, ../sass/items/_item.scss */
.items-holder .item.grid-item:hover .item-main .item-type .l-icon-link {
color: #49dedb; }
/* line 52, ../sass/items/_item.scss */
.items-holder .item.grid-item:hover .item-main .item-open {
display: block; }
/* line 49, ../sass/items/_item.scss */
opacity: 1; }
/* line 57, ../sass/items/_item.scss */
.items-holder .item.grid-item .contents {
top: 5px;
right: 5px;
bottom: 5px;
left: 5px; }
/* line 53, ../sass/items/_item.scss */
/* line 61, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs {
bottom: auto;
height: 20px;
line-height: 20px;
z-index: 5; }
/* line 58, ../sass/items/_item.scss */
/* line 66, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left, .items-holder .item.grid-item .bar.top-bar.abs .right {
width: auto; }
/* line 60, ../sass/items/_item.scss */
/* line 68, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left .icon, .items-holder .item.grid-item .bar.top-bar.abs .right .icon {
margin-left: 5px; }
/* line 65, ../sass/items/_item.scss */
margin-left: 3px; }
/* line 70, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left .icon.l-icon-link, .items-holder .item.grid-item .bar.top-bar.abs .right .icon.l-icon-link {
color: #49dedb; }
/* line 76, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar.abs {
top: auto;
height: 40px;
height: 30px;
padding: 5px; }
/* line 71, ../sass/items/_item.scss */
/* line 82, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main {
line-height: 160px;
z-index: 1; }
/* line 79, ../sass/items/_item.scss */
/* line 88, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-type {
overflow: false;
position: absolute;
top: 40px;
right: 40px;
bottom: 40px;
left: 40px;
width: auto;
height: auto;
color: #737373;
text-align: center;
font-size: 7em;
line-height: 180px; }
/* line 85, ../sass/items/_item.scss */
font-size: 96.9px;
line-height: 102px;
bottom: auto;
height: 102px;
top: 30px; }
/* line 100, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-type .l-icon-link {
color: #1a8e8b;
height: 36px;
line-height: 36px;
position: absolute;
font-size: 32px;
left: 0px;
bottom: 10px;
z-index: 2; }
/* line 112, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-open {
display: none;
font-size: 5em;
line-height: 180px;
-moz-transition-property: "opacity";
-o-transition-property: "opacity";
-webkit-transition-property: "opacity";
transition-property: "opacity";
-moz-transition-duration: 200ms;
-o-transition-duration: 200ms;
-webkit-transition-duration: 200ms;
transition-duration: 200ms;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
opacity: 0;
font-size: 3em;
left: auto;
width: 30px; }
/* line 93, ../sass/items/_item.scss */
width: 50px;
pointer-events: none;
text-align: right; }
/* line 124, ../sass/items/_item.scss */
.items-holder .item.grid-item .title {
text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px;
color: #cccccc;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis; }
/* line 101, ../sass/items/_item.scss */
/* line 132, ../sass/items/_item.scss */
.items-holder .item.grid-item .details {
font-size: 0.8em; }
/* line 104, ../sass/items/_item.scss */
/* line 135, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwYWNlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzBhYzJmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwYjRmMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #00bfff), color-stop(100%, #00ace6));
background-image: -moz-linear-gradient(#00bfff, #00ace6);
background-image: -webkit-linear-gradient(#00bfff, #00ace6);
background-image: linear-gradient(#00bfff, #00ace6);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #0ac2ff), color-stop(100%, #00b4f0));
background-image: -moz-linear-gradient(#0ac2ff, #00b4f0);
background-image: -webkit-linear-gradient(#0ac2ff, #00b4f0);
background-image: linear-gradient(#0ac2ff, #00b4f0);
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-webkit-box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
box-shadow: rgba(0, 0, 0, 0.3) 0 1px 3px;
-moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px;
border: none;
border-top: 1px solid #33ccff;
border-top: 1px solid #14c4ff;
color: #999;
display: inline-block;
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzY2NmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwOTljYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #33ccff), color-stop(100%, #0099cc));
background-image: -moz-linear-gradient(#33ccff, #0099cc);
background-image: -webkit-linear-gradient(#33ccff, #0099cc);
background-image: linear-gradient(#33ccff, #0099cc);
color: #80dfff; }
/* line 156, ../sass/_mixins.scss */
/* line 162, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzY2ZDlmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwYmZmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJlY2JmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0YzRmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #66d9ff), color-stop(100%, #00bfff));
background-image: -moz-linear-gradient(#66d9ff, #00bfff);
background-image: -webkit-linear-gradient(#66d9ff, #00bfff);
background-image: linear-gradient(#66d9ff, #00bfff); }
/* line 109, ../sass/items/_item.scss */
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2ecbff), color-stop(100%, #14c4ff));
background-image: -moz-linear-gradient(#2ecbff, #14c4ff);
background-image: -webkit-linear-gradient(#2ecbff, #14c4ff);
background-image: linear-gradient(#2ecbff, #14c4ff);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected:not(.disabled):hover.btn-menu .invoke-menu {
color: #75ddff; }
/* line 170, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected.btn-menu .invoke-menu {
color: #52d4ff; }
/* line 140, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .item-type, .items-holder .item.grid-item.selected .top-bar .icon:not(.alert) {
color: #80dfff; }
/* line 110, ../sass/items/_item.scss */
/* line 141, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .item-main .item-open {
color: #80dfff; }
/* line 111, ../sass/items/_item.scss */
/* line 142, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .title {
color: white; }
/* line 113, ../sass/items/_item.scss */
/* line 144, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected:hover .item-main .item-type {
color: white !important; }

View File

@@ -1,350 +0,0 @@
/*****************************************************************************
* 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.
*****************************************************************************/
/*****************************************************************************
* 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.
*****************************************************************************/
/* line 31, ../sass/plots/_plots-main.scss */
.gl-plot {
color: #999;
font-size: 0.7rem;
position: relative;
width: 100%;
height: 100%;
/****************************** Limits and Out-of-Bounds data */ }
/* line 38, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-axis-area {
position: absolute; }
/* line 41, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-axis-area.gl-plot-x {
top: auto;
right: 0;
bottom: 5px;
left: 60px;
height: 32px;
width: auto;
overflow: hidden; }
/* line 50, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-axis-area.gl-plot-y {
top: 29px;
right: auto;
bottom: 37px;
left: 0;
width: 60px; }
/* line 59, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-coords {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
background: black;
color: #e6e6e6;
padding: 2px 5px;
position: absolute;
top: 39px;
right: auto;
bottom: auto;
left: 70px;
z-index: 10; }
/* line 71, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-coords:empty {
display: none; }
/* line 76, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-display-area {
position: absolute;
top: 29px;
right: 0;
bottom: 37px;
left: 60px;
cursor: crosshair;
border: 1px solid #4d4d4d; }
/* line 86, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-label,
.gl-plot .l-plot-label {
color: #cccccc;
position: absolute;
text-align: center; }
/* line 94, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-label.gl-plot-x-label, .gl-plot .gl-plot-label.l-plot-x-label,
.gl-plot .l-plot-label.gl-plot-x-label,
.gl-plot .l-plot-label.l-plot-x-label {
top: auto;
right: 0;
bottom: 0;
left: 0;
height: auto; }
/* line 103, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-label.gl-plot-y-label, .gl-plot .gl-plot-label.l-plot-y-label,
.gl-plot .l-plot-label.gl-plot-y-label,
.gl-plot .l-plot-label.l-plot-y-label {
-moz-transform-origin: 50% 0;
-ms-transform-origin: 50% 0;
-webkit-transform-origin: 50% 0;
transform-origin: 50% 0;
-moz-transform: translateX(-50%) rotate(-90deg);
-ms-transform: translateX(-50%) rotate(-90deg);
-webkit-transform: translateX(-50%) rotate(-90deg);
transform: translateX(-50%) rotate(-90deg);
display: inline-block;
margin-left: 5px;
left: 0;
top: 50%;
white-space: nowrap; }
/* line 117, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-y-options {
position: absolute;
top: 50%;
right: auto;
bottom: auto;
left: auto5px;
margin-top: -16px;
height: auto;
min-height: 32px;
width: 32px; }
/* line 131, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-hash {
position: absolute;
border: 0 rgba(255, 255, 255, 0.3) dashed; }
/* line 134, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-hash.hash-v {
border-right-width: 1px;
height: 100%; }
/* line 138, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-hash.hash-h {
border-bottom-width: 1px;
width: 100%; }
/* line 144, ../sass/plots/_plots-main.scss */
.gl-plot .gl-plot-legend {
position: absolute;
top: 0;
right: 0;
bottom: auto;
left: 0;
height: 24px;
overflow-x: hidden;
overflow-y: auto; }
/* line 157, ../sass/plots/_plots-main.scss */
.gl-plot .l-limit-bar,
.gl-plot .l-oob-data {
position: absolute;
left: 0;
right: 0;
width: auto; }
/* line 165, ../sass/plots/_plots-main.scss */
.gl-plot .l-limit-bar {
height: auto;
z-index: 0; }
/* line 173, ../sass/plots/_plots-main.scss */
.gl-plot .l-limit-bar.s-limit-yellow {
background: rgba(157, 117, 0, 0.2); }
/* line 174, ../sass/plots/_plots-main.scss */
.gl-plot .l-limit-bar.s-limit-red {
background: rgba(170, 0, 0, 0.2); }
/* line 177, ../sass/plots/_plots-main.scss */
.gl-plot .l-oob-data {
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
pointer-events: none;
height: 10px;
z-index: 1; }
/* line 185, ../sass/plots/_plots-main.scss */
.gl-plot .l-oob-data.l-oob-data-up {
top: 0;
bottom: auto;
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');
background-size: 100%;
background-image: -moz-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%);
background-image: -webkit-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%);
background-image: linear-gradient(0deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); }
/* line 190, ../sass/plots/_plots-main.scss */
.gl-plot .l-oob-data.l-oob-data-dwn {
bottom: 0;
top: auto;
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');
background-size: 100%;
background-image: -moz-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%);
background-image: -webkit-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%);
background-image: linear-gradient(180deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); }
/* line 200, ../sass/plots/_plots-main.scss */
.gl-plot-legend .plot-legend-item,
.gl-plot-legend .legend-item,
.legend .plot-legend-item,
.legend .legend-item {
display: inline-block;
margin-right: 10px; }
/* line 204, ../sass/plots/_plots-main.scss */
.gl-plot-legend .plot-legend-item span,
.gl-plot-legend .legend-item span,
.legend .plot-legend-item span,
.legend .legend-item span {
vertical-align: middle; }
/* line 207, ../sass/plots/_plots-main.scss */
.gl-plot-legend .plot-legend-item .plot-color-swatch,
.gl-plot-legend .plot-legend-item .color-swatch,
.gl-plot-legend .legend-item .plot-color-swatch,
.gl-plot-legend .legend-item .color-swatch,
.legend .plot-legend-item .plot-color-swatch,
.legend .plot-legend-item .color-swatch,
.legend .legend-item .plot-color-swatch,
.legend .legend-item .color-swatch {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
display: inline-block;
height: 8px;
width: 8px; }
/* line 220, ../sass/plots/_plots-main.scss */
.gl-plot-legend .plot-legend-item {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
color: #fff;
line-height: 1.5em;
padding: 0px 5px; }
/* line 226, ../sass/plots/_plots-main.scss */
.gl-plot-legend .plot-legend-item .plot-color-swatch {
border: 1px solid #333;
height: 9px;
width: 9px; }
/* line 234, ../sass/plots/_plots-main.scss */
.tick {
position: absolute;
border: 0 rgba(255, 255, 255, 0.3) solid; }
/* line 237, ../sass/plots/_plots-main.scss */
.tick.tick-x {
border-right-width: 1px;
height: 100%; }
/* line 243, ../sass/plots/_plots-main.scss */
.gl-plot-tick,
.tick-label {
font-size: 0.7rem;
position: absolute;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis; }
/* line 251, ../sass/plots/_plots-main.scss */
.gl-plot-tick.gl-plot-x-tick-label, .gl-plot-tick.tick-label-x,
.tick-label.gl-plot-x-tick-label,
.tick-label.tick-label-x {
right: auto;
bottom: auto;
left: auto;
height: auto;
width: 20%;
margin-left: -10%;
text-align: center; }
/* line 261, ../sass/plots/_plots-main.scss */
.gl-plot-tick.gl-plot-y-tick-label, .gl-plot-tick.tick-label-y,
.tick-label.gl-plot-y-tick-label,
.tick-label.tick-label-y {
top: auto;
height: 1em;
width: auto;
margin-bottom: -0.5em;
text-align: right; }
/* line 273, ../sass/plots/_plots-main.scss */
.gl-plot-tick.gl-plot-x-tick-label {
top: 5px; }
/* line 276, ../sass/plots/_plots-main.scss */
.gl-plot-tick.gl-plot-y-tick-label {
right: 5px;
left: 5px; }
/* line 283, ../sass/plots/_plots-main.scss */
.tick-label.tick-label-x {
top: 0; }
/* line 286, ../sass/plots/_plots-main.scss */
.tick-label.tick-label-y {
right: 0;
left: 0; }

File diff suppressed because it is too large Load Diff

View File

@@ -40,6 +40,14 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** FEATURES */
/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */
/************************** COLORS AND SHADING */
/************************** RATIOS */
/************************** LAYOUT */
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -61,6 +69,15 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*
@mixin invokeMenu($baseColor: $colorBodyFg) {
$c: $baseColor;
color: $c;
&:hover {
color: lighten($c, $ltGamma);
}
}
*/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -82,43 +99,44 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* line 22, ../sass/tree/_tree.scss */
/* line 23, ../sass/tree/_tree.scss */
ul.tree {
margin: 0;
padding: 0; }
/* line 208, ../sass/_mixins.scss */
/* line 276, ../sass/_mixins.scss */
ul.tree li {
list-style-type: none;
margin: 0;
padding: 0; }
/* line 24, ../sass/tree/_tree.scss */
/* line 25, ../sass/tree/_tree.scss */
ul.tree li {
display: block;
position: relative; }
/* line 27, ../sass/tree/_tree.scss */
/* line 28, ../sass/tree/_tree.scss */
ul.tree li span.tree-item {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-transition: background-color 0.25s;
-o-transition: background-color 0.25s;
-webkit-transition: background-color 0.25s;
transition: background-color 0.25s;
display: block;
font-size: 0.80rem;
height: 1.5rem;
line-height: 1.5rem;
font-size: 0.8em;
height: 1.4rem;
line-height: 1.4rem;
margin-bottom: 3px;
position: relative; }
/* line 38, ../sass/tree/_tree.scss */
/* line 39, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .view-control {
display: inline-block;
margin-left: 5px;
font-size: 0.75em;
width: 10px; }
/* line 44, ../sass/tree/_tree.scss */
/* line 45, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .view-control:hover {
color: #ffc700; }
/* line 49, ../sass/tree/_tree.scss */
/* line 50, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label {
display: block;
overflow: hidden;
@@ -129,35 +147,46 @@ ul.tree {
left: 0px;
width: auto;
height: auto;
left: 20px; }
/* line 55, ../sass/tree/_tree.scss */
left: 15px; }
/* line 57, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon {
overflow: hidden;
overflow: false;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
text-shadow: rgba(0, 0, 0, 0.6) 0 1px 2px;
color: #0099cc; }
/* line 59, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .alert {
text-shadow: rgba(0, 0, 0, 0.3) 0 1px 2px;
background: #333;
color: #ff3c00;
font-size: 0.7em;
margin-top: -3px;
top: 0;
right: auto;
bottom: auto;
left: 9px;
height: auto;
width: auto;
color: #0099cc;
left: 5px;
right: auto;
width: 1em; }
/* line 65, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-link, ul.tree li span.tree-item .label .type-icon .icon.l-icon-alert {
text-shadow: black 0 1px 2px;
position: absolute;
z-index: 2; }
/* line 75, ../sass/tree/_tree.scss */
/* line 71, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-alert {
color: #ff3c00;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
top: 1px;
right: -2px; }
/* line 77, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-link {
color: #49dedb;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
left: -3px;
bottom: 5px; }
/* line 86, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .title-label {
overflow: hidden;
position: absolute;
@@ -168,56 +197,55 @@ ul.tree {
width: auto;
height: auto;
display: block;
left: 25px;
left: 30px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 87, ../sass/tree/_tree.scss */
/* line 97, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading {
pointer-events: none; }
/* line 89, ../sass/tree/_tree.scss */
/* line 99, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .label {
opacity: 0.5; }
/* line 91, ../sass/tree/_tree.scss */
/* line 101, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .label .title-label {
font-style: italic; }
/* line 95, ../sass/tree/_tree.scss */
/* line 105, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .wait-spinner {
margin-left: 14px; }
/* line 100, ../sass/tree/_tree.scss */
/* line 110, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected {
background: #005177;
color: #fff; }
/* line 104, ../sass/tree/_tree.scss */
/* line 114, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected .view-control {
color: #0099cc; }
/* line 107, ../sass/tree/_tree.scss */
/* line 117, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected .label .type-icon {
color: #fff; }
/* line 113, ../sass/tree/_tree.scss */
/* line 123, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover {
background: #404040;
color: #cccccc; }
/* line 116, ../sass/tree/_tree.scss */
/* line 126, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover .context-trigger {
display: block; }
/* line 119, ../sass/tree/_tree.scss */
/* line 129, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover .icon {
color: #33ccff; }
/* line 125, ../sass/tree/_tree.scss */
/* line 135, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.loading) {
cursor: pointer; }
/* line 130, ../sass/tree/_tree.scss */
/* line 139, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .context-trigger {
display: none;
top: -1px;
position: absolute;
right: 3px; }
/* line 136, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .context-trigger .btn-invoke-menu {
/* line 145, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .context-trigger .invoke-menu {
font-size: 0.75em;
height: 0.9rem;
line-height: 0.9rem; }
/* line 145, ../sass/tree/_tree.scss */
/* line 154, ../sass/tree/_tree.scss */
ul.tree ul.tree {
margin-left: 15px; }

File diff suppressed because one or more lines are too long

View File

@@ -1,55 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="wtdsymbols-v2" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
<glyph unicode="&#x21;" d="M832 960h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM640 128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v64c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-64zM696.062 768.494l-48.124-384.988c-4.366-34.928-36.738-63.506-71.938-63.506h-128c-35.2 0-67.572 28.578-71.938 63.506l-48.124 384.988c-4.366 34.928 20.862 63.506 56.062 63.506h256c35.2 0 60.428-28.578 56.062-63.506z" />
<glyph unicode="&#x2a;" d="M1004.166 619.542l-97.522 168.916-330.534-229.414 33.414 400.956h-195.048l33.414-400.956-330.534 229.414-97.522-168.916 363.944-171.542-363.944-171.542 97.522-168.916 330.534 229.414-33.414-400.956h195.048l-33.414 400.956 330.534-229.414 97.522 168.916-363.944 171.542z" />
<glyph unicode="&#x2b;" d="M630 0c0-35.2-28.8-64-64-64h-108c-35.2 0-64 28.8-64 64v896c0 35.2 28.8 64 64 64h108c35.2 0 64-28.8 64-64v-896zM64 320c-35.2 0-64 28.8-64 64v128c0 35.2 28.8 64 64 64h896c35.2 0 64-28.8 64-64v-128c0-35.2-28.8-64-64-64h-896z" />
<glyph unicode="&#x2e;" d="M704 384c0-70.4-57.6-128-128-128h-128c-70.4 0-128 57.6-128 128v128c0 70.4 57.6 128 128 128h128c70.4 0 128-57.6 128-128v-128zM1024 448l-192 320v-640zM0 448l192 320v-640z" />
<glyph unicode="&#x32;" d="M1024 960l-640-640-384 384v-384l384-384 640 640z" />
<glyph unicode="&#x35;" d="M512 960l512-448h-1024zM0 384l512-448 512 448z" />
<glyph unicode="&#x36;" d="M1022.294 448c-1.746 7.196-3.476 14.452-5.186 21.786-20.036 85.992-53.302 208.976-98 306.538-22.42 48.938-45.298 86.556-69.946 115.006-48.454 55.93-98.176 67.67-131.356 67.67s-82.902-11.74-131.356-67.672c-24.648-28.45-47.528-66.068-69.948-115.006-44.696-97.558-77.962-220.544-98-306.538-21.646-92.898-46.444-175.138-71.71-237.836-16.308-40.46-30.222-66.358-40.6-82.604-10.378 16.246-24.292 42.142-40.6 82.604-23.272 57.75-46.144 132.088-66.524 216.052h-197.362c1.746-7.196 3.476-14.452 5.186-21.786 20.036-85.992 53.302-208.976 98-306.538 22.42-48.938 45.298-86.556 69.946-115.006 48.454-55.932 98.176-67.672 131.356-67.672s82.902 11.74 131.356 67.672c24.648 28.45 47.528 66.068 69.948 115.006 44.696 97.558 77.962 220.544 98 306.538 21.646 92.898 46.444 175.138 71.71 237.836 16.308 40.46 30.222 66.358 40.6 82.604 10.378-16.246 24.292-42.142 40.6-82.604 23.274-57.748 46.146-132.086 66.526-216.050h197.36z" />
<glyph unicode="&#x39;" d="M448 640c0-70.4-57.6-128-128-128h-192c-70.4 0-128 57.6-128 128v192c0 70.4 57.6 128 128 128h192c70.4 0 128-57.6 128-128v-192zM1024 640c0-70.4-57.6-128-128-128h-192c-70.4 0-128 57.6-128 128v192c0 70.4 57.6 128 128 128h192c70.4 0 128-57.6 128-128v-192zM1024 64c0-70.4-57.6-128-128-128h-192c-70.4 0-128 57.6-128 128v192c0 70.4 57.6 128 128 128h192c70.4 0 128-57.6 128-128v-192zM448 64c0-70.4-57.6-128-128-128h-192c-70.4 0-128 57.6-128 128v192c0 70.4 57.6 128 128 128h192c70.4 0 128-57.6 128-128v-192z" />
<glyph unicode="&#x3c;" d="M256 448l512-512v1024z" />
<glyph unicode="&#x3e;" d="M768 448l-512 512v-1024z" />
<glyph unicode="&#x41;" d="M450 448c0-124.264-100.736-225-225-225s-225 100.736-225 225c0 124.264 100.736 225 225 225s225-100.736 225-225zM320 576h512v-256h-512v256zM512 960v-256l256-256-256-256v-256l512 512z" />
<glyph unicode="&#x42;" d="M192 960c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h64v1024h-64zM384 960h256v-1024h-256v1024zM832 960h-64v-704h256v512c0 105.6-86.4 192-192 192z" />
<glyph unicode="&#x43;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM768 384h-256c-35.2 0-64 28.8-64 64v384c0 35.2 28.8 64 64 64s64-28.8 64-64v-320h192c35.2 0 64-28.8 64-64s-28.8-64-64-64z" />
<glyph unicode="&#x44;" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.77 0-512 85.962-512 192v-512c0-106.038 229.23-192 512-192s512 85.962 512 192v512c0-106.038-229.23-192-512-192z" />
<glyph unicode="&#x46;" d="M210 704h686c0 70.4-57.6 128-128 128h-320v64c0 35.2-28.8 64-64 64h-320c-35.2 0-64-28.8-64-64v-643l59.102 325.064c12.594 69.266 80.498 125.936 150.898 125.936zM914 640h-640c-70.4 0-138.304-56.67-150.898-125.936l-82.204-452.128c-12.594-69.266 34.702-125.936 105.102-125.936h640c70.4 0 138.304 56.67 150.898 125.936l82.206 452.13c12.592 69.264-34.704 125.934-105.104 125.934z" />
<glyph unicode="&#x47;" d="M1024 384v128l-140.976 35.244c-8.784 32.922-21.818 64.106-38.504 92.918l74.774 124.622-90.51 90.51-124.622-74.774c-28.812 16.686-59.996 29.72-92.918 38.504l-35.244 140.976h-128l-35.244-140.976c-32.922-8.784-64.106-21.818-92.918-38.504l-124.622 74.774-90.51-90.51 74.774-124.622c-16.686-28.812-29.72-59.996-38.504-92.918l-140.976-35.244v-128l140.976-35.244c8.784-32.922 21.818-64.106 38.504-92.918l-74.774-124.622 90.51-90.51 124.622 74.774c28.812-16.686 59.996-29.72 92.918-38.504l35.244-140.976h128l35.244 140.976c32.922 8.784 64.106 21.818 92.918 38.504l124.622-74.774 90.51 90.51-74.774 124.622c16.686 28.812 29.72 59.996 38.504 92.918l140.976 35.244zM704 448c0-106.038-85.962-192-192-192s-192 85.962-192 192 85.962 192 192 192 192-85.962 192-192z" />
<glyph unicode="&#x4c;" d="M448 960h-256c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h256v1024zM832 960h-256v-577.664h448v385.664c0 105.6-86.4 192-192 192zM576-64h256c105.6 0 192 86.4 192 192v129.664h-448v-321.664z" />
<glyph unicode="&#x4d;" d="M1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216-232.168-46.6-316.784-131.216-131.216-197.118-131.216-316.784 46.6-232.168 131.216-316.784 197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#x4f;" d="M704 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM256 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM832 576h-192c-34.908 0-67.716-9.448-96-25.904 57.278-33.324 96-95.404 96-166.096v-448h384v448c0 105.6-86.4 192-192 192zM384 576h-192c-105.6 0-192-86.4-192-192v-448h576v448c0 105.6-86.4 192-192 192z" />
<glyph unicode="&#x51;" d="M832 320c105.6 0 192 86.4 192 192v256c0 105.6-86.4 192-192 192v-320l-128 64-128-64v320h-384c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v192c0-105.6-86.4-192-192-192h-640v192h640z" />
<glyph unicode="&#x53;" d="M256 704h384v-128h-384v128zM384 512h384v-128h-384v128zM320 320h384v-128h-384v128zM832 960h-128v-192h127.656c0.118-0.1 0.244-0.226 0.344-0.344v-639.312c-0.1-0.118-0.224-0.244-0.344-0.344h-127.656v-192h128c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM320 128h-127.656c-0.118 0.1-0.244 0.224-0.344 0.344v639.312c0.1 0.118 0.224 0.244 0.344 0.344h127.656v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192z" />
<glyph unicode="&#x54;" d="M720.648 384h-127.296c25.016-93.406 48.476-144.436 63.648-168.54 15.172 24.104 38.632 75.134 63.648 168.54zM796.086 207.228c-15.464-35.792-31.2-63.246-48.102-83.93-18.374-22.49-49.076-49.298-90.984-49.298s-72.61 26.808-90.984 49.298c-16.902 20.684-32.636 48.138-48.102 83.93-23.648 54.726-42.732 120.406-56.688 176.772h-457.25c31.496-252.562 246.93-448 508.024-448s476.528 195.438 508.024 448h-167.252c-13.954-56.364-33.038-122.044-56.686-176.772zM303.352 512h127.296c-25.016 93.406-48.476 144.436-63.648 168.538-15.172-24.102-38.632-75.132-63.648-168.538zM276.016 772.702c18.374 22.49 49.076 49.298 90.984 49.298s72.61-26.808 90.984-49.298c16.902-20.684 32.636-48.138 48.102-83.93 23.648-54.726 42.732-120.406 56.688-176.772h457.252c-31.498 252.562-246.932 448-508.026 448s-476.528-195.438-508.024-448h167.252c13.956 56.366 33.040 122.044 56.688 176.772 15.462 35.792 31.198 63.244 48.1 83.93z" />
<glyph unicode="&#x5a;" d="M832 832h-192.36v64c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-64h-191.64c-105.6 0-192-72-192-160s0-160 0-160h64v-384c0-105.6 86.4-192 192-192h512c105.6 0 192 86.4 192 192v384h64c0 0 0 72 0 160s-86.4 160-192 160zM320 128h-128v384h128v-384zM576 128h-128v384h128v-384zM832 128h-128v384h128v-384z" />
<glyph unicode="&#x5e;" d="M512 704l-512-512h1024z" />
<glyph unicode="&#x5f;" d="M191.656 128c0.118-0.1 0.244-0.224 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192h-192v-192h191.656zM192 768.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656zM832 576h192v192h-191.656c-0.118 0.1-0.244 0.226-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192zM832 127.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656z" />
<glyph unicode="&#x64;" d="M683.52 140.714c-50.782-28.456-109.284-44.714-171.52-44.714-194.094 0-352 157.906-352 352s157.906 352 352 352 352-157.906 352-352c0-62.236-16.258-120.738-44.714-171.52l191.692-191.692c8.516 13.89 13.022 28.354 13.022 43.212v640c0 106.038-229.23 192-512 192s-512-85.962-512-192v-640c0-106.038 229.23-192 512-192 126.11 0 241.548 17.108 330.776 45.46l-159.256 159.254zM352 448c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160-160-71.776-160-160z" />
<glyph unicode="&#x6c;" d="M0 448l256-256v512zM512 960l-256-256h512zM512-64l256 256h-512zM768 704v-512l256 256z" />
<glyph unicode="&#x6f;" d="M512-64l512 320v384l-512.020 320-511.98-320v-384l512-320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
<glyph unicode="&#x70;" d="M922.344 858.32c-38.612 38.596-81.306 69.232-120.304 86.324-68.848 30.25-104.77 9.078-120.194-6.344l-516.228-516.216-3.136-9.152-162.482-476.932 485.998 165.612 6.73 6.806 509.502 509.506c9.882 9.866 21.768 27.77 21.768 56.578 0.002 50.71-38.996 121.148-101.654 183.818zM237.982 104.34l-69.73 69.728 69.25 203.228 18.498 6.704h64v-128h128v-64l-6.846-18.506-203.172-69.154z" />
<glyph unicode="&#x74;" d="M171.226 512c13.956 56.366 33.040 122.044 56.688 176.772 15.466 35.792 31.2 63.246 48.1 83.93 18.376 22.49 49.078 49.298 90.986 49.298s72.61-26.808 90.986-49.298c16.9-20.684 32.634-48.138 48.1-83.93 23.648-54.726 42.732-120.406 56.688-176.772h461.226v256c0 105.6-86.4 192-192 192h-640c-105.6 0-192-86.4-192-192v-256h171.226zM720.648 384h-127.296c25.016-93.406 48.476-144.436 63.648-168.54 15.172 24.104 38.632 75.134 63.648 168.54zM303.352 512h127.294c-25.016 93.406-48.476 144.436-63.648 168.538-15.17-24.102-38.628-75.132-63.646-168.538zM852.774 384c-13.956-56.364-33.040-122.044-56.688-176.772-15.464-35.792-31.2-63.246-48.102-83.93-18.374-22.49-49.076-49.298-90.984-49.298s-72.61 26.808-90.984 49.298c-16.902 20.684-32.636 48.138-48.102 83.93-23.648 54.726-42.732 120.406-56.688 176.772h-461.226v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-171.226z" />
<glyph unicode="&#x76;" d="M512 192l512 512h-1024z" />
<glyph unicode="&#x78;" 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" />
<glyph unicode="&#x79;" d="M448 960v-128h320l-384-384 128-128 384 384v-320h128v576zM576 285.726v-157.382c-0.1-0.118-0.226-0.244-0.344-0.344h-383.312c-0.118 0.1-0.244 0.226-0.344 0.344v383.312c0.1 0.118 0.226 0.244 0.344 0.344h157.382l192 192h-349.726c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h384c105.6 0 192 86.4 192 192v349.726l-192-192z" />
<glyph unicode="&#x7a;" d="M192.344 128c-0.118 0.1-0.244 0.224-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192h192v192h-191.656zM192 767.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656zM832 960h-192v-192h191.656c0.118-0.1 0.244-0.226 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192zM832 128.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656z" />
<glyph unicode="&#x7b;" d="M766-64l-256 512 256 512h-256l-256-512 256-512z" />
<glyph unicode="&#x7d;" d="M254 960l256-512-256-512h256l256 512-256 512z" />
<glyph unicode="&#xe602;" d="M704 448l301.332-301.332c24.89-24.89 24.89-65.62 0-90.51l-101.49-101.49c-24.89-24.89-65.62-24.89-90.51 0l-301.332 301.332c0 0-301.332-301.332-301.332-301.332-24.89-24.89-65.62-24.89-90.51 0l-101.49 101.49c-24.89 24.89-24.89 65.62 0 90.51l301.332 301.332c0 0-301.332 301.332-301.332 301.332-24.89 24.89-24.89 65.62 0 90.51l101.49 101.49c24.89 24.89 65.62 24.89 90.51 0l301.332-301.332c0 0 301.332 301.332 301.332 301.332 24.89 24.89 65.62 24.89 90.51 0l101.49-101.49c24.89-24.89 24.89-65.62 0-90.51 0 0-301.332-301.332-301.332-301.332z" />
<glyph unicode="&#xe604;" d="M960 640h-256v256c0 35.2-28.8 64-64 64h-256c-35.2 0-64-28.8-64-64v-256h-256c-35.2 0-64-28.8-64-64v-256c0-35.2 28.8-64 64-64h256v-256c0-35.2 28.8-64 64-64h256c35.2 0 64 28.8 64 64v256h256c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64z" />
<glyph unicode="&#xe60b;" d="M640 576h-128v128h-128v-128h-128v-128h128v-128h128v128h128zM1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216c-119.666 0-232.168-46.6-316.784-131.216s-131.216-197.118-131.216-316.784c0-119.666 46.6-232.168 131.216-316.784s197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#xe60c;" d="M256 576h384v-128h-384v128zM1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216c-119.666 0-232.168-46.6-316.784-131.216s-131.216-197.118-131.216-316.784c0-119.666 46.6-232.168 131.216-316.784s197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#xe60d;" d="M210 704h686c0 70.4-57.6 128-128 128h-320v64c0 35.2-28.8 64-64 64h-320c-35.2 0-64-28.8-64-64v-643l59.102 325.064c12.594 69.266 80.498 125.936 150.898 125.936zM914 640h-640c-70.4 0-138.304-56.67-150.898-125.936l-82.204-452.128c-12.594-69.266 34.702-125.936 105.102-125.936h640c70.4 0 138.304 56.67 150.898 125.936l82.206 452.13c12.592 69.264-34.704 125.934-105.104 125.934zM734.248 192h-128l-23.386-128h-192l23.386 128h-128l35.078 192h128l23.386 128h192l-23.386-128h128l-35.078-192z" />
<glyph unicode="&#xe616;" d="M1024 448l-448-512v1024zM448 960l-448-512 448-512z" />
<glyph unicode="&#xe61c;" d="M517.98 960l-511.98-320v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512l-512.020 320zM518 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
<glyph unicode="&#xe624;" d="M998.208 111.136l-422.702 739.728c-34.928 61.124-92.084 61.124-127.012 0l-422.702-739.728c-34.928-61.126-5.906-111.136 64.494-111.136h843.428c70.4 0 99.422 50.010 64.494 111.136zM512 128c-35.2 0-64 28.8-64 64s28.8 64 64 64 64-28.8 64-64c0-35.2-28.8-64-64-64zM627.448 577.242l-38.898-194.486c-6.902-34.516-41.35-62.756-76.55-62.756s-69.648 28.24-76.552 62.758l-38.898 194.486c-6.902 34.516 16.25 62.756 51.45 62.756h128c35.2 0 58.352-28.24 51.448-62.758z" />
<glyph unicode="&#xe627;" d="M255.884 256c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h255.884c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h143.658c-93.832 117.038-237.98 192-399.658 192-282.77 0-512-229.23-512-512 0-67.904 13.25-132.704 37.256-192h218.628zM768.116 640c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-255.884c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-143.658c93.832-117.038 237.98-192 399.658-192 282.77 0 512 229.23 512 512 0 67.904-13.25 132.704-37.256 192h-218.628z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

View File

@@ -1,242 +1,83 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg>
<metadata>
Created by FontForge 20090622 at Mon May 4 20:21:42 2015
By deploy user
Copyright 2015 Adobe Systems Incorporated. All rights reserved.
</metadata>
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="WTDSymbols" horiz-adv-x="750" >
<font-face
font-family="WTDSymbols"
font-weight="400"
font-stretch="normal"
units-per-em="1000"
panose-1="0 0 0 0 0 0 0 0 0 0"
ascent="750"
descent="-250"
x-height="579"
cap-height="782"
bbox="-33 -19 1143 787"
underline-thickness="50"
underline-position="-50"
unicode-range="U+0020-U+2044"
/>
<missing-glyph horiz-adv-x="500"
/>
<glyph glyph-name=".notdef" horiz-adv-x="500"
/>
<glyph glyph-name=".null" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="333"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="500"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="636"
d="M476 730q65 0 112.5 -46.5t47.5 -111.5v-413q0 -66 -47 -112.5t-113 -46.5h-317q-66 0 -112.5 46.5t-46.5 112.5v413q0 65 46.5 111.5t112.5 46.5h317zM405 108v63q0 8 -6.5 13.5t-13.5 5.5h-135q-21 0 -21 -19v-63q0 -10 6.5 -16t14.5 -6h135q7 0 13.5 6.5t6.5 15.5z
M389 277l28 355q0 19 -20 19h-163q-20 0 -20 -19l28 -355q0 -8 6.5 -13.5t13.5 -5.5h108q19 0 19 19z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="709"
d="M284 733h139l-23 -285l237 163l71 -122l-263 -123l263 -122l-71 -122l-237 162l23 -284h-139l23 288l-237 -166l-70 122l259 122l-259 123l70 122l237 -166z" />
<glyph glyph-name="plus" unicode="+" horiz-adv-x="735"
d="M696 476q16 0 27.5 -11.5t11.5 -27.5v-139q0 -16 -11.5 -27.5t-27.5 -11.5h-220v-220q0 -16 -11.5 -27.5t-27.5 -11.5h-139q-16 0 -27.5 11.5t-11.5 27.5v220h-220q-16 0 -27.5 11.5t-11.5 27.5v139q0 16 11.5 27.5t27.5 11.5h220v220q0 16 11.5 27.5t27.5 11.5h139
q16 0 27.5 -11.5t11.5 -27.5v-220h220z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="1144"
d="M282 63l-282 264l282 260v-524zM1143 327l-281 -264v524zM754 327q0 -77 -53.5 -130.5t-130.5 -53.5q-74 0 -126.5 54t-52.5 130q0 74 52.5 127t126.5 53q77 0 130.5 -52.5t53.5 -127.5z" />
<glyph glyph-name="zero" unicode="0" horiz-adv-x="535"
d="M266 624l266 -624h-532z" />
<glyph glyph-name="one" unicode="1" horiz-adv-x="534"
d="M267 0l-267 623h532z" />
<glyph glyph-name="two" unicode="2" horiz-adv-x="686"
d="M246 0l-246 246v291l246 -243l440 441v-295z" />
<glyph glyph-name="three" unicode="3" horiz-adv-x="805"
d="M340 730v-730h-340v730h340zM805 730v-304h-341v304h341zM805 304v-304h-341v304h341z" />
<glyph glyph-name="four" unicode="4" horiz-adv-x="805"
d="M341 732v-159h-341v159h341zM341 445v-158h-341v158h341zM341 159v-159h-341v159h341zM806 732v-159h-341v159h341zM806 445v-158h-341v158h341zM806 159v-159h-341v159h341z" />
<glyph glyph-name="five" unicode="5" horiz-adv-x="807"
d="M807 311l-403 -311l-404 311h807zM0 419l404 310l403 -310h-807z" />
<glyph glyph-name="six" unicode="6" horiz-adv-x="806"
d="M655 366h151l-5 -21q-44 -152 -89 -235q-27 -47 -56 -73q-41 -37 -89 -37q-50 0 -89 37q-31 28 -57 73q-46 84 -88 235q-52 186 -95 231q-40 -48 -87 -210h-151l4 18l1 1q43 153 88 236q26 45 57 73q41 36 88 36q49 0 90 -36q29 -26 56 -73q47 -83 88 -236
q52 -180 95 -231q42 53 88 212z" />
<glyph glyph-name="seven" unicode="7" horiz-adv-x="669"
d="M193 787v-193h-193v193h193zM193 491v-195h-193v195h193zM193 193v-193h-193v193h193zM671 732v-82h-388v82h388zM671 435v-81h-388v81h388zM671 138v-82h-388v82h388z" />
<glyph glyph-name="eight" unicode="8" horiz-adv-x="636"
d="M625 735v-318h-625v318h625zM625 315v-315h-625v315h625z" />
<glyph glyph-name="nine" unicode="9" horiz-adv-x="636"
d="M267 735v-319h-267v319h267zM267 315v-315h-267v315h267zM630 735v-319h-267v319h267zM630 315v-315h-267v315h267z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="625"
d="M625 -19l-397 397l397 397v-794zM173 756v-735h-173v735h173z" />
<glyph glyph-name="semicolon" unicode=";" horiz-adv-x="624"
d="M0 774l396 -397l-396 -396v793zM451 0v734h173v-734h-173z" />
<glyph glyph-name="less" unicode="&#x3c;" horiz-adv-x="352"
d="M352 0l-352 367l352 368v-735z" />
<glyph glyph-name="greater" unicode="&#x3e;" horiz-adv-x="353"
d="M352 366l-352 -366v735z" />
<glyph glyph-name="A" unicode="A" horiz-adv-x="723"
d="M348 750q156 0 265.5 -109.5t109.5 -265.5q0 -155 -109.5 -265t-265.5 -110q-116 0 -210.5 65t-137.5 169h66q62 0 106 47h176l-141 -141h188l234 235l-234 234h-188l141 -140h-176q-43 48 -106 48h-66q43 104 137.5 168.5t210.5 64.5z" />
<glyph glyph-name="C" unicode="C"
d="M374 750q157 0 266.5 -109t109.5 -267q0 -155 -110 -264.5t-266 -109.5q-154 0 -264 110t-110 264q0 158 109.5 267t264.5 109zM558 281q7 14 3 29.5t-18 22.5l-131 68v260q0 36 -38 36q-16 0 -26 -9.5t-10 -26.5v-309l167 -85q9 -4 20 -4q22 0 33 18z" />
<glyph glyph-name="D" unicode="D" horiz-adv-x="811"
d="M719 418q76 26 92 40v-313q0 -56 -116 -93.5t-287 -37.5t-289.5 37.5t-118.5 93.5v313q57 -30 97 -40q131 -43 311 -43q182 0 311 43zM811 615q0 -55 -117 -95t-286 -40t-288.5 40t-119.5 95q0 52 119.5 89.5t288.5 37.5t286 -37.5t117 -89.5z" />
<glyph glyph-name="E" unicode="E" horiz-adv-x="977"
d="M488 727q162 0 294.5 -100.5t194.5 -263.5q-63 -162 -195 -262.5t-294 -100.5q-161 0 -293 100t-195 263q63 163 195 263.5t293 100.5zM488 170q80 0 136.5 56.5t56.5 136.5q0 81 -56.5 137.5t-136.5 56.5t-136.5 -56.5t-56.5 -137.5q0 -80 56.5 -136.5t136.5 -56.5z" />
<glyph glyph-name="F" unicode="F" horiz-adv-x="849"
d="M227 601q-41 0 -79 -26t-49 -61l-99 -317v255v95v164q0 20 14 34.5t34 14.5h234q22 0 37 -14.5t15 -34.5v-62h251q29 0 53 -13t35 -35h-446zM771 525q43 0 66 -25.5t12 -61.5l-111 -351q-11 -34 -49.5 -60.5t-80.5 -26.5h-486q-42 0 -65 26.5t-11 60.5l109 351
q12 36 51.5 61.5t82.5 25.5h482z" />
<glyph glyph-name="G" unicode="G" horiz-adv-x="749"
d="M749 328l-102 -25q-8 -32 -28 -69l54 -91l-66 -65l-91 54q-38 -21 -68 -28l-27 -104h-93l-25 104q-32 8 -69 28l-91 -54l-65 65l54 91q-20 37 -28 69l-104 25v93l104 27q7 30 28 68l-54 91l65 66l91 -54q37 20 69 28l25 102h93l27 -102q30 -7 68 -28l91 54l66 -66
l-54 -91q21 -38 28 -68l102 -27v-93zM515 374q0 58 -41.5 99.5t-99.5 41.5t-99 -41.5t-41 -99.5t41 -99t99 -41t99.5 41t41.5 99z" />
<glyph glyph-name="H" unicode="H" horiz-adv-x="774"
d="M0 0v700h180v-700h-180zM297 0v700h180v-700h-180zM594 192v508h180v-508h-180z" />
<glyph glyph-name="I" unicode="I" horiz-adv-x="853"
d="M635 582h-439l220 200zM663 209v349l190 -174zM169 558v-349l-191 175zM196 185h439l-219 -199z" />
<glyph glyph-name="J" unicode="J" horiz-adv-x="500"
/>
<glyph glyph-name="L" unicode="L" horiz-adv-x="817"
d="M0 575q0 67 47 113.5t114 46.5h303v-735h-303q-67 0 -114 47t-47 113v415zM652 735q66 0 113.5 -46.5t47.5 -113.5v-172h-271v332h110zM542 0v324h271v-164q0 -66 -47.5 -113t-113.5 -47h-110z" />
<glyph glyph-name="M" unicode="M" horiz-adv-x="768"
d="M560 299l199 -202l-98 -97l-200 202q-63 -44 -152 -44q-121 0 -207 86q-87 86 -87 209t87 211q82 86 207 86q124 0 210 -86q73 -73 84 -176.5t-43 -188.5zM421 340q49 51 49 114q0 66 -49 112q-46 49 -112 49q-63 0 -114 -49q-44 -44 -44 -112q0 -65 44 -114
q53 -48 114 -48q64 0 112 48z" />
<glyph glyph-name="N" unicode="N" horiz-adv-x="778"
d="M0 588q117 7 212 -25t148 -80v-483q-53 49 -148 80.5t-212 24.5v483zM418 483q55 48 149.5 80t211.5 25v-483q-118 7 -212.5 -24.5t-148.5 -80.5v483zM105 735q92 -13 160 -67.5t107 -130.5q-107 84 -267 99v99z" />
<glyph glyph-name="O" unicode="O" horiz-adv-x="849"
d="M383 606q0 -56 -40.5 -97t-95.5 -41q-59 0 -100.5 40.5t-41.5 97.5q0 59 41.5 100t100.5 41q56 0 96 -41.5t40 -99.5zM247 445q101 0 172.5 -72t71.5 -175v-198h-491v198q0 103 72.5 175t174.5 72zM602 468q-56 0 -98 41t-42 97q0 58 41.5 99.5t98.5 41.5t98 -41.5
t41 -99.5q0 -56 -41.5 -97t-97.5 -41zM602 445q102 0 174 -72.5t72 -174.5v-198h-287v198q0 60 -27.5 113t-75.5 87q65 47 144 47z" />
<glyph glyph-name="P" unicode="P" horiz-adv-x="562"
d="M441 590q0 -66 -47.5 -112t-112.5 -46q-67 0 -113.5 45.5t-46.5 112.5q0 65 47 112.5t113 47.5q64 0 112 -48t48 -112zM281 403q117 0 199 -82.5t82 -199.5v-121h-562v121q0 117 82.5 199.5t198.5 82.5z" />
<glyph glyph-name="Q" unicode="Q" horiz-adv-x="808"
d="M749 122q22 0 38.5 14t20.5 35v-119q0 -22 -15.5 -37t-36.5 -15h-347h-283q-52 0 -89 37t-37 89v483q0 52 37 89t89 37h336v-224l111 56l113 -56v224h70q21 0 36.5 -15.5t15.5 -37.5v-389q-4 -21 -20.5 -35t-38.5 -14h-565q-25 0 -43 -18t-18 -43t17.5 -43t43.5 -18h565z
" />
<glyph glyph-name="S" unicode="S" horiz-adv-x="815"
d="M119 619v-505h100v-114h-153q-28 0 -47 19t-19 47v601q0 27 19 46.5t47 19.5h153v-114h-100zM744 733q27 0 46.5 -19.5t19.5 -46.5v-601q0 -28 -19.5 -47t-46.5 -19h-154v114h101v505h-101v114h154zM176 472v108h319v-108h-319zM277 313v107h356v-107h-356zM226 154v107
h336v-107h-336z" />
<glyph glyph-name="T" unicode="T" horiz-adv-x="743"
d="M466 86q53 0 85 75.5t34 177.5h158q-12 -143 -118.5 -241t-251.5 -98q-147 0 -253 98t-120 241h346q2 -106 34 -179.5t86 -73.5zM466 148q-9 0 -21.5 20.5t-24.5 67t-14 103.5h119q-4 -58 -15.5 -104t-23 -66.5t-20.5 -20.5zM282 603q7 0 19 -20.5t24 -66.5t16 -103h-120
q2 58 13 103.5t24 66t24 20.5zM282 666q-54 0 -85 -73.5t-39 -179.5h-158q14 142 120.5 240t252.5 98q145 0 251.5 -98t118.5 -240h-341q-6 105 -37 179t-83 74z" />
<glyph glyph-name="U" unicode="U" horiz-adv-x="800"
d="M800 733l-396 -397l-397 397h793zM69 0q-29 0 -49 20t-20 49v123q0 29 20 49t49 20h671q28 0 48.5 -20.5t20.5 -48.5v-123q0 -28 -20.5 -48.5t-48.5 -20.5h-671z" />
<glyph glyph-name="V" unicode="V" horiz-adv-x="752"
d="M376 752l376 -235v-376q0 -57 -41.5 -99t-99.5 -42h-470q-57 0 -99 42t-42 99v376zM376 611l-263 -165l263 -164l264 164z" />
<glyph glyph-name="X" unicode="X" horiz-adv-x="753"
d="M471 471v-95h-95v-94h-94v94h-94v95h94v94h94v-94h95zM753 94l-94 -94l-149 149q-81 -55 -181 -55q-137 0 -232 97q-97 95 -97 233q0 137 97 232q95 97 232 97q138 0 233 -97q97 -95 97 -232q0 -100 -55 -181zM329 235q79 0 134 55t55 134q0 78 -55 133t-134 55
q-78 0 -133 -55t-55 -133q0 -79 55 -134t133 -55z" />
<glyph glyph-name="Y" unicode="Y" horiz-adv-x="500"
d="M471 471v-95h-283v95h283zM753 94l-94 -94l-149 149q-81 -55 -181 -55q-137 0 -232 97q-97 95 -97 233q0 137 97 232q95 97 232 97q138 0 233 -97q97 -95 97 -232q0 -100 -55 -181zM329 235q79 0 134 55t55 134q0 78 -55 133t-134 55q-78 0 -133 -55t-55 -133
q0 -79 55 -134t133 -55z" />
<glyph glyph-name="Z" unicode="Z" horiz-adv-x="808"
d="M808 573v-129h-79v-371q0 -29 -22 -51t-52 -22h-502q-30 0 -51.5 21.5t-21.5 51.5v371h-80v129q0 30 21.5 51.5t51.5 21.5h247v41q0 20 15.5 34.5t37.5 14.5h62q22 0 37 -14.5t15 -34.5v-41h248q30 0 51.5 -21.5t21.5 -51.5zM172 88h83v356h-83v-356zM362 88h83v356h-83
v-356zM635 88v356h-83v-356h83z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="742"
d="M373 602l-238 -237l237 -237l236 238zM373 731q39 0 66 -28l270 -270q29 -28 29 -67.5t-29 -67.5l-271 -271q-26 -27 -66 -27q-41 0 -68 27l-271 271q-27 27 -27 67t27 67l271 271q28 28 69 28z" />
<glyph glyph-name="backslash" unicode="\" horiz-adv-x="810"
d="M806 0h-178l-228 265q-19 -6 -41 -6q-65 0 -111 47t-46 112q0 34 12 63l-214 251h178l139 -162q23 5 42 5q65 0 112 -46t47 -111q0 -30 -14 -65zM286 418q0 -31 21 -53t52 -22t53 22t22 53t-22 52t-53 21t-52 -21t-21 -52z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="807"
d="M128 237l-61 61q-27 27 -27 67t27 67l271 271q28 28 69 28q39 0 67 -28l61 -60l-85 -85l-43 44l-238 -237l44 -44zM683 494l61 -61q28 -28 28 -67.5t-28 -67.5l-271 -271q-27 -27 -67 -27q-41 0 -68 27l-61 62l84 84l45 -45l237 238l-44 44zM697 731h149l-731 -731h-148z
" />
<glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="818"
d="M394 492l393 -377h-787z" />
<glyph glyph-name="underscore" unicode="_" horiz-adv-x="807"
d="M807 603v-122h-143q-48 0 -82 33.5t-34 81.5v136h122v-129h137zM138 732h121v-136q0 -48 -34 -81.5t-81 -33.5h-144v122h138v129zM0 129v122h144q47 0 81 -34.5t34 -81.5v-135h-121v129h-138zM670 0h-122v135q0 47 34.5 81.5t81.5 34.5h143v-122h-137v-129z" />
<glyph glyph-name="a" unicode="a" horiz-adv-x="723"
d="M407 691l316 -316l-316 -316h-180l224 226h-203q-24 -41 -66 -65.5t-92 -24.5h-90v361h90q51 0 93 -24t65 -66h203l-224 225h180z" />
<glyph glyph-name="c" unicode="c" horiz-adv-x="800"
d="M558 556q0 -9 -6.5 -15t-14.5 -6h-516q-9 0 -15 6t-6 15v149q0 9 6 15t15 6h516q8 0 14.5 -6t6.5 -15v-149zM779 458q9 0 15 -6t6 -15v-148q0 -9 -6 -15t-15 -6h-582q-8 0 -14 6t-6 15v148q0 9 6 15t14 6h582zM656 191q9 0 15 -6t6 -15v-149q0 -9 -6 -15t-15 -6h-549
q-8 0 -14.5 6t-6.5 15v149q0 9 6.5 15t14.5 6h549z" />
<glyph glyph-name="d" unicode="d" horiz-adv-x="741"
d="M372 745q150 0 259.5 -36t109.5 -82v-505q0 -22 -15 -34l-152 152q42 69 33.5 153t-66.5 144q-70 71 -169 71q-101 0 -171 -71q-71 -70 -71 -170.5t71 -169.5q68 -71 171 -71q67 0 125 37l126 -129q-122 -34 -251 -34q-153 0 -262.5 36t-109.5 86v505q0 46 110 82t262 36
zM277 459q45 38 95 38q48 0 91 -38q38 -45 38 -92q0 -48 -38 -93q-43 -38 -91 -38q-50 0 -95 38q-37 44 -37 93q0 48 37 92z" />
<glyph glyph-name="e" unicode="e" horiz-adv-x="978"
d="M489 728q162 0 294.5 -100.5t194.5 -264.5q-63 -162 -195 -262.5t-294 -100.5q-161 0 -293.5 100.5t-195.5 262.5q63 164 195.5 264.5t293.5 100.5zM489 100q105 0 194.5 60.5t140.5 162.5q-56 -50 -144.5 -78.5t-190.5 -28.5t-190.5 28.5t-144.5 78.5
q51 -102 140 -162.5t195 -60.5z" />
<glyph glyph-name="f" unicode="f" horiz-adv-x="855"
d="M229 597q-42 0 -80.5 -25.5t-49.5 -61.5l-99 -314v255v95v163q0 22 15 37t36 15h233q21 0 35.5 -15t14.5 -37v-60h254q59 0 88 -52h-447zM774 523q43 0 64.5 -25t10.5 -61l-110 -350q-11 -36 -49.5 -61.5t-81.5 -25.5h-485q-43 0 -65 25.5t-10 61.5l111 350q11 36 49 61
t80 25h486zM666 296q4 8 -0.5 14t-13.5 6h-115l36 117q3 8 -1 14t-13 6h-73q-21 0 -28 -20l-37 -117h-116q-20 0 -27 -20l-23 -73q-5 -21 15 -21h116l-37 -116q-2 -9 1.5 -15t12.5 -6h74q17 0 27 21l36 116h116q21 0 28 21z" />
<glyph glyph-name="g" unicode="g" horiz-adv-x="812"
d="M735 735q32 0 54.5 -23.5t22.5 -55.5v-578q0 -32 -22.5 -55t-54.5 -23h-398q-32 0 -69 18t-55 44l-188 242q-19 26 -19 62.5t19 63.5l188 242q18 26 55 44.5t69 18.5h398zM250 269q41 0 69.5 28.5t28.5 68.5q0 42 -28.5 70.5t-69.5 28.5t-69.5 -28.5t-28.5 -70.5
q0 -41 28.5 -69t69.5 -28z" />
<glyph glyph-name="i" unicode="i" horiz-adv-x="751"
d="M375 751q156 0 266 -110t110 -266q0 -155 -110 -265t-266 -110q-155 0 -265 110t-110 265q0 156 110 266t265 110zM332 628v-67q0 -21 20 -21h67q20 0 20 21v67q0 21 -20 21h-67q-20 0 -20 -21zM549 150v69q0 8 -6 14t-14 6h-90v232q0 20 -20 20h-176q-21 0 -21 -20v-68
q0 -8 6 -14t15 -6h89v-144h-89q-9 0 -15 -6t-6 -14v-69q0 -20 21 -20h286q8 0 14 5.5t6 14.5z" />
<glyph glyph-name="j" unicode="j" horiz-adv-x="797"
d="M123 367l-123 123v147l123 -123l220 221v-147zM123 0l-123 123v147l123 -123l220 220v-147zM485 537v71h313v-71h-313zM798 240v-71h-313v71h313z" />
<glyph glyph-name="k" unicode="k" horiz-adv-x="798"
d="M123 93l-123 123v147l123 -123l220 220v-147zM485 262v71h313v-71h-313z" />
<glyph glyph-name="l" unicode="l" horiz-adv-x="617"
d="M551 386h66v-386h-617v386h63v106q0 100 72 171.5t173 71.5q99 0 171 -71.5t72 -171.5v-106zM173 492v-106h267v106q0 56 -38.5 94.5t-93.5 38.5q-56 0 -95.5 -39t-39.5 -94z" />
<glyph glyph-name="m" unicode="m" horiz-adv-x="804"
d="M804 729v-156h-804v156h804zM804 445v-160h-804v160h804zM804 158v-158h-804v158h804z" />
<glyph glyph-name="n" unicode="n" horiz-adv-x="738"
d="M690 697q48 -50 48 -88q0 -18 -10 -26l-243 -243l-3 -3l-4 -2l-227 -78l77 228l2 4l3 3l242 243q22 19 57 3q29 -14 58 -41zM461 371l1 2l-3 50l-34 2h-9v10v28l-51 6l-2 -1l-32 -97l33 -33zM249 512l-134 -389l304 104v-215q-136 -8 -246.5 29t-172.5 93v561
q48 -42 125 -75.5t172 -43.5l-24 -25l-17 -17z" />
<glyph glyph-name="o" unicode="o" horiz-adv-x="717"
d="M358 767l359 -192v-383l-359 -192l-358 192v383zM358 385l267 141l-267 143l-265 -143z" />
<glyph glyph-name="p" unicode="p" horiz-adv-x="776"
d="M695 695q33 -34 54.5 -74.5t21.5 -65.5q0 -7 -7.5 -22.5t-7.5 -23.5l-385 -385h-16l-355 -124l124 355v16l385 385q38 36 94 0q62 -31 92 -61zM185 124l139 61h15l-15 77h-47h-15v15v47l-77 15v-15l-61 -139z" />
<glyph glyph-name="r" unicode="r" horiz-adv-x="920"
d="M443 0q-129 0 -225.5 88.5t-108.5 217.5h-131l214 158l218 -158h-128q11 -58 56.5 -96t104.5 -38q58 0 103 37l16 13l122 -122l-18 -16q-93 -84 -223 -84zM734 272l-218 158h128q-11 58 -56.5 95t-105.5 37q-58 0 -103 -37l-16 -13l-121 122l17 16q96 85 223 85t225 -90
q98 -89 109 -215h131z" />
<glyph glyph-name="s" unicode="s" horiz-adv-x="911"
d="M221 113v-113h-154q-28 0 -47.5 19t-19.5 45v605q0 29 19 48t48 19h154v-113h-102v-510h102zM841 736q27 0 47 -19.5t20 -47.5v-605q0 -26 -20 -45t-47 -19h-154v113h101v510h-101v113h154zM647 392q47 17 56 25v-193q0 -34 -71.5 -57t-176.5 -23t-178 23t-73 57v193
q40 -20 61 -25q78 -27 190 -27q113 0 192 27zM703 513q0 33 -72 56t-176 23t-177.5 -23.5t-73.5 -55.5q0 -33 74 -58t177 -25q104 0 176 25t72 58z" />
<glyph glyph-name="t" unicode="t" horiz-adv-x="819"
d="M0 332h379q2 -101 39 -175t96 -74q62 0 97 72t42 177h166v-166q0 -46 -16.5 -80.5t-40.5 -50t-47.5 -24.5t-40.5 -10l-16 -1h-492q-46 0 -80.5 17t-50 41.5t-24.5 49t-10 41.5l-1 17v166zM444 332h139q-4 -57 -18 -102.5t-27.5 -65.5t-23.5 -20t-24 20t-28 65.5
t-18 102.5zM374 404h-138q4 57 18 103.5t28 67.5t24 21q9 0 23 -21t27.5 -67.5t17.5 -103.5zM819 404h-375q-7 106 -42 180t-96 74q-62 0 -97.5 -74t-42.5 -180h-166v170q0 45 17 78t41.5 48.5t49 24t41.5 9.5l17 1h492q45 0 78 -16.5t48.5 -40.5t24 -47.5t9.5 -40.5l1 -16
v-170z" />
<glyph glyph-name="u" unicode="u" horiz-adv-x="809"
d="M405 396l-397 -396h794zM740 732q29 0 49 -20t20 -49v-122q0 -29 -20 -49.5t-49 -20.5h-671q-29 0 -49 20.5t-20 49.5v122q0 29 20 49t49 20h671z" />
<glyph glyph-name="v" unicode="v" horiz-adv-x="787"
d="M394 202l-394 377h787z" />
<glyph glyph-name="x" unicode="x" horiz-adv-x="726"
d="M726 110q6 -6 6 -15t-6 -14l-72 -73q-6 -6 -15 -6t-14 6l-258 258l-257 -258q-6 -6 -15 -6t-15 6l-72 73q-6 5 -6 14t6 15l257 257l-257 258q-14 15 0 29l72 73q6 6 15 6t15 -6l257 -258l258 258q5 6 14 6t15 -6l72 -73q14 -14 0 -29l-257 -258z" />
<glyph glyph-name="y" unicode="y" horiz-adv-x="806"
d="M505 122v96l122 122v-225q0 -48 -34 -81.5t-82 -33.5h-396q-48 0 -81.5 33.5t-33.5 81.5v320q0 48 33.5 81.5t81.5 33.5h302l-122 -122h-173v-306h383zM349 730h457v-457h-91v275l-274 -275l-92 91l275 275h-275v91z" />
<glyph glyph-name="z" unicode="z" horiz-adv-x="806"
d="M548 610v122h143q48 0 81.5 -34t33.5 -82v-135h-121v129h-137zM122 481h-122v135q0 48 34 82t81 34h143v-122h-136v-129zM258 122v-122h-143q-47 0 -81 33.5t-34 81.5v136h122v-129h136zM685 251h121v-136q0 -48 -33.5 -81.5t-81.5 -33.5h-143v122h137v129z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="223"
d="M223 525l-132 -263l132 -262h-92l-131 262l131 263h92z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="223"
d="M0 0l131 262l-131 262h91l132 -262l-132 -262h-91z" />
<glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="799"
d="M658 363h141q-36 -150 -70 -227q-28 -58 -58 -88q-45 -46 -102 -48h-7q-55 0 -98 40q-34 31 -60 86q-35 72 -71 222q-35 137 -61 194q-9 18 -17.5 30t-12.5 15t-6 3q-3 0 -8 -4t-14.5 -18t-19.5 -35q-28 -62 -53 -170h-141q36 152 70 227q25 57 58 88q41 42 102 49
q57 2 105 -40q33 -31 60 -86q34 -73 70 -222q36 -140 62 -194q9 -18 17.5 -30t12.5 -15.5t5 -3.5q15 0 42 57q30 66 54 170z" />
<glyph glyph-name="Aring" unicode="&#xc5;" horiz-adv-x="500"
/>
<glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="753"
d="M752 141q0 -59 -41 -100t-100 -41h-470q-59 0 -100 41t-41 100v470q0 59 41 100t100 41h470q59 0 100 -41t41 -100v-470z" />
<glyph glyph-name="aacute" unicode="&#xe1;"
d="M750 469l-375 -282l-375 282l375 281zM375 94l312 234l63 -47l-375 -281l-375 281l63 47z" />
<glyph glyph-name="acircumflex" unicode="&#xe2;"
d="M47 328q-19 0 -33 14t-14 33t14 33t33 14h656q19 0 33 -14t14 -33t-14 -33t-33 -14h-656z" />
<glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="749"
d="M655 749q39 0 66.5 -27.5t27.5 -66.5v-561q0 -39 -27.5 -66.5t-66.5 -27.5h-561q-39 0 -66.5 27.5t-27.5 66.5v561q0 39 27.5 66.5t66.5 27.5h561zM655 94v561h-561v-561h561zM234 562l187 -188l94 94l94 -94v-234h-469v328z" />
<glyph glyph-name="adieresis" unicode="&#xe4;"
d="M0 750h750v-94v-47v-47h-94v47h-187v-515h140v-94h-468v94h140v515h-187v-47h-94v47v47v94z" />
<glyph glyph-name="aring" unicode="&#xe5;"
d="M656 750q39 0 66.5 -27.5t27.5 -66.5v-562q0 -39 -27.5 -66.5t-66.5 -27.5h-562q-39 0 -66.5 27.5t-27.5 66.5v562q0 39 27.5 66.5t66.5 27.5h562zM94 656v-562h234v562h-234zM656 94v562h-234v-562h234z" />
<glyph glyph-name="ccedilla" unicode="&#xe7;"
d="M656 750q39 0 66.5 -27.5t27.5 -66.5v-562q0 -39 -27.5 -66.5t-66.5 -27.5h-562q-39 0 -66.5 27.5t-27.5 66.5v562q0 39 27.5 66.5t66.5 27.5h562zM656 94v562h-234v-562h234z" />
<glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="754"
d="M703 703q47 -48 47 -116t-47 -117l-94 -94q-48 -48 -117 -48q-41 0 -84 24l-8 -9q28 -47 21.5 -104t-46.5 -97l-94 -94q-48 -48 -117 -48q-68 0 -116 48q-47 49 -47 117t47 116l94 94q47 47 115 47q47 0 85 -22l9 9q-28 47 -21.5 103.5t46.5 96.5l94 94q47 47 116 47
q70 0 117 -47zM307 209q26 25 21 62l-41 -41q-14 -12 -30 -12q-15 0 -27 12q-12 10 -12 28t12 29l41 41h-14q-28 0 -48 -20l-94 -94q-20 -20 -20 -49t20 -49q21 -22 49 -22q29 0 50 22zM635 538q21 20 21 49t-21 49q-20 20 -49 20t-49 -20l-94 -94q-25 -24 -20 -62l41 41
q11 12 28 12q18 0 29 -12q12 -12 12 -29q0 -14 -12 -28l-41 -41q3 0 7 -0.5t5 -0.5q29 0 50 22z" />
<glyph glyph-name="eacute" unicode="&#xe9;"
d="M188 235h-160q-28 67 -28 140q0 156 110 265.5t265 109.5q88 0 164 -37t129 -103h-105q-39 0 -66.5 -27.5t-27.5 -66.5v-92v-2h-188q-39 0 -66 -27t-27 -67v-92v-1zM564 516h160q26 -62 26 -141q0 -155 -109.5 -265t-265.5 -110q-86 0 -162.5 38t-128.5 103h104
q39 0 66 27.5t27 66.5v93h2h186q39 0 66.5 27.5t27.5 66.5v94h1z" />
<glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="751"
d="M376 750v-375h375v-235q0 -58 -41.5 -99t-99.5 -41h-469q-58 0 -99 41t-41 99v469q0 58 41 99.5t99 41.5h235zM470 750l281 -281h-281v281z" />
<glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="748"
d="M374 376l374 -375h-749zM374 750l374 -374h-749z" />
<glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="748"
d="M748 750l-375 -750l-374 750h749z" />
<glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="748"
d="M-1 0l375 750l374 -750h-749z" />
<glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="748"
d="M748 750l-375 -375l-374 375h749zM748 375l-375 -374l-374 374h749z" />
<glyph glyph-name="fraction" unicode="&#x2044;" horiz-adv-x="761"
d="M380 751q158 0 269.5 -111.5t111.5 -268.5q0 -133 -82.5 -236.5t-209.5 -134.5l-4 491l-176 -490q-126 31 -207.5 134.5t-81.5 235.5q0 157 111.5 268.5t268.5 111.5zM168 488l55 20l-34 94l-56 -20zM410 530v100h-59v-100h59zM593 488l34 94l-55 20l-34 -94z" />
<glyph glyph-name="H.002" horiz-adv-x="803"
d="M0 0v726h187v-726h-187zM308 0v726h187v-726h-187zM616 199v527h187v-527h-187z" />
<glyph glyph-name="H.001" horiz-adv-x="500"
/>
</font>
</defs></svg>
<font id="wtdsymbols" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
<glyph unicode="&#x21;" d="M832 960h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM640 128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v64c0 35.2 28.8 64 64 64h128c35.2 0 64-28.8 64-64v-64zM696.062 768.494l-48.124-384.988c-4.366-34.928-36.738-63.506-71.938-63.506h-128c-35.2 0-67.572 28.578-71.938 63.506l-48.124 384.988c-4.366 34.928 20.862 63.506 56.062 63.506h256c35.2 0 60.428-28.578 56.062-63.506z" />
<glyph unicode="&#x2a;" d="M1004.166 619.542l-97.522 168.916-330.534-229.414 33.414 400.956h-195.048l33.414-400.956-330.534 229.414-97.522-168.916 363.944-171.542-363.944-171.542 97.522-168.916 330.534 229.414-33.414-400.956h195.048l-33.414 400.956 330.534-229.414 97.522 168.916-363.944 171.542z" />
<glyph unicode="&#x2b;" d="M960 576h-330v320c0 35.2-28.8 64-64 64h-108c-35.2 0-64-28.8-64-64v-320h-330c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h330v-320c0-35.2 28.8-64 64-64h108c35.2 0 64 28.8 64 64v320h330c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64z" />
<glyph unicode="&#x2d;" d="M960 320c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h896z" />
<glyph unicode="&#x2e;" d="M704 384c0-70.4-57.6-128-128-128h-128c-70.4 0-128 57.6-128 128v128c0 70.4 57.6 128 128 128h128c70.4 0 128-57.6 128-128v-128zM1024 448l-192 320v-640zM0 448l192 320v-640z" />
<glyph unicode="&#x32;" d="M1024 960l-640-640-384 384v-384l384-384 640 640z" />
<glyph unicode="&#x33;" d="M640 704h-256c-70.4 0-128-57.6-128-128v-256c0-70.4 57.6-128 128-128h256c70.4 0 128 57.6 128 128v256c0 70.4-57.6 128-128 128zM0 960h192v-192h-192v192zM256 960h192v-128h-192v128zM576 960h192v-128h-192v128zM256 64h192v-128h-192v128zM576 64h192v-128h-192v128zM0 384h128v-192h-128v192zM0 704h128v-192h-128v192zM896 384h128v-192h-128v192zM896 704h128v-192h-128v192zM832 960h192v-192h-192v192zM0 128h192v-192h-192v192zM832 128h192v-192h-192v192z" />
<glyph unicode="&#x35;" d="M512 960l512-448h-1024zM0 384l512-448 512 448z" />
<glyph unicode="&#x36;" d="M1022.294 448c-1.746 7.196-3.476 14.452-5.186 21.786-20.036 85.992-53.302 208.976-98 306.538-22.42 48.938-45.298 86.556-69.946 115.006-48.454 55.93-98.176 67.67-131.356 67.67s-82.902-11.74-131.356-67.672c-24.648-28.45-47.528-66.068-69.948-115.006-44.696-97.558-77.962-220.544-98-306.538-21.646-92.898-46.444-175.138-71.71-237.836-16.308-40.46-30.222-66.358-40.6-82.604-10.378 16.246-24.292 42.142-40.6 82.604-23.272 57.75-46.144 132.088-66.524 216.052h-197.362c1.746-7.196 3.476-14.452 5.186-21.786 20.036-85.992 53.302-208.976 98-306.538 22.42-48.938 45.298-86.556 69.946-115.006 48.454-55.932 98.176-67.672 131.356-67.672s82.902 11.74 131.356 67.672c24.648 28.45 47.528 66.068 69.948 115.006 44.696 97.558 77.962 220.544 98 306.538 21.646 92.898 46.444 175.138 71.71 237.836 16.308 40.46 30.222 66.358 40.6 82.604 10.378-16.246 24.292-42.142 40.6-82.604 23.274-57.748 46.146-132.086 66.526-216.050h197.36z" />
<glyph unicode="&#x3c;" d="M256 448l512-512v1024z" />
<glyph unicode="&#x3e;" d="M768 448l-512 512v-1024z" />
<glyph unicode="&#x3f;" d="M510 962l-512-320v-384l512-320 512 320v384l-512 320zM585.4 100.8c-21.2-20.8-46-30.8-76-30.8-31.2 0-56.2 9.8-76.2 29.6-20 20-29.6 44.8-29.6 76.2 0 30.4 10.2 55.2 31 76.2s45.2 31.2 74.8 31.2c29.6 0 54.2-10.4 75.6-32s31.8-46.4 31.8-76c-0.2-29-10.8-54-31.4-74.4zM638.2 413.4c-23.6-11.8-37.4-22-43.4-32.4-3.6-6.2-6-14.8-7.4-26.8v-41h-161.4v44.2c0 40.2 4.4 69.8 13 88 8 17.2 22.6 30.2 44.8 40l34.8 15.4c32 14.2 48.2 35.2 48.2 62.8 0 16-6 30.4-17.2 41.8-11.2 11.2-25.6 17.2-41.6 17.2-24 0-54.4-10-62.8-57.4l-2.2-12.2h-147l1.4 16.2c4 44.6 17 82.4 38.8 112.2 19.6 27 45.6 48.6 77 64.6s64.6 24 98.2 24c60.6 0 110.2-19.4 151.4-59.6 41.2-40 61.2-88 61.2-147.2 0-70.8-28.8-121.4-85.8-149.8z" />
<glyph unicode="&#x41;" d="M512 960c-214.866 0-398.786-132.372-474.744-320h90.744c56.86 0 107.938-24.724 143.094-64h240.906l-192 192h256l320-320-320-320h-256l192 192h-240.906c-35.156-39.276-86.234-64-143.094-64h-90.744c75.958-187.628 259.878-320 474.744-320 282.77 0 512 229.23 512 512s-229.23 512-512 512z" />
<glyph unicode="&#x43;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM768 384h-256c-35.2 0-64 28.8-64 64v384c0 35.2 28.8 64 64 64s64-28.8 64-64v-320h192c35.2 0 64-28.8 64-64s-28.8-64-64-64z" />
<glyph unicode="&#x44;" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.77 0-512 85.962-512 192v-512c0-106.038 229.23-192 512-192s512 85.962 512 192v512c0-106.038-229.23-192-512-192z" />
<glyph unicode="&#x46;" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128z" />
<glyph unicode="&#x47;" d="M1024 384v128l-140.976 35.244c-8.784 32.922-21.818 64.106-38.504 92.918l74.774 124.622-90.51 90.51-124.622-74.774c-28.812 16.686-59.996 29.72-92.918 38.504l-35.244 140.976h-128l-35.244-140.976c-32.922-8.784-64.106-21.818-92.918-38.504l-124.622 74.774-90.51-90.51 74.774-124.622c-16.686-28.812-29.72-59.996-38.504-92.918l-140.976-35.244v-128l140.976-35.244c8.784-32.922 21.818-64.106 38.504-92.918l-74.774-124.622 90.51-90.51 124.622 74.774c28.812-16.686 59.996-29.72 92.918-38.504l35.244-140.976h128l35.244 140.976c32.922 8.784 64.106 21.818 92.918 38.504l124.622-74.774 90.51 90.51-74.774 124.622c16.686 28.812 29.72 59.996 38.504 92.918l140.976 35.244zM704 448c0-106.038-85.962-192-192-192s-192 85.962-192 192 85.962 192 192 192 192-85.962 192-192z" />
<glyph unicode="&#x48;" d="M192 960c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h64v1024h-64zM384 960h256v-1024h-256v1024zM832 960h-64v-704h256v512c0 105.6-86.4 192-192 192z" />
<glyph unicode="&#x49;" d="M0 448l256-256v512zM512 960l-256-256h512zM512-64l256 256h-512zM768 704v-512l256 256z" />
<glyph unicode="&#x4c;" d="M448 960h-256c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h256v1024zM832 960h-256v-577.664h448v385.664c0 105.6-86.4 192-192 192zM576-64h256c105.6 0 192 86.4 192 192v129.664h-448v-321.664z" />
<glyph unicode="&#x4d;" d="M1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216-232.168-46.6-316.784-131.216-131.216-197.118-131.216-316.784 46.6-232.168 131.216-316.784 197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#x4f;" d="M704 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM256 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM832 576h-192c-34.908 0-67.716-9.448-96-25.904 57.278-33.324 96-95.404 96-166.096v-448h384v448c0 105.6-86.4 192-192 192zM384 576h-192c-105.6 0-192-86.4-192-192v-448h576v448c0 105.6-86.4 192-192 192z" />
<glyph unicode="&#x50;" d="M768 704c0-105.6-86.4-192-192-192h-128c-105.6 0-192 86.4-192 192v64c0 105.6 86.4 192 192 192h128c105.6 0 192-86.4 192-192v-64zM64-64v192c0 140.8 115.2 256 256 256h384c140.8 0 256-115.2 256-256v-192z" />
<glyph unicode="&#x51;" d="M832 320c105.6 0 192 86.4 192 192v256c0 105.6-86.4 192-192 192v-320l-128 64-128-64v320h-384c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v192c0-105.6-86.4-192-192-192h-640v192h640z" />
<glyph unicode="&#x53;" d="M256 704h384v-128h-384v128zM384 512h384v-128h-384v128zM320 320h384v-128h-384v128zM832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.2c0 0.2 0.2 0.2 0.4 0.4h127.6v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
<glyph unicode="&#x54;" d="M718.6 384h-127.2c25-93.4 48.4-144.4 63.6-168.6 15.2 24.2 38.6 75.2 63.6 168.6zM794.2 207.2c-15.4-35.8-31.2-63.2-48.2-84-18.4-22.4-49-49.2-91-49.2s-72.6 26.8-91 49.2c-17 20.6-32.6 48.2-48.2 84-23.6 54.8-42.8 120.4-56.6 176.8h-457.2c31.4-252.6 247-448 508-448s476.6 195.4 508 448h-167.2c-14-56.4-33-122-56.6-176.8zM301.4 512h127.2c-25 93.4-48.4 144.4-63.6 168.6-15.2-24.2-38.6-75.2-63.6-168.6zM274 772.8c18.4 22.4 49 49.2 91 49.2s72.6-26.8 91-49.2c17-20.6 32.6-48.2 48.2-84 23.6-54.8 42.8-120.4 56.6-176.8h457.2c-31.4 252.6-246.8 448-508 448s-476.6-195.4-508-448h167.2c14 56.4 33 122 56.6 176.8 15.6 35.8 31.4 63.2 48.2 84z" />
<glyph unicode="&#x56;" d="M511.98 960l-511.98-320v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512l-512.020 320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
<glyph unicode="&#x58;" d="M640 576h-128v128h-128v-128h-128v-128h128v-128h128v128h128zM1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216c-119.666 0-232.168-46.6-316.784-131.216s-131.216-197.118-131.216-316.784c0-119.666 46.6-232.168 131.216-316.784s197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#x59;" d="M256 576h384v-128h-384v128zM1024 64l-201.662 201.662c47.922 72.498 73.662 157.434 73.662 246.338 0 119.666-46.6 232.168-131.216 316.784s-197.118 131.216-316.784 131.216c-119.666 0-232.168-46.6-316.784-131.216s-131.216-197.118-131.216-316.784c0-119.666 46.6-232.168 131.216-316.784s197.118-131.216 316.784-131.216c88.904 0 173.84 25.74 246.338 73.662l201.662-201.662 128 128zM448 256c-141.16 0-256 114.842-256 256 0 141.16 114.84 256 256 256 141.158 0 256-114.84 256-256 0-141.158-114.842-256-256-256z" />
<glyph unicode="&#x5a;" d="M832 832h-192.36v64c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-64h-191.64c-105.6 0-192-72-192-160s0-160 0-160h64v-384c0-105.6 86.4-192 192-192h512c105.6 0 192 86.4 192 192v384h64c0 0 0 72 0 160s-86.4 160-192 160zM320 128h-128v384h128v-384zM576 128h-128v384h128v-384zM832 128h-128v384h128v-384z" />
<glyph unicode="&#x5e;" d="M512 704l-512-512h1024z" />
<glyph unicode="&#x5f;" d="M191.656 128c0.118-0.1 0.244-0.224 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192h-192v-192h191.656zM192 768.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656zM832 576h192v192h-191.656c-0.118 0.1-0.244 0.226-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192zM832 127.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656z" />
<glyph unicode="&#x61;" d="M576 896h-256l320-320h-290.256c-44.264 76.516-126.99 128-221.744 128h-128v-512h128c94.754 0 177.48 51.484 221.744 128h290.256l-320-320h256l448 448-448 448z" />
<glyph unicode="&#x64;" d="M683.52 140.714c-50.782-28.456-109.284-44.714-171.52-44.714-194.094 0-352 157.906-352 352s157.906 352 352 352 352-157.906 352-352c0-62.236-16.258-120.738-44.714-171.52l191.692-191.692c8.516 13.89 13.022 28.354 13.022 43.212v640c0 106.038-229.23 192-512 192s-512-85.962-512-192v-640c0-106.038 229.23-192 512-192 126.11 0 241.548 17.108 330.776 45.46l-159.256 159.254zM352 448c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160-160-71.776-160-160z" />
<glyph unicode="&#x66;" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM704 160h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
<glyph unicode="&#x6c;" d="M832 576h-32v96c0 158.8-129.2 288-288 288s-288-129.2-288-288v-96h-32c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h640c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128zM416 672c0 53 43 96 96 96s96-43 96-96v-96h-192v96z" />
<glyph unicode="&#x6d;" d="M0 960h1024v-256h-1024v256zM0 576h1024v-256h-1024v256zM0 192h1024v-256h-1024v256z" />
<glyph unicode="&#x6f;" d="M512-64l512 320v384l-512.020 320-511.98-320v-384l512-320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
<glyph unicode="&#x70;" d="M922.344 858.32c-38.612 38.596-81.306 69.232-120.304 86.324-68.848 30.25-104.77 9.078-120.194-6.344l-516.228-516.216-3.136-9.152-162.482-476.932 485.998 165.612 6.73 6.806 509.502 509.506c9.882 9.866 21.768 27.77 21.768 56.578 0.002 50.71-38.996 121.148-101.654 183.818zM237.982 104.34l-69.73 69.728 69.25 203.228 18.498 6.704h64v-128h128v-64l-6.846-18.506-203.172-69.154z" />
<glyph unicode="&#x72;" d="M1012.8 545.8v391.6l-127.6-127.4c-96.6 96.8-225.2 150-362 150s-265.2-53.2-362-150c-96.8-96.8-150-225.2-150-362s53.2-265.4 150-362c96.8-96.8 225.2-150 362-150s265.4 53.2 362 150l-136.6 136.6c-124.2-124.2-326.4-124.2-450.8 0-124.2 124.2-124.2 326.4 0 450.8 124.2 124.2 326.4 124.2 450.8 0l-127.4-127.4h391.6z" />
<glyph unicode="&#x73;" d="M768 608c0-53.019-114.615-96-256-96s-256 42.981-256 96c0 53.019 114.615 96 256 96s256-42.981 256-96zM768 288v256c0-53-114.6-96-256-96s-256 43-256 96v-256c0-53 114.6-96 256-96s256 43 256 96zM832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
<glyph unicode="&#x74;" d="M169.2 512c14 56.4 33 122 56.6 176.8 15.4 35.8 31.2 63.2 48.2 84 18.4 22.4 49 49.2 91 49.2s72.6-26.8 91-49.2c17-20.6 32.6-48.2 48.2-84 23.6-54.8 42.8-120.4 56.6-176.8h461.2v256c0 105.6-86.4 192-192 192h-640c-105.6 0-192-86.4-192-192v-256h171.2zM718.6 384h-127.2c25-93.4 48.4-144.4 63.6-168.6 15.2 24.2 38.6 75.2 63.6 168.6zM301.4 512h127.2c-25 93.4-48.4 144.4-63.6 168.6-15.2-24.2-38.6-75.2-63.6-168.6zM850.8 384c-14-56.4-33-122-56.6-176.8-15.4-35.8-31.2-63.2-48.2-84-18.4-22.4-49-49.2-91-49.2s-72.6 26.8-91 49.2c-17 20.6-32.6 48.2-48.2 84-23.6 54.8-42.8 120.4-56.6 176.8h-461.2v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-171.2z" />
<glyph unicode="&#x76;" d="M512 192l512 512h-1024z" />
<glyph unicode="&#x78;" 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" />
<glyph unicode="&#x79;" d="M448 960v-128h320l-384-384 128-128 384 384v-320h128v576zM576 285.726v-157.382c-0.1-0.118-0.226-0.244-0.344-0.344h-383.312c-0.118 0.1-0.244 0.226-0.344 0.344v383.312c0.1 0.118 0.226 0.244 0.344 0.344h157.382l192 192h-349.726c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h384c105.6 0 192 86.4 192 192v349.726l-192-192z" />
<glyph unicode="&#x7a;" d="M192.344 128c-0.118 0.1-0.244 0.224-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192h192v192h-191.656zM192 767.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656zM832 960h-192v-192h191.656c0.118-0.1 0.244-0.226 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192zM832 128.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656z" />
<glyph unicode="&#x7b;" d="M510-64l-256 512 256 512h-256l-256-512 256-512z" horiz-adv-x="512" />
<glyph unicode="&#x7d;" d="M-2 960l256-512-256-512h256l256 512-256 512z" horiz-adv-x="512" />
<glyph unicode="&#xe0;" d="M1024 128c0-105.6-86.4-192-192-192h-640c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h640c105.6 0 192-86.4 192-192v-640z" />
<glyph unicode="&#xe1;" d="M1024 576l-512 384-512-384 512-384zM512 64l-426.666 320-85.334-64 512-384 512 384-85.334 64z" />
<glyph unicode="&#xe2;" d="M64 384c-35.346 0-64 28.654-64 64s28.654 64 64 64h896c35.346 0 64-28.654 64-64s-28.654-64-64-64h-896z" />
<glyph unicode="&#xe3;" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-768v768h768v-768zM320 704l-128-128v-448h640v320l-128 128-128-128z" />
<glyph unicode="&#xe4;" d="M0 960v-256h128v64h256v-704h-192v-128h640v128h-192v704h256v-64h128v256z" />
<glyph unicode="&#xe5;" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM128 832h320v-768h-320v768zM896 64h-320v768h320v-768z" />
<glyph unicode="&#xe7;" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-320v768h320v-768z" />
<glyph unicode="&#xe8;" d="M958.4 894.4c-43.8 43.8-101 65.6-158.4 65.6s-114.6-21.8-158.4-65.6l-128-128c-74-74-85.4-187-34-273l-12.8-12.8c-35.4 20.8-75 31.4-114.8 31.4-57.4 0-114.6-21.8-158.4-65.6l-128-128c-87.4-87.4-87.4-229.4 0-316.8 43.8-43.8 101-65.6 158.4-65.6s114.6 21.8 158.4 65.6l128 128c74 74 85.4 187 34 273l12.8 12.8c35.2-21 75-31.6 114.6-31.6 57.4 0 114.6 21.8 158.4 65.6l128 128c87.6 87.6 87.6 229.6 0.2 317zM419.8 220.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2s-49.8 10-67.8 28.2c-37.4 37.4-37.4 98.4 0 135.8l128 128c18.2 18.2 42.2 28.2 67.8 28.2 5.6 0 11.2-0.6 16.8-1.4l-55.6-55.6c-10.4-10.4-16.2-24.2-16.2-38.8s5.8-28.6 16.2-38.8c10.4-10.4 24.2-16.2 38.8-16.2s28.6 5.8 38.8 16.2l55.6 55.6c5.4-30.4-3.6-62.2-26.6-85zM867.8 668.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2-5.6 0-11.2 0.6-16.8 1.4l55.6 55.6c10.4 10.4 16.2 24.2 16.2 38.8s-5.8 28.6-16.2 38.8c-10.4 10.4-24.2 16.2-38.8 16.2s-28.6-5.8-38.8-16.2l-55.6-55.6c-5.2 29.8 3.6 61.6 26.6 84.6l128 128c18 18.4 42.2 28.4 67.8 28.4s49.8-10 67.8-28.2c37.6-37.4 37.6-98.2 0-135.6z" />
<glyph unicode="&#xe9;" d="M255.884 256c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h255.884c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h143.658c-93.832 117.038-237.98 192-399.658 192-282.77 0-512-229.23-512-512 0-67.904 13.25-132.704 37.256-192h218.628zM768.116 640c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-255.884c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-143.658c93.832-117.038 237.98-192 399.658-192 282.77 0 512 229.23 512 512 0 67.904-13.25 132.704-37.256 192h-218.628z" />
<glyph unicode="&#xea;" d="M702 452c-105.6 0-192 86.4-192 192v320h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v320h-320zM766 580h256l-384 384v-256c0-70.4 57.6-128 128-128z" />
<glyph unicode="&#xeb;" d="M510 450l512-512h-1024zM510 962l512-512h-1024z" />
<glyph unicode="&#xec;" d="M512-64l-512 1024h1024z" />
<glyph unicode="&#xed;" d="M512 960l512-1024h-1024z" />
<glyph unicode="&#xee;" d="M510 450l-512 512h1024zM510-62l-512 512h1024z" />
<glyph unicode="&#xef;" d="M1024 448l-1024-512v1024z" />
<glyph unicode="&#xf1;" d="M126 962h256v-1024h-256v1024zM638 962h256v-1024h-256v1024z" />
<glyph unicode="&#xf2;" d="M640 704v128c0 70.4-57.6 128-128 128h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h128v139.6c0 134.8 109.6 244.4 244.4 244.4h139.6zM896 576h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h384c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128z" />
<glyph unicode="&#xf3;" d="M293.4 448l218.6 218.6 256-256v421.4c0 70.4-57.6 128-128 128h-512c-70.4 0-128-57.6-128-128v-512c0-70.4 57.6-128 128-128h421.4l-256 256zM1024 512h-128v-320l-384 384-128-128 384-384h-320v-128h576z" />
<glyph unicode="&#xf4;" d="M1024 448l-512 512v-307.2l-512-204.8v-256h512v-256z" />
<glyph unicode="&#xf5;" d="M638 898c0 35.4-28.6 64-64 64h-128c-35.4 0-64-28.6-64-64s28.6-64 64-64h128c35.4 0 64 28.6 64 64zM510 834c-247.4 0-448-200.6-448-448s200.6-448 448-448 448 200.6 448 448-200.6 448-448 448zM510 386h-336c0 185.2 150.8 336 336 336v-336z" />
<glyph unicode="&#xf6;" d="M448 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM448 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320z" />
<glyph unicode="&#xe600;" d="M832 447.6c0 0.2 0 0.2 0 0.4v320c0 105.6-86.4 192-192 192h-448c-105.6 0-192-86.4-192-192v-320c0-105.6 86.4-192 192-192h263.6l-197.2 445.6 573.6-254zM766.8 300.2l193.8 20.4-576.6 255.4 255.4-576.6 20.4 193.8 257-257.2 107.2 107.2z" />
<glyph unicode="&#xe603;" d="M998.208 111.136l-422.702 739.728c-34.928 61.124-92.084 61.124-127.012 0l-422.702-739.728c-34.928-61.126-5.906-111.136 64.494-111.136h843.428c70.4 0 99.422 50.010 64.494 111.136zM512 128c-35.2 0-64 28.8-64 64s28.8 64 64 64 64-28.8 64-64c0-35.2-28.8-64-64-64zM627.448 577.242l-38.898-194.486c-6.902-34.516-41.35-62.756-76.55-62.756s-69.648 28.24-76.552 62.758l-38.898 194.486c-6.902 34.516 16.25 62.756 51.45 62.756h128c35.2 0 58.352-28.24 51.448-62.758z" />
<glyph unicode="&#xe60d;" d="M1024 448l-448-512v1024zM448 960l-448-512 448-512z" />
<glyph unicode="&#xe642;" 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: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -24,18 +24,36 @@
$colMargin: $interiorMargin;
$colW: 225px;
$valW: 70px;
$valPad: 2px;
$valPad: 5px;
$rowH: 15px;
font-size: 0.75rem;
&:hover {
.l-autoflow-header .l-btn.change-column-width {
@include trans-prop-nice-fade(50ms);
opacity: 1;
}
}
.l-autoflow-header {
bottom: auto;
height: $headerH;
line-height: $headerH;
min-width: $colW;
span {
vertical-align: middle;
}
.l-btn.change-column-width {
@include trans-prop-nice-fade(500ms);
opacity: 0;
}
.l-filter {
margin-left: $interiorMargin;
input.t-filter-input {
width: 100px;
}
}
}

View File

@@ -19,71 +19,94 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
// Margins, spacing, radii
/************************** FEATURES */
$enableImageryThumbs: false; // Set to true if historical imagery thumbnails are supported
/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */
$bodyMargin: 10px;
$interiorMargin: 5px;
$interiorMarginLg: $interiorMargin * 2;
$interiorMarginSm: 3px;
$basicCr: 3px;
$controlCr: $basicCr;
$basicCr: 2px;
$controlCr: 2px;
$smallCr: 2px;
$badgeW: 35px;
// Colors and shading
/************************** COLORS AND SHADING */
$colorBodyBg: #333;
$colorBodyFg: #999;
$colorFooterBg: #000;
$colorKey: #0099cc;
$colorKeySelectedBg: #005177;
$colorKeyFg: #fff;
$colorAlt1: #ffc700;
$colorAlert: #ff3c00;
$colorCheck: $colorKey;
$colorIconLink: #49dedb;
$colorPausedBg: #c56f01;
$colorPausedFg: #fff;
$colorCreateBtn: $colorKey;
$colorGridLines: rgba(#fff, 0.05);
// Menu colors
$colorMenuBg: lighten($colorBodyBg, 23%);
$colorMenuFg: lighten($colorMenuBg, 70%);
$colorMenuIc: lighten($colorKey, 17%);
$colorInteriorBorder: lighten($colorBodyBg, 10%);
$colorObjFrameBg: darken($colorBodyBg, 5%);
// Form colors
$colorCheck: $colorKey;
$colorFormRequired: #ffc700;
$colorFormValid: #33cc33;
$colorFormError: #cc0000;
$colorFormInvalid: #ff9900;
$colorGridLines: rgba(#fff, 0.05);
// Limits and staleness colors
$colorLimitYellow: #9d7500;
$colorLimitRed: #aa0000;
$colorTelemFresh: #fff;
$colorTelemStale: #888;
$styleTelemState: italic;
// Ratios
$ltGamma: 20%;
$btnFontSizeToH: 0.45;
// User Environment
$ueTopBarH: 30px; // Change to 45px when breadcrumb is enabled
$ueTopBarEditH: 30px;
$ueTopBarBtnH: 35px;
$ueFooterH: 20px;
$ueColMargin: 1.5%;
$ueAppLogoW: 105px;
//$ueBrowseViewBarH: $ueTopBarH; // was 30px
$ueEditToolBarH: 25px;
$ueBrowseLeftPaneW: 25%;
$ueEditLeftPaneW: 75%;
$styleTelemStale: italic;
// Bubble colors
$colorInfoBubbleFg: #666;
$colorInfoBubbleBg: #ddd;
$colorThumbsBubbleFg: lighten($colorBodyFg, 10%);
$colorThumbsBubbleBg: lighten($colorBodyBg, 10%);
// Overlay
$colorOvrBlocker: rgba(black, 0.7);
$colorOvrBg: $colorBodyBg;
$colorOvrFg: $colorBodyFg;
$ovrTopBarH: 60px;
$ovrFooterH: 40px;
//Items
$ueBrowseGridItemLg: 200px;
$ueBrowseGridItemTopBarH: 20px;
$ueBrowseGridItemBottomBarH: 40px;
// Items
$colorItemBase: lighten($colorBodyBg, 5%);
$colorItemFg: lighten($colorItemBase, 20%);
$colorItemSelected: $colorKey;
$itemPadLR: 5px;
// Tabular
$tabularColorBorder: rgba(white, 0.1);
$tabularColorBodyBg: darken($colorBodyBg, 10%);
$tabularColorBodyFg: lighten($tabularColorBodyBg, 40%);
$tabularColorHeaderBg: lighten($colorBodyBg, 10%);
$tabularColorHeaderFg: lighten($tabularColorHeaderBg, 40%);
/************************** RATIOS */
$ltGamma: 20%;
$btnFontSizeToH: 0.45;
/************************** LAYOUT */
$ueTopBarH: 24px; // Change when breadcrumb is enabled
$ueTopBarEditH: 30px;
$ueTopBarBtnH: 35px;
$ueFooterH: 25px;
$ueColMargin: 1.5%;
$ueAppLogoW: 105px;
$ueEditToolBarH: 25px;
$ueBrowseLeftPaneW: 25%;
$ueEditLeftPaneW: 75%;
// Overlay
$ovrTopBarH: 60px;
$ovrFooterH: 40px;
// Items
$ueBrowseGridItemLg: 200px;
$ueBrowseGridItemTopBarH: 20px;
$ueBrowseGridItemBottomBarH: 30px;
$itemPadLR: 5px;
// Tree
$treeVCW: 10px;
$treeTypeIconW: 20px;
@@ -91,32 +114,15 @@ $treeContextTriggerW: 20px;
$colorItemTreeIcon: $colorKey;
$colorItemTreeIconHover: lighten($colorItemTreeIcon, 20%);
$colorItemTreeVCHover: $colorAlt1;
//Tabular
// Tabular
$tabularHeaderH: 18px;
$tabularTdPadLR: $itemPadLR;
$tabularTdPadTB: 2px;
$tabularColorBorder: rgba(white, 0.1);
$tabularColorBodyBg: darken($colorBodyBg, 10%);
$tabularColorBodyFg: lighten($tabularColorBodyBg, 40%);
$tabularColorHeaderBg: lighten($colorBodyBg, 10%);
$tabularColorHeaderFg: lighten($tabularColorHeaderBg, 40%);
// Controls
$controlCr: $basicCr;
$controlDisabledOpacity: 0.3;
$formLabelW: 20%;
$formInputH: 22px;
$formRowCtrlsH: 14px;
$menuLineH: 1.5rem;
$scrollbarTrackSize: 10px;
$scrollbarTrackColorBg: rgba(#000, 0.4);
$btnStdH: 25px;
$btnToolbarH: $btnStdH;
// Paths
$dirImgs: '../images/'; // Relative to platform/css/ directory
// Imagery
$imageMainControlBarH: 22px;
$imageThumbsD: 120px;
$imageThumbsWrapperH: $imageThumbsD * 1.4;
$imageThumbPad: 1px;
// Ticks
$ticksH: 25px;
$tickLblVMargin: 3px;
@@ -124,3 +130,31 @@ $tickLblH: 15px;
$tickLblW: 50px;
$tickH: $ticksH - $tickLblVMargin - $tickLblH;
$tickW: 1px;
// Bubbles
$bubbleArwSize: 10px;
$bubblePad: $interiorMargin;
$bubbleMinW: 100px;
$bubbleMaxW: 300px;
// Forms
$reqSymbolW: 15px;
$reqSymbolM: $interiorMargin * 2;
$reqSymbolFontSize: 0.7em;
/************************** CONTROLS */
$controlCr: $basicCr;
$controlDisabledOpacity: 0.3;
$formLabelW: 20%;
$formInputH: 22px;
$formRowCtrlsH: 14px;
$menuLineH: 1.4rem;
$scrollbarTrackSize: 10px;
$scrollbarTrackColorBg: rgba(#000, 0.4);
$btnStdH: 25px;
$btnToolbarH: $btnStdH;
/************************** PATHS */
$dirImgs: '../images/'; // Relative to platform/css/ directory
/************************** TIMINGS */
$controlFadeMs: 100ms;

View File

@@ -43,19 +43,29 @@ a.disabled {
@include test();
}
@mixin customKeyframes($animName: pulse, $op0: 0.5) {
@include keyframes($animName) {
0% { opacity: $op0; }
100% { opacity: 1; }
}
@include animation-name(pulse, 0.2);
}
@include keyframes(pulse) {
0% { opacity: 0.2; }
100% { opacity: 1; }
}
@mixin pulse($dur: 500ms) {
@mixin pulse($dur: 500ms, $iteration: infinite) {
//@include customKeyframes(pulse, 0.2);
@include animation-name(pulse);
@include animation-duration($dur);
@include animation-direction(alternate);
@include animation-iteration-count(infinite);
@include animation-iteration-count($iteration);
@include animation-timing-function(ease-in-out);
}
.pulse {
@include pulse(1000ms);
@include pulse(750ms);
}

View File

@@ -1,38 +1,44 @@
/*****************************************************************************
* 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.
*****************************************************************************/
.t-fixed-position {
&.l-fixed-position {
// @include test(red);
// @include test(red);
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
width: auto; height: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
.l-grid-holder {
position: relative;
height: 100%; width: 100%;
height: 100%;
width: 100%;
.l-grid {
// @include test(orange);
// @include test(orange);
position: absolute;
height: 100%; width: 100%;
height: 100%;
width: 100%;
pointer-events: none;
z-index: 0;
}
@@ -56,12 +62,13 @@
.l-fixed-position-image,
.l-fixed-position-text {
@include box-sizing(border-box);
height: 100%; width: 100%;
height: 100%;
width: 100%;
}
.l-fixed-position-box {
}
.l-fixed-position-image {
background-size: cover;
background-repeat: no-repeat;
@@ -70,38 +77,45 @@
.l-fixed-position-text {
@include txtShdwSubtle();
border:1px solid transparent;
border: 1px solid transparent;
font-size: 0.8rem;
$p: 1px; //$interiorMarginSm;
line-height: 100%;
&.l-static-text {
// overflow: auto;
// overflow: auto;
padding: $p;
}
&.l-telemetry {
.l-elem {
//@include absPosDefault($p);
@include absPosDefault(0);
//@include absPosDefault(0);
@include box-sizing(border-box);
display: block;
padding: 2px;
width: 50%;
//width: 50%;
&.l-title {
right: auto;
left: $p;
//right: auto;
//left: $p;
float: none;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: auto;
}
&.l-value {
// @include test(blue);
right: $p;
left: auto;
// @include test(blue);
// right: $p;
// left: auto;
@include border-radius($smallCr);
$valPad: 5px;
float: right;
margin-left: $interiorMargin;
padding-left: $valPad;
padding-right: $valPad;
text-align: right;
&.telem-only {
// @include test(red);
left: $p;
width: auto;
}
.l-value-bg {
@include border-radius($smallCr);
padding: 0 4px;
margin-left: 0;
width: 100%;
}
}
}

View File

@@ -29,10 +29,13 @@ a {
}
body, html {
-webkit-font-smoothing: subpixel-antialiased;
-moz-osx-font-smoothing: grayscale;
background-color: $colorBodyBg;
color: $colorBodyFg;
font-family: Helvetica, Arial, sans-serif;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 100%;
//font-weight: 500;
height: 100%;
width: 100%;
overflow: hidden;
@@ -69,6 +72,10 @@ span {
*/
}
mct-container {
display: block;
}
.abs {
position: absolute;
top: 0;
@@ -117,6 +124,13 @@ span {
display: none !important;
}
.paused {
&:not(.s-btn) {
border-color: $colorPausedBg !important;
color: $colorPausedBg !important;
}
}
.sep {
color: rgba(#fff, 0.2);
}

View File

@@ -31,16 +31,6 @@
.browse-area.holder {
// When .browse.top-bar is hidden, set the top of the browse-area holder
top: $interiorMargin;
> .contents.split-layout {
// Don't pad in from top and bottom
//top: 0; bottom: 0;
.object-browse-bar {
.t-btn.key-window {
// Hide the Open in New Window button
display: none;
}
}
}
top: $bodyMargin;
}
}

View File

@@ -20,72 +20,63 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.triangle {
$myColor: $colorKey;
$mySize: 10px;
@include triangle-right($mySize, $myColor);
&.triangle-down {
@include triangle-down($mySize, $myColor);
}
$myColor: $colorKey;
$mySize: 10px;
@include triangle-right($mySize, $myColor);
&.triangle-down {
@include triangle-down($mySize, $myColor);
}
}
.ui-symbol {
$c: $colorKey;
&.icon {
color: $c;
@include txtShdwSubtle();
&.alert {
color: $colorAlert;
&:hover {
color: lighten($colorAlert, $ltGamma);
}
}
&.major {
font-size: 1.65em;
}
&:hover {
// color: lighten($c, $ltGamma);
.invoke-menu {
// color: lighten($colorBodyBg, $ltGamma * 2);
}
}
}
$c: $colorKey;
&.icon {
color: $c;
@include txtShdwSubtle();
&.alert {
color: $colorAlert;
&:hover {
color: lighten($colorAlert, $ltGamma);
}
}
&.major {
font-size: 1.65em;
}
}
}
.bar .icon {
display: inline-block;
display: inline-block;
}
.invoke-menu {
@include invokeMenu($colorKey);
display: inline-block;
font-size: 1rem;
vertical-align: middle;
text-shadow: none;
display: inline-block;
}
.btn-menu .invoke-menu,
.icon.major .invoke-menu {
margin-left: $interiorMargin;
}
.icon-buttons-main .invoke-menu {
@include invokeMenu(lighten($colorBodyBg, $ltGamma));
}
.menu-element .invoke-menu {
}
.object-header .type-icon {
color: $colorKey;
margin-right: $interiorMargin;
margin-left: $interiorMarginSm;
}
.menu .type-icon,
.tree-item .type-icon,
.icon-btn .menu.dropdown .icon,
.super-menu.menu.dropdown .icon {
font-size: $menuLineH * 0.93;
line-height: $menuLineH * 1.13;
position: absolute;
.super-menu.menu .type-icon {
position: absolute;
}
.tree-item .type-icon {
font-size: 16px; // 16px is crisp size
}
.l-icon-link:before {
content: "\f4";
}
.l-icon-alert {
display: none !important; // Remove this when alerts are enabled
&:before {
color: $colorAlert;
content: "!";
}
}

View File

@@ -0,0 +1,20 @@
// Classes for initializing states of objects
.browse-mode {
.split-layout {
.split-pane-component.pane.left {
width: 15%;
}
}
}
.edit-mode {
.split-layout {
.split-pane-component.pane.right {
width: 15%;
.pane.bottom {
height: 30%;
}
}
}
}

View File

@@ -46,6 +46,9 @@
@import "controls/lists";
@import "controls/menus";
@import "controls/time-controller";
@import "edit/editor";
@import "features/imagery";
@import "features/time-display";
@import "forms/mixins";
@import "forms/elems";
@import "forms/validation";
@@ -67,4 +70,5 @@
@import "properties";
@import "autoflow";
@import "iframe";
@import "initialization";
@import "hide-non-functional";

View File

@@ -26,6 +26,26 @@
width: auto; height: auto;
}
@mixin ancillaryIcon($d, $c) {
// Used for small icons used in combination with larger icons,
// like the link and alert icons in tree items.
color: $c;
font-size: $d;
line-height: $d;
height: $d;
width: $d;
}
@mixin trans-prop-nice($props, $t: 500ms) {
@if $t == 0 {
@include transition-property(none);
} @else {
@include transition-property($props);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
}
@mixin trans-prop-nice-fade($t: 0.5s) {
@if $t == 0 {
@include transition-property(none);
@@ -42,6 +62,12 @@
@include transition-timing-function(ease-in-out);
}
@mixin trans-prop-nice-resize-w($t: 0.5s) {
@include transition-property(width, left, right);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
@mixin triangle-right($size, $color) {
$size: $size/2;
$ratio: 1;
@@ -62,6 +88,31 @@
border-right: $size/$ratio solid transparent;
}
@mixin triangle($dir: "left", $size: 5px, $ratio: 1, $color: red) {
//$size: $size*2;
width: 0;
height: 0;
$slopedB: $size/$ratio solid transparent;
$straightB: $size solid $color;
@if $dir == "up" {
border-left: $slopedB;
border-right: $slopedB;
border-bottom: $straightB;
} @else if $dir == "right" {
border-top: $slopedB;
border-bottom: $slopedB;
border-left: $straightB;
} @else if $dir == "down" {
border-left: $slopedB;
border-right: $slopedB;
border-top: $straightB;
} @else {
border-top: $slopedB;
border-bottom: $slopedB;
border-right: $straightB;
}
}
@mixin bgDiagonalStripes($c: yellow, $a: 0.1, $d: 40px) {
@include background-image(linear-gradient(-45deg,
rgba($c, $a) 25%, transparent 25%,
@@ -90,20 +141,35 @@
}
@mixin containerSubtle($bg: $colorBodyBg, $fg: $colorBodyFg, $hover: false) {
@include background-image(linear-gradient(lighten($bg, 10%), lighten($bg, 5%)));
$ltnRatio: 7%;
$gradRatio: 5%;
$hovRatio: 7%;
$bgBase: lighten($bg, $ltnRatio);
$fgBase: lighten($fg, $ltnRatio);
$gradC1: lighten($bgBase, $gradRatio);
$gradC2: $bgBase;
$cInvokeBase: lighten($gradC1, $ltnRatio*2);
@include background-image(linear-gradient($gradC1, $gradC2));
@include border-radius($controlCr);
@include box-sizing(border-box);
// @include box-shadow(rgba(black, 0.3) 0 1px 2px);
@include boxShdwSubtle();
border: none;
border-top: 1px solid lighten($bg, 20%);
border-top: 1px solid lighten($gradC1, 2%);
color: $fg;
display: inline-block;
@if $hover == true {
&:hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 15%)));
&:not(.disabled):hover {
@include background-image(linear-gradient(lighten($gradC1, $hovRatio), lighten($gradC2, $hovRatio)));
color: lighten($fgBase, $hovRatio);
&.btn-menu .invoke-menu {
color: lighten($cInvokeBase, $hovRatio);
}
}
}
&.btn-menu .invoke-menu {
color: $cInvokeBase;
}
}
@mixin sliderTrack($bg: $scrollbarTrackColorBg) {
@@ -118,10 +184,11 @@
@mixin controlGrippy($b, $direction: horizontal, $w: 1px, $style: dotted) {
&:before {
// Grippy
@include trans-prop-nice("border-color",0.75s);
content: '';
display: block;
height: auto;
pointer-events: none;
position: absolute;
z-index: 2;
@@ -139,23 +206,22 @@
}
}
&:not(.disabled):hover:before {
border-color: rgba($colorKey, 0.9);
@include trans-prop-nice("border-color",50ms);
border-color: $colorKey;
}
}
@mixin btnSubtle($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include containerSubtle($bg, $fg);
&:not(.disabled):hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 10%)));
}
@include containerSubtle($bg, $fg, true);
}
@mixin btnNoticeable($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include containerSubtle($bg, $fg);
@include background-image(linear-gradient(lighten($bg, 20%), $bg));
&:not(.disabled):hover {
// No longer should be used; use btnSubtle instead
//@include containerSubtle($bg, $fg, true);
//@include background-image(linear-gradient(lighten($bg, 20%), $bg));
/* &:not(.disabled):hover {
@include background-image(linear-gradient(lighten($bg, 30%), lighten($bg, 10%)));
}
}*/
}
@mixin boxIncised($sVal: 0.6) {
@@ -166,8 +232,8 @@
border: 1px solid $c;
}
@mixin boxShdwSubtle($sVal: 0.3) {
@include box-shadow(rgba(black, $sVal) 0 1px 3px);
@mixin boxShdwSubtle($sVal: 0.2) {
@include box-shadow(rgba(black, $sVal) 0 1px 2px);
}
@mixin boxShdwLarge($sVal: 0.7) {
@@ -194,13 +260,15 @@
}
@mixin invokeMenu($baseColor) {
/*
@mixin invokeMenu($baseColor: $colorBodyFg) {
$c: $baseColor;
color: $c;
&:hover {
color: lighten($c, $ltGamma);
}
}
*/
@mixin menuUlReset() {
margin: 0;

View File

@@ -19,54 +19,141 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
$pad: $interiorMargin * 2;
$baseRatio: 1.5;
$pad: $interiorMargin * $baseRatio;
/*********************************** TYPE STYLES */
.t-btn {
cursor: pointer;
/******* LAYOUT AND SIZING */
.btn,
.l-btn {
@include user-select(none);
line-height: 1.5em; // Was 1.25em
padding: 0 $pad;
text-decoration: none;
&.lg,
&.create-btn {
$h: $ueTopBarH; // - $interiorMargin;
height: $h;
line-height: $h - 2;
//padding: 0 $pad * 6 0 $pad;
padding: 0 $pad * 3;
}
&.create-btn {
&:before {
content:"+";
font-family: symbolsfont;
font-size: 0.8em;
}
.menu {
margin-left: $pad * -1;
}
>.ui-symbol {
//font-size: 1.1em; // Normalizing for new icomoon symbols font
}
}
&.sm {
padding: 0 $pad / $baseRatio;
}
&.vsm {
padding: 0 ($pad / $baseRatio) / 2;
}
}
/*********************************** STYLE STYLES */
.btn,
.s-btn {
$base: lighten($colorBodyBg, 20%);
$base: lighten($colorBodyBg, 20%); // Moved to s-btn
@include border-radius($controlCr);
@include box-sizing(border-box);
@include text-shadow(rgba(black, 0.3) 0 1px 1px);
line-height: 1.2em;
padding: 0 $pad;
cursor: pointer;
//line-height: 1.2em;
text-decoration: none;
&.major {
$bg: $colorKey;
@include btnSubtle($bg);
$fg: lighten($bg, 50%);
color: $fg;
&:hover {
@include btnSubtle(lighten($bg, 5%), $fg);
//color: $fg;
}
.invoke-menu {
color: $fg;
}
}
&.subtle {
@include btnSubtle($base, lighten($base, 40%));
}
&.very-subtle,
&.s-very-subtle {
@include containerSubtle($colorBodyBg, $colorBodyFg, true);
&.paused {
@include containerSubtle($colorPausedBg, $colorPausedFg, true);
.icon:before {
content:"\0000EF";
}
}
}
}
.icon-btn,
.s-icon-btn {
@extend .s-btn;
font-size: 1.2em;
font-size: 1em;
.icon {
color: $colorKey;
}
&.paused {
.icon {
color: $colorPausedFg;
}
}
&:not(.disabled):hover .icon {
color: lighten($colorKey, $ltGamma);
&:not(.disabled) {
&:not(.paused) {
&:hover {
.icon {
color: lighten($colorKey, $ltGamma);
}
}
}
}
&.labeled {
padding: 0 $pad/2;
.icon {
font-size: 1.5em;
//font-size: 1.5em;
}
.title-label {
margin-left: $interiorMargin;
}
}
&.pause-play {
/* &.paused {
.icon {
@include pulse(500ms);
}
}*/
.icon:before {
content:"\0000F1";
}
}
&.show-thumbs {
.icon:before {
content:"\000039";
}
}
}
/*********************************** LAYOUT STYLES */
span.btn,
span.btn span,
span.l-btn,
span.l-btn span,
a.btn,
a.btn span,
a.l-btn,
a.l-btn span {
display: inline-block;

View File

@@ -19,7 +19,8 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
.control {
/*.control {
// UNUSED?
&.view-control {
.icon {
display: inline-block;
@@ -45,10 +46,10 @@
}
}
}
}
}*/
.accordion {
$accordionHeadH: 18px;
$accordionHeadH: 18px;
margin-top: $interiorMargin;
&:first-child {
margin-top: 0;
@@ -56,16 +57,20 @@
.accordion-head {
$op: 0.2;
@include border-radius($basicCr * 0.75);
@include box-sizing("border-box");
@include box-sizing("border-box");
background: rgba($colorBodyFg, $op);
cursor: pointer;
font-size: 0.75em;
line-height: $accordionHeadH;
line-height: $accordionHeadH;
margin-bottom: $interiorMargin;
padding: 0 $interiorMargin;
position: absolute;
top: 0; right: 0; bottom: auto; left: 0;
width: auto; height: $accordionHeadH;
top: 0;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: $accordionHeadH;
text-transform: uppercase;
&:hover {
background: rgba($colorBodyFg, $op * 2);
@@ -74,7 +79,7 @@
content: "^";
display: block;
font-family: 'symbolsfont';
font-size: 1.2em;
font-size: 0.9em;
position: absolute;
right: $interiorMargin;
text-transform: none;
@@ -84,79 +89,14 @@
content: "v";
}
}
.accordion-contents {
position: absolute;
top: $accordionHeadH + $interiorMargin; right: 0; bottom: 0; left: 0;
overflow-y: auto;
overflow-x: hidden;
}
}
.btn {
$base: lighten($colorBodyBg, 20%); // Moved to s-btn
$p: 10px; // Moved to s-btn
@include border-radius($controlCr); // Moved to s-btn
@include box-sizing(border-box); // Moved to s-btn
@include text-shadow(rgba(black, 0.3) 0 1px 1px); // Moved to s-btn
// display: inline-block;
// margin-right: 10px;
padding: 0 ($interiorMargin * 2); // Moved to s-btn
text-decoration: none; // Moved to s-btn
&.create-btn {
$h: $ueTopBarH - $interiorMargin; //$btnStdH * 1.5;;
$p: $p * 2.25;
height: $h;
line-height: $h;
//font-size: 1.1em;
padding: 0 $p;
.menu {
margin-left: $p * -1;
}
.ui-symbol.major {
font-size: 1.1em;
}
}
&.major {
$bg: $colorKey;
@include btnNoticeable($bg);
$fg: lighten($bg, 50%);
color: $fg;
&:hover {
@include btnNoticeable(lighten($bg, 5%));
color: $fg;
}
.invoke-menu {
color: $fg;
}
}
&.normal {
padding: $p * 0.5 $p * 0.7;
}
&.outline {
&:hover {
background: rgba(#fff, 0.1);
}
}
&.subtle {
@include btnSubtle($base, lighten($base, 40%));
}
&.very-subtle {
@include btnSubtle($colorBodyBg, lighten($colorBodyBg, 50%));
}
&.lg {
@include border-radius($controlCr * 1.5);
font-size: 1.2em;
padding: 7px 25px;
}
&.icon-btn {
.icon {
color: $colorKey;
}
&:not(.disabled):hover .icon {
color: lighten($colorKey, $ltGamma);
}
.accordion-contents {
position: absolute;
top: $accordionHeadH + $interiorMargin;
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
overflow-x: hidden;
}
}
@@ -166,12 +106,12 @@
.btn-set,
.t-btn {
display: inline-block;
// margin-left: $interiorMargin;
// margin-left: $interiorMargin;
}
.btn,
.t-btn {
&:first-child {
// margin-left: 0;
// margin-left: 0;
}
}
}
@@ -199,6 +139,20 @@
}
}
.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;
}
.s-local-controls {
font-size: 0.7rem;
}
.btn-set {
// Buttons that have a very tight conceptual grouping - no internal space between them.
display: inline-block;
@@ -228,12 +182,12 @@
display: inline-block;
font-size: $h * $btnFontSizeToH;
height: $h;
line-height: $h;
line-height: $h - 3;
.icon:not(.invoke-menu) {
// position: relative;
// top: -0.04em;
font-size: 150%;
vertical-align: middle;
// position: relative;
// top: -0.04em;
//font-size: 150%;
//vertical-align: middle;
}
}
@@ -318,37 +272,43 @@ label.checkbox.custom {
.btn-menu {
$h: 20px;
$p: $interiorMargin * 2;
$p: $interiorMarginSm * 2;
$c: $colorBodyFg;
@include btnSubtle($colorBodyBg);
height: $h;
line-height: $h;
&.dropdown {
// padding-left: $p;
padding-left: $p;
padding-right: $p;
}
/* height: $h;
line-height: $h;
&.dropdown {
padding-left: $p;
padding-right: $p;
}*/
&:not(.disabled):hover {
color: lighten($c, 20%);
}
&.btn-invoke-menu {
$c: $colorKey;
color: $c;
padding: 0 5px;
&:hover {
color: lighten($c, 10%);
}
/* &.context-available {
// An element like the invoke-menu triangle;
// Indicates that this element has a dropdown menu available;
// Currently unused
$c: $colorKey;
color: $c;
padding: 0 5px;
&:hover {
color: lighten($c, 10%);
}
}*/
span.l-click-area {
// In markup, this element should not enclose anything.
@extend .abs;
}
span.l-click-area {
// In markup, this element should not enclose anything.
@extend .abs;
}
.type-icon {
margin-right: $interiorMargin;
//margin-right: $interiorMargin;
}
.name {
margin-left: $interiorMargin;
}
.menu {
// margin-left: (-1 * $p);
@@ -388,17 +348,41 @@ label.checkbox.custom {
}
}
.context-available {
$c: $colorKey;
color: $c;
//padding: 0 5px;
&:hover {
color: lighten($c, 10%);
}
}
.view-switcher {
@include trans-prop-nice-fade($controlFadeMs);
}
/******************************************************** OBJECT-HEADER */
.object-header {
display: inline-block;
font-size: 1em;
.title {
color: lighten($colorBodyFg, 40%);
}
.type-icon {
font-size: 1.5em;
margin-right: $interiorMargin;
vertical-align: middle;
.label {
.title-label {
color: lighten($colorBodyFg, 40%);
}
.type-icon {
font-size: 120%;
margin-right: $interiorMargin;
vertical-align: middle;
}
.context-available {
opacity: 0;
font-size: 0.8em;
}
&:hover {
.context-available {
opacity: 1;
}
}
}
}
@@ -412,86 +396,53 @@ label.checkbox.custom {
}
}
/******************************************************** VIEW-CONTROLS */
.view-controls .view-type {
$d: 20px;
$p: 5px;
@include border-radius($controlCr);
box-sizing: border-box;
display: inline-block;
margin-left: $interiorMargin;
height: $d;
line-height: $d;
padding-left: $p;
padding-right: $p;
&.cur {
background: lighten($colorBodyBg, $ltGamma);
}
}
.edit-mode .top-bar .control-set.edit-view-controls {
// Used in templates/edit-view-controls.html
margin-right: $interiorMargin * 10;
}
/******************************************************** SLIDERS */
.wrapper-slider {
position: relative;
}
.slider {
//$knobH: 70%; //14px;
$knobH: 100%; //14px;
$knobW: 12px;
$slotH: 80%;
$rangeO: 0.3;
$slotH: 50%;
.slot {
// @include border-radius($basicCr * .75);
@include sliderTrack();
height: auto;
height: $slotH;
width: auto;
position: absolute;
//top: ($knobH - $slotH) / 2;
top: (100% - $slotH)/2;
top: ($knobH - $slotH) / 2;
right: 0;
bottom: (100% - $slotH)/2;
bottom: auto;
left: 0;
z-index: 0;
.range {
background: rgba($colorKey, $rangeO);
cursor: ew-resize;
position: absolute;
top: 0;
right: auto;
bottom: 0;
left: auto;
height: auto;
width: auto;
z-index: 1;
&:hover {
background: rgba($colorKey, $rangeO + 0.2);
}
}
}
.knob {
@include btnSubtle();
@include controlGrippy(rgba(black, 0.3), vertical, 1px, solid);
@include border-radius(2px);
cursor: ew-resize;
position: absolute;
height: auto;
height: $knobH;
width: $knobW;
top: 0;
bottom: 0;
auto: 0;
bottom: auto;
left: auto;
z-index: 2;
&.knob-l { margin-left: $knobW / -2; }
&.knob-r { margin-right: $knobW / -2; }
&:before {
top: 1px;
bottom: 3px;
//left: ($knobW / 2) - 1;
//margin-left: -1px;
left: 45%;
left: ($knobW / 2) - 1;
}
}
.range {
background: rgba($colorKey, 0.6);
cursor: ew-resize;
position: absolute;
top: 0;
right: auto;
bottom: 0;
left: auto;
height: auto;
width: auto;
&:hover {
background: rgba($colorKey, 0.7);
}
}
}
@@ -499,23 +450,23 @@ label.checkbox.custom {
/******************************************************** BROWSER ELEMENTS */
::-webkit-scrollbar {
@include sliderTrack();
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
@include sliderTrack();
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
}
::-webkit-scrollbar-thumb {
$bg: lighten($colorBodyBg, 10%);
@include background-image(linear-gradient(lighten($bg, 10%), lighten($bg, 5%) 20px));
@include border-radius(1px);
@include box-sizing(border-box);
@include boxShdwSubtle();
border-top: 1px solid lighten($bg, 20%);
&:hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 15%) 20px));
}
$bg: lighten($colorBodyBg, 10%);
@include background-image(linear-gradient(lighten($bg, 10%), lighten($bg, 5%) 20px));
@include border-radius(1px);
@include box-sizing(border-box);
@include boxShdwSubtle();
border-top: 1px solid lighten($bg, 20%);
&:hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 15%) 20px));
}
}
::-webkit-scrollbar-corner {
background: rgba(#000, 0.4);
background: rgba(#000, 0.4);
}

View File

@@ -37,39 +37,68 @@
ul {
@include menuUlReset();
li {
// @include border-radius($controlCr);
@include box-sizing(border-box);
border-top: 1px solid lighten($bg, 20%);
color: lighten($bg, 60%);
line-height: $menuLineH;
padding: $interiorMarginSm $interiorMargin * 2 $interiorMarginSm ($interiorMargin * 3) + $treeTypeIconW;
padding: $interiorMarginSm $interiorMargin * 2 $interiorMarginSm ($interiorMargin * 2) + $treeTypeIconW;
white-space: nowrap;
&:first-child {
border: none;
}
&:hover {
background: $bgHover;
a {
color: $colorKeyFg;
}
color: $colorKeyFg;
//a {
// color: $colorKeyFg;
//}
.icon {
color: lighten($iconColor, 20%);
}
}
a {
color: lighten($bg, 60%);
display: block;
}
//a {
// color: lighten($bg, 60%);
// display: block;
//}
.type-icon {
left: $interiorMargin * 2;
}
}
}
}
.context-menu,
.super-menu {
$bg: $colorMenuBg;
$fg: $colorMenuFg;
$ic: $colorMenuIc;
//font-size: 0.80rem;
pointer-events: auto;
@include containerSubtle($bg);
ul li {
padding-left: 25px;
a { color: $fg; }
.icon {
color: $ic;
}
.type-icon {
left: $interiorMargin;
}
&:hover .icon {
color: lighten($ic, 5%);
}
}
}
.super-menu {
$w: 450px;
$w: 500px;
$h: $w - 20;
$plw: $w * 0.5;
$prw: $w - $plw;
$plw: 50%; //$w * 0.5;
$prw: 50%; //$w - $plw;
$fg: #fff; //lighten($colorBodyFg, 40%);
$bgHover: $colorKey; //$bg;
display: block;
width: $w;
height: $h;
.contents {
@@ -78,88 +107,61 @@
.pane {
@include box-sizing(border-box);
&.left {
// @include test();
//@include test();
border-right: 1px solid rgba(white, 0.2);
left: 0;
padding-right: $interiorMargin;
right: auto;
width: $plw !important;
width: $plw;
overflow-x: hidden;
overflow-y: auto;
ul {
li {
@include border-radius($controlCr);
// @include test(red);
padding-left: 30px;
border-top: none;
// font-size: 0.85em;
// line-height: 20px;
&:hover {
background: $bgHover;
}
.icon {
@include txtShdwSubtle(0.4);
left: $interiorMargin;
}
}
}
}
&.right {
left: $plw;
//@include test(red);
left: auto;
right: 0;
padding: $interiorMargin * 5;
width: $prw !important;
}
}
}
.menu-item-description {
.desc-area {
// @include test(green);
&.icon {
// @include test(red);
$h: 150px;
position: relative;
color: lighten($bg, 30%);
font-size: 8em;
left: 0;
height: $h;
line-height: $h;
// top: 0; right: 0; bottom: 5em; left: 0;
// height: 5em;
text-align: center;
}
&.description {
color: lighten($bg, 30%);
font-size: 0.8em;
}
&.title {
color: lighten($bg, 60%);
font-size: 1.2em;
margin-bottom: 1rem;
width: $prw;
.icon {
color: $fg;
}
}
}
.menu-item-description {
.desc-area {
&.icon {
$h: 150px;
position: relative;
font-size: 8em;
left: 0;
height: $h;
line-height: $h;
margin-bottom: $interiorMargin * 5;
text-align: center;
}
&.title {
color: $fg;
font-size: 1.2em;
margin-bottom: 0.5em;
}
&.description {
//color: lighten($bg, 30%);
color: $fg;
font-size: 0.8em;
line-height: 1.5em;
}
}
}
}
.context-menu {
$bg: lighten($colorBodyBg, 25%);
$fg: lighten($bg, 70%);
$ic: lighten($colorKey, 15%);
font-size: 0.80rem;
pointer-events: auto;
&.menu {
@include containerSubtle($bg);
ul li {
padding-left: 30px;
a { color: $fg; }
.icon {
color: $ic;
}
.type-icon {
left: $interiorMargin;
}
&:hover .icon {
color: lighten($ic, 5%);
}
}
}
}
}
@@ -168,7 +170,7 @@
position: absolute;
height: 200px;
width: 170px;
z-index: 59;
z-index: 70;
.context-menu-wrapper {
position: absolute;
height: 100%;

View File

@@ -19,3 +19,94 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
.edit-main {
$handleD: 15px;
$cr: 5px;
.edit-corner,
.edit-handle {
position: absolute;
z-index: 2;
}
.edit-corner {
width: $handleD;
height: $handleD;
&:hover {
z-index: 11;
}
&.edit-resize-nw {
@include border-bottom-right-radius($cr);
cursor: nw-resize;
top: 0; left: 0;
}
&.edit-resize-ne {
@include border-bottom-left-radius($cr);
cursor: ne-resize;
top: 0; right: 0;
}
&.edit-resize-se {
@include border-top-left-radius($cr);
cursor: se-resize;
bottom: 0; right: 0;
}
&.edit-resize-sw {
@include border-top-right-radius($cr);
cursor: sw-resize;
bottom: 0; left: 0;
}
}
.edit-handle {
top: $handleD; right: $handleD; bottom: $handleD; left: $handleD;
&.edit-move {
$m: 0; //$handleD;
cursor: move;
left: $m;
right: $m;
top: $m;
bottom: $m;
z-index: 1;
}
&.edit-resize-n {
top: 0px; bottom: auto;
height: $handleD;
cursor: n-resize;
}
&.edit-resize-e {
right: 0px; left: auto;
width: $handleD;
cursor: e-resize;
}
&.edit-resize-s {
bottom: 0px; top: auto;
height: $handleD;
cursor: s-resize;
}
&.edit-resize-w {
left: 0px; right: auto;
width: $handleD;
cursor: w-resize;
}
}
.frame.child-frame.panel {
&:hover {
@include boxShdwLarge();
border-color: $colorKey;
//z-index: 2;
.view-switcher {
opacity: 1;
}
.edit-corner {
background-color: rgba($colorKey, 0.8);
&:hover {
background-color: rgba($colorKey, 1);
}
}
}
}
}

View File

@@ -0,0 +1,171 @@
.l-image-main-wrapper,
.l-image-main,
.l-image-main-controlbar,
.l-image-main-controlbar .left,
.l-image-main-controlbar .right,
.l-image-thumbs-wrapper {
@include absPosDefault(0, false);
}
/*************************************** MAIN LAYOUT */
.l-image-main-wrapper {
//@include test();
@if $enableImageryThumbs == true {
bottom: $interiorMargin*2 + $imageThumbsWrapperH;
}
min-height: 100px;
min-width: 150px;
.l-image-main {
background-color: rgba(#fff, 0.1);
bottom: $imageMainControlBarH + $interiorMargin;
}
.l-image-main-controlbar {
top: auto;
height: $imageMainControlBarH;
}
}
.l-image-thumbs-wrapper {
//@include test(red);
top: auto;
height: $imageThumbsWrapperH;
}
.l-date,
.l-time,
.l-timezone {
display: inline-block;
}
/*************************************** MAIN IMAGE */
.l-image-main,
.l-image-thumb-item .l-thumb {
background-size: contain;
background-position: center;
background-repeat: no-repeat;
}
.l-image-main {
//cursor: crosshair;
}
.l-image-main-controlbar {
//@include test();
font-size: 0.8em;
line-height: $imageMainControlBarH;
.left, .right {
direction: rtl;
overflow: hidden;
}
.left {
//@include test(red);
text-align: left;
width: 75% !important;
}
.right {
//@include test(green);
min-width: 40px;
width: 25% !important;
z-index: 2;
}
.l-date,
.l-time {
color: #fff;
}
.l-mag {
direction: ltr;
display: inline-block;
//white-space: nowrap;
&:before {
content: "\000049";
}
}
.s-mag {
color: darken($colorBodyFg, 20%);
}
.l-btn.show-thumbs {
display: none;
}
}
.s-image-main {
border: 1px solid transparent;
&.paused {
border-color: $colorPausedBg;
}
}
/*************************************** THUMBS */
.l-image-thumbs-wrapper {
//@include test(green);
direction: rtl;
overflow-x: auto;
overflow-y: hidden;
padding-bottom: $interiorMargin;
white-space: nowrap;
z-index: 70;
}
.l-image-thumb-item {
@include single-transition(background-color, 0.25s);
@include box-sizing(border-box);
padding: 1px;
position: relative;
.l-thumb,
.l-date,
.l-time {
display: inline-block;
}
.l-date,
.l-time {
padding: 2px 3px;
}
cursor: pointer;
direction: ltr;
display: inline-block;
font-size: 0.8em;
margin-left: $interiorMarginSm;
text-align: left;
width: $imageThumbsD + $imageThumbPad*2;
white-space: normal;
&:hover {
background: rgba(#fff, 0.2);
.l-date,
.l-time {
color: #fff;
}
}
&.selected {
background: $colorKeySelectedBg;
.l-date,
.l-time {
color: #fff;
}
}
.l-thumb {
background-color: rgba(#fff, 0.1);
height: $imageThumbsD;
width: $imageThumbsD;
margin-top: 0;
}
}
/*************************************** WHEN IN FRAME */
.frame .t-imagery {
.l-image-main-wrapper {
bottom: 0;
.l-image-main-controlbar {
font-size: 0.7em;
}
@if $enableImageryThumbs == true {
.l-btn.show-thumbs {
display: inline-block;
}
}
}
.l-image-thumbs-wrapper {
display: none;
}
}

View File

@@ -0,0 +1,46 @@
.l-time-display {
$transTime: 200ms;
// Layout
&: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;
}
}
// 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;
}
}

View File

@@ -19,18 +19,19 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
.section-header {
@include border-radius(3px);
background: rgba(white, 0.1);
font-size: 0.8em;
margin-top: $interiorMargin;
padding: $interiorMargin;
&:first-child {
margin-top: 0;
}
}
.form {
// @include test(orange);
.section-header {
@include border-radius(3px);
background: rgba(white, 0.1);
font-size: 0.8em;
margin-top: $interiorMargin;
padding: $interiorMargin;
&:first-child {
margin-top: 0;
}
}
.form-section {
position: relative;
}

View File

@@ -19,18 +19,13 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
input[type="text"],
input[type="date"] {
input[type="text"] {
@include nice-input();
@include input-placeholder {
color: darken($colorBodyFg, 10%);
font-style: italic;
}
&.filter {
&.ng-dirty {
// background: red;
}
}
&.filter {
&.ng-dirty {
// background: red;
}
}
&.numeric {
text-align: right;
}

View File

@@ -20,23 +20,21 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.validates {
$symbolW: 15px;
$symbolM: $interiorMargin * 2;
> .label {
// @include test(green, 0.1);
padding-right: $symbolW + $symbolM; // Keep room for validation element
padding-right: $reqSymbolW + $reqSymbolM; // Keep room for validation element
&::after {
// @include test(yellow, 0.3);
display: block;
position: absolute;
top: 0;
right: $symbolM;
right: $reqSymbolM;
bottom: 0;
left: auto;
height: auto;
width: $symbolW;
width: $reqSymbolW;
font-family: symbolsfont;
font-size: 1.1em;
font-size: $reqSymbolFontSize;
text-align: right;
vertical-align: middle;
}
@@ -62,7 +60,9 @@
}
}
}
.req {
font-size: $reqSymbolFontSize;
}
span.req {
color: $colorFormRequired;
}

View File

@@ -19,19 +19,24 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
//************************************************* LAYOUT
$infoBubbleFg: #666;
$infoBubbleBg: #ddd;
//************************************************* GENERAL
.bubble-container {
pointer-events: none;
}
//************************************************* LAYOUT
.l-infobubble-wrapper {
$arwSize: 5px;
@include box-shadow(rgba(black, 0.4) 0 1px 5px);
position: absolute;
z-index: 70;
position: relative;
z-index: 50;
.l-infobubble {
display: inline-block;
max-width: 250px;
min-width: $bubbleMinW;
max-width: $bubbleMaxW;
padding: 5px 10px;
&:before {
content:"";
@@ -71,34 +76,30 @@ $infoBubbleBg: #ddd;
}
&.arw-left {
margin-left: $arwSize*2;
margin-left: $bubbleArwSize*2;
.l-infobubble::before {
right: 100%;
border-top: $arwSize solid transparent;
border-bottom: $arwSize solid transparent;
border-right: ($arwSize * 1.5) solid $infoBubbleBg;
@include triangle('left', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
}
}
&.arw-right {
margin-right: $arwSize*2;
margin-right: $bubbleArwSize*2;
.l-infobubble::before {
left: 100%;
border-top: $arwSize solid transparent;
border-bottom: $arwSize solid transparent;
border-left: ($arwSize * 1.5) solid $infoBubbleBg;
@include triangle('right', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
}
}
&.arw-top {
.l-infobubble::before {
top: $arwSize * 2;
top: $bubbleArwSize * 2;
}
}
&.arw-btm {
.l-infobubble::before {
bottom: $arwSize * 2;
bottom: $bubbleArwSize * 2;
}
}
@@ -110,18 +111,32 @@ $infoBubbleBg: #ddd;
margin-left: -1 * $arwSize;
border-left: $arwSize solid transparent;
border-right: $arwSize solid transparent;
border-top: ($arwSize * 1.5) solid $infoBubbleBg;
border-top: ($arwSize * 1.5) solid $colorInfoBubbleBg;
}
}
.arw {
z-index: 2;
}
&.arw-up .arw.arw-down,
&.arw-down .arw.arw-up { display: none; }
}
//************************************************* LOOK AND FEEL
.l-thumbsbubble-wrapper {
.arw-up {
@include triangle('up', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
.arw-down {
@include triangle('down', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
}
.s-infobubble {
$emFg: darken($infoBubbleFg, 20%);
$emFg: darken($colorInfoBubbleFg, 20%);
@include border-radius($basicCr);
background: $infoBubbleBg;
color: $infoBubbleFg;
@include box-shadow(rgba(black, 0.4) 0 1px 5px);
background: $colorInfoBubbleBg;
color: $colorInfoBubbleFg;
font-size: 0.8rem;
.title {
color: $emFg;
@@ -129,7 +144,7 @@ $infoBubbleBg: #ddd;
}
tr {
td {
border-top: 1px solid darken($infoBubbleBg, 10%);
border-top: 1px solid darken($colorInfoBubbleBg, 10%);
font-size: 0.9em;
}
&:first-child td {
@@ -139,5 +154,9 @@ $infoBubbleBg: #ddd;
.value {
color: $emFg;
}
}
.s-thumbsbubble {
background: $colorThumbsBubbleBg;
color: $colorThumbsBubbleFg;
}

View File

@@ -84,7 +84,7 @@
}
.browse-area .splitter {
top: $ueTopBarH + $interiorMargin;
top: $ueTopBarH + $interiorMarginLg;
}
.edit-area .splitter {

View File

@@ -74,7 +74,7 @@
.treeview .wait-spinner {
$d: 18px;
$d: 10px;
@include wait-spinner(0.25em, $colorKey);
height: $d; width: $d;
margin: 0 !important;

View File

@@ -27,13 +27,17 @@
}
.item {
&.grid-item {
//div { @include test() }
$d: $ueBrowseGridItemLg;
//$iconD: 100px;
$iconMargin: 40px;
$iconD: ($d - ($iconMargin * 2)) * 0.85;
$transTime: 200ms;
@include btnSubtle($colorItemBase);
box-sizing: border-box;
cursor: pointer;
float: left;
height: $d;
// padding-bottom: 32%;
width: $d;
margin-bottom: $interiorMarginSm;
margin-right: $interiorMarginSm;
@@ -41,9 +45,13 @@
&:hover .item-main {
.item-type {
color: $colorKey !important;
.l-icon-link {
color: $colorIconLink;
}
}
.item-open {
display: block;
//display: block;
opacity: 1;
}
}
.contents {
@@ -58,7 +66,10 @@
.left, .right {
width: auto;
.icon {
margin-left: $interiorMargin;
margin-left: $interiorMarginSm;
&.l-icon-link {
color: $colorIconLink;
}
}
}
}
@@ -70,24 +81,44 @@
}
.item-main {
$h: $ueBrowseGridItemLg;
$lh: $h * 0.9;
// @include test();
div {
// background: rgba(deeppink, 0.2);
}
$lh: $h * 0.8;
//top: $ueBrowseGridItemTopBarH; bottom: $ueBrowseGridItemBottomBarH;
line-height: $lh;
z-index: 1;
.item-type {
//@include trans-prop-nice("color", $transTime);
@include absPosDefault($iconMargin, false);
//@include test(red);
color: $colorItemFg;
text-align: center;
font-size: 7em;
line-height: $lh;
font-size: $iconD * 0.95; //6em;
line-height: $iconD;
bottom: auto;
height: $iconD;
top: $iconMargin - 10;
//line-height: $lh;
.l-icon-link {
// When the link icon is in the item-type icon holder
color: darken($colorIconLink, 25%);
height: 36px;
line-height: 36px;
position: absolute;
font-size: 32px;
left: 0px;
bottom: 10px;
z-index: 2;
}
}
.item-open {
// color: lighten($colorItemBase, 15%);
display: none;
font-size: 5em;
line-height: $lh;
left: auto; width: 30px;
//@include test();
@include trans-prop-nice("opacity", $transTime);
opacity: 0;
//display: none;
font-size: 3em;
//line-height: $lh;
left: auto; width: 50px;
pointer-events: none;
text-align: right;
}
}
.title {
@@ -104,7 +135,7 @@
&.selected {
$cfg: lighten($colorItemSelected, 35%);
$cfgh: lighten($cfg, 30%);
@include btnNoticeable($colorItemSelected);
@include btnSubtle($colorItemSelected);
color: $cfg;
.item-type, .top-bar .icon:not(.alert) { color: $cfg }
.item-main .item-open { color: $cfg }

View File

@@ -30,18 +30,18 @@
border-collapse: collapse;
color: #fff;
display: table;
font-size: 0.8em;
font-size: 0.75em;
position: relative;
height: 100%;
//height: 100%; MOVED
width: 100%;
thead, .thead,
tbody tr, .tbody .tr {
display: table;
//display: table; MOVED
width: 100%;
table-layout: fixed;
//table-layout: fixed; MOVED
}
thead, .thead {
width: calc(100% - 10px);
//width: calc(100% - 10px); MOVED
tr, .tr {
height: $tabularHeaderH;
}
@@ -56,12 +56,11 @@
}
}
tbody, .tbody {
@include absPosDefault(0);
top: $tabularHeaderH;
//display: table-row-group;
display: block;
//width: 100%;
overflow-y: scroll;
//@include absPosDefault(0); MOVED
//top: $tabularHeaderH; MOVED
//display: block; MOVED
//overflow-y: scroll; MOVED
display: table-row-group;
tr, .tr {
&:hover {
background: rgba(white, 0.1);
@@ -69,8 +68,7 @@
}
}
tr, .tr {
//display: table-row;
//width: 100%;
display: table-row;
&:first-child .td {
border-top: none;
}
@@ -100,32 +98,24 @@
content: '1';
}
}
/* em {
//background: rgba(green, 0.2);
border-left: 1px solid $tabularColorBorder;
color: $tabularColorHeaderFg;
cursor: pointer;
display: block;
font-style: normal;
font-weight: bold;
height: $tabularHeaderH;
line-height: $tabularHeaderH;
margin-left: - $tabularTdPadLR;
padding: 0 $tabularTdPadLR;
position: absolute;
top: 0;
vertical-align: middle;
&:hover {
color: lighten($tabularColorHeaderFg, 20%);
}
}*/
}
td, .td {
border-top: 1px solid $tabularColorBorder;
min-width: 110px;
color: $colorTelemFresh;
padding: $tabularTdPadTB $tabularTdPadLR;
vertical-align: top;
&.numeric {
text-align: right;
}
&.s-cell-type-value {
text-align: right;
.l-cell-contents {
@include border-radius($smallCr);
padding-left: $itemPadLR;
padding-right: $itemPadLR;
}
}
}
}
&.filterable {
@@ -133,4 +123,27 @@
top: $tabularHeaderH * 2;
}
}
&.fixed-header {
height: 100%;
thead, .thead,
tbody tr, .tbody .tr {
display: table;
table-layout: fixed;
}
thead, .thead {
width: calc(100% - 10px);
}
tbody, .tbody {
@include absPosDefault(0);
top: $tabularHeaderH;
display: block;
overflow-y: scroll;
}
}
&.t-event-messages {
td, .td {
min-width: 150px;
}
}
}

View File

@@ -50,6 +50,7 @@
.title {
@include ellipsize();
font-size: 1.3em;
margin-bottom: $interiorMargin;
}
.top-bar {
@@ -64,7 +65,8 @@
.bottom-bar {
top: auto; right: 0; bottom: 0; left: 0;
font-size: 1em;
overflow: visible;
//font-size: 1em;
height: $ovrFooterH;
text-align: right;
.btn {

View File

@@ -22,7 +22,7 @@
$yBarW: 60px;
$yLabelW: auto;
$xBarH: 32px;
$legendH: 24px;
$legendH: 20px;
$colorHash: rgba(white, 0.3);
$styleHash: dashed;
$swatchD: 8px;
@@ -201,6 +201,7 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa
.legend-item {
display: inline-block;
margin-right: $interiorMarginLg;
margin-bottom: $interiorMarginSm;
span {
vertical-align: middle;
}

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