mirror of
https://github.com/nasa/openmct.git
synced 2025-02-21 09:52:04 +00:00
Merged from Master
This commit is contained in:
commit
032b2542f0
41
README.md
41
README.md
@ -43,29 +43,24 @@ that Open MCT Web (and its build and tests) execute correctly.
|
||||
|
||||
## Tests
|
||||
|
||||
The repository for Open MCT Web includes a test suite that can be run
|
||||
directly from the web browser, `test.html`. This page will:
|
||||
Tests are written for [Jasmine 1.3](http://jasmine.github.io/1.3/introduction.html)
|
||||
and run by [Karma](http://karma-runner.github.io). To run:
|
||||
|
||||
* Load `bundles.json` to determine which bundles are in the application.
|
||||
* Load `test/suite.json` to determine which source files are to be tested.
|
||||
This should contain an array of strings, where each is the name of an
|
||||
AMD module in the bundle's source directory. For each source file:
|
||||
* Code coverage instrumentation will be added, via Blanket.
|
||||
* The associated test file will be loaded, via RequireJS. These will
|
||||
be located in the bundle's test folder; the test runner will presume
|
||||
these follow a naming convention where each module to be tested has a
|
||||
corresponding test module with the suffix `Spec` in that folder.
|
||||
* Jasmine will then be invoked to run all tests defined in the loaded
|
||||
test modules. Code coverage reporting will be displayed at the bottom
|
||||
of the test page.
|
||||
`npm test`
|
||||
|
||||
At present, the test runner presumes that bundle conventions are followed
|
||||
as above; that is, sources are contained in `src`, and tests are contained
|
||||
in `test`. Additionally, individual test files must use the `Spec` suffix
|
||||
as described above.
|
||||
The test suite is configured to load any scripts ending with `Spec.js` found
|
||||
in the `src` hierarchy. Full configuration details are found in
|
||||
`karma.conf.js`. By convention, unit test scripts should be located
|
||||
alongside the units that they test; for example, `src/foo/Bar.js` would be
|
||||
tested by `src/foo/BarSpec.js`. (For legacy reasons, some existing tests may
|
||||
be located in separate `test` folders near the units they test, but the
|
||||
naming convention is otherwise the same.)
|
||||
|
||||
### Test Reporting
|
||||
|
||||
When `npm test` is run, test results will be written as HTML to
|
||||
`target/tests`. Code coverage information is written to `target/coverage`.
|
||||
|
||||
An example of this is expressed in `platform/framework`, which follows
|
||||
bundle conventions.
|
||||
|
||||
### Functional Testing
|
||||
|
||||
@ -84,8 +79,7 @@ To run:
|
||||
|
||||
Open MCT Web includes a Maven command line build. Although Open MCT Web
|
||||
can be run as-is using the repository contents (that is, by viewing
|
||||
`index.html` in a web browser), and its tests can be run in-place
|
||||
similarly (that is, by viewing `test.html` in a browser), the command
|
||||
`index.html` in a web browser), the command
|
||||
line build allows machine-driven verification and packaging.
|
||||
|
||||
This build will:
|
||||
@ -93,8 +87,7 @@ This build will:
|
||||
* Check all sources (excluding those in directories named `lib`) with
|
||||
JSLint for code style compliance. The build will fail if any sources
|
||||
do not satisfy JSLint.
|
||||
* Run unit tests. This is done by running `test.html` in a PhantomJS
|
||||
browser-like environment. The build will fail if any tests fail.
|
||||
* Run the [unit test suite](#tests).
|
||||
* Package the application as a `war` (web archive) file. This is
|
||||
convenient for deployment on Tomcat or similar. This archive will
|
||||
include sources, resources, and libraries for bundles, as well
|
||||
|
8
app.js
8
app.js
@ -41,7 +41,13 @@
|
||||
|
||||
// Override bundles.json for HTTP requests
|
||||
app.use('/' + BUNDLE_FILE, function (req, res) {
|
||||
var bundles = JSON.parse(fs.readFileSync(BUNDLE_FILE, 'utf8'));
|
||||
var bundles;
|
||||
|
||||
try {
|
||||
bundles = JSON.parse(fs.readFileSync(BUNDLE_FILE, 'utf8'));
|
||||
} catch (e) {
|
||||
bundles = [];
|
||||
}
|
||||
|
||||
// Handle command line inclusions/exclusions
|
||||
bundles = bundles.concat(options.include);
|
||||
|
39
bundles.json
39
bundles.json
@ -1,39 +0,0 @@
|
||||
[
|
||||
"platform/framework",
|
||||
"platform/core",
|
||||
"platform/representation",
|
||||
"platform/commonUI/about",
|
||||
"platform/commonUI/browse",
|
||||
"platform/commonUI/edit",
|
||||
"platform/commonUI/dialog",
|
||||
"platform/commonUI/formats",
|
||||
"platform/commonUI/general",
|
||||
"platform/commonUI/inspect",
|
||||
"platform/commonUI/mobile",
|
||||
"platform/commonUI/themes/espresso",
|
||||
"platform/commonUI/notification",
|
||||
"platform/containment",
|
||||
"platform/execution",
|
||||
"platform/telemetry",
|
||||
"platform/features/clock",
|
||||
"platform/features/events",
|
||||
"platform/features/imagery",
|
||||
"platform/features/layout",
|
||||
"platform/features/pages",
|
||||
"platform/features/plot",
|
||||
"platform/features/scrolling",
|
||||
"platform/features/timeline",
|
||||
"platform/forms",
|
||||
"platform/identity",
|
||||
"platform/persistence/aggregator",
|
||||
"platform/persistence/local",
|
||||
"platform/persistence/queue",
|
||||
"platform/policy",
|
||||
"platform/entanglement",
|
||||
"platform/search",
|
||||
"platform/status",
|
||||
|
||||
"example/imagery",
|
||||
"example/eventGenerator",
|
||||
"example/generator"
|
||||
]
|
@ -407,7 +407,7 @@ In addition to the directories defined in the bundle definition, a bundle will
|
||||
typically contain other directories not used at run-time. Additionally, some
|
||||
useful development scripts (such as the command line build and the test suite)
|
||||
expect this directory structure to be in use, and may ignore options chosen by
|
||||
`b undle.json`. It is recommended that the directory structure described below be
|
||||
`bundle.json`. It is recommended that the directory structure described below be
|
||||
used for new bundles.
|
||||
|
||||
* `src`: Contains JavaScript sources for this bundle. May contain additional
|
||||
@ -2245,7 +2245,7 @@ options. The sources can be deployed in the same directory structure used during
|
||||
development. A few utilities are included to support development processes.
|
||||
|
||||
## Command-line Build
|
||||
Open MCT Web includes a script for building via command line using Maven 3.0.4
|
||||
Open MCT Web includes a script for building via command line using Maven 3.3.9
|
||||
https://maven.apache.org/ .
|
||||
|
||||
Invoking mvn clean install will:
|
||||
@ -2263,50 +2263,31 @@ download build dependencies.
|
||||
|
||||
## Test Suite
|
||||
|
||||
Open MCT Web uses Jasmine http://jasmine.github.io/ for automated testing.
|
||||
The file `test.html` included at the top level of the source repository, can be
|
||||
run from the browser to perform tests for all active bundles, as defined in
|
||||
`bundle.json`.
|
||||
Open MCT Web uses [Jasmine 1.3](http://jasmine.github.io/) and
|
||||
[Karma](http://karma-runner.github.io) for automated testing.
|
||||
|
||||
To define tests for a bundle:
|
||||
The test suite is configured to load any scripts ending with `Spec.js` found
|
||||
in the `src` hierarchy. Full configuration details are found in
|
||||
`karma.conf.js`. By convention, unit test scripts should be located
|
||||
alongside the units that they test; for example, `src/foo/Bar.js` would be
|
||||
tested by `src/foo/BarSpec.js`. (For legacy reasons, some existing tests may
|
||||
be located in separate `test` folders near the units they test, but the
|
||||
naming convention is otherwise the same.)
|
||||
|
||||
* Include a directory named `test` within that bundle.
|
||||
* In the `test` directory, include a file named `suite.json`. This will identify
|
||||
which scripts will be tested.
|
||||
* The file `suite.json` must contain a JSON array of strings, where each string
|
||||
is the name of a script to be tested. These names should include any directory
|
||||
paths to the script after (but not including) the `src` folder, and should not
|
||||
include the file's `.js` extension. (Note that while Open MCT Web's framework
|
||||
allows a different name to be chosen for the src directory, the test runner
|
||||
does not: This directory must be named `src` for the test runner to find it.)
|
||||
* For each script to be tested, a corresponding test script should be located in
|
||||
the bundle's `test` directory. This should include the suffix Spec at the end of
|
||||
the filename (but before the `.js` extension.) This test script should be an AMD
|
||||
module which uses the Jasmine API to declare its test behavior. It should
|
||||
declare an AMD dependency on the script to be tested, using a relative path.
|
||||
|
||||
For example, if writing tests for a bundle at example/foo with two scripts:
|
||||
* `example/foo/src/controllers/FooController.js`
|
||||
* `example/foo/src/directives/FooDirective.js`
|
||||
|
||||
First, these scripts should be identified in `example/foo/test/suite.json` e.g.
|
||||
with contents:`[ "controllers/FooController", "directives/FooDirective" ]`
|
||||
|
||||
Then, scripts which describe these tests should be written. For example, test
|
||||
`example/foo/test/controllers/FooControllerSpec.js` could look like:
|
||||
Tests are written as AMD modules which depend (at minimum) upon the
|
||||
unit under test. For example, `src/foo/BarSpec.js` could look like:
|
||||
|
||||
/*global define,Promise,describe,it,expect,beforeEach*/
|
||||
|
||||
define(
|
||||
["../../src/controllers/FooController"],
|
||||
function (FooController) {
|
||||
["./Bar"],
|
||||
function (Bar) {
|
||||
"use strict";
|
||||
|
||||
|
||||
describe("The foo controller", function () {
|
||||
|
||||
describe("Bar", function () {
|
||||
it("does something", function () {
|
||||
var controller = new FooController();
|
||||
expect(controller.foo()).toEqual("foo");
|
||||
var bar = new Bar();
|
||||
expect(controller.baz()).toEqual("foo");
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -2435,4 +2416,4 @@ The following configuration constants are recognized by Open MCT Web bundles:
|
||||
* `ELASTIC_ROOT`: URL or path to the ElasticSearch instance to be used for
|
||||
domain object persistence. Should not include a trailing slash.
|
||||
* `ELASTIC_PATH`: Path relative to the ElasticSearch instance where domain
|
||||
object models should be persisted. Should take the form `<index>/<type>`.
|
||||
object models should be persisted. Should take the form `<index>/<type>`.
|
||||
|
@ -1,32 +0,0 @@
|
||||
{
|
||||
"name": "Angular Built-ins Example",
|
||||
"description": "Example showing how to declare extensions with built-in support from Angular.",
|
||||
"sources": "src",
|
||||
"extensions": {
|
||||
"controllers": [
|
||||
{
|
||||
"key": "ExampleController",
|
||||
"implementation": "ExampleController.js",
|
||||
"depends": [ "$scope", "exampleService" ]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "exampleDirective",
|
||||
"implementation": "ExampleDirective.js",
|
||||
"depends": [ "examples[]" ]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"templateUrl": "templates/example.html"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "exampleService",
|
||||
"implementation": "ExampleService.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"implementation": "SomeProvider.js",
|
||||
"provides": "someService",
|
||||
"type": "provider"
|
||||
},
|
||||
{
|
||||
"implementation": "SomeOtherProvider.js",
|
||||
"provides": "someService",
|
||||
"type": "provider"
|
||||
},
|
||||
{
|
||||
"implementation": "SomeDecorator.js",
|
||||
"provides": "someService",
|
||||
"type": "decorator"
|
||||
},
|
||||
{
|
||||
"implementation": "SomeOtherDecorator.js",
|
||||
"provides": "someService",
|
||||
"type": "decorator"
|
||||
},
|
||||
{
|
||||
"implementation": "SomeAggregator.js",
|
||||
"provides": "someService",
|
||||
"type": "aggregator"
|
||||
}
|
||||
],
|
||||
"examples": [
|
||||
{
|
||||
"implementation": "SomeOtherExample.js",
|
||||
"depends": [ "someService" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
{
|
||||
"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" }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"name": "Custom Extensions Examples",
|
||||
"description": "Example showing how to declare custom extensions.",
|
||||
"sources": "src",
|
||||
"extensions": {
|
||||
"examples": [
|
||||
{
|
||||
"text": "I came from example/extensions"
|
||||
},
|
||||
{
|
||||
"implementation": "SomeExample.js",
|
||||
"depends": [ "exampleService" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "Declarative Forms example",
|
||||
"sources": "src",
|
||||
"extensions": {
|
||||
"controllers": [
|
||||
{
|
||||
"key": "ExampleFormController",
|
||||
"implementation": "ExampleFormController.js",
|
||||
"depends": [ "$scope" ]
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"templateUrl": "templates/exampleForm.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
{
|
||||
"name": "Sine Wave Generator",
|
||||
"description": "Example of a component that produces dataa.",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"implementation": "SinewaveTelemetryProvider.js",
|
||||
"type": "provider",
|
||||
"provides": "telemetryService",
|
||||
"depends": [ "$q", "$timeout" ]
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "limit",
|
||||
"implementation": "SinewaveLimitCapability.js"
|
||||
}
|
||||
],
|
||||
"formats": [
|
||||
{
|
||||
"key": "example.delta",
|
||||
"implementation": "SinewaveDeltaFormat.js"
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "TIME_CONDUCTOR_DOMAINS",
|
||||
"value": [
|
||||
{ "key": "time", "name": "Time" },
|
||||
{ "key": "yesterday", "name": "Yesterday" },
|
||||
{ "key": "delta", "name": "Delta", "format": "example.delta" }
|
||||
],
|
||||
"priority": -1
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"key": "generator",
|
||||
"name": "Sine Wave Generator",
|
||||
"glyph": "T",
|
||||
"description": "A sine wave generator",
|
||||
"features": "creation",
|
||||
"model": {
|
||||
"telemetry": {
|
||||
"period": 10
|
||||
}
|
||||
},
|
||||
"telemetry": {
|
||||
"source": "generator",
|
||||
"domains": [
|
||||
{
|
||||
"key": "time",
|
||||
"name": "Time"
|
||||
},
|
||||
{
|
||||
"key": "yesterday",
|
||||
"name": "Yesterday"
|
||||
},
|
||||
{
|
||||
"key": "delta",
|
||||
"name": "Delta",
|
||||
"format": "example.delta"
|
||||
}
|
||||
],
|
||||
"ranges": [
|
||||
{
|
||||
"key": "sin",
|
||||
"name": "Sine"
|
||||
},
|
||||
{
|
||||
"key": "cos",
|
||||
"name": "Cosine"
|
||||
}
|
||||
]
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"name": "Period",
|
||||
"control": "textfield",
|
||||
"cssclass": "l-small l-numeric",
|
||||
"key": "period",
|
||||
"required": true,
|
||||
"property": [ "telemetry", "period" ],
|
||||
"pattern": "^\\d*(\\.\\d*)?$"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"implementation": "ExampleIdentityService.js",
|
||||
"provides": "identityService",
|
||||
"type": "provider",
|
||||
"depends": [ "dialogService" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"name": "Mobile",
|
||||
"description": "Allows elements with pertinence to mobile usage and development",
|
||||
"extensions": {
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/mobile-example.css",
|
||||
"priority": "mandatory"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"templates": [
|
||||
{
|
||||
"key": "dialogLaunchTemplate",
|
||||
"templateUrl": "dialog-launch.html"
|
||||
},
|
||||
{
|
||||
"key": "notificationLaunchTemplate",
|
||||
"templateUrl": "notification-launch.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "DialogLaunchController",
|
||||
"implementation": "DialogLaunchController.js",
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$timeout",
|
||||
"$log",
|
||||
"dialogService",
|
||||
"notificationService"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "NotificationLaunchController",
|
||||
"implementation": "NotificationLaunchController.js",
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$timeout",
|
||||
"$log",
|
||||
"notificationService"
|
||||
]
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "DialogLaunchIndicator.js",
|
||||
"priority": "fallback"
|
||||
},
|
||||
{
|
||||
"implementation": "NotificationLaunchIndicator.js",
|
||||
"priority": "fallback"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "provider",
|
||||
"implementation": "BrowserPersistenceProvider.js",
|
||||
"depends": [ "$q", "PERSISTENCE_SPACE" ]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_SPACE",
|
||||
"value": "mct"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"name": "Example Policy",
|
||||
"description": "Provides an example of using policies to prohibit actions.",
|
||||
"extensions": {
|
||||
"policies": [
|
||||
{
|
||||
"implementation": "ExamplePolicy.js",
|
||||
"category": "action"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "WatchIndicator.js",
|
||||
"depends": ["$interval", "$rootScope"]
|
||||
},
|
||||
{
|
||||
"implementation": "DigestIndicator.js",
|
||||
"depends": ["$interval", "$rootScope"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"roots": [
|
||||
{
|
||||
"id": "scratch:root",
|
||||
"model": {
|
||||
"type": "folder",
|
||||
"composition": [],
|
||||
"name": "Scratchpad"
|
||||
},
|
||||
"priority": "preferred"
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "provider",
|
||||
"implementation": "ScratchPersistenceProvider.js",
|
||||
"depends": [ "$q" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
{
|
||||
"name": "Example taxonomy",
|
||||
"description": "Example illustrating the addition of a static top-level hierarchy",
|
||||
"extensions": {
|
||||
"roots": [
|
||||
{
|
||||
"id": "exampleTaxonomy",
|
||||
"model": {
|
||||
"type": "folder",
|
||||
"name": "Stub Subsystems",
|
||||
"composition": [
|
||||
"examplePacket0",
|
||||
"examplePacket1",
|
||||
"examplePacket2"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "provider",
|
||||
"implementation": "ExampleTaxonomyModelProvider.js",
|
||||
"depends": [ "$q" ]
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "FibonacciIndicator.js",
|
||||
"depends": [ "workerService", "$rootScope" ]
|
||||
}
|
||||
],
|
||||
"workers": [
|
||||
{
|
||||
"key": "example.fibonacci",
|
||||
"scriptUrl": "FibonacciWorker.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -27,7 +27,7 @@
|
||||
<title></title>
|
||||
<script type="text/javascript"
|
||||
src="platform/framework/lib/require.js"
|
||||
data-main="platform/framework/src/Main.js">
|
||||
data-main="main.js">
|
||||
</script>
|
||||
<link rel="icon" type="image/png" href="platform/commonUI/general/res/images/favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="platform/commonUI/general/res/images/favicons/favicon-96x96.png" sizes="96x96">
|
||||
|
@ -34,6 +34,7 @@ module.exports = function(config) {
|
||||
// List of files / patterns to load in the browser.
|
||||
// By default, files are also included in a script tag.
|
||||
files: [
|
||||
{pattern: 'src/**/*.js', included: false},
|
||||
{pattern: 'example/**/*.js', included: false},
|
||||
{pattern: 'platform/**/*.js', included: false},
|
||||
{pattern: 'warp/**/*.js', included: false},
|
||||
@ -47,12 +48,14 @@ module.exports = function(config) {
|
||||
|
||||
// Preprocess matching files before serving them to the browser.
|
||||
// https://npmjs.org/browse/keyword/karma-preprocessor
|
||||
preprocessors: {},
|
||||
preprocessors: {
|
||||
'**/src/**/!(*Spec).js': [ 'coverage' ]
|
||||
},
|
||||
|
||||
// Test results reporter to use
|
||||
// Possible values: 'dots', 'progress'
|
||||
// Available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['progress'],
|
||||
reporters: ['progress', 'coverage', 'html'],
|
||||
|
||||
// Web server port.
|
||||
port: 9876,
|
||||
@ -71,8 +74,20 @@ module.exports = function(config) {
|
||||
'Chrome'
|
||||
],
|
||||
|
||||
// Code coverage reporting.
|
||||
coverageReporter: {
|
||||
dir: "target/coverage"
|
||||
},
|
||||
|
||||
// HTML test reporting.
|
||||
htmlReporter: {
|
||||
outputDir: "target/tests",
|
||||
preserveDescribeNesting: true,
|
||||
foldAll: false
|
||||
},
|
||||
|
||||
// Continuous Integration mode.
|
||||
// If true, Karma captures browsers, runs the tests and exits.
|
||||
singleRun: false
|
||||
singleRun: true
|
||||
});
|
||||
};
|
||||
|
81
main.js
Normal file
81
main.js
Normal 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, window, requirejs*/
|
||||
|
||||
requirejs.config({
|
||||
"paths": {
|
||||
"legacyRegistry": "src/legacyRegistry",
|
||||
"angular": "platform/framework/lib/angular.min",
|
||||
"moment": 'platform/telemetry/lib/moment.min'
|
||||
},
|
||||
"shim": {
|
||||
"angular": {
|
||||
"exports": "angular"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
define([
|
||||
'./platform/framework/src/Main',
|
||||
'legacyRegistry',
|
||||
|
||||
'./platform/framework/bundle',
|
||||
'./platform/core/bundle',
|
||||
'./platform/representation/bundle',
|
||||
'./platform/commonUI/about/bundle',
|
||||
'./platform/commonUI/browse/bundle',
|
||||
'./platform/commonUI/edit/bundle',
|
||||
'./platform/commonUI/dialog/bundle',
|
||||
'./platform/commonUI/formats/bundle',
|
||||
'./platform/commonUI/general/bundle',
|
||||
'./platform/commonUI/inspect/bundle',
|
||||
'./platform/commonUI/mobile/bundle',
|
||||
'./platform/commonUI/themes/espresso/bundle',
|
||||
'./platform/commonUI/notification/bundle',
|
||||
'./platform/containment/bundle',
|
||||
'./platform/execution/bundle',
|
||||
'./platform/telemetry/bundle',
|
||||
'./platform/features/clock/bundle',
|
||||
'./platform/features/events/bundle',
|
||||
'./platform/features/imagery/bundle',
|
||||
'./platform/features/layout/bundle',
|
||||
'./platform/features/pages/bundle',
|
||||
'./platform/features/plot/bundle',
|
||||
'./platform/features/scrolling/bundle',
|
||||
'./platform/features/timeline/bundle',
|
||||
'./platform/forms/bundle',
|
||||
'./platform/identity/bundle',
|
||||
'./platform/persistence/aggregator/bundle',
|
||||
'./platform/persistence/local/bundle',
|
||||
'./platform/persistence/queue/bundle',
|
||||
'./platform/policy/bundle',
|
||||
'./platform/entanglement/bundle',
|
||||
'./platform/search/bundle',
|
||||
'./platform/status/bundle',
|
||||
|
||||
'./example/imagery/bundle',
|
||||
'./example/eventGenerator/bundle',
|
||||
'./example/generator/bundle'
|
||||
], function (Main, legacyRegistry) {
|
||||
'use strict';
|
||||
new Main().run(legacyRegistry);
|
||||
});
|
@ -1,122 +0,0 @@
|
||||
{
|
||||
"name": "About Open MCT Web",
|
||||
"extensions": {
|
||||
"templates": [
|
||||
{
|
||||
"key": "app-logo",
|
||||
"priority": "optional",
|
||||
"templateUrl": "templates/app-logo.html"
|
||||
},
|
||||
{
|
||||
"key": "about-logo",
|
||||
"priority": "preferred",
|
||||
"templateUrl": "templates/about-logo.html"
|
||||
},
|
||||
{
|
||||
"key": "about-dialog",
|
||||
"templateUrl": "templates/about-dialog.html"
|
||||
},
|
||||
{
|
||||
"key": "overlay-about",
|
||||
"templateUrl": "templates/overlay-about.html"
|
||||
},
|
||||
{
|
||||
"key": "license-apache",
|
||||
"templateUrl": "templates/license-apache.html"
|
||||
},
|
||||
{
|
||||
"key": "license-mit",
|
||||
"templateUrl": "templates/license-mit.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "LogoController",
|
||||
"depends": [ "overlayService" ],
|
||||
"implementation": "LogoController.js"
|
||||
},
|
||||
{
|
||||
"key": "AboutController",
|
||||
"depends": [ "versions[]", "$window" ],
|
||||
"implementation": "AboutController.js"
|
||||
},
|
||||
{
|
||||
"key": "LicenseController",
|
||||
"depends": [ "licenses[]" ],
|
||||
"implementation": "LicenseController.js"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Json.NET",
|
||||
"version": "6.0.8",
|
||||
"author": "Newtonsoft",
|
||||
"description": "JSON serialization/deserialization",
|
||||
"website": "http://www.newtonsoft.com/json",
|
||||
"copyright": "Copyright (c) 2007 James Newton-King",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md"
|
||||
},
|
||||
{
|
||||
"name": "Nancy",
|
||||
"version": "0.23.2",
|
||||
"author": "Andreas Håkansson, Steven Robbins and contributors",
|
||||
"description": "Embedded web server",
|
||||
"website": "http://nancyfx.org/",
|
||||
"copyright": "Copyright © 2010 Andreas Håkansson, Steven Robbins and contributors",
|
||||
"license": "license-mit",
|
||||
"link": "http://www.opensource.org/licenses/mit-license.php"
|
||||
},
|
||||
{
|
||||
"name": "Nancy.Hosting.Self",
|
||||
"version": "0.23.2",
|
||||
"author": "Andreas Håkansson, Steven Robbins and contributors",
|
||||
"description": "Embedded web server",
|
||||
"website": "http://nancyfx.org/",
|
||||
"copyright": "Copyright © 2010 Andreas Håkansson, Steven Robbins and contributors",
|
||||
"license": "license-mit",
|
||||
"link": "http://www.opensource.org/licenses/mit-license.php"
|
||||
},
|
||||
{
|
||||
"name": "SuperSocket",
|
||||
"version": "0.9.0.2",
|
||||
"author": " Kerry Jiang",
|
||||
"description": "Supports SuperWebSocket",
|
||||
"website": "https://supersocket.codeplex.com/",
|
||||
"copyright": "Copyright 2010-2014 Kerry Jiang (kerry-jiang@hotmail.com)",
|
||||
"license": "license-apache",
|
||||
"link": "https://supersocket.codeplex.com/license"
|
||||
},
|
||||
{
|
||||
"name": "SuperWebSocket",
|
||||
"version": "0.9.0.2",
|
||||
"author": " Kerry Jiang",
|
||||
"description": "WebSocket implementation for client-server communication",
|
||||
"website": "https://superwebsocket.codeplex.com/",
|
||||
"copyright": "Copyright 2010-2014 Kerry Jiang (kerry-jiang@hotmail.com)",
|
||||
"license": "license-apache",
|
||||
"link": "https://superwebsocket.codeplex.com/license"
|
||||
},
|
||||
{
|
||||
"name": "log4net",
|
||||
"version": "2.0.3",
|
||||
"author": "Apache Software Foundation",
|
||||
"description": "Logging",
|
||||
"website": "http://logging.apache.org/log4net/",
|
||||
"copyright": "Copyright © 2004-2015 Apache Software Foundation.",
|
||||
"license": "license-apache",
|
||||
"link": "http://logging.apache.org/log4net/license.html"
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"when": "/licenses",
|
||||
"templateUrl": "templates/licenses.html"
|
||||
},
|
||||
{
|
||||
"when": "/licenses-md",
|
||||
"templateUrl": "templates/licenses-export-md.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,189 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"routes": [
|
||||
{
|
||||
"when": "/browse/:ids*",
|
||||
"templateUrl": "templates/browse.html",
|
||||
"reloadOnSearch": false
|
||||
},
|
||||
{
|
||||
"when": "",
|
||||
"templateUrl": "templates/browse.html",
|
||||
"reloadOnSearch": false
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "BrowseController",
|
||||
"implementation": "BrowseController.js",
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$route",
|
||||
"$location",
|
||||
"$q",
|
||||
"objectService",
|
||||
"navigationService",
|
||||
"urlService"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "PaneController",
|
||||
"implementation": "PaneController.js",
|
||||
"priority": "preferred",
|
||||
"depends": [ "$scope", "agentService","$window" ]
|
||||
},
|
||||
{
|
||||
"key": "BrowseObjectController",
|
||||
"implementation": "BrowseObjectController.js",
|
||||
"depends": [ "$scope", "$location", "$route", "$q",
|
||||
"navigationService" ]
|
||||
},
|
||||
{
|
||||
"key": "CreateMenuController",
|
||||
"implementation": "creation/CreateMenuController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "LocatorController",
|
||||
"implementation": "creation/LocatorController.js",
|
||||
"depends": [ "$scope", "$timeout" ]
|
||||
},
|
||||
{
|
||||
"key": "MenuArrowController",
|
||||
"implementation": "MenuArrowController.js",
|
||||
"depends": [ "$scope" ]
|
||||
}
|
||||
],
|
||||
"controls": [
|
||||
{
|
||||
"key": "locator",
|
||||
"templateUrl": "templates/create/locator.html"
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "browse-object",
|
||||
"templateUrl": "templates/browse-object.html",
|
||||
"gestures": [ "drop" ],
|
||||
"uses": [ "view" ]
|
||||
},
|
||||
{
|
||||
"key": "create-button",
|
||||
"templateUrl": "templates/create/create-button.html"
|
||||
},
|
||||
{
|
||||
"key": "create-menu",
|
||||
"templateUrl": "templates/create/create-menu.html",
|
||||
"uses": [ "action" ]
|
||||
},
|
||||
{
|
||||
"key": "grid-item",
|
||||
"templateUrl": "templates/items/grid-item.html",
|
||||
"uses": [ "type", "action", "location" ],
|
||||
"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" ]
|
||||
},
|
||||
{
|
||||
"key": "back-arrow",
|
||||
"uses": [ "context" ],
|
||||
"templateUrl": "templates/back-arrow.html"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "navigationService",
|
||||
"implementation": "navigation/NavigationService.js"
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"implementation": "creation/CreationPolicy.js",
|
||||
"category": "creation"
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"key": "navigate",
|
||||
"implementation": "navigation/NavigateAction.js",
|
||||
"depends": [ "navigationService", "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "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",
|
||||
"priority": "preferred"
|
||||
},
|
||||
{
|
||||
"key": "fullscreen",
|
||||
"implementation": "windowing/FullscreenAction.js",
|
||||
"category": "view-control",
|
||||
"group": "windowing",
|
||||
"glyph": "z",
|
||||
"priority": "default"
|
||||
}
|
||||
],
|
||||
"views": [
|
||||
{
|
||||
"key": "items",
|
||||
"name": "Items",
|
||||
"glyph": "9",
|
||||
"description": "Grid of available items",
|
||||
"templateUrl": "templates/items/items.html",
|
||||
"uses": [ "composition" ],
|
||||
"gestures": [ "drop" ],
|
||||
"type": "folder",
|
||||
"editable": false
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"key": "CreateActionProvider",
|
||||
"provides": "actionService",
|
||||
"type": "provider",
|
||||
"implementation": "creation/CreateActionProvider.js",
|
||||
"depends": ["$q", "typeService",
|
||||
"navigationService", "policyService"]
|
||||
},
|
||||
{
|
||||
"key": "CreationService",
|
||||
"provides": "creationService",
|
||||
"type": "provider",
|
||||
"implementation": "creation/CreationService.js",
|
||||
"depends": [ "$q", "$log" ]
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
{
|
||||
"implementation": "windowing/WindowTitler.js",
|
||||
"depends": [ "navigationService", "$rootScope", "$document" ]
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "screenfull.js",
|
||||
"version": "1.2.0",
|
||||
"description": "Wrapper for cross-browser usage of fullscreen API",
|
||||
"author": "Sindre Sorhus",
|
||||
"website": "https://github.com/sindresorhus/screenfull.js/",
|
||||
"copyright": "Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/sindresorhus/screenfull.js/blob/gh-pages/license"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"services": [
|
||||
{
|
||||
"key": "dialogService",
|
||||
"implementation": "DialogService.js",
|
||||
"depends": [ "overlayService", "$q", "$log" ]
|
||||
},
|
||||
{
|
||||
"key": "overlayService",
|
||||
"implementation": "OverlayService.js",
|
||||
"depends": [ "$document", "$compile", "$rootScope" ]
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "overlay-dialog",
|
||||
"templateUrl": "templates/overlay-dialog.html"
|
||||
},
|
||||
{
|
||||
"key": "overlay-options",
|
||||
"templateUrl": "templates/overlay-options.html"
|
||||
},
|
||||
{
|
||||
"key": "form-dialog",
|
||||
"templateUrl": "templates/dialog.html"
|
||||
},
|
||||
{
|
||||
"key": "overlay-blocking-message",
|
||||
"templateUrl": "templates/overlay-blocking-message.html"
|
||||
},
|
||||
{
|
||||
"key": "message",
|
||||
"templateUrl": "templates/message.html"
|
||||
},
|
||||
{
|
||||
"key": "overlay-message-list",
|
||||
"templateUrl": "templates/overlay-message-list.html"
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"key": "overlay",
|
||||
"templateUrl": "templates/overlay.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"routes": [
|
||||
{
|
||||
"when": "/edit",
|
||||
"templateUrl": "templates/edit.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "EditController",
|
||||
"implementation": "controllers/EditController.js",
|
||||
"depends": [ "$scope", "$q", "navigationService" ]
|
||||
},
|
||||
{
|
||||
"key": "EditActionController",
|
||||
"implementation": "controllers/EditActionController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "EditPanesController",
|
||||
"implementation": "controllers/EditPanesController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "ElementsController",
|
||||
"implementation": "controllers/ElementsController.js",
|
||||
"depends": [ "$scope" ]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctBeforeUnload",
|
||||
"implementation": "directives/MCTBeforeUnload.js",
|
||||
"depends": [ "$window" ]
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"key": "compose",
|
||||
"implementation": "actions/LinkAction.js"
|
||||
},
|
||||
{
|
||||
"key": "edit",
|
||||
"implementation": "actions/EditAction.js",
|
||||
"depends": [ "$location", "navigationService", "$log", "$q" ],
|
||||
"description": "Edit this object.",
|
||||
"category": "view-control",
|
||||
"glyph": "p"
|
||||
},
|
||||
{
|
||||
"key": "properties",
|
||||
"category": ["contextual", "view-control"],
|
||||
"implementation": "actions/PropertiesAction.js",
|
||||
"glyph": "p",
|
||||
"name": "Edit Properties...",
|
||||
"description": "Edit properties of this object.",
|
||||
"depends": [ "dialogService" ]
|
||||
},
|
||||
{
|
||||
"key": "remove",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/RemoveAction.js",
|
||||
"glyph": "Z",
|
||||
"name": "Remove",
|
||||
"description": "Remove this object from its containing object.",
|
||||
"depends": [ "$q", "navigationService" ]
|
||||
},
|
||||
{
|
||||
"key": "save",
|
||||
"category": "conclude-editing",
|
||||
"implementation": "actions/SaveAction.js",
|
||||
"name": "Save",
|
||||
"description": "Save changes made to these objects.",
|
||||
"depends": [ "$q", "$location", "$injector", "urlService",
|
||||
"navigationService", "policyService", "dialogService",
|
||||
"creationService" ],
|
||||
"priority": "mandatory"
|
||||
},
|
||||
{
|
||||
"key": "cancel",
|
||||
"category": "conclude-editing",
|
||||
"implementation": "actions/CancelAction.js",
|
||||
"name": "Cancel",
|
||||
"description": "Discard changes made to these objects.",
|
||||
"depends": ["$injector", "navigationService"]
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "action",
|
||||
"implementation": "policies/EditActionPolicy.js"
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "edit-library",
|
||||
"templateUrl": "templates/library.html"
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "edit-object",
|
||||
"templateUrl": "templates/edit-object.html",
|
||||
"uses": [ "view" ]
|
||||
},
|
||||
{
|
||||
"key": "edit-action-buttons",
|
||||
"templateUrl": "templates/edit-action-buttons.html",
|
||||
"uses": [ "action" ]
|
||||
},
|
||||
{
|
||||
"key": "edit-elements",
|
||||
"templateUrl": "templates/elements.html",
|
||||
"uses": [ "composition" ],
|
||||
"gestures": [ "drop" ]
|
||||
},
|
||||
{
|
||||
"key": "topbar-edit",
|
||||
"templateUrl": "templates/topbar-edit.html"
|
||||
}
|
||||
],
|
||||
"representers": [
|
||||
{
|
||||
"implementation": "representers/EditRepresenter.js",
|
||||
"depends": [ "$q", "$log" ]
|
||||
},
|
||||
{
|
||||
"implementation": "representers/EditToolbarRepresenter.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
{
|
||||
"name": "Time services bundle",
|
||||
"description": "Defines interfaces and provides default implementations for handling different time systems.",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "formatService",
|
||||
"type": "provider",
|
||||
"implementation": "FormatProvider.js",
|
||||
"depends": [ "formats[]" ]
|
||||
}
|
||||
],
|
||||
"formats": [
|
||||
{
|
||||
"key": "utc",
|
||||
"implementation": "UTCTimeFormat.js"
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "DEFAULT_TIME_FORMAT",
|
||||
"value": "utc"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,302 +0,0 @@
|
||||
{
|
||||
"name": "General UI elements",
|
||||
"description": "General UI elements, meant to be reused across modes",
|
||||
"resources": "res",
|
||||
"extensions": {
|
||||
"services": [
|
||||
{
|
||||
"key": "urlService",
|
||||
"implementation": "services/UrlService.js",
|
||||
"depends": [ "$location" ]
|
||||
},
|
||||
{
|
||||
"key": "popupService",
|
||||
"implementation": "services/PopupService.js",
|
||||
"depends": [ "$document", "$window" ]
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
{
|
||||
"implementation": "StyleSheetLoader.js",
|
||||
"depends": [ "stylesheets[]", "$document", "THEME" ]
|
||||
},
|
||||
{
|
||||
"implementation": "UnsupportedBrowserWarning.js",
|
||||
"depends": [ "notificationService", "agentService" ]
|
||||
}
|
||||
],
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/normalize.min.css",
|
||||
"priority": "mandatory"
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "bottombar",
|
||||
"templateUrl": "templates/bottombar.html"
|
||||
},
|
||||
{
|
||||
"key": "action-button",
|
||||
"templateUrl": "templates/controls/action-button.html"
|
||||
},
|
||||
{
|
||||
"key": "input-filter",
|
||||
"templateUrl": "templates/controls/input-filter.html"
|
||||
},
|
||||
{
|
||||
"key": "indicator",
|
||||
"templateUrl": "templates/indicator.html"
|
||||
},
|
||||
{
|
||||
"key": "message-banner",
|
||||
"templateUrl": "templates/message-banner.html"
|
||||
},
|
||||
{
|
||||
"key": "progress-bar",
|
||||
"templateUrl": "templates/progress-bar.html"
|
||||
},
|
||||
{
|
||||
"key": "time-controller",
|
||||
"templateUrl": "templates/controls/time-controller.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "TimeRangeController",
|
||||
"implementation": "controllers/TimeRangeController.js",
|
||||
"depends": [ "$scope", "formatService", "DEFAULT_TIME_FORMAT", "now" ]
|
||||
},
|
||||
{
|
||||
"key": "DateTimePickerController",
|
||||
"implementation": "controllers/DateTimePickerController.js",
|
||||
"depends": [ "$scope", "now" ]
|
||||
},
|
||||
{
|
||||
"key": "DateTimeFieldController",
|
||||
"implementation": "controllers/DateTimeFieldController.js",
|
||||
"depends": [ "$scope", "formatService", "DEFAULT_TIME_FORMAT" ]
|
||||
},
|
||||
{
|
||||
"key": "TreeNodeController",
|
||||
"implementation": "controllers/TreeNodeController.js",
|
||||
"depends": [ "$scope", "$timeout", "navigationService" ]
|
||||
},
|
||||
{
|
||||
"key": "ActionGroupController",
|
||||
"implementation": "controllers/ActionGroupController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "ToggleController",
|
||||
"implementation": "controllers/ToggleController.js"
|
||||
},
|
||||
{
|
||||
"key": "ContextMenuController",
|
||||
"implementation": "controllers/ContextMenuController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "ClickAwayController",
|
||||
"implementation": "controllers/ClickAwayController.js",
|
||||
"depends": [ "$scope", "$document" ]
|
||||
},
|
||||
{
|
||||
"key": "ViewSwitcherController",
|
||||
"implementation": "controllers/ViewSwitcherController.js",
|
||||
"depends": [ "$scope", "$timeout" ]
|
||||
},
|
||||
{
|
||||
"key": "BottomBarController",
|
||||
"implementation": "controllers/BottomBarController.js",
|
||||
"depends": [ "indicators[]" ]
|
||||
},
|
||||
{
|
||||
"key": "GetterSetterController",
|
||||
"implementation": "controllers/GetterSetterController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "SelectorController",
|
||||
"implementation": "controllers/SelectorController.js",
|
||||
"depends": [ "objectService", "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "ObjectInspectorController",
|
||||
"implementation": "controllers/ObjectInspectorController.js",
|
||||
"depends": [ "$scope", "objectService" ]
|
||||
},
|
||||
{
|
||||
"key": "BannerController",
|
||||
"implementation": "controllers/BannerController.js",
|
||||
"depends": ["$scope", "notificationService", "dialogService"]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctContainer",
|
||||
"implementation": "directives/MCTContainer.js",
|
||||
"depends": [ "containers[]" ]
|
||||
},
|
||||
{
|
||||
"key": "mctDrag",
|
||||
"implementation": "directives/MCTDrag.js",
|
||||
"depends": [ "$document" ]
|
||||
},
|
||||
{
|
||||
"key": "mctClickElsewhere",
|
||||
"implementation": "directives/MCTClickElsewhere.js",
|
||||
"depends": [ "$document" ]
|
||||
},
|
||||
{
|
||||
"key": "mctResize",
|
||||
"implementation": "directives/MCTResize.js",
|
||||
"depends": [ "$timeout" ]
|
||||
},
|
||||
{
|
||||
"key": "mctPopup",
|
||||
"implementation": "directives/MCTPopup.js",
|
||||
"depends": [ "$compile", "popupService" ]
|
||||
},
|
||||
{
|
||||
"key": "mctScrollX",
|
||||
"implementation": "directives/MCTScroll.js",
|
||||
"depends": [ "$parse", "MCT_SCROLL_X_PROPERTY", "MCT_SCROLL_X_ATTRIBUTE" ]
|
||||
},
|
||||
{
|
||||
"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", "$interval" ]
|
||||
},
|
||||
{
|
||||
"key": "mctSplitter",
|
||||
"implementation": "directives/MCTSplitter.js"
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "MCT_SCROLL_X_PROPERTY",
|
||||
"value": "scrollLeft"
|
||||
},
|
||||
{
|
||||
"key": "MCT_SCROLL_X_ATTRIBUTE",
|
||||
"value": "mctScrollX"
|
||||
},
|
||||
{
|
||||
"key": "MCT_SCROLL_Y_PROPERTY",
|
||||
"value": "scrollTop"
|
||||
},
|
||||
{
|
||||
"key": "MCT_SCROLL_Y_ATTRIBUTE",
|
||||
"value": "mctScrollY"
|
||||
},
|
||||
{
|
||||
"key": "THEME",
|
||||
"value": "unspecified",
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"key": "accordion",
|
||||
"templateUrl": "templates/containers/accordion.html",
|
||||
"attributes": [ "label" ]
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "tree",
|
||||
"templateUrl": "templates/subtree.html",
|
||||
"uses": [ "composition" ],
|
||||
"type": "root",
|
||||
"priority": "preferred"
|
||||
},
|
||||
{
|
||||
"key": "tree",
|
||||
"templateUrl": "templates/tree.html"
|
||||
},
|
||||
{
|
||||
"key": "subtree",
|
||||
"templateUrl": "templates/subtree.html",
|
||||
"uses": [ "composition" ]
|
||||
},
|
||||
{
|
||||
"key": "tree-node",
|
||||
"templateUrl": "templates/tree-node.html",
|
||||
"uses": [ "action" ]
|
||||
},
|
||||
{
|
||||
"key": "label",
|
||||
"templateUrl": "templates/label.html",
|
||||
"uses": [ "type", "location" ],
|
||||
"gestures": [ "drag", "menu", "info" ]
|
||||
},
|
||||
{
|
||||
"key": "node",
|
||||
"templateUrl": "templates/label.html",
|
||||
"uses": [ "type" ],
|
||||
"gestures": [ "drag", "menu" ]
|
||||
},
|
||||
{
|
||||
"key": "action-group",
|
||||
"templateUrl": "templates/controls/action-group.html",
|
||||
"uses": [ "action" ]
|
||||
},
|
||||
{
|
||||
"key": "context-menu",
|
||||
"templateUrl": "templates/menu/context-menu.html",
|
||||
"uses": [ "action" ]
|
||||
},
|
||||
{
|
||||
"key": "switcher",
|
||||
"templateUrl": "templates/controls/switcher.html",
|
||||
"uses": [ "view" ]
|
||||
},
|
||||
{
|
||||
"key": "object-inspector",
|
||||
"templateUrl": "templates/object-inspector.html"
|
||||
}
|
||||
],
|
||||
"controls": [
|
||||
{
|
||||
"key": "selector",
|
||||
"templateUrl": "templates/controls/selector.html"
|
||||
},
|
||||
{
|
||||
"key": "datetime-picker",
|
||||
"templateUrl": "templates/controls/datetime-picker.html"
|
||||
},
|
||||
{
|
||||
"key": "datetime-field",
|
||||
"templateUrl": "templates/controls/datetime-field.html"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Modernizr",
|
||||
"version": "2.6.2",
|
||||
"description": "Browser/device capability finding",
|
||||
"author": "Faruk Ateş",
|
||||
"website": "http://modernizr.com",
|
||||
"copyright": "Copyright (c) 2009–2015",
|
||||
"license": "license-mit",
|
||||
"link": "http://modernizr.com/license/"
|
||||
},
|
||||
{
|
||||
"name": "Normalize.css",
|
||||
"version": "1.1.2",
|
||||
"description": "Browser style normalization",
|
||||
"author": "Nicolas Gallagher, Jonathan Neal",
|
||||
"website": "http://necolas.github.io/normalize.css/",
|
||||
"copyright": "Copyright (c) Nicolas Gallagher and Jonathan Neal",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/necolas/normalize.css/blob/v1.1.2/LICENSE.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"templates": [
|
||||
{
|
||||
"key": "info-table",
|
||||
"templateUrl": "info-table.html"
|
||||
},
|
||||
{
|
||||
"key": "info-bubble",
|
||||
"templateUrl": "info-bubble.html"
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
{
|
||||
"key": "bubble",
|
||||
"templateUrl": "bubble.html",
|
||||
"attributes": [ "bubbleTitle", "bubbleLayout" ],
|
||||
"alias": "bubble"
|
||||
}
|
||||
],
|
||||
"gestures": [
|
||||
{
|
||||
"key": "info",
|
||||
"implementation": "gestures/InfoGesture.js",
|
||||
"depends": [
|
||||
"$timeout",
|
||||
"agentService",
|
||||
"infoService",
|
||||
"INFO_HOVER_DELAY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "infobutton",
|
||||
"implementation": "gestures/InfoButtonGesture.js",
|
||||
"depends": [
|
||||
"$document",
|
||||
"agentService",
|
||||
"infoService"
|
||||
]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "infoService",
|
||||
"implementation": "services/InfoService.js",
|
||||
"depends": [
|
||||
"$compile",
|
||||
"$rootScope",
|
||||
"popupService",
|
||||
"agentService"
|
||||
]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "INFO_HOVER_DELAY",
|
||||
"value": 2000
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "info-button",
|
||||
"templateUrl": "templates/info-button.html",
|
||||
"gestures": [ "infobutton" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctDevice",
|
||||
"implementation": "MCTDevice.js",
|
||||
"depends": [ "agentService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "agentService",
|
||||
"implementation": "AgentService.js",
|
||||
"depends": [ "$window" ]
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
{
|
||||
"implementation": "DeviceClassifier.js",
|
||||
"depends": [ "agentService", "$document" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"constants": [
|
||||
{
|
||||
"key": "DEFAULT_AUTO_DISMISS",
|
||||
"value": 3000
|
||||
},
|
||||
{
|
||||
"key": "FORCE_AUTO_DISMISS",
|
||||
"value": 1000
|
||||
},
|
||||
{
|
||||
"key": "MINIMIZE_TIMEOUT",
|
||||
"value": 300
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key":"notificationIndicatorTemplate",
|
||||
"templateUrl": "notification-indicator.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "NotificationIndicatorController",
|
||||
"implementation": "NotificationIndicatorController.js",
|
||||
"depends": ["$scope", "notificationService", "dialogService"]
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "NotificationIndicator.js",
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "notificationService",
|
||||
"implementation": "NotificationService.js",
|
||||
"depends": [ "$timeout", "DEFAULT_AUTO_DISMISS",
|
||||
"MINIMIZE_TIMEOUT" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "Espresso",
|
||||
"description": "Espresso theme: dark and rich",
|
||||
"extensions": {
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/theme-espresso.css",
|
||||
"priority": 1000
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "THEME",
|
||||
"value": "espresso"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "Snow",
|
||||
"description": "Snow theme: light and cool",
|
||||
"extensions": {
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/theme-snow.css",
|
||||
"priority": 1000
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "THEME",
|
||||
"value": "snow"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"policies": [
|
||||
{
|
||||
"category": "composition",
|
||||
"implementation": "CompositionPolicy.js",
|
||||
"depends": [ "$injector" ],
|
||||
"message": "Objects of this type cannot contain objects of that type."
|
||||
},
|
||||
{
|
||||
"category": "composition",
|
||||
"implementation": "CompositionMutabilityPolicy.js",
|
||||
"message": "Objects of this type cannot be modified."
|
||||
},
|
||||
{
|
||||
"category": "composition",
|
||||
"implementation": "CompositionModelPolicy.js",
|
||||
"message": "Objects of this type cannot contain other objects."
|
||||
},
|
||||
{
|
||||
"category": "action",
|
||||
"implementation": "ComposeActionPolicy.js",
|
||||
"depends": [ "$injector" ],
|
||||
"message": "Objects of this type cannot contain objects of that type."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,269 +0,0 @@
|
||||
{
|
||||
"name": "Open MCT Web Core",
|
||||
"description": "Defines core concepts of Open MCT Web.",
|
||||
"sources": "src",
|
||||
"configuration": {
|
||||
"paths": {
|
||||
"uuid": "uuid"
|
||||
}
|
||||
},
|
||||
"extensions": {
|
||||
"versions": [
|
||||
{
|
||||
"name": "Version",
|
||||
"value": "${project.version}",
|
||||
"priority": 999
|
||||
},
|
||||
{
|
||||
"name": "Built",
|
||||
"value": "${timestamp}",
|
||||
"description": "The date on which this version of the client was built.",
|
||||
"priority": 990
|
||||
},
|
||||
{
|
||||
"name": "Revision",
|
||||
"value": "${buildNumber}",
|
||||
"description": "A unique revision identifier for the client sources.",
|
||||
"priority": 995
|
||||
},
|
||||
{
|
||||
"name": "Branch",
|
||||
"value": "${scmBranch}",
|
||||
"description": "The date on which this version of the client was built.",
|
||||
"priority": 994
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "objectService",
|
||||
"type": "provider",
|
||||
"implementation": "objects/DomainObjectProvider.js",
|
||||
"depends": [ "modelService", "instantiate" ]
|
||||
},
|
||||
{
|
||||
"provides": "capabilityService",
|
||||
"type": "provider",
|
||||
"implementation": "capabilities/CoreCapabilityProvider.js",
|
||||
"depends": [ "capabilities[]", "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "provider",
|
||||
"implementation": "models/StaticModelProvider",
|
||||
"depends": [ "models[]", "$q", "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "provider",
|
||||
"implementation": "models/RootModelProvider.js",
|
||||
"depends": [ "roots[]", "$q", "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "aggregator",
|
||||
"implementation": "models/ModelAggregator.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "provider",
|
||||
"implementation": "models/PersistedModelProvider.js",
|
||||
"depends": [
|
||||
"persistenceService",
|
||||
"$q",
|
||||
"now",
|
||||
"PERSISTENCE_SPACE"
|
||||
]
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "decorator",
|
||||
"implementation": "models/CachingModelDecorator.js"
|
||||
},
|
||||
{
|
||||
"provides": "modelService",
|
||||
"type": "decorator",
|
||||
"priority": "fallback",
|
||||
"implementation": "models/MissingModelDecorator.js"
|
||||
},
|
||||
{
|
||||
"provides": "typeService",
|
||||
"type": "provider",
|
||||
"implementation": "types/TypeProvider.js",
|
||||
"depends": [ "types[]" ]
|
||||
},
|
||||
{
|
||||
"provides": "actionService",
|
||||
"type": "provider",
|
||||
"implementation": "actions/ActionProvider.js",
|
||||
"depends": [ "actions[]", "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "actionService",
|
||||
"type": "aggregator",
|
||||
"implementation": "actions/ActionAggregator.js"
|
||||
},
|
||||
{
|
||||
"provides": "actionService",
|
||||
"type": "decorator",
|
||||
"implementation": "actions/LoggingActionDecorator.js",
|
||||
"depends": [ "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "viewService",
|
||||
"type": "provider",
|
||||
"implementation": "views/ViewProvider.js",
|
||||
"depends": [ "views[]", "$log" ]
|
||||
},
|
||||
{
|
||||
"provides": "identifierService",
|
||||
"type": "provider",
|
||||
"implementation": "identifiers/IdentifierProvider.js",
|
||||
"depends": [ "PERSISTENCE_SPACE" ]
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"properties": [
|
||||
{
|
||||
"control": "textfield",
|
||||
"name": "Title",
|
||||
"key": "name",
|
||||
"property": "name",
|
||||
"pattern": "\\S+",
|
||||
"required": true,
|
||||
"cssclass": "l-med"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "root",
|
||||
"name": "Root",
|
||||
"glyph": "F"
|
||||
},
|
||||
{
|
||||
"key": "folder",
|
||||
"name": "Folder",
|
||||
"glyph": "F",
|
||||
"features": "creation",
|
||||
"description": "Useful for storing and organizing domain objects.",
|
||||
"model": { "composition": [] }
|
||||
},
|
||||
{
|
||||
"key": "unknown",
|
||||
"name": "Unknown Type",
|
||||
"glyph": "\u003f"
|
||||
},
|
||||
{
|
||||
"name": "Unknown Type",
|
||||
"glyph": "\u003f"
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "composition",
|
||||
"implementation": "capabilities/CompositionCapability.js",
|
||||
"depends": [ "$injector", "contextualize" ]
|
||||
},
|
||||
{
|
||||
"key": "relationship",
|
||||
"implementation": "capabilities/RelationshipCapability.js",
|
||||
"depends": [ "$injector" ]
|
||||
},
|
||||
{
|
||||
"key": "type",
|
||||
"implementation": "types/TypeCapability.js",
|
||||
"depends": [ "typeService" ]
|
||||
},
|
||||
{
|
||||
"key": "action",
|
||||
"implementation": "actions/ActionCapability.js",
|
||||
"depends": [ "$q", "actionService" ]
|
||||
},
|
||||
{
|
||||
"key": "view",
|
||||
"implementation": "views/ViewCapability.js",
|
||||
"depends": [ "viewService" ]
|
||||
},
|
||||
{
|
||||
"key": "persistence",
|
||||
"implementation": "capabilities/PersistenceCapability.js",
|
||||
"depends": [ "persistenceService", "identifierService",
|
||||
"notificationService", "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "metadata",
|
||||
"implementation": "capabilities/MetadataCapability.js"
|
||||
},
|
||||
{
|
||||
"key": "mutation",
|
||||
"implementation": "capabilities/MutationCapability.js",
|
||||
"depends": [ "topic", "now" ]
|
||||
},
|
||||
{
|
||||
"key": "delegation",
|
||||
"implementation": "capabilities/DelegationCapability.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "instantiation",
|
||||
"implementation": "capabilities/InstantiationCapability.js",
|
||||
"depends": [ "$injector", "identifierService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "now",
|
||||
"implementation": "services/Now.js"
|
||||
},
|
||||
{
|
||||
"key": "throttle",
|
||||
"implementation": "services/Throttle.js",
|
||||
"depends": [ "$timeout" ]
|
||||
},
|
||||
{
|
||||
"key": "topic",
|
||||
"implementation": "services/Topic.js",
|
||||
"depends": [ "$log" ]
|
||||
},
|
||||
{
|
||||
"key": "contextualize",
|
||||
"implementation": "services/Contextualize.js",
|
||||
"depends": [ "$log" ]
|
||||
},
|
||||
{
|
||||
"key": "instantiate",
|
||||
"implementation": "services/Instantiate.js",
|
||||
"depends": [ "capabilityService" ]
|
||||
}
|
||||
],
|
||||
"roots": [
|
||||
{
|
||||
"id": "mine",
|
||||
"model": {
|
||||
"name": "My Items",
|
||||
"type": "folder",
|
||||
"composition": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_SPACE",
|
||||
"value": "mct"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Math.uuid.js",
|
||||
"version": "1.4",
|
||||
"description": "Unique identifer generation (code adapted.)",
|
||||
"author": "Robert Kieffer",
|
||||
"website": "https://github.com/broofa/node-uuid",
|
||||
"copyright": "Copyright (c) 2010 Robert Kieffer",
|
||||
"license": "license-mit",
|
||||
"link": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -22,7 +22,7 @@
|
||||
/*global define*/
|
||||
|
||||
define(
|
||||
["uuid", "./Identifier"],
|
||||
["../../lib/uuid", "./Identifier"],
|
||||
function (uuid, Identifier) {
|
||||
'use strict';
|
||||
|
||||
|
@ -1,115 +0,0 @@
|
||||
{
|
||||
"name": "Entanglement",
|
||||
"description": "Tools to assist you in entangling the world of WARP.",
|
||||
"configuration": {},
|
||||
"extensions": {
|
||||
"actions": [
|
||||
{
|
||||
"key": "move",
|
||||
"name": "Move",
|
||||
"description": "Move object to another location.",
|
||||
"glyph": "f",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/MoveAction.js",
|
||||
"depends": ["policyService", "locationService", "moveService"]
|
||||
},
|
||||
{
|
||||
"key": "copy",
|
||||
"name": "Duplicate",
|
||||
"description": "Duplicate object to another location.",
|
||||
"glyph": "+",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/CopyAction.js",
|
||||
"depends": ["$log", "policyService", "locationService", "copyService",
|
||||
"dialogService", "notificationService"]
|
||||
},
|
||||
{
|
||||
"key": "link",
|
||||
"name": "Create Link",
|
||||
"description": "Create Link to object in another location.",
|
||||
"glyph": "\u00E8",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/LinkAction.js",
|
||||
"depends": ["policyService", "locationService", "linkService"]
|
||||
},
|
||||
{
|
||||
"key": "follow",
|
||||
"name": "Go To Original",
|
||||
"description": "Go to the original, un-linked instance of this object.",
|
||||
"glyph": "\u00F4",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/GoToOriginalAction.js"
|
||||
},
|
||||
{
|
||||
"key": "locate",
|
||||
"name": "Set Primary Location",
|
||||
"description": "Set a domain object's primary location.",
|
||||
"glyph": "",
|
||||
"category": "contextual",
|
||||
"implementation": "actions/SetPrimaryLocationAction.js"
|
||||
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "creationService",
|
||||
"implementation": "services/LocatingCreationDecorator.js"
|
||||
},
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "objectService",
|
||||
"implementation": "services/LocatingObjectDecorator.js",
|
||||
"depends": ["contextualize", "$q", "$log"]
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "action",
|
||||
"implementation": "policies/CrossSpacePolicy.js"
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "location",
|
||||
"name": "Location Capability",
|
||||
"description": "Provides a capability for retrieving the location of an object based upon it's context.",
|
||||
"implementation": "capabilities/LocationCapability",
|
||||
"depends": [ "$q", "$injector" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "moveService",
|
||||
"name": "Move Service",
|
||||
"description": "Provides a service for moving objects",
|
||||
"implementation": "services/MoveService.js",
|
||||
"depends": ["policyService", "linkService", "$q"]
|
||||
},
|
||||
{
|
||||
"key": "linkService",
|
||||
"name": "Link Service",
|
||||
"description": "Provides a service for linking objects",
|
||||
"implementation": "services/LinkService.js",
|
||||
"depends": ["policyService"]
|
||||
},
|
||||
{
|
||||
"key": "copyService",
|
||||
"name": "Copy Service",
|
||||
"description": "Provides a service for copying objects",
|
||||
"implementation": "services/CopyService.js",
|
||||
"depends": ["$q", "policyService", "now"]
|
||||
},
|
||||
{
|
||||
"key": "locationService",
|
||||
"name": "Location Service",
|
||||
"description": "Provides a service for prompting a user for locations.",
|
||||
"implementation": "services/LocationService.js",
|
||||
"depends": ["dialogService"]
|
||||
}
|
||||
|
||||
],
|
||||
"licenses": [
|
||||
]
|
||||
}
|
||||
}
|
@ -23,11 +23,8 @@
|
||||
/*global define */
|
||||
|
||||
define(
|
||||
[
|
||||
"uuid",
|
||||
"./CopyTask"
|
||||
],
|
||||
function (uuid, CopyTask) {
|
||||
[ "./CopyTask" ],
|
||||
function (CopyTask) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
|
@ -1,11 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"services": [
|
||||
{
|
||||
"key": "workerService",
|
||||
"implementation": "WorkerService.js",
|
||||
"depends": [ "$window", "workers[]" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,180 +0,0 @@
|
||||
{
|
||||
"name": "Clocks/Timers",
|
||||
"descriptions": "Domain objects for displaying current & relative times.",
|
||||
"configuration": {
|
||||
"paths": {
|
||||
"moment-duration-format": "moment-duration-format"
|
||||
},
|
||||
"shim": {
|
||||
"moment-duration-format": {
|
||||
"deps": [ "moment" ]
|
||||
}
|
||||
}
|
||||
},
|
||||
"extensions": {
|
||||
"constants": [
|
||||
{
|
||||
"key": "CLOCK_INDICATOR_FORMAT",
|
||||
"value": "YYYY/MM/DD HH:mm:ss"
|
||||
}
|
||||
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "indicators/ClockIndicator.js",
|
||||
"depends": [ "tickerService", "CLOCK_INDICATOR_FORMAT" ],
|
||||
"priority": "preferred"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "tickerService",
|
||||
"implementation": "services/TickerService.js",
|
||||
"depends": [ "$timeout", "now" ]
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "ClockController",
|
||||
"implementation": "controllers/ClockController.js",
|
||||
"depends": [ "$scope", "tickerService" ]
|
||||
},
|
||||
{
|
||||
"key": "TimerController",
|
||||
"implementation": "controllers/TimerController.js",
|
||||
"depends": [ "$scope", "$window", "now" ]
|
||||
},
|
||||
{
|
||||
"key": "RefreshingController",
|
||||
"implementation": "controllers/RefreshingController.js",
|
||||
"depends": [ "$scope", "tickerService" ]
|
||||
}
|
||||
],
|
||||
"views": [
|
||||
{
|
||||
"key": "clock",
|
||||
"type": "clock",
|
||||
"editable": false,
|
||||
"templateUrl": "templates/clock.html"
|
||||
},
|
||||
{
|
||||
"key": "timer",
|
||||
"type": "timer",
|
||||
"editable": false,
|
||||
"templateUrl": "templates/timer.html"
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"key": "timer.start",
|
||||
"implementation": "actions/StartTimerAction.js",
|
||||
"depends": ["now"],
|
||||
"category": "contextual",
|
||||
"name": "Start",
|
||||
"glyph": "\u00EF",
|
||||
"priority": "preferred"
|
||||
},
|
||||
{
|
||||
"key": "timer.restart",
|
||||
"implementation": "actions/RestartTimerAction.js",
|
||||
"depends": ["now"],
|
||||
"category": "contextual",
|
||||
"name": "Restart at 0",
|
||||
"glyph": "r",
|
||||
"priority": "preferred"
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"key": "clock",
|
||||
"name": "Clock",
|
||||
"glyph": "C",
|
||||
"features": [ "creation" ],
|
||||
"properties": [
|
||||
{
|
||||
"key": "clockFormat",
|
||||
"name": "Display Format",
|
||||
"control": "composite",
|
||||
"items": [
|
||||
{
|
||||
"control": "select",
|
||||
"options": [
|
||||
{
|
||||
"value": "YYYY/MM/DD hh:mm:ss",
|
||||
"name": "YYYY/MM/DD hh:mm:ss"
|
||||
},
|
||||
{
|
||||
"value": "YYYY/DDD hh:mm:ss",
|
||||
"name": "YYYY/DDD hh:mm:ss"
|
||||
},
|
||||
{
|
||||
"value": "hh:mm:ss",
|
||||
"name": "hh:mm:ss"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"control": "select",
|
||||
"options": [
|
||||
{
|
||||
"value": "clock12",
|
||||
"name": "12hr"
|
||||
},
|
||||
{
|
||||
"value": "clock24",
|
||||
"name": "24hr"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"model": {
|
||||
"clockFormat": [ "YYYY/MM/DD hh:mm:ss", "clock12" ]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "timer",
|
||||
"name": "Timer",
|
||||
"glyph": "\u00F5",
|
||||
"features": [ "creation" ],
|
||||
"properties": [
|
||||
{
|
||||
"key": "timestamp",
|
||||
"control": "datetime",
|
||||
"name": "Target"
|
||||
},
|
||||
{
|
||||
"key": "timerFormat",
|
||||
"control": "select",
|
||||
"options": [
|
||||
{
|
||||
"value": "long",
|
||||
"name": "DDD hh:mm:ss"
|
||||
},
|
||||
{
|
||||
"value": "short",
|
||||
"name": "hh:mm:ss"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"model": {
|
||||
"timerFormat": "DDD hh:mm:ss"
|
||||
}
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "moment-duration-format",
|
||||
"version": "1.3.0",
|
||||
"author": "John Madhavan-Reese",
|
||||
"description": "Duration parsing/formatting",
|
||||
"website": "https://github.com/jsmreese/moment-duration-format",
|
||||
"copyright": "Copyright 2014 John Madhavan-Reese",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/jsmreese/moment-duration-format/blob/master/LICENSE"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -19,10 +19,18 @@
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define*/
|
||||
/*global define,requirejs*/
|
||||
|
||||
requirejs.config({
|
||||
shim: {
|
||||
'platform/features/clock/lib/moment-duration-format': {
|
||||
deps: [ 'moment' ]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
define(
|
||||
['moment', 'moment-duration-format'],
|
||||
['moment', '../../lib/moment-duration-format'],
|
||||
function (moment) {
|
||||
"use strict";
|
||||
|
||||
|
@ -1,46 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"representers": [
|
||||
{
|
||||
"implementation": "ConductorRepresenter.js",
|
||||
"depends": [
|
||||
"throttle",
|
||||
"conductorService",
|
||||
"$compile",
|
||||
"views[]"
|
||||
]
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "telemetryService",
|
||||
"implementation": "ConductorTelemetryDecorator.js",
|
||||
"depends": [ "conductorService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "conductorService",
|
||||
"implementation": "ConductorService.js",
|
||||
"depends": [ "now", "TIME_CONDUCTOR_DOMAINS" ]
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "time-conductor",
|
||||
"templateUrl": "templates/time-conductor.html"
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "TIME_CONDUCTOR_DOMAINS",
|
||||
"value": [
|
||||
{ "key": "time", "name": "UTC", "format": "utc" }
|
||||
],
|
||||
"priority": "fallback",
|
||||
"comment": "Placeholder; to be replaced by inspection of available domains."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"name": "Event Messages",
|
||||
"description": "List of time-ordered event messages",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"key": "messages",
|
||||
"name": "Messages",
|
||||
"glyph": "5",
|
||||
"description": "Scrolling list of messages.",
|
||||
"templateUrl": "templates/messages.html",
|
||||
"needs": [ "telemetry" ],
|
||||
"delegation": true
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "EventListController",
|
||||
"implementation": "EventListController.js",
|
||||
"depends": [ "$scope", "telemetryFormatter" ]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctDataTable",
|
||||
"implementation": "directives/MCTDataTable.js",
|
||||
"depends": [ "$window" ]
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "view",
|
||||
"implementation": "policies/MessagesViewPolicy.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
{
|
||||
"name": "Plot view for telemetry",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"name": "Imagery",
|
||||
"key": "imagery",
|
||||
"glyph": "\u00E3",
|
||||
"templateUrl": "templates/imagery.html",
|
||||
"priority": "preferred",
|
||||
"needs": [ "telemetry" ],
|
||||
"editable": false
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "view",
|
||||
"implementation": "policies/ImageryViewPolicy.js"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "ImageryController",
|
||||
"implementation": "controllers/ImageryController.js",
|
||||
"depends": [ "$scope", "telemetryHandler" ]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctBackgroundImage",
|
||||
"implementation": "directives/MCTBackgroundImage.js",
|
||||
"depends": [ "$document" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,267 +0,0 @@
|
||||
{
|
||||
"name": "Layout components.",
|
||||
"description": "Plug in adding Layout capabilities.",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"key": "layout",
|
||||
"name": "Display Layout",
|
||||
"glyph": "L",
|
||||
"type": "layout",
|
||||
"templateUrl": "templates/layout.html",
|
||||
"editable": true,
|
||||
"uses": []
|
||||
},
|
||||
{
|
||||
"key": "fixed",
|
||||
"name": "Fixed Position",
|
||||
"glyph": "3",
|
||||
"type": "telemetry.panel",
|
||||
"templateUrl": "templates/fixed.html",
|
||||
"uses": [ "composition" ],
|
||||
"gestures": [ "drop" ],
|
||||
"toolbar": {
|
||||
"sections": [
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"method": "add",
|
||||
"glyph": "+",
|
||||
"control": "menu-button",
|
||||
"text": "Add",
|
||||
"options": [
|
||||
{
|
||||
"name": "Box",
|
||||
"glyph": "\u00E0",
|
||||
"key": "fixed.box"
|
||||
},
|
||||
{
|
||||
"name": "Line",
|
||||
"glyph": "\u00E2",
|
||||
"key": "fixed.line"
|
||||
},
|
||||
{
|
||||
"name": "Text",
|
||||
"glyph": "\u00E4",
|
||||
"key": "fixed.text"
|
||||
},
|
||||
{
|
||||
"name": "Image",
|
||||
"glyph": "\u00E3",
|
||||
"key": "fixed.image"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"method": "order",
|
||||
"glyph": "\u00E1",
|
||||
"control": "menu-button",
|
||||
"options": [
|
||||
{
|
||||
"name": "Move to Top",
|
||||
"glyph": "^",
|
||||
"key": "top"
|
||||
},
|
||||
{
|
||||
"name": "Move Up",
|
||||
"glyph": "^",
|
||||
"key": "up"
|
||||
},
|
||||
{
|
||||
"name": "Move Down",
|
||||
"glyph": "v",
|
||||
"key": "down"
|
||||
},
|
||||
{
|
||||
"name": "Move to Bottom",
|
||||
"glyph": "v",
|
||||
"key": "bottom"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"property": "fill",
|
||||
"glyph": "\ue606",
|
||||
"control": "color"
|
||||
},
|
||||
{
|
||||
"property": "stroke",
|
||||
"glyph": "\u00E2",
|
||||
"control": "color"
|
||||
},
|
||||
{
|
||||
"property": "color",
|
||||
"glyph": "\u00E4",
|
||||
"mandatory": true,
|
||||
"control": "color"
|
||||
},
|
||||
{
|
||||
"property": "url",
|
||||
"glyph": "\u00E3",
|
||||
"control": "dialog-button",
|
||||
"title": "Image Properties",
|
||||
"dialog": {
|
||||
"control": "textfield",
|
||||
"name": "Image URL",
|
||||
"required": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"property": "text",
|
||||
"glyph": "G",
|
||||
"control": "dialog-button",
|
||||
"title": "Text Properties",
|
||||
"dialog": {
|
||||
"control": "textfield",
|
||||
"name": "Text",
|
||||
"required": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "showTitle",
|
||||
"glyph": "\u00E7",
|
||||
"control": "button",
|
||||
"description": "Show telemetry element title."
|
||||
},
|
||||
{
|
||||
"method": "hideTitle",
|
||||
"glyph": "\u00E5",
|
||||
"control": "button",
|
||||
"description": "Hide telemetry element title."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"method": "remove",
|
||||
"control": "button",
|
||||
"glyph": "Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "frame",
|
||||
"templateUrl": "templates/frame.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "LayoutController",
|
||||
"implementation": "LayoutController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "FixedController",
|
||||
"implementation": "FixedController.js",
|
||||
"depends": [
|
||||
"$scope",
|
||||
"$q",
|
||||
"dialogService",
|
||||
"telemetryHandler",
|
||||
"telemetryFormatter",
|
||||
"throttle"
|
||||
]
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "fixed.telemetry",
|
||||
"templateUrl": "templates/elements/telemetry.html"
|
||||
},
|
||||
{
|
||||
"key": "fixed.box",
|
||||
"templateUrl": "templates/elements/box.html"
|
||||
},
|
||||
{
|
||||
"key": "fixed.line",
|
||||
"templateUrl": "templates/elements/line.html"
|
||||
},
|
||||
{
|
||||
"key": "fixed.text",
|
||||
"templateUrl": "templates/elements/text.html"
|
||||
},
|
||||
{
|
||||
"key": "fixed.image",
|
||||
"templateUrl": "templates/elements/image.html"
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "composition",
|
||||
"implementation": "LayoutCompositionPolicy.js"
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"key": "layout",
|
||||
"name": "Display Layout",
|
||||
"glyph": "L",
|
||||
"description": "A layout in which multiple telemetry panels may be displayed.",
|
||||
"features": "creation",
|
||||
"model": { "composition": [] },
|
||||
"properties": [
|
||||
{
|
||||
"name": "Layout Grid",
|
||||
"control": "composite",
|
||||
"pattern": "^(\\d*[1-9]\\d*)?$",
|
||||
"items": [
|
||||
{
|
||||
"name": "Horizontal grid (px)",
|
||||
"control": "textfield",
|
||||
"cssclass": "l-small l-numeric"
|
||||
},
|
||||
{
|
||||
"name": "Vertical grid (px)",
|
||||
"control": "textfield",
|
||||
"cssclass": "l-small l-numeric"
|
||||
}
|
||||
],
|
||||
"key": "layoutGrid",
|
||||
"conversion": "number[]"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "telemetry.panel",
|
||||
"name": "Telemetry Panel",
|
||||
"glyph": "t",
|
||||
"description": "A panel for collecting telemetry elements.",
|
||||
"delegates": [ "telemetry" ],
|
||||
"features": "creation",
|
||||
"contains": [ { "has": "telemetry" } ],
|
||||
"model": { "composition": [] },
|
||||
"properties": [
|
||||
{
|
||||
"name": "Layout Grid",
|
||||
"control": "composite",
|
||||
"items": [
|
||||
{
|
||||
"name": "Horizontal grid (px)",
|
||||
"control": "textfield",
|
||||
"cssclass": "l-small l-numeric"
|
||||
},
|
||||
{
|
||||
"name": "Vertical grid (px)",
|
||||
"control": "textfield",
|
||||
"cssclass": "l-small l-numeric"
|
||||
}
|
||||
],
|
||||
"pattern": "^(\\d*[1-9]\\d*)?$",
|
||||
"property": "layoutGrid",
|
||||
"conversion": "number[]"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"types": [
|
||||
{
|
||||
"key": "example.page",
|
||||
"name": "Web Page",
|
||||
"glyph": "\u00EA",
|
||||
"description": "A component to display a web page or image with a valid URL. Can be added to a Display Layout.",
|
||||
"features": [ "creation" ],
|
||||
"properties": [
|
||||
{
|
||||
"key": "url",
|
||||
"name": "URL",
|
||||
"control": "textfield",
|
||||
"pattern": "^(ftp|https?)\\:\\/\\/\\w+(\\.\\w+)*(\\:\\d+)?(\\/\\S*)*$",
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"views": [
|
||||
{
|
||||
"templateUrl": "iframe.html",
|
||||
"name": "Page",
|
||||
"type": "example.page",
|
||||
"key": "example.page",
|
||||
"editable": false
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "EmbeddedPageController",
|
||||
"implementation": "EmbeddedPageController.js",
|
||||
"depends": ["$sce"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
{
|
||||
"name": "Plot view for telemetry",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"name": "Plot",
|
||||
"key": "plot",
|
||||
"glyph": "6",
|
||||
"templateUrl": "templates/plot.html",
|
||||
"needs": [ "telemetry" ],
|
||||
"priority": "preferred",
|
||||
"delegation": true
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctChart",
|
||||
"implementation": "MCTChart.js",
|
||||
"depends": [ "$interval", "$log" ]
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "PlotController",
|
||||
"implementation": "PlotController.js",
|
||||
"depends": [
|
||||
"$scope",
|
||||
"telemetryFormatter",
|
||||
"telemetryHandler",
|
||||
"throttle",
|
||||
"PLOT_FIXED_DURATION"
|
||||
]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PLOT_FIXED_DURATION",
|
||||
"value": 900000,
|
||||
"priority": "fallback",
|
||||
"comment": "Fifteen minutes."
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "view",
|
||||
"implementation": "policies/PlotViewPolicy.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
{
|
||||
"name": "Event Messages",
|
||||
"description": "List of time-ordered event messages",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"key": "rtmessages",
|
||||
"name": "RT Messages",
|
||||
"glyph": "5",
|
||||
"description": "Scrolling list of real time messages.",
|
||||
"templateUrl": "templates/rtmessages.html",
|
||||
"needs": [ "telemetry" ],
|
||||
"delegation": true
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "RTEventListController",
|
||||
"implementation": "RTEventListController.js",
|
||||
"depends": [ "$scope", "telemetryHandler", "telemetryFormatter" ]
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctRtDataTable",
|
||||
"implementation": "directives/MCTRTDataTable.js",
|
||||
"depends": [ "$window" ]
|
||||
}
|
||||
],
|
||||
"policies": [
|
||||
{
|
||||
"category": "view",
|
||||
"implementation": "policies/RTMessagesViewPolicy.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
{
|
||||
"name": "Scrolling Lists",
|
||||
"description": "Time-ordered list of latest data.",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"key": "scrolling",
|
||||
"name": "Scrolling",
|
||||
"glyph": "5",
|
||||
"description": "Scrolling list of data values.",
|
||||
"templateUrl": "templates/rtscrolling.html",
|
||||
"needs": [ "telemetry" ],
|
||||
"delegation": true
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "RTScrollingListController",
|
||||
"implementation": "RTScrollingListController.js",
|
||||
"depends": [ "$scope", "telemetryHandler", "telemetryFormatter" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
{
|
||||
"name": "Scrolling Lists",
|
||||
"description": "Time-ordered list of latest data.",
|
||||
"extensions": {
|
||||
"views": [
|
||||
{
|
||||
"key": "scrolling",
|
||||
"name": "Scrolling",
|
||||
"glyph": "5",
|
||||
"description": "Scrolling list of data values.",
|
||||
"templateUrl": "templates/scrolling.html",
|
||||
"needs": [ "telemetry" ],
|
||||
"delegation": true
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "ScrollingListController",
|
||||
"implementation": "ScrollingListController.js",
|
||||
"depends": [ "$scope", "telemetryFormatter" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"types": [
|
||||
{
|
||||
"key": "static.markup",
|
||||
"name": "Static Markup",
|
||||
"glyph": "\u0070",
|
||||
"description": "Static markup sandbox",
|
||||
"features": [ "creation" ]
|
||||
}
|
||||
],
|
||||
"views": [
|
||||
{
|
||||
"templateUrl": "markup.html",
|
||||
"name": "Static Markup",
|
||||
"type": "static.markup",
|
||||
"key": "static.markup"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,386 +0,0 @@
|
||||
{
|
||||
"name": "Timelines",
|
||||
"description": "Resources, templates, CSS, and code for Timelines.",
|
||||
"resources": "res",
|
||||
"extensions": {
|
||||
"constants": [
|
||||
{
|
||||
"key": "TIMELINE_MINIMUM_DURATION",
|
||||
"description": "The minimum duration to display in a timeline view (one hour.)",
|
||||
"value": 3600000
|
||||
},
|
||||
{
|
||||
"key": "TIMELINE_MAXIMUM_OFFSCREEN",
|
||||
"description": "Maximum amount, in pixels, of a Gantt bar which may go off screen.",
|
||||
"value": 1000
|
||||
},
|
||||
{
|
||||
"key": "TIMELINE_ZOOM_CONFIGURATION",
|
||||
"description": "Describes major tick sizes in milliseconds, and width in pixels.",
|
||||
"value": {
|
||||
"levels": [
|
||||
1000,
|
||||
2000,
|
||||
5000,
|
||||
|
||||
10000,
|
||||
20000,
|
||||
30000,
|
||||
60000,
|
||||
|
||||
120000,
|
||||
300000,
|
||||
600000,
|
||||
|
||||
1200000,
|
||||
1800000,
|
||||
3600000,
|
||||
7200000,
|
||||
|
||||
14400000,
|
||||
28800000,
|
||||
43200000,
|
||||
86400000
|
||||
],
|
||||
"width": 200
|
||||
}
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"key": "timeline",
|
||||
"name": "Timeline",
|
||||
"glyph": "S",
|
||||
"description": "A container for arranging Timelines and Activities in time.",
|
||||
"features": [ "creation" ],
|
||||
"contains": [ "timeline", "activity" ],
|
||||
"properties": [
|
||||
{
|
||||
"name": "Start date/time",
|
||||
"control": "timeline-datetime",
|
||||
"required": true,
|
||||
"property": [ "start" ],
|
||||
"options": [ "SET" ]
|
||||
},
|
||||
{
|
||||
"name": "Battery capacity (Watt-hours)",
|
||||
"control": "textfield",
|
||||
"required": false,
|
||||
"conversion": "number",
|
||||
"property": [ "capacity" ],
|
||||
"pattern": "^-?\\d+(\\.\\d*)?$"
|
||||
}
|
||||
],
|
||||
"model": { "composition": [] }
|
||||
},
|
||||
{
|
||||
"key": "activity",
|
||||
"name": "Activity",
|
||||
"glyph": "a",
|
||||
"features": [ "creation" ],
|
||||
"contains": [ "activity" ],
|
||||
"description": "An action that takes place in time. You can define a start time and duration. Activities can be nested within other Activities, or within Timelines.",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Start date/time",
|
||||
"control": "timeline-datetime",
|
||||
"required": true,
|
||||
"property": [ "start" ],
|
||||
"options": [ "SET" ]
|
||||
},
|
||||
{
|
||||
"name": "Duration",
|
||||
"control": "duration",
|
||||
"required": true,
|
||||
"property": [ "duration" ]
|
||||
}
|
||||
],
|
||||
"model": { "composition": [], "relationships": { "modes": [] } }
|
||||
},
|
||||
{
|
||||
"key": "mode",
|
||||
"name": "Activity Mode",
|
||||
"glyph": "A",
|
||||
"features": [ "creation" ],
|
||||
"description": "Define resource utilizations over time, then apply to an Activity.",
|
||||
"model": { "resources": { "comms": 0, "power": 0 } },
|
||||
"properties": [
|
||||
{
|
||||
"name": "Comms (Kbps)",
|
||||
"control": "textfield",
|
||||
"conversion": "number",
|
||||
"pattern": "^-?\\d+(\\.\\d*)?$",
|
||||
"property": [ "resources", "comms" ]
|
||||
},
|
||||
{
|
||||
"name": "Power (watts)",
|
||||
"control": "textfield",
|
||||
"conversion": "number",
|
||||
"pattern": "^-?\\d+(\\.\\d*)?$",
|
||||
"property": [ "resources", "power" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"views": [
|
||||
{
|
||||
"key": "values",
|
||||
"name": "Values",
|
||||
"glyph": "A",
|
||||
"templateUrl": "templates/values.html",
|
||||
"type": "mode",
|
||||
"uses": [ "cost" ],
|
||||
"editable": false
|
||||
},
|
||||
{
|
||||
"key": "timeline",
|
||||
"name": "Timeline",
|
||||
"glyph": "S",
|
||||
"type": "timeline",
|
||||
"description": "A timeline view of Timelines and Activities.",
|
||||
"templateUrl": "templates/timeline.html",
|
||||
"editable": true,
|
||||
"toolbar": {
|
||||
"sections": [
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"method": "add",
|
||||
"glyph": "+",
|
||||
"control": "menu-button",
|
||||
"text": "Add",
|
||||
"options": [
|
||||
{
|
||||
"name": "Timeline",
|
||||
"glyph": "S",
|
||||
"key": "timeline"
|
||||
},
|
||||
{
|
||||
"name": "Activity",
|
||||
"glyph": "a",
|
||||
"key": "activity"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"glyph": "\u00E9",
|
||||
"description": "Graph resource utilization",
|
||||
"control": "button",
|
||||
"method": "toggleGraph"
|
||||
},
|
||||
{
|
||||
"glyph": "A",
|
||||
"control": "dialog-button",
|
||||
"description": "Apply Activity Modes...",
|
||||
"title": "Apply Activity Modes",
|
||||
"dialog": {
|
||||
"control": "selector",
|
||||
"name": "Modes",
|
||||
"type": "mode"
|
||||
},
|
||||
"property": "modes"
|
||||
},
|
||||
{
|
||||
"glyph": "\u00E8",
|
||||
"description": "Edit Activity Link",
|
||||
"title": "Activity Link",
|
||||
"control": "dialog-button",
|
||||
"dialog": {
|
||||
"control": "textfield",
|
||||
"name": "Link",
|
||||
"pattern": "^(ftp|https?)\\:\\/\\/\\w+(\\.\\w+)*(\\:\\d+)?(\\/\\S*)*$"
|
||||
},
|
||||
"property": "link"
|
||||
},
|
||||
{
|
||||
"glyph": "\u0047",
|
||||
"description": "Edit Properties...",
|
||||
"control": "button",
|
||||
"method": "properties"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"method": "remove",
|
||||
"description": "Remove item",
|
||||
"control": "button",
|
||||
"glyph": "Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"stylesheets": [
|
||||
{
|
||||
"stylesheetUrl": "css/timeline.css"
|
||||
},
|
||||
{
|
||||
"stylesheetUrl": "css/timeline-espresso.css",
|
||||
"theme": "espresso"
|
||||
},
|
||||
{
|
||||
"stylesheetUrl": "css/timeline-snow.css",
|
||||
"theme": "snow"
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "gantt",
|
||||
"templateUrl": "templates/activity-gantt.html",
|
||||
"uses": [ "timespan", "type" ]
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "timeline-tabular-swimlane-cols-tree",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/tabular-swimlane-cols-tree.html"
|
||||
},
|
||||
{
|
||||
"key": "timeline-tabular-swimlane-cols-data",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/tabular-swimlane-cols-data.html"
|
||||
},
|
||||
{
|
||||
"key": "timeline-resource-graphs",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/resource-graphs.html"
|
||||
},
|
||||
{
|
||||
"key": "timeline-resource-graph-labels",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/resource-graph-labels.html"
|
||||
},
|
||||
{
|
||||
"key": "timeline-legend-item",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/legend-item.html"
|
||||
},
|
||||
{
|
||||
"key": "timeline-ticks",
|
||||
"priority": "mandatory",
|
||||
"templateUrl": "templates/ticks.html"
|
||||
}
|
||||
],
|
||||
"controls": [
|
||||
{
|
||||
"key": "timeline-datetime",
|
||||
"templateUrl": "templates/controls/datetime.html"
|
||||
},
|
||||
{
|
||||
"key": "duration",
|
||||
"templateUrl": "templates/controls/datetime.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "TimelineController",
|
||||
"implementation": "controllers/TimelineController.js",
|
||||
"depends": [ "$scope", "$q", "objectLoader", "TIMELINE_MINIMUM_DURATION" ]
|
||||
},
|
||||
{
|
||||
"key": "TimelineGraphController",
|
||||
"implementation": "controllers/TimelineGraphController.js",
|
||||
"depends": [ "$scope", "resources[]" ]
|
||||
},
|
||||
{
|
||||
"key": "TimelineDateTimeController",
|
||||
"implementation": "controllers/TimelineDateTimeController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "TimelineZoomController",
|
||||
"implementation": "controllers/TimelineZoomController.js",
|
||||
"depends": [ "$scope", "TIMELINE_ZOOM_CONFIGURATION" ]
|
||||
},
|
||||
{
|
||||
"key": "TimelineTickController",
|
||||
"implementation": "controllers/TimelineTickController.js"
|
||||
},
|
||||
{
|
||||
"key": "TimelineTableController",
|
||||
"implementation": "controllers/TimelineTableController.js"
|
||||
},
|
||||
{
|
||||
"key": "TimelineGanttController",
|
||||
"implementation": "controllers/TimelineGanttController.js",
|
||||
"depends": [ "TIMELINE_MAXIMUM_OFFSCREEN" ]
|
||||
},
|
||||
{
|
||||
"key": "ActivityModeValuesController",
|
||||
"implementation": "controllers/ActivityModeValuesController.js",
|
||||
"depends": [ "resources[]" ]
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "timespan",
|
||||
"implementation": "capabilities/ActivityTimespanCapability.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "timespan",
|
||||
"implementation": "capabilities/TimelineTimespanCapability.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "utilization",
|
||||
"implementation": "capabilities/UtilizationCapability.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "graph",
|
||||
"implementation": "capabilities/GraphCapability.js",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"key": "cost",
|
||||
"implementation": "capabilities/CostCapability.js"
|
||||
}
|
||||
],
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctSwimlaneDrop",
|
||||
"implementation": "directives/MCTSwimlaneDrop.js",
|
||||
"depends": [ "dndService" ]
|
||||
},
|
||||
{
|
||||
"key": "mctSwimlaneDrag",
|
||||
"implementation": "directives/MCTSwimlaneDrag.js",
|
||||
"depends": [ "dndService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "objectLoader",
|
||||
"implementation": "services/ObjectLoader.js",
|
||||
"depends": [ "$q" ]
|
||||
}
|
||||
],
|
||||
"resources": [
|
||||
{
|
||||
"key": "power",
|
||||
"name": "Power",
|
||||
"units": "watts"
|
||||
},
|
||||
{
|
||||
"key": "comms",
|
||||
"name": "Comms",
|
||||
"units": "Kbps"
|
||||
},
|
||||
{
|
||||
"key": "battery",
|
||||
"name": "Battery State-of-Charge",
|
||||
"units": "%"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
{
|
||||
"name": "MCT Forms",
|
||||
"description": "Form generator; includes directive and some controls.",
|
||||
"extensions": {
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctForm",
|
||||
"implementation": "MCTForm.js"
|
||||
},
|
||||
{
|
||||
"key": "mctToolbar",
|
||||
"implementation": "MCTToolbar.js"
|
||||
},
|
||||
{
|
||||
"key": "mctControl",
|
||||
"implementation": "MCTControl.js",
|
||||
"depends": [ "controls[]" ]
|
||||
}
|
||||
],
|
||||
"controls": [
|
||||
{
|
||||
"key": "checkbox",
|
||||
"templateUrl": "templates/controls/checkbox.html"
|
||||
},
|
||||
{
|
||||
"key": "datetime",
|
||||
"templateUrl": "templates/controls/datetime.html"
|
||||
},
|
||||
{
|
||||
"key": "select",
|
||||
"templateUrl": "templates/controls/select.html"
|
||||
},
|
||||
{
|
||||
"key": "textfield",
|
||||
"templateUrl": "templates/controls/textfield.html"
|
||||
},
|
||||
{
|
||||
"key": "button",
|
||||
"templateUrl": "templates/controls/button.html"
|
||||
},
|
||||
{
|
||||
"key": "color",
|
||||
"templateUrl": "templates/controls/color.html"
|
||||
},
|
||||
{
|
||||
"key": "composite",
|
||||
"templateUrl": "templates/controls/composite.html"
|
||||
},
|
||||
{
|
||||
"key": "menu-button",
|
||||
"templateUrl": "templates/controls/menu-button.html"
|
||||
},
|
||||
{
|
||||
"key": "dialog-button",
|
||||
"templateUrl": "templates/controls/dialog.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "DateTimeController",
|
||||
"implementation": "controllers/DateTimeController.js",
|
||||
"depends": [ "$scope" ]
|
||||
},
|
||||
{
|
||||
"key": "CompositeController",
|
||||
"implementation": "controllers/CompositeController.js"
|
||||
},
|
||||
{
|
||||
"key": "ColorController",
|
||||
"implementation": "controllers/ColorController.js"
|
||||
},
|
||||
{
|
||||
"key": "DialogButtonController",
|
||||
"implementation": "controllers/DialogButtonController.js",
|
||||
"depends": [ "$scope", "dialogService" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -66,7 +66,7 @@ define(
|
||||
templateUrl: templatePath,
|
||||
|
||||
// Use FormController to populate/respond to changes in scope
|
||||
controller: FormController,
|
||||
controller: [ '$scope', FormController ],
|
||||
|
||||
// Initial an isolate scope
|
||||
scope: {
|
||||
|
@ -30,6 +30,12 @@ define(
|
||||
var mockScope,
|
||||
mctForm;
|
||||
|
||||
function installController() {
|
||||
var controllerProperty = mctForm.controller,
|
||||
Controller = mctForm.controller[1];
|
||||
return new Controller(mockScope);
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]);
|
||||
mockScope.$parent = {};
|
||||
@ -44,7 +50,7 @@ define(
|
||||
// mct-form needs to watch for the form by name
|
||||
// in order to convey changes in $valid, $dirty, etc
|
||||
// up to the parent scope.
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
|
||||
expect(mockScope.$watch).toHaveBeenCalledWith(
|
||||
"mctForm",
|
||||
@ -56,7 +62,7 @@ define(
|
||||
var someState = { someKey: "some value" };
|
||||
mockScope.name = "someName";
|
||||
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
|
||||
mockScope.$watch.mostRecentCall.args[1](someState);
|
||||
|
||||
@ -65,7 +71,7 @@ define(
|
||||
|
||||
it("allows strings to be converted to RegExps", function () {
|
||||
// This is needed to support ng-pattern in the template
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
|
||||
// Should have added getRegExp to the scope,
|
||||
// to convert strings to regular expressions
|
||||
@ -78,7 +84,7 @@ define(
|
||||
regExp;
|
||||
|
||||
// Add getRegExp to scope
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
regExp = mockScope.getRegExp(strRegExp);
|
||||
|
||||
// Same object instance each time...
|
||||
@ -91,7 +97,7 @@ define(
|
||||
var regExp = /^\d+[a-d]$/;
|
||||
|
||||
// Add getRegExp to scope
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
|
||||
// Should have added getRegExp to the scope,
|
||||
// to convert strings to regular expressions
|
||||
@ -100,7 +106,7 @@ define(
|
||||
|
||||
it("passes a non-whitespace regexp when no pattern is defined", function () {
|
||||
// If no pattern is supplied, ng-pattern should match anything
|
||||
mctForm.controller(mockScope);
|
||||
installController();
|
||||
expect(mockScope.getRegExp()).toEqual(/\S/);
|
||||
expect(mockScope.getRegExp(undefined)).toEqual(/\S/);
|
||||
});
|
||||
|
@ -1,81 +0,0 @@
|
||||
{
|
||||
"name": "Open MCT Web Framework Component",
|
||||
"description": "Framework layer for Open MCT Web; interprets bundle definitions and serves as an intermediary between Require and Angular",
|
||||
"libraries": "lib",
|
||||
"configuration": {
|
||||
"paths": {
|
||||
"angular": "angular.min"
|
||||
},
|
||||
"shim": {
|
||||
"angular": {
|
||||
"exports": "angular"
|
||||
}
|
||||
}
|
||||
},
|
||||
"extensions": {
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Blanket.js",
|
||||
"version": "1.1.5",
|
||||
"description": "Code coverage measurement and reporting",
|
||||
"author": "Alex Seville",
|
||||
"website": "http://blanketjs.org/",
|
||||
"copyright": "Copyright (c) 2013 Alex Seville",
|
||||
"license": "license-mit",
|
||||
"link": "http://opensource.org/licenses/MIT"
|
||||
},
|
||||
{
|
||||
"name": "Jasmine",
|
||||
"version": "1.3.1",
|
||||
"description": "Unit testing",
|
||||
"author": "Pivotal Labs",
|
||||
"website": "http://jasmine.github.io/",
|
||||
"copyright": "Copyright (c) 2008-2011 Pivotal Labs",
|
||||
"license": "license-mit",
|
||||
"link": "http://opensource.org/licenses/MIT"
|
||||
},
|
||||
{
|
||||
"name": "RequireJS",
|
||||
"version": "2.1.9",
|
||||
"description": "Script loader",
|
||||
"author": "The Dojo Foundation",
|
||||
"website": "http://requirejs.org/",
|
||||
"copyright": "Copyright (c) 2010-2015, The Dojo Foundation",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/jrburke/requirejs/blob/master/LICENSE"
|
||||
},
|
||||
{
|
||||
"name": "AngularJS",
|
||||
"version": "1.2.26",
|
||||
"description": "Client-side web application framework",
|
||||
"author": "Google",
|
||||
"website": "http://angularjs.org/",
|
||||
"copyright": "Copyright (c) 2010-2014 Google, Inc. http://angularjs.org",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.2.26/LICENSE"
|
||||
},
|
||||
{
|
||||
"name": "Angular-Route",
|
||||
"version": "1.2.26",
|
||||
"description": "Client-side view routing",
|
||||
"author": "Google",
|
||||
"website": "http://angularjs.org/",
|
||||
"copyright": "Copyright (c) 2010-2014 Google, Inc. http://angularjs.org",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/angular/angular.js/blob/v1.2.26/LICENSE"
|
||||
},
|
||||
{
|
||||
"name": "ES6-Promise",
|
||||
"version": "2.0.0",
|
||||
"description": "Promise polyfill for pre-ECMAScript 6 browsers",
|
||||
"author": "Yehuda Katz, Tom Dale, Stefan Penner and contributors",
|
||||
"website": "https://github.com/jakearchibald/es6-promise",
|
||||
"copyright": "Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors",
|
||||
"license": "license-mit",
|
||||
"link": "https://github.com/jakearchibald/es6-promise/blob/master/LICENSE"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
105
platform/framework/src/FrameworkLayer.js
Normal file
105
platform/framework/src/FrameworkLayer.js
Normal file
@ -0,0 +1,105 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define, window, requirejs*/
|
||||
|
||||
define([
|
||||
'require',
|
||||
'./Constants',
|
||||
'./FrameworkInitializer',
|
||||
'./LogLevel',
|
||||
'./load/BundleLoader',
|
||||
'./resolve/ImplementationLoader',
|
||||
'./resolve/ExtensionResolver',
|
||||
'./resolve/BundleResolver',
|
||||
'./resolve/RequireConfigurator',
|
||||
'./register/CustomRegistrars',
|
||||
'./register/ExtensionRegistrar',
|
||||
'./register/ExtensionSorter',
|
||||
'./bootstrap/ApplicationBootstrapper'
|
||||
], function (
|
||||
require,
|
||||
Constants,
|
||||
FrameworkInitializer,
|
||||
LogLevel,
|
||||
BundleLoader,
|
||||
ImplementationLoader,
|
||||
ExtensionResolver,
|
||||
BundleResolver,
|
||||
RequireConfigurator,
|
||||
CustomRegistrars,
|
||||
ExtensionRegistrar,
|
||||
ExtensionSorter,
|
||||
ApplicationBootstrapper
|
||||
) {
|
||||
'use strict';
|
||||
|
||||
function FrameworkLayer($http, $log) {
|
||||
this.$http = $http;
|
||||
this.$log = $log;
|
||||
}
|
||||
|
||||
FrameworkLayer.prototype.initializeApplication = function (
|
||||
angular,
|
||||
legacyRegistry,
|
||||
logLevel
|
||||
) {
|
||||
var $http = this.$http,
|
||||
$log = this.$log,
|
||||
app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
|
||||
loader = new BundleLoader($http, $log, legacyRegistry),
|
||||
resolver = new BundleResolver(
|
||||
new ExtensionResolver(
|
||||
new ImplementationLoader(require),
|
||||
$log
|
||||
),
|
||||
new RequireConfigurator(requirejs),
|
||||
$log
|
||||
),
|
||||
registrar = new ExtensionRegistrar(
|
||||
app,
|
||||
new CustomRegistrars(app, $log),
|
||||
new ExtensionSorter($log),
|
||||
$log
|
||||
),
|
||||
bootstrapper = new ApplicationBootstrapper(
|
||||
angular,
|
||||
window.document,
|
||||
$log
|
||||
),
|
||||
initializer = new FrameworkInitializer(
|
||||
loader,
|
||||
resolver,
|
||||
registrar,
|
||||
bootstrapper
|
||||
);
|
||||
|
||||
// Apply logging levels; this must be done now, before the
|
||||
// first log statement.
|
||||
new LogLevel(logLevel).configure(app, $log);
|
||||
|
||||
// Initialize the application
|
||||
$log.info("Initializing application.");
|
||||
initializer.runApplication(Constants.BUNDLE_LISTING_FILE);
|
||||
};
|
||||
|
||||
return FrameworkLayer;
|
||||
});
|
@ -90,12 +90,10 @@ define(
|
||||
}
|
||||
|
||||
decorate($log);
|
||||
app.config(function ($provide) {
|
||||
$provide.decorator('$log', function ($delegate) {
|
||||
decorate($delegate);
|
||||
return $delegate;
|
||||
});
|
||||
});
|
||||
app.decorator('$log', ['$delegate', function ($delegate) {
|
||||
decorate($delegate);
|
||||
return $delegate;
|
||||
}]);
|
||||
};
|
||||
|
||||
return LogLevel;
|
||||
|
@ -22,12 +22,9 @@
|
||||
/*global define, window, requirejs*/
|
||||
|
||||
requirejs.config({
|
||||
"shim": {
|
||||
"../lib/angular.min": {
|
||||
"exports": "angular"
|
||||
},
|
||||
"../lib/angular-route.min": {
|
||||
"deps": [ "../lib/angular.min" ]
|
||||
shim: {
|
||||
'platform/framework/lib/angular-route.min': {
|
||||
deps: [ 'angular' ]
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -41,97 +38,42 @@ define(
|
||||
[
|
||||
'require',
|
||||
'../lib/es6-promise-2.0.0.min',
|
||||
'../lib/angular.min',
|
||||
'../lib/angular-route.min',
|
||||
'./Constants',
|
||||
'./FrameworkInitializer',
|
||||
'./LogLevel',
|
||||
'./load/BundleLoader',
|
||||
'./resolve/ImplementationLoader',
|
||||
'./resolve/ExtensionResolver',
|
||||
'./resolve/BundleResolver',
|
||||
'./resolve/RequireConfigurator',
|
||||
'./register/CustomRegistrars',
|
||||
'./register/ExtensionRegistrar',
|
||||
'./register/ExtensionSorter',
|
||||
'./bootstrap/ApplicationBootstrapper'
|
||||
'./FrameworkLayer',
|
||||
'angular',
|
||||
'../lib/angular-route.min'
|
||||
],
|
||||
function (
|
||||
require,
|
||||
es6promise,
|
||||
angular,
|
||||
angularRoute,
|
||||
Constants,
|
||||
FrameworkInitializer,
|
||||
LogLevel,
|
||||
BundleLoader,
|
||||
ImplementationLoader,
|
||||
ExtensionResolver,
|
||||
BundleResolver,
|
||||
RequireConfigurator,
|
||||
CustomRegistrars,
|
||||
ExtensionRegistrar,
|
||||
ExtensionSorter,
|
||||
ApplicationBootstrapper
|
||||
FrameworkLayer,
|
||||
angular
|
||||
) {
|
||||
"use strict";
|
||||
|
||||
// Get a reference to Angular's injector, so we can get $http and $log
|
||||
// services, which are useful to the framework layer.
|
||||
var injector = angular.injector(['ng']);
|
||||
|
||||
// Look up log level from query string
|
||||
function logLevel() {
|
||||
var match = /[?&]log=([a-z]+)/.exec(window.location.search);
|
||||
return match ? match[1] : "";
|
||||
function Main() {
|
||||
}
|
||||
|
||||
// Polyfill Promise, in case browser does not natively provide Promise
|
||||
window.Promise = window.Promise || es6promise.Promise;
|
||||
Main.prototype.run = function (legacyRegistry) {
|
||||
// Get a reference to Angular's injector, so we can get $http and $log
|
||||
// services, which are useful to the framework layer.
|
||||
var injector = angular.injector(['ng']);
|
||||
|
||||
// Wire up framework layer components necessary to complete framework
|
||||
// initialization phases.
|
||||
function initializeApplication($http, $log) {
|
||||
var app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
|
||||
loader = new BundleLoader($http, $log),
|
||||
resolver = new BundleResolver(
|
||||
new ExtensionResolver(
|
||||
new ImplementationLoader(require),
|
||||
$log
|
||||
),
|
||||
new RequireConfigurator(requirejs),
|
||||
$log
|
||||
),
|
||||
registrar = new ExtensionRegistrar(
|
||||
app,
|
||||
new CustomRegistrars(app, $log),
|
||||
new ExtensionSorter($log),
|
||||
$log
|
||||
),
|
||||
bootstrapper = new ApplicationBootstrapper(
|
||||
angular,
|
||||
window.document,
|
||||
$log
|
||||
),
|
||||
initializer = new FrameworkInitializer(
|
||||
loader,
|
||||
resolver,
|
||||
registrar,
|
||||
bootstrapper
|
||||
);
|
||||
// Look up log level from query string
|
||||
function logLevel() {
|
||||
var match = /[?&]log=([a-z]+)/.exec(window.location.search);
|
||||
return match ? match[1] : "";
|
||||
}
|
||||
|
||||
// Apply logging levels; this must be done now, before the
|
||||
// first log statement.
|
||||
new LogLevel(logLevel()).configure(app, $log);
|
||||
// Polyfill Promise, in case browser does not natively provide Promise
|
||||
window.Promise = window.Promise || es6promise.Promise;
|
||||
|
||||
// Initialize the application
|
||||
$log.info("Initializing application.");
|
||||
initializer.runApplication(Constants.BUNDLE_LISTING_FILE);
|
||||
}
|
||||
// Reconfigure base url, since bundle paths will all be relative
|
||||
// to the root now.
|
||||
requirejs.config({"baseUrl": ""});
|
||||
injector.instantiate(['$http', '$log', FrameworkLayer])
|
||||
.initializeApplication(angular, legacyRegistry, logLevel());
|
||||
};
|
||||
|
||||
// Reconfigure base url, since bundle paths will all be relative
|
||||
// to the root now.
|
||||
requirejs.config({ "baseUrl": "" });
|
||||
injector.invoke(['$http', '$log', initializeApplication]);
|
||||
return Main;
|
||||
}
|
||||
);
|
||||
|
@ -59,7 +59,7 @@ define(
|
||||
$log = this.$log;
|
||||
$log.info("Bootstrapping application " + (app || {}).name);
|
||||
angular.element(document).ready(function () {
|
||||
angular.bootstrap(document, [app.name]);
|
||||
angular.bootstrap(document, [app.name], { strictDi: true });
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -44,10 +44,10 @@ define(
|
||||
* @param $http Angular's HTTP requester
|
||||
* @param $log Angular's logging service
|
||||
*/
|
||||
function BundleLoader($http, $log) {
|
||||
function BundleLoader($http, $log, legacyRegistry) {
|
||||
this.$http = $http;
|
||||
this.$log = $log;
|
||||
|
||||
this.legacyRegistry = legacyRegistry;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,7 +60,8 @@ define(
|
||||
*/
|
||||
BundleLoader.prototype.loadBundles = function (bundles) {
|
||||
var $http = this.$http,
|
||||
$log = this.$log;
|
||||
$log = this.$log,
|
||||
legacyRegistry = this.legacyRegistry;
|
||||
|
||||
// Utility function; load contents of JSON file using $http
|
||||
function getJSON(file) {
|
||||
@ -97,15 +98,30 @@ define(
|
||||
// Load an individual bundle, as a Bundle object.
|
||||
// Returns undefined if the definition could not be loaded.
|
||||
function loadBundle(bundlePath) {
|
||||
if (legacyRegistry.contains(bundlePath)) {
|
||||
return Promise.resolve(new Bundle(
|
||||
bundlePath,
|
||||
legacyRegistry.get(bundlePath)
|
||||
));
|
||||
}
|
||||
|
||||
return loadBundleDefinition(bundlePath).then(function (definition) {
|
||||
return definition && (new Bundle(bundlePath, definition));
|
||||
});
|
||||
}
|
||||
|
||||
// Used to filter out redundant bundles
|
||||
function unique(element, index, array) {
|
||||
return array.indexOf(element) === index;
|
||||
}
|
||||
|
||||
// Load all named bundles from the array, returned as an array
|
||||
// of Bundle objects.
|
||||
function loadBundlesFromArray(bundleArray) {
|
||||
var bundlePromises = bundleArray.map(loadBundle);
|
||||
var bundlePromises = legacyRegistry.list()
|
||||
.concat(bundleArray)
|
||||
.filter(unique)
|
||||
.map(loadBundle);
|
||||
|
||||
return Promise.all(bundlePromises)
|
||||
.then(filterBundles);
|
||||
@ -114,12 +130,25 @@ define(
|
||||
// Load all bundles named in the referenced file. The file is
|
||||
// presumed to be a JSON file
|
||||
function loadBundlesFromFile(listFile) {
|
||||
return getJSON(listFile).then(loadBundlesFromArray);
|
||||
function handleError(err) {
|
||||
$log.info([
|
||||
"No external bundles loaded;",
|
||||
"could not load bundle listing in",
|
||||
listFile,
|
||||
"due to error",
|
||||
err.status,
|
||||
err.statusText
|
||||
].join(' '));
|
||||
return loadBundlesFromArray([]);
|
||||
}
|
||||
|
||||
return getJSON(listFile)
|
||||
.then(loadBundlesFromArray, handleError);
|
||||
}
|
||||
|
||||
return Array.isArray(bundles) ? loadBundlesFromArray(bundles) :
|
||||
(typeof bundles === 'string') ? loadBundlesFromFile(bundles) :
|
||||
Promise.reject(new Error(INVALID_ARGUMENT_MESSAGE));
|
||||
(typeof bundles === 'string') ? loadBundlesFromFile(bundles) :
|
||||
Promise.reject(new Error(INVALID_ARGUMENT_MESSAGE));
|
||||
};
|
||||
|
||||
return BundleLoader;
|
||||
|
@ -133,9 +133,29 @@ define(
|
||||
* @returns {string} path to implementation, or undefined
|
||||
*/
|
||||
Extension.prototype.getImplementationPath = function () {
|
||||
return this.definition.implementation ?
|
||||
this.bundle.getSourcePath(this.definition.implementation) :
|
||||
undefined;
|
||||
return (this.hasImplementation() && !this.hasImplementationValue()) ?
|
||||
this.bundle.getSourcePath(this.definition.implementation) :
|
||||
undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if an extension has an actual implementation value
|
||||
* (and not just a path to an implementation) defined.
|
||||
* @returns {function} the constructor for this extension instance
|
||||
*/
|
||||
Extension.prototype.getImplementationValue = function () {
|
||||
return typeof this.definition.implementation === 'function' ?
|
||||
this.definition.implementation :
|
||||
undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if an extension has an actual implementation value
|
||||
* (and not just a path to an implementation) defined.
|
||||
* @returns {boolean} true if a value is available
|
||||
*/
|
||||
Extension.prototype.hasImplementationValue = function () {
|
||||
return typeof this.definition.implementation === 'function';
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -61,8 +61,9 @@ define(
|
||||
$log = this.$log;
|
||||
|
||||
function loadImplementation(extension) {
|
||||
var implPath = extension.getImplementationPath(),
|
||||
implPromise = loader.load(implPath),
|
||||
var implPromise = extension.hasImplementationValue() ?
|
||||
Promise.resolve(extension.getImplementationValue()) :
|
||||
loader.load(extension.getImplementationPath()),
|
||||
definition = extension.getDefinition();
|
||||
|
||||
// Wrap a constructor function (to avoid modifying the original)
|
||||
@ -117,13 +118,15 @@ define(
|
||||
return extension.getDefinition();
|
||||
}
|
||||
|
||||
// Log that loading has begun
|
||||
$log.info([
|
||||
"Loading implementation ",
|
||||
implPath,
|
||||
" for extension ",
|
||||
extension.getLogName()
|
||||
].join(""));
|
||||
if (!extension.hasImplementationValue()) {
|
||||
// Log that loading has begun
|
||||
$log.info([
|
||||
"Loading implementation ",
|
||||
extension.getImplementationPath(),
|
||||
" for extension ",
|
||||
extension.getLogName()
|
||||
].join(""));
|
||||
}
|
||||
|
||||
return implPromise.then(attachDefinition, handleError);
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ define(
|
||||
describe("The logging level handler", function () {
|
||||
var mockLog,
|
||||
mockApp,
|
||||
mockProvide,
|
||||
mockDelegate,
|
||||
mockMethods;
|
||||
|
||||
@ -61,8 +60,7 @@ define(
|
||||
beforeEach(function () {
|
||||
mockMethods = jasmine.createSpyObj("levels", LOG_METHODS);
|
||||
mockLog = jasmine.createSpyObj('$log', LOG_METHODS);
|
||||
mockApp = jasmine.createSpyObj('app', ['config']);
|
||||
mockProvide = jasmine.createSpyObj('$provide', ['decorator']);
|
||||
mockApp = jasmine.createSpyObj('app', ['config', 'decorator']);
|
||||
mockDelegate = jasmine.createSpyObj('$delegate', LOG_METHODS);
|
||||
|
||||
LOG_METHODS.forEach(function (m) {
|
||||
@ -70,14 +68,11 @@ define(
|
||||
mockDelegate[m].andCallFake(mockMethods[m]);
|
||||
});
|
||||
|
||||
mockApp.config.andCallFake(function (callback) {
|
||||
callback(mockProvide);
|
||||
});
|
||||
|
||||
mockProvide.decorator.andCallFake(function (key, callback) {
|
||||
// Only $log should be configured in any case
|
||||
expect(key).toEqual('$log');
|
||||
callback(mockDelegate);
|
||||
mockApp.decorator.andCallFake(function (key, decoration) {
|
||||
// We only expect $log to be decorated
|
||||
if (key === '$log' && decoration[0] === '$delegate') {
|
||||
decoration[1](mockDelegate);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -34,6 +34,7 @@ define(
|
||||
mockCallback,
|
||||
mockHttp,
|
||||
mockLog,
|
||||
mockRegistry,
|
||||
testBundles;
|
||||
|
||||
// Used to wait for then-chain resolution;
|
||||
@ -53,7 +54,13 @@ define(
|
||||
mockCallback = jasmine.createSpy("callback");
|
||||
mockHttp = jasmine.createSpyObj("$http", ["get"]);
|
||||
mockLog = jasmine.createSpyObj("$log", ["error", "warn", "info", "debug"]);
|
||||
loader = new BundleLoader(mockHttp, mockLog);
|
||||
mockRegistry = jasmine.createSpyObj(
|
||||
'legacyRegistry',
|
||||
[ 'list', 'contains', 'get' ]
|
||||
);
|
||||
mockRegistry.list.andReturn([]);
|
||||
mockRegistry.contains.andReturn(false);
|
||||
loader = new BundleLoader(mockHttp, mockLog, mockRegistry);
|
||||
});
|
||||
|
||||
it("accepts a JSON file name and loads all bundles", function () {
|
||||
|
@ -1,41 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"implementation": "IdentityAggregator.js",
|
||||
"type": "aggregator",
|
||||
"provides": "identityService",
|
||||
"depends": [ "$q" ]
|
||||
},
|
||||
{
|
||||
"implementation": "IdentityProvider.js",
|
||||
"type": "provider",
|
||||
"provides": "identityService",
|
||||
"depends": [ "$q" ],
|
||||
"priority": "fallback"
|
||||
},
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "creationService",
|
||||
"implementation": "IdentityCreationDecorator.js",
|
||||
"depends": [ "identityService" ]
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "IdentityIndicator.js",
|
||||
"depends": [ "identityService" ]
|
||||
}
|
||||
],
|
||||
"types": [
|
||||
{
|
||||
"properties": [
|
||||
{
|
||||
"key": "creator",
|
||||
"name": "Creator"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "aggregator",
|
||||
"depends": [ "$q" ],
|
||||
"implementation": "PersistenceAggregator.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
14
platform/persistence/cache/bundle.json
vendored
14
platform/persistence/cache/bundle.json
vendored
@ -1,14 +0,0 @@
|
||||
{
|
||||
"name": "Persistence cache",
|
||||
"description": "Cache to improve availability of persisted objects.",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "decorator",
|
||||
"implementation": "CachingPersistenceDecorator.js",
|
||||
"depends": [ "PERSISTENCE_SPACE" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
{
|
||||
"name": "Couch Persistence",
|
||||
"description": "Adapter to read and write objects using a CouchDB instance.",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "provider",
|
||||
"implementation": "CouchPersistenceProvider.js",
|
||||
"depends": [ "$http", "$q", "PERSISTENCE_SPACE", "COUCHDB_PATH" ]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_SPACE",
|
||||
"value": "mct"
|
||||
},
|
||||
{
|
||||
"key": "COUCHDB_PATH",
|
||||
"value": "/couch/openmct"
|
||||
},
|
||||
{
|
||||
"key": "COUCHDB_INDICATOR_INTERVAL",
|
||||
"value": 15000
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "CouchIndicator.js",
|
||||
"depends": [
|
||||
"$http",
|
||||
"$interval",
|
||||
"COUCHDB_PATH",
|
||||
"COUCHDB_INDICATOR_INTERVAL"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
{
|
||||
"name": "ElasticSearch Persistence",
|
||||
"description": "Adapter to read and write objects using an ElasticSearch instance.",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "provider",
|
||||
"implementation": "ElasticPersistenceProvider.js",
|
||||
"depends": [ "$http", "$q", "PERSISTENCE_SPACE", "ELASTIC_ROOT", "ELASTIC_PATH" ]
|
||||
},
|
||||
{
|
||||
"provides": "searchService",
|
||||
"type": "provider",
|
||||
"implementation": "ElasticSearchProvider.js",
|
||||
"depends": [ "$http", "ELASTIC_ROOT" ]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_SPACE",
|
||||
"value": "mct"
|
||||
},
|
||||
{
|
||||
"key": "ELASTIC_ROOT",
|
||||
"value": "http://localhost:9200",
|
||||
"priority": "fallback"
|
||||
},
|
||||
{
|
||||
"key": "ELASTIC_PATH",
|
||||
"value": "mct/domain_object",
|
||||
"priority": "fallback"
|
||||
},
|
||||
{
|
||||
"key": "ELASTIC_INDICATOR_INTERVAL",
|
||||
"value": 15000,
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "ElasticIndicator.js",
|
||||
"depends": [
|
||||
"$http",
|
||||
"$interval",
|
||||
"ELASTIC_ROOT",
|
||||
"ELASTIC_INDICATOR_INTERVAL"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "persistenceService",
|
||||
"type": "provider",
|
||||
"implementation": "LocalStoragePersistenceProvider.js",
|
||||
"depends": [ "$q", "PERSISTENCE_SPACE" ]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_SPACE",
|
||||
"value": "mct"
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": "LocalStorageIndicator.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "capabilityService",
|
||||
"implementation": "QueuingPersistenceCapabilityDecorator.js",
|
||||
"depends": [ "persistenceQueue" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "persistenceQueue",
|
||||
"implementation": "PersistenceQueue.js",
|
||||
"depends": [
|
||||
"$q",
|
||||
"$timeout",
|
||||
"dialogService",
|
||||
"PERSISTENCE_QUEUE_DELAY"
|
||||
]
|
||||
}
|
||||
],
|
||||
"constants": [
|
||||
{
|
||||
"key": "PERSISTENCE_QUEUE_DELAY",
|
||||
"value": 5
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "persistence-failure-dialog",
|
||||
"templateUrl": "templates/persistence-failure-dialog.html"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "PersistenceFailureController",
|
||||
"implementation": "PersistenceFailureController.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
{
|
||||
"name": "Policy Service",
|
||||
"description": "Provides support for extension-driven decisions.",
|
||||
"sources": "src",
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "actionService",
|
||||
"implementation": "PolicyActionDecorator.js",
|
||||
"depends": [ "policyService" ]
|
||||
},
|
||||
{
|
||||
"type": "decorator",
|
||||
"provides": "viewService",
|
||||
"implementation": "PolicyViewDecorator.js",
|
||||
"depends": [ "policyService" ]
|
||||
},
|
||||
{
|
||||
"type": "provider",
|
||||
"provides": "policyService",
|
||||
"implementation": "PolicyProvider.js",
|
||||
"depends": [ "policies[]" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"directives": [
|
||||
{
|
||||
"key": "mctInclude",
|
||||
"implementation": "MCTInclude.js",
|
||||
"depends": [ "templates[]", "templateLinker" ]
|
||||
},
|
||||
{
|
||||
"key": "mctRepresentation",
|
||||
"implementation": "MCTRepresentation.js",
|
||||
"depends": [ "representations[]", "views[]", "representers[]", "$q", "templateLinker", "$log" ]
|
||||
}
|
||||
],
|
||||
"gestures": [
|
||||
{
|
||||
"key": "drag",
|
||||
"implementation": "gestures/DragGesture.js",
|
||||
"depends": [ "$log", "dndService" ]
|
||||
},
|
||||
{
|
||||
"key": "drop",
|
||||
"implementation": "gestures/DropGesture.js",
|
||||
"depends": [ "dndService", "$q", "navigationService",
|
||||
"objectService", "instantiate", "typeService" ]
|
||||
},
|
||||
{
|
||||
"key": "menu",
|
||||
"implementation": "gestures/ContextMenuGesture.js",
|
||||
"depends": ["$timeout", "$parse", "agentService",
|
||||
"navigationService"]
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "gestureService",
|
||||
"type": "provider",
|
||||
"implementation": "gestures/GestureProvider.js",
|
||||
"depends": ["gestures[]"]
|
||||
}
|
||||
],
|
||||
"representers": [
|
||||
{
|
||||
"implementation": "gestures/GestureRepresenter.js",
|
||||
"depends": [ "gestureService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "dndService",
|
||||
"implementation": "services/DndService.js",
|
||||
"depends": [ "$log" ]
|
||||
},
|
||||
{
|
||||
"key": "templateLinker",
|
||||
"implementation": "TemplateLinker.js",
|
||||
"depends": [ "$templateRequest", "$sce", "$compile", "$log" ],
|
||||
"comment": "For internal use by mct-include and mct-representation."
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"key": "menu",
|
||||
"implementation": "actions/ContextMenuAction.js",
|
||||
"depends": [
|
||||
"$compile",
|
||||
"$document",
|
||||
"$rootScope",
|
||||
"popupService",
|
||||
"agentService"
|
||||
]
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
{
|
||||
"priority": "mandatory",
|
||||
"implementation": "TemplatePrefetcher.js",
|
||||
"depends": [
|
||||
"templateLinker",
|
||||
"templates[]",
|
||||
"views[]",
|
||||
"representations[]",
|
||||
"controls[]",
|
||||
"containers[]"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
{
|
||||
"name": "Search",
|
||||
"description": "Allows the user to search through the file tree.",
|
||||
"extensions": {
|
||||
"constants": [
|
||||
{
|
||||
"key": "GENERIC_SEARCH_ROOTS",
|
||||
"value": [ "ROOT" ],
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "SearchController",
|
||||
"implementation": "controllers/SearchController.js",
|
||||
"depends": [ "$scope", "searchService" ]
|
||||
},
|
||||
{
|
||||
"key": "SearchMenuController",
|
||||
"implementation": "controllers/SearchMenuController.js",
|
||||
"depends": [ "$scope", "types[]" ]
|
||||
},
|
||||
{
|
||||
"key": "ClickAwayController",
|
||||
"implementation": "controllers/ClickAwayController.js",
|
||||
"depends": [ "$scope", "$document" ]
|
||||
}
|
||||
],
|
||||
"representations": [
|
||||
{
|
||||
"key": "search-item",
|
||||
"templateUrl": "templates/search-item.html"
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"key": "search",
|
||||
"templateUrl": "templates/search.html"
|
||||
},
|
||||
{
|
||||
"key": "search-menu",
|
||||
"templateUrl": "templates/search-menu.html"
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "searchService",
|
||||
"type": "provider",
|
||||
"implementation": "services/GenericSearchProvider.js",
|
||||
"depends": [
|
||||
"$q",
|
||||
"$log",
|
||||
"modelService",
|
||||
"workerService",
|
||||
"topic",
|
||||
"GENERIC_SEARCH_ROOTS"
|
||||
]
|
||||
},
|
||||
{
|
||||
"provides": "searchService",
|
||||
"type": "aggregator",
|
||||
"implementation": "services/SearchAggregator.js",
|
||||
"depends": [ "$q", "objectService" ]
|
||||
}
|
||||
],
|
||||
"workers": [
|
||||
{
|
||||
"key": "genericSearchWorker",
|
||||
"scriptUrl": "services/GenericSearchWorker.js"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
{
|
||||
"extensions": {
|
||||
"representers": [
|
||||
{
|
||||
"implementation": "StatusRepresenter.js"
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "status",
|
||||
"implementation": "StatusCapability.js",
|
||||
"depends": [ "statusService" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "statusService",
|
||||
"implementation": "StatusService.js",
|
||||
"depends": [ "topic" ]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
{
|
||||
"name": "Data bundle",
|
||||
"description": "Interfaces and infrastructure for real-time and historical data",
|
||||
"configuration": {
|
||||
"paths": {
|
||||
"moment": "moment.min"
|
||||
},
|
||||
"shim": {
|
||||
"moment": {
|
||||
"exports": "moment"
|
||||
}
|
||||
}
|
||||
},
|
||||
"extensions": {
|
||||
"components": [
|
||||
{
|
||||
"provides": "telemetryService",
|
||||
"type": "aggregator",
|
||||
"implementation": "TelemetryAggregator.js",
|
||||
"depends": [ "$q" ]
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "TelemetryController",
|
||||
"implementation": "TelemetryController.js",
|
||||
"depends": [ "$scope", "$q", "$timeout", "$log" ]
|
||||
}
|
||||
],
|
||||
"capabilities": [
|
||||
{
|
||||
"key": "telemetry",
|
||||
"implementation": "TelemetryCapability.js",
|
||||
"depends": [ "$injector", "$q", "$log" ]
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "telemetryFormatter",
|
||||
"implementation": "TelemetryFormatter.js",
|
||||
"depends": [ "formatService", "DEFAULT_TIME_FORMAT" ]
|
||||
},
|
||||
{
|
||||
"key": "telemetrySubscriber",
|
||||
"implementation": "TelemetrySubscriber.js",
|
||||
"depends": [ "$q", "$timeout" ]
|
||||
},
|
||||
{
|
||||
"key": "telemetryHandler",
|
||||
"implementation": "TelemetryHandler.js",
|
||||
"depends": [ "$q", "telemetrySubscriber" ]
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"name": "Moment.js",
|
||||
"version": "2.7.0",
|
||||
"author": "Tim Wood, Iskren Chernev, Moment.js contributors",
|
||||
"description": "Time/date parsing/formatting",
|
||||
"website": "http://momentjs.com",
|
||||
"copyright": "Copyright (c) 2011-2014 Tim Wood, Iskren Chernev, Moment.js contributors",
|
||||
"license": "license-mit",
|
||||
"link": "https://raw.githubusercontent.com/moment/moment/develop/LICENSE"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
67
pom.xml
67
pom.xml
@ -33,6 +33,7 @@
|
||||
<directory>.</directory>
|
||||
<includes>
|
||||
<include>index.html</include>
|
||||
<include>main.js</include>
|
||||
<include>*.json</include>
|
||||
<include>**/src/**/*</include>
|
||||
<include>**/res/**/*</include>
|
||||
@ -80,52 +81,36 @@
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Get PhantomJS plugin -->
|
||||
<!-- Run specs using npm -->
|
||||
<plugin>
|
||||
<groupId>com.github.klieber</groupId>
|
||||
<artifactId>phantomjs-maven-plugin</artifactId>
|
||||
<version>0.2.1</version>
|
||||
<groupId>com.github.eirslett</groupId>
|
||||
<artifactId>frontend-maven-plugin</artifactId>
|
||||
<version>0.0.26</version>
|
||||
<configuration>
|
||||
<installDirectory>target</installDirectory>
|
||||
<nodeVersion>v0.12.2</nodeVersion>
|
||||
<npmVersion>2.7.6</npmVersion>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install node and npm</id>
|
||||
<goals>
|
||||
<goal>install</goal>
|
||||
<goal>install-node-and-npm</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>javascript tests</id>
|
||||
<goals>
|
||||
<goal>karma</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<version>1.9.2</version>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Run specs -->
|
||||
<!-- https://github.com/detro/phantomjs-jasminexml-example -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.1</version>
|
||||
<executions>
|
||||
|
||||
<execution>
|
||||
<id>Jasmine Specs</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>exec</goal>
|
||||
</goals>
|
||||
|
||||
<configuration>
|
||||
<workingDirectory>.</workingDirectory>
|
||||
<arguments>
|
||||
<argument>platform/framework/test/lib/run_jasmine_test.coffee</argument>
|
||||
<argument>test.html</argument>
|
||||
<argument>${project.build.directory}/platform-test-results.html</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
</executions>
|
||||
<configuration>
|
||||
<executable>${phantomjs.binary}</executable>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
|
||||
@ -162,9 +147,11 @@
|
||||
<sourceJsFolder>${basedir}</sourceJsFolder>
|
||||
<excludes>
|
||||
<exclude>**/lib/**</exclude>
|
||||
<exclude>app.js</exclude>
|
||||
<exclude>*.js</exclude>
|
||||
<exclude>node_modules/**/*</exclude>
|
||||
<exclude>protractor/**/*</exclude>
|
||||
<exclude>target/**/*</exclude>
|
||||
<exclude>scripts/**/*</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
<executions>
|
||||
|
48
src/BundleRegistry.js
Normal file
48
src/BundleRegistry.js
Normal file
@ -0,0 +1,48 @@
|
||||
/*****************************************************************************
|
||||
* 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';
|
||||
|
||||
function BundleRegistry() {
|
||||
this.bundles = {};
|
||||
}
|
||||
|
||||
BundleRegistry.prototype.register = function (path, definition) {
|
||||
this.bundles[path] = definition;
|
||||
};
|
||||
|
||||
BundleRegistry.prototype.contains = function (path) {
|
||||
return !!this.bundles[path];
|
||||
};
|
||||
|
||||
BundleRegistry.prototype.get = function (path) {
|
||||
return this.bundles[path];
|
||||
};
|
||||
|
||||
BundleRegistry.prototype.list = function () {
|
||||
return Object.keys(this.bundles);
|
||||
};
|
||||
|
||||
return BundleRegistry;
|
||||
});
|
75
src/BundleRegistrySpec.js
Normal file
75
src/BundleRegistrySpec.js
Normal file
@ -0,0 +1,75 @@
|
||||
/*****************************************************************************
|
||||
* 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,runs,jasmine*/
|
||||
|
||||
define(['./BundleRegistry'], function (BundleRegistry) {
|
||||
'use strict';
|
||||
|
||||
describe("BundleRegistry", function () {
|
||||
var testPath,
|
||||
bundleRegistry;
|
||||
|
||||
beforeEach(function () {
|
||||
testPath = 'some/bundle';
|
||||
bundleRegistry = new BundleRegistry();
|
||||
});
|
||||
|
||||
it("initially lists no bundles", function () {
|
||||
expect(bundleRegistry.list()).toEqual([]);
|
||||
});
|
||||
|
||||
it("initially contains no bundles", function () {
|
||||
expect(bundleRegistry.contains(testPath))
|
||||
.toBe(false);
|
||||
});
|
||||
|
||||
it("initially provides no bundles", function () {
|
||||
expect(bundleRegistry.get(testPath))
|
||||
.toBeUndefined();
|
||||
});
|
||||
|
||||
describe("when a bundle has been registered", function () {
|
||||
var testBundleDef;
|
||||
|
||||
beforeEach(function () {
|
||||
testBundleDef = { someKey: "some value" };
|
||||
bundleRegistry.register(testPath, testBundleDef);
|
||||
});
|
||||
|
||||
it("lists registered bundles", function () {
|
||||
expect(bundleRegistry.list()).toEqual([testPath]);
|
||||
});
|
||||
|
||||
it("contains registered bundles", function () {
|
||||
expect(bundleRegistry.contains(testPath))
|
||||
.toBe(true);
|
||||
});
|
||||
|
||||
it("provides registered bundles", function () {
|
||||
expect(bundleRegistry.get(testPath))
|
||||
.toBe(testBundleDef);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
27
src/legacyRegistry.js
Normal file
27
src/legacyRegistry.js
Normal file
@ -0,0 +1,27 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
* Open MCT Web includes source code licensed under additional open source
|
||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
/*global define, window, requirejs*/
|
||||
|
||||
define(['src/BundleRegistry'], function (BundleRegistry) {
|
||||
'use strict';
|
||||
return new BundleRegistry();
|
||||
});
|
35
src/legacyRegistrySpec.js
Normal file
35
src/legacyRegistrySpec.js
Normal file
@ -0,0 +1,35 @@
|
||||
/*****************************************************************************
|
||||
* 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,runs,jasmine*/
|
||||
|
||||
define([
|
||||
'./legacyRegistry',
|
||||
'./BundleRegistry'
|
||||
], function (legacyRegistry, BundleRegistry) {
|
||||
'use strict';
|
||||
|
||||
describe("legacyRegistry", function () {
|
||||
it("is a BundleRegistry", function () {
|
||||
expect(legacyRegistry instanceof BundleRegistry).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
10
test-main.js
10
test-main.js
@ -44,15 +44,7 @@ require.config({
|
||||
|
||||
paths: {
|
||||
'es6-promise': 'platform/framework/lib/es6-promise-2.0.0.min',
|
||||
'moment': 'platform/telemetry/lib/moment.min',
|
||||
'moment-duration-format': 'platform/features/clock/lib/moment-duration-format',
|
||||
'uuid': 'platform/core/lib/uuid'
|
||||
},
|
||||
|
||||
shim: {
|
||||
'moment-duration-format': {
|
||||
deps: [ 'moment' ]
|
||||
}
|
||||
'moment': 'platform/telemetry/lib/moment.min'
|
||||
},
|
||||
|
||||
// dynamically load all test files
|
||||
|
Loading…
x
Reference in New Issue
Block a user