mirror of
https://github.com/nasa/openmct.git
synced 2025-06-19 23:53:49 +00:00
Build refactor to webpack (#2139)
* Move to webpack build * Use webpack for building openmct. Move SCSS to one folder and load all core css up front. Remove bower, begin removing gulp in favor of npm run. * Uses eslint instead of jshint and jscs. Merge style checking rules into .eshintrc.js, carrying over core parts of crockford style and our adaptations. Current code base fails to pass the linter, want to separate linter changes from fixes to linting rules. * Support for Vue SFC with example * Remove outdated examples * Use HTML loader for html (supports relative imports of resources e.g. images) and raw-loader for when javascript must be loaded as text.
This commit is contained in:
committed by
Andrew Henry
parent
9582fb2b06
commit
0d53898af9
@ -11,24 +11,20 @@ jobs:
|
|||||||
name: Update npm
|
name: Update npm
|
||||||
command: 'sudo npm install -g npm@latest'
|
command: 'sudo npm install -g npm@latest'
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: dependency-cache-{{ checksum "package.json" }}-{{ checksum "bower.json" }}
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
- run:
|
- run:
|
||||||
name: Installing dependencies (npm install)
|
name: Installing dependencies (npm install)
|
||||||
command: npm install
|
command: npm install
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: dependency-cache-{{ checksum "package.json" }}-{{ checksum "bower.json" }}
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
paths:
|
paths:
|
||||||
- node_modules
|
- node_modules
|
||||||
- bower_components
|
|
||||||
- run:
|
- run:
|
||||||
name: npm run test
|
name: npm run test
|
||||||
command: npm run test
|
command: npm run test
|
||||||
- run:
|
- run:
|
||||||
name: npm run lint
|
name: npm run lint
|
||||||
command: npm run lint
|
command: npm run lint
|
||||||
- run:
|
|
||||||
name: npm run checkstyle
|
|
||||||
command: npm run checkstyle
|
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: dist
|
path: dist
|
||||||
prefix: dist
|
prefix: dist
|
||||||
|
79
.eslintrc.js
Normal file
79
.eslintrc.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
module.exports = {
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es6": true,
|
||||||
|
"jasmine": true,
|
||||||
|
"amd": true
|
||||||
|
},
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"allowImportExportEverywhere": true,
|
||||||
|
"ecmaVersion": 2015,
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"impliedStrict": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"no-bitwise": "error",
|
||||||
|
"curly": "error",
|
||||||
|
"eqeqeq": "error",
|
||||||
|
"guard-for-in": "error",
|
||||||
|
"no-extend-native": "error",
|
||||||
|
"no-inner-declarations": "off",
|
||||||
|
"no-use-before-define": ["error", "nofunc"],
|
||||||
|
"no-caller": "error",
|
||||||
|
"no-sequences": "error",
|
||||||
|
"no-irregular-whitespace": "error",
|
||||||
|
"no-new": "error",
|
||||||
|
"no-shadow": "error",
|
||||||
|
"no-undef": "error",
|
||||||
|
"no-unused-vars": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"vars": "all",
|
||||||
|
"args": "none"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"no-console": "off",
|
||||||
|
"no-trailing-spaces": "error",
|
||||||
|
"space-before-function-paren": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"anonymous": "always",
|
||||||
|
"asyncArrow": "always",
|
||||||
|
"named": "never",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"array-bracket-spacing": "error",
|
||||||
|
"space-in-parens": "error",
|
||||||
|
"space-before-blocks": "error",
|
||||||
|
"comma-dangle": "error",
|
||||||
|
"eol-last": "error",
|
||||||
|
"new-cap": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"capIsNew": false,
|
||||||
|
"properties": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dot-notation": "error",
|
||||||
|
"indent": ["error", 4]
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["*Spec.js"],
|
||||||
|
"rules": {
|
||||||
|
"no-unused-vars": [
|
||||||
|
"warn",
|
||||||
|
{
|
||||||
|
"vars": "all",
|
||||||
|
"args": "none",
|
||||||
|
"varsIgnorePattern": "controller",
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
5
.jscsrc
5
.jscsrc
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"preset": "crockford",
|
|
||||||
"requireMultipleVarDecl": false,
|
|
||||||
"requireVarDeclFirst": false
|
|
||||||
}
|
|
26
.jshintrc
26
.jshintrc
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"bitwise": true,
|
|
||||||
"browser": true,
|
|
||||||
"curly": true,
|
|
||||||
"eqeqeq": true,
|
|
||||||
"forin": true,
|
|
||||||
"freeze": true,
|
|
||||||
"funcscope": false,
|
|
||||||
"futurehostile": true,
|
|
||||||
"latedef": true,
|
|
||||||
"noarg": true,
|
|
||||||
"nocomma": true,
|
|
||||||
"nonbsp": true,
|
|
||||||
"nonew": true,
|
|
||||||
"predef": [
|
|
||||||
"define",
|
|
||||||
"Promise",
|
|
||||||
"WeakMap",
|
|
||||||
"Map"
|
|
||||||
],
|
|
||||||
"shadow": "outer",
|
|
||||||
"strict": "implied",
|
|
||||||
"undef": true,
|
|
||||||
"unused": "vars",
|
|
||||||
"latedef": "nofunc"
|
|
||||||
}
|
|
28
README.md
28
README.md
@ -84,7 +84,6 @@ Documentation will be generated in `target/docs`.
|
|||||||
## Deploying Open MCT
|
## Deploying Open MCT
|
||||||
|
|
||||||
Open MCT is built using [`npm`](http://npmjs.com/)
|
Open MCT is built using [`npm`](http://npmjs.com/)
|
||||||
and [`gulp`](http://gulpjs.com/).
|
|
||||||
|
|
||||||
To build Open MCT for deployment:
|
To build Open MCT for deployment:
|
||||||
|
|
||||||
@ -94,32 +93,13 @@ This will compile and minify JavaScript sources, as well as copy over assets.
|
|||||||
The contents of the `dist` folder will contain a runnable Open MCT
|
The contents of the `dist` folder will contain a runnable Open MCT
|
||||||
instance (e.g. by starting an HTTP server in that directory), including:
|
instance (e.g. by starting an HTTP server in that directory), including:
|
||||||
|
|
||||||
* A `main.js` file containing Open MCT source code.
|
* `openmct.js` - Open MCT source code.
|
||||||
* Various assets in the `example` and `platform` directories.
|
* `openmct.css` - Basic styles to load to prevent a FOUC.
|
||||||
* An `index.html` that runs Open MCT in its default configuration.
|
* `index.html`, an example to run Open MCT in the basic configuration.
|
||||||
|
|
||||||
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
|
|
||||||
|
|
||||||
## Bundles
|
|
||||||
|
|
||||||
A bundle is a group of software components (including source code, declared
|
|
||||||
as AMD modules, as well as resources such as images and HTML templates)
|
|
||||||
that is intended to be added or removed as a single unit. A plug-in for
|
|
||||||
Open MCT will be expressed as a bundle; platform components are also
|
|
||||||
expressed as bundles.
|
|
||||||
|
|
||||||
A bundle is also just a directory which contains a file `bundle.json`,
|
|
||||||
which declares its contents.
|
|
||||||
|
|
||||||
The file `bundles.json` (note the plural), at the top level of the
|
|
||||||
repository, is a JSON file containing an array of all bundles (expressed as
|
|
||||||
directory names) to include in a running instance of Open MCT. Adding or
|
|
||||||
removing paths from this list will add or remove bundles from the running
|
|
||||||
application.
|
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
Tests are written for [Jasmine 1.3](http://jasmine.github.io/1.3/introduction.html)
|
Tests are written for [Jasmine 3](http://jasmine.github.io/)
|
||||||
and run by [Karma](http://karma-runner.github.io). To run:
|
and run by [Karma](http://karma-runner.github.io). To run:
|
||||||
|
|
||||||
`npm test`
|
`npm test`
|
||||||
|
116
app.js
116
app.js
@ -7,79 +7,57 @@
|
|||||||
* node app.js [options]
|
* node app.js [options]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var BUNDLE_FILE = 'bundles.json',
|
const options = require('minimist')(process.argv.slice(2));
|
||||||
options = require('minimist')(process.argv.slice(2)),
|
const express = require('express');
|
||||||
express = require('express'),
|
const app = express();
|
||||||
app = express(),
|
const fs = require('fs');
|
||||||
fs = require('fs'),
|
const request = require('request');
|
||||||
request = require('request');
|
|
||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
options.port = options.port || options.p || 8080;
|
options.port = options.port || options.p || 8080;
|
||||||
options.host = options.host || options.h || 'localhost'
|
options.host = options.host || options.h || 'localhost'
|
||||||
options.directory = options.directory || options.D || '.';
|
options.directory = options.directory || options.D || '.';
|
||||||
['include', 'exclude', 'i', 'x'].forEach(function (opt) {
|
|
||||||
options[opt] = options[opt] || [];
|
|
||||||
// Make sure includes/excludes always end up as arrays
|
|
||||||
options[opt] = Array.isArray(options[opt]) ?
|
|
||||||
options[opt] : [options[opt]];
|
|
||||||
});
|
|
||||||
options.include = options.include.concat(options.i);
|
|
||||||
options.exclude = options.exclude.concat(options.x);
|
|
||||||
|
|
||||||
// Show command line options
|
// Show command line options
|
||||||
if (options.help || options.h) {
|
if (options.help || options.h) {
|
||||||
console.log("\nUsage: node app.js [options]\n");
|
console.log("\nUsage: node app.js [options]\n");
|
||||||
console.log("Options:");
|
console.log("Options:");
|
||||||
console.log(" --help, -h Show this message.");
|
console.log(" --help, -h Show this message.");
|
||||||
console.log(" --port, -p <number> Specify port.");
|
console.log(" --port, -p <number> Specify port.");
|
||||||
console.log(" --include, -i <bundle> Include the specified bundle.");
|
console.log(" --directory, -D <bundle> Serve files from specified directory.");
|
||||||
console.log(" --exclude, -x <bundle> Exclude the specified bundle.");
|
console.log("");
|
||||||
console.log(" --directory, -D <bundle> Serve files from specified directory.");
|
process.exit(0);
|
||||||
console.log("");
|
}
|
||||||
process.exit(0);
|
|
||||||
|
app.disable('x-powered-by');
|
||||||
|
|
||||||
|
app.use('/proxyUrl', function proxyRequest(req, res, next) {
|
||||||
|
console.log('Proxying request to: ', req.query.url);
|
||||||
|
req.pipe(request({
|
||||||
|
url: req.query.url,
|
||||||
|
strictSSL: false
|
||||||
|
}).on('error', next)).pipe(res);
|
||||||
|
});
|
||||||
|
|
||||||
|
const webpack = require('webpack');
|
||||||
|
const webpackConfig = require('./webpack.config.js');
|
||||||
|
const compiler = webpack(webpackConfig);
|
||||||
|
const webpackDevRoute = require('webpack-dev-middleware')(
|
||||||
|
compiler, {
|
||||||
|
publicPath: '/dist',
|
||||||
|
logLevel: 'warn'
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
app.disable('x-powered-by');
|
app.use(webpackDevRoute);
|
||||||
|
|
||||||
// Override bundles.json for HTTP requests
|
// Expose index.html for development users.
|
||||||
app.use('/' + BUNDLE_FILE, function (req, res) {
|
app.get('/', function (req, res) {
|
||||||
var bundles;
|
fs.createReadStream('index.html').pipe(res);
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
// Finally, open the HTTP server and log the instance to the console
|
||||||
bundles = JSON.parse(fs.readFileSync(BUNDLE_FILE, 'utf8'));
|
app.listen(options.port, options.host, function() {
|
||||||
} catch (e) {
|
console.log('Open MCT application running at %s:%s', options.host, options.port)
|
||||||
bundles = [];
|
});
|
||||||
}
|
|
||||||
|
|
||||||
// Handle command line inclusions/exclusions
|
|
||||||
bundles = bundles.concat(options.include);
|
|
||||||
bundles = bundles.filter(function (bundle) {
|
|
||||||
return options.exclude.indexOf(bundle) === -1;
|
|
||||||
});
|
|
||||||
bundles = bundles.filter(function (bundle, index) { // Uniquify
|
|
||||||
return bundles.indexOf(bundle) === index;
|
|
||||||
});
|
|
||||||
|
|
||||||
res.send(JSON.stringify(bundles));
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use('/proxyUrl', function proxyRequest(req, res, next) {
|
|
||||||
console.log('Proxying request to: ', req.query.url);
|
|
||||||
req.pipe(request({
|
|
||||||
url: req.query.url,
|
|
||||||
strictSSL: false
|
|
||||||
}).on('error', next)).pipe(res);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Expose everything else as static files
|
|
||||||
app.use(express['static'](options.directory));
|
|
||||||
|
|
||||||
// Finally, open the HTTP server and log the instance to the console
|
|
||||||
app.listen(options.port, options.host, function() {
|
|
||||||
console.log('Open MCT application running at %s:%s', options.host, options.port)
|
|
||||||
});
|
|
||||||
}());
|
|
||||||
|
27
bower.json
27
bower.json
@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "openmct",
|
|
||||||
"description": "The Open MCT core platform",
|
|
||||||
"main": "",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"moduleType": [],
|
|
||||||
"homepage": "http://nasa.github.io/openmct/",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"angular": "1.4.4",
|
|
||||||
"angular-route": "1.4.4",
|
|
||||||
"moment": "^2.11.1",
|
|
||||||
"moment-duration-format": "^1.3.0",
|
|
||||||
"requirejs": "~2.1.22",
|
|
||||||
"text": "requirejs-text#^2.0.14",
|
|
||||||
"es6-promise": "^3.3.0",
|
|
||||||
"screenfull": "^3.0.0",
|
|
||||||
"node-uuid": "^1.4.7",
|
|
||||||
"comma-separated-values": "^3.6.4",
|
|
||||||
"file-saver": "1.3.3",
|
|
||||||
"zepto": "^1.1.6",
|
|
||||||
"eventemitter3": "^1.2.0",
|
|
||||||
"lodash": "3.10.1",
|
|
||||||
"almond": "~0.3.2",
|
|
||||||
"moment-timezone": "^0.5.13"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
This bundle is intended to serve as an example of registering
|
|
||||||
extensions which are mapped directly to built-in Angular features.
|
|
||||||
|
|
||||||
These are:
|
|
||||||
* Controllers
|
|
||||||
* Directives
|
|
||||||
* Routes
|
|
||||||
* Services
|
|
@ -1,74 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define([
|
|
||||||
"./src/ExampleController",
|
|
||||||
"./src/ExampleDirective",
|
|
||||||
"./src/ExampleService",
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
ExampleController,
|
|
||||||
ExampleDirective,
|
|
||||||
ExampleService,
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
legacyRegistry.register("example/builtins", {
|
|
||||||
"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,
|
|
||||||
"depends": [
|
|
||||||
"$scope",
|
|
||||||
"exampleService"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"directives": [
|
|
||||||
{
|
|
||||||
"key": "exampleDirective",
|
|
||||||
"implementation": ExampleDirective,
|
|
||||||
"depends": [
|
|
||||||
"examples[]"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"routes": [
|
|
||||||
{
|
|
||||||
"templateUrl": "templates/example.html"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": [
|
|
||||||
{
|
|
||||||
"key": "exampleService",
|
|
||||||
"implementation": ExampleService
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,24 +0,0 @@
|
|||||||
<!--
|
|
||||||
Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
Administration. All rights reserved.
|
|
||||||
|
|
||||||
Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
"License"); you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
License for the specific language governing permissions and limitations
|
|
||||||
under the License.
|
|
||||||
|
|
||||||
Open MCT includes source code licensed under additional open source
|
|
||||||
licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
this source code distribution or the Licensing information page available
|
|
||||||
at runtime from the About dialog for additional information.
|
|
||||||
-->
|
|
||||||
<p>Hello, world! I am the default route.</p>
|
|
||||||
<p ng-controller="ExampleController">My controller has told me: "{{phrase}}"</p>
|
|
||||||
<span example-directive></span>
|
|
@ -1,42 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining ExampleController. Created by vwoeltje on 11/4/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function ExampleController($scope, exampleService) {
|
|
||||||
$scope.phrase = exampleService.getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
return ExampleController;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,66 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining ExampleDirective. Created by vwoeltje on 11/4/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var HAS_EXTENSIONS = "A directive loaded these message from " +
|
|
||||||
"example extensions.",
|
|
||||||
NO_EXTENSIONS = "A directive tried to load example extensions," +
|
|
||||||
" but found none.",
|
|
||||||
MESSAGE = "I heard this from my partial constructor.";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function ExampleDirective(examples) {
|
|
||||||
// Build up a template from example extensions
|
|
||||||
var template = examples.length > 0 ?
|
|
||||||
HAS_EXTENSIONS : NO_EXTENSIONS;
|
|
||||||
|
|
||||||
template += "<ul>";
|
|
||||||
examples.forEach(function (E) {
|
|
||||||
template += "<li>";
|
|
||||||
if (typeof E === 'function') {
|
|
||||||
template += (new E(MESSAGE)).getText();
|
|
||||||
} else {
|
|
||||||
template += E.text;
|
|
||||||
}
|
|
||||||
template += "</li>";
|
|
||||||
});
|
|
||||||
template += "</ul>";
|
|
||||||
|
|
||||||
return {
|
|
||||||
template: template
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return ExampleDirective;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,46 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining ExampleService. Created by vwoeltje on 11/4/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function ExampleService() {
|
|
||||||
return {
|
|
||||||
getMessage: function () {
|
|
||||||
return "I heard this from a service";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return ExampleService;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,82 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define([
|
|
||||||
"./src/SomeProvider",
|
|
||||||
"./src/SomeOtherProvider",
|
|
||||||
"./src/SomeDecorator",
|
|
||||||
"./src/SomeOtherDecorator",
|
|
||||||
"./src/SomeAggregator",
|
|
||||||
"./src/SomeOtherExample",
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
SomeProvider,
|
|
||||||
SomeOtherProvider,
|
|
||||||
SomeDecorator,
|
|
||||||
SomeOtherDecorator,
|
|
||||||
SomeAggregator,
|
|
||||||
SomeOtherExample,
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
legacyRegistry.register("example/composite", {
|
|
||||||
"extensions": {
|
|
||||||
"components": [
|
|
||||||
{
|
|
||||||
"implementation": SomeProvider,
|
|
||||||
"provides": "someService",
|
|
||||||
"type": "provider"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"implementation": SomeOtherProvider,
|
|
||||||
"provides": "someService",
|
|
||||||
"type": "provider"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"implementation": SomeDecorator,
|
|
||||||
"provides": "someService",
|
|
||||||
"type": "decorator"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"implementation": SomeOtherDecorator,
|
|
||||||
"provides": "someService",
|
|
||||||
"type": "decorator"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"implementation": SomeAggregator,
|
|
||||||
"provides": "someService",
|
|
||||||
"type": "aggregator"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"examples": [
|
|
||||||
{
|
|
||||||
"implementation": SomeOtherExample,
|
|
||||||
"depends": [
|
|
||||||
"someService"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,50 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeAggregator. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeAggregator(someProviders) {
|
|
||||||
return {
|
|
||||||
getMessages: function () {
|
|
||||||
return someProviders.map(function (provider) {
|
|
||||||
return provider.getMessages();
|
|
||||||
}).reduce(function (a, b) {
|
|
||||||
return a.concat(b);
|
|
||||||
}, []);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeAggregator;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,48 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeDecorator. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeDecorator(someProvider) {
|
|
||||||
return {
|
|
||||||
getMessages: function () {
|
|
||||||
return someProvider.getMessages().map(function (msg) {
|
|
||||||
return msg.toLocaleUpperCase();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeDecorator;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,48 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeOtherDecorator. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeOtherDecorator(someProvider) {
|
|
||||||
return {
|
|
||||||
getMessages: function () {
|
|
||||||
return someProvider.getMessages().map(function (msg) {
|
|
||||||
return msg + "...";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeOtherDecorator;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,46 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeOtherExample. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeOtherExample(someService) {
|
|
||||||
return {
|
|
||||||
getText: function () {
|
|
||||||
return someService.getMessages().join(" | ");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeOtherExample;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,48 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeOtherProvider. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeOtherProvider() {
|
|
||||||
return {
|
|
||||||
getMessages: function () {
|
|
||||||
return [
|
|
||||||
"I am a message from some other provider."
|
|
||||||
];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeOtherProvider;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,48 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeProvider. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeProvider() {
|
|
||||||
return {
|
|
||||||
getMessages: function () {
|
|
||||||
return [
|
|
||||||
"I am a message from some provider."
|
|
||||||
];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeProvider;
|
|
||||||
}
|
|
||||||
);
|
|
@ -27,12 +27,11 @@
|
|||||||
* Modified by shale on 06/23/2015.
|
* Modified by shale on 06/23/2015.
|
||||||
*/
|
*/
|
||||||
define(
|
define(
|
||||||
['text!../data/transcript.json'],
|
['../data/transcript.json'],
|
||||||
function (transcript) {
|
function (messages) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var firstObservedTime = Date.now(),
|
var firstObservedTime = Date.now();
|
||||||
messages = JSON.parse(transcript);
|
|
||||||
|
|
||||||
function EventTelemetry(request, interval) {
|
function EventTelemetry(request, interval) {
|
||||||
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define([
|
|
||||||
"./src/SomeExample",
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
SomeExample,
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
legacyRegistry.register("example/extensions", {
|
|
||||||
"name": "Custom Extensions Examples",
|
|
||||||
"description": "Example showing how to declare custom extensions.",
|
|
||||||
"sources": "src",
|
|
||||||
"extensions": {
|
|
||||||
"examples": [
|
|
||||||
{
|
|
||||||
"text": "I came from example/extensions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"implementation": SomeExample,
|
|
||||||
"depends": [
|
|
||||||
"exampleService"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,52 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define,Promise*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining SomeExample. Created by vwoeltje on 11/5/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function SomeExample(exampleService, message) {
|
|
||||||
return {
|
|
||||||
getText: function () {
|
|
||||||
return [
|
|
||||||
'"',
|
|
||||||
exampleService.getMessage(),
|
|
||||||
'" and "',
|
|
||||||
message,
|
|
||||||
'"'
|
|
||||||
].join("");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return SomeExample;
|
|
||||||
}
|
|
||||||
);
|
|
@ -21,7 +21,7 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
define([
|
define([
|
||||||
'text!./generatorWorker.js',
|
'raw-loader!./generatorWorker.js',
|
||||||
'uuid'
|
'uuid'
|
||||||
], function (
|
], function (
|
||||||
workerText,
|
workerText,
|
||||||
|
19
example/simpleVuePlugin/HelloWorld.vue
Normal file
19
example/simpleVuePlugin/HelloWorld.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<div class="example">{{ msg }}</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
msg: 'Hello world!'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.example {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
37
example/simpleVuePlugin/plugin.js
Normal file
37
example/simpleVuePlugin/plugin.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import Vue from 'Vue';
|
||||||
|
import HelloWorld from './HelloWorld.vue';
|
||||||
|
|
||||||
|
function SimpleVuePlugin () {
|
||||||
|
return function install(openmct) {
|
||||||
|
var views = (openmct.mainViews || openmct.objectViews);
|
||||||
|
|
||||||
|
openmct.types.addType('hello-world', {
|
||||||
|
name: 'Hello World',
|
||||||
|
description: 'An introduction object',
|
||||||
|
creatable: true
|
||||||
|
});
|
||||||
|
openmct.objectViews.addProvider({
|
||||||
|
name: "demo-provider",
|
||||||
|
key: "hello-world",
|
||||||
|
cssClass: "icon-packet",
|
||||||
|
canView: function (d) {
|
||||||
|
return d.type === 'hello-world';
|
||||||
|
},
|
||||||
|
view: function (domainObject) {
|
||||||
|
var vm;
|
||||||
|
return {
|
||||||
|
show: function (container) {
|
||||||
|
vm = new Vue(HelloWorld);
|
||||||
|
container.appendChild(vm.$mount().$el);
|
||||||
|
},
|
||||||
|
destroy: function (container) {
|
||||||
|
vm.$destroy();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SimpleVuePlugin
|
@ -1,10 +1,26 @@
|
|||||||
define([
|
define([
|
||||||
"./src/ExampleStyleGuideModelProvider",
|
"./src/ExampleStyleGuideModelProvider",
|
||||||
"./src/MCTExample",
|
"./src/MCTExample",
|
||||||
|
"./res/templates/intro.html",
|
||||||
|
"./res/templates/standards.html",
|
||||||
|
"./res/templates/colors.html",
|
||||||
|
"./res/templates/status.html",
|
||||||
|
"./res/templates/glyphs.html",
|
||||||
|
"./res/templates/controls.html",
|
||||||
|
"./res/templates/input.html",
|
||||||
|
"./res/templates/menus.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
ExampleStyleGuideModelProvider,
|
ExampleStyleGuideModelProvider,
|
||||||
MCTExample,
|
MCTExample,
|
||||||
|
introTemplate,
|
||||||
|
standardsTemplate,
|
||||||
|
colorsTemplate,
|
||||||
|
statusTemplate,
|
||||||
|
glyphsTemplate,
|
||||||
|
controlsTemplate,
|
||||||
|
inputTemplate,
|
||||||
|
menusTemplate,
|
||||||
legacyRegistry
|
legacyRegistry
|
||||||
) {
|
) {
|
||||||
legacyRegistry.register("example/styleguide", {
|
legacyRegistry.register("example/styleguide", {
|
||||||
@ -23,14 +39,14 @@ define([
|
|||||||
{ "key": "styleguide.menus", "name": "Menus", "cssClass": "icon-page", "description": "Context menus, dropdowns" }
|
{ "key": "styleguide.menus", "name": "Menus", "cssClass": "icon-page", "description": "Context menus, dropdowns" }
|
||||||
],
|
],
|
||||||
"views": [
|
"views": [
|
||||||
{ "key": "styleguide.intro", "type": "styleguide.intro", "templateUrl": "templates/intro.html", "editable": false },
|
{ "key": "styleguide.intro", "type": "styleguide.intro", "template": introTemplate, "editable": false },
|
||||||
{ "key": "styleguide.standards", "type": "styleguide.standards", "templateUrl": "templates/standards.html", "editable": false },
|
{ "key": "styleguide.standards", "type": "styleguide.standards", "template": standardsTemplate, "editable": false },
|
||||||
{ "key": "styleguide.colors", "type": "styleguide.colors", "templateUrl": "templates/colors.html", "editable": false },
|
{ "key": "styleguide.colors", "type": "styleguide.colors", "template": colorsTemplate, "editable": false },
|
||||||
{ "key": "styleguide.status", "type": "styleguide.status", "templateUrl": "templates/status.html", "editable": false },
|
{ "key": "styleguide.status", "type": "styleguide.status", "template": statusTemplate, "editable": false },
|
||||||
{ "key": "styleguide.glyphs", "type": "styleguide.glyphs", "templateUrl": "templates/glyphs.html", "editable": false },
|
{ "key": "styleguide.glyphs", "type": "styleguide.glyphs", "template": glyphsTemplate, "editable": false },
|
||||||
{ "key": "styleguide.controls", "type": "styleguide.controls", "templateUrl": "templates/controls.html", "editable": false },
|
{ "key": "styleguide.controls", "type": "styleguide.controls", "template": controlsTemplate, "editable": false },
|
||||||
{ "key": "styleguide.input", "type": "styleguide.input", "templateUrl": "templates/input.html", "editable": false },
|
{ "key": "styleguide.input", "type": "styleguide.input", "template": inputTemplate, "editable": false },
|
||||||
{ "key": "styleguide.menus", "type": "styleguide.menus", "templateUrl": "templates/menus.html", "editable": false }
|
{ "key": "styleguide.menus", "type": "styleguide.menus", "template": menusTemplate, "editable": false }
|
||||||
],
|
],
|
||||||
"roots": [
|
"roots": [
|
||||||
{
|
{
|
||||||
@ -85,16 +101,6 @@ define([
|
|||||||
"$q"
|
"$q"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"stylesheets": [
|
|
||||||
{
|
|
||||||
"stylesheetUrl": "css/style-guide-espresso.css",
|
|
||||||
"theme": "espresso"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"stylesheetUrl": "css/style-guide-snow.css",
|
|
||||||
"theme": "snow"
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<p>As you develop plugins for Open MCT, consider how a generalized component might be combined with others when designing to create a rich and powerful larger object, rather than adding a single monolithic, non-modular plugin. To solve a particular problem or allow a new feature in Open MCT, you may need to introduce more than just one new object type.</p>
|
<p>As you develop plugins for Open MCT, consider how a generalized component might be combined with others when designing to create a rich and powerful larger object, rather than adding a single monolithic, non-modular plugin. To solve a particular problem or allow a new feature in Open MCT, you may need to introduce more than just one new object type.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<img src="/example/styleguide/res/images/diagram-objects.svg" />
|
<img src="../images/diagram-objects.svg" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -48,7 +48,7 @@
|
|||||||
<p>The types of objects that a container can hold should be based on the purpose of the container and the views that it affords. For example, a Folder’s purpose is to allow a user to conceptually organize objects of all other types; a Folder must therefore be able to contain an object of any type.</p>
|
<p>The types of objects that a container can hold should be based on the purpose of the container and the views that it affords. For example, a Folder’s purpose is to allow a user to conceptually organize objects of all other types; a Folder must therefore be able to contain an object of any type.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<img src="/example/styleguide/res/images/diagram-containment.svg" />
|
<img src="../images/diagram-containment.svg" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -60,7 +60,7 @@
|
|||||||
<p>Views are simply different ways to view the content of a given object. For example, telemetry data could be viewed as a plot or a table. A clock can display its time in analog fashion or with digital numbers. In each view, all of the content is present; it’s just represented differently. When providing views for an object, all the content of the object should be present in each view.</p>
|
<p>Views are simply different ways to view the content of a given object. For example, telemetry data could be viewed as a plot or a table. A clock can display its time in analog fashion or with digital numbers. In each view, all of the content is present; it’s just represented differently. When providing views for an object, all the content of the object should be present in each view.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<img src="/example/styleguide/res/images/diagram-views.svg" />
|
<img src="../images/diagram-views.svg" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
define([
|
define([
|
||||||
'text!../res/templates/mct-example.html'
|
'../res/templates/mct-example.html'
|
||||||
], function (
|
], function (
|
||||||
MCTExampleTemplate
|
MCTExampleTemplate
|
||||||
) {
|
) {
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define([
|
|
||||||
"./src/ExampleTaxonomyModelProvider",
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
ExampleTaxonomyModelProvider,
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
legacyRegistry.register("example/taxonomy", {
|
|
||||||
"name": "Example taxonomy",
|
|
||||||
"description": "Example illustrating the addition of a static top-level hierarchy",
|
|
||||||
"extensions": {
|
|
||||||
"roots": [
|
|
||||||
{
|
|
||||||
"id": "exampleTaxonomy"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"models": [
|
|
||||||
{
|
|
||||||
"id": "exampleTaxonomy",
|
|
||||||
"model": {
|
|
||||||
"type": "folder",
|
|
||||||
"name": "Stub Subsystems",
|
|
||||||
"composition": [
|
|
||||||
"examplePacket0",
|
|
||||||
"examplePacket1",
|
|
||||||
"examplePacket2"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"components": [
|
|
||||||
{
|
|
||||||
"provides": "modelService",
|
|
||||||
"type": "provider",
|
|
||||||
"implementation": ExampleTaxonomyModelProvider,
|
|
||||||
"depends": [
|
|
||||||
"$q"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,69 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
function ExampleTaxonomyModelProvider($q) {
|
|
||||||
var models = {},
|
|
||||||
packetId,
|
|
||||||
telemetryId,
|
|
||||||
i,
|
|
||||||
j;
|
|
||||||
|
|
||||||
// Add some "subsystems"
|
|
||||||
for (i = 0; i < 3; i += 1) {
|
|
||||||
packetId = "examplePacket" + i;
|
|
||||||
|
|
||||||
models[packetId] = {
|
|
||||||
name: "Stub Subsystem " + (i + 1),
|
|
||||||
type: "telemetry.panel",
|
|
||||||
composition: []
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add some "telemetry points"
|
|
||||||
for (j = 0; j < 100 * (i + 1); j += 1) {
|
|
||||||
telemetryId = "exampleTelemetry" + j;
|
|
||||||
models[telemetryId] = {
|
|
||||||
name: "SWG" + i + "." + j,
|
|
||||||
type: "generator",
|
|
||||||
telemetry: {
|
|
||||||
period: 10 + i + j
|
|
||||||
}
|
|
||||||
};
|
|
||||||
models[packetId].composition.push(telemetryId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
getModels: function () {
|
|
||||||
return $q.when(models);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return ExampleTaxonomyModelProvider;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1 +0,0 @@
|
|||||||
Example of running a Web Worker using the `workerService`.
|
|
@ -1,52 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define([
|
|
||||||
"./src/FibonacciIndicator",
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
FibonacciIndicator,
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
legacyRegistry.register("example/worker", {
|
|
||||||
"extensions": {
|
|
||||||
"indicators": [
|
|
||||||
{
|
|
||||||
"implementation": FibonacciIndicator,
|
|
||||||
"depends": [
|
|
||||||
"workerService",
|
|
||||||
"$rootScope"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"workers": [
|
|
||||||
{
|
|
||||||
"key": "example.fibonacci",
|
|
||||||
"scriptUrl": "FibonacciWorker.js"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,67 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global define*/
|
|
||||||
|
|
||||||
define(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays Fibonacci numbers in the status area.
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function FibonacciIndicator(workerService, $rootScope) {
|
|
||||||
var latest,
|
|
||||||
counter = 0,
|
|
||||||
worker = workerService.run('example.fibonacci');
|
|
||||||
|
|
||||||
function requestNext() {
|
|
||||||
worker.postMessage([counter]);
|
|
||||||
counter += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleResponse(event) {
|
|
||||||
latest = event.data;
|
|
||||||
$rootScope.$apply();
|
|
||||||
requestNext();
|
|
||||||
}
|
|
||||||
|
|
||||||
worker.onmessage = handleResponse;
|
|
||||||
requestNext();
|
|
||||||
|
|
||||||
return {
|
|
||||||
getCssClass: function () {
|
|
||||||
return "icon-object-unknown";
|
|
||||||
},
|
|
||||||
getText: function () {
|
|
||||||
return "" + latest;
|
|
||||||
},
|
|
||||||
getDescription: function () {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return FibonacciIndicator;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,15 +0,0 @@
|
|||||||
/*global self*/
|
|
||||||
(function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// Calculate fibonacci numbers inefficiently.
|
|
||||||
// We can do this because we're on a background thread, and
|
|
||||||
// won't halt the UI.
|
|
||||||
function fib(n) {
|
|
||||||
return n < 2 ? n : (fib(n - 1) + fib(n - 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
self.onmessage = function (event) {
|
|
||||||
self.postMessage(fib(event.data));
|
|
||||||
};
|
|
||||||
}());
|
|
182
gulpfile.js
182
gulpfile.js
@ -1,182 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2017, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/*global require,__dirname*/
|
|
||||||
|
|
||||||
require("v8-compile-cache");
|
|
||||||
|
|
||||||
var gulp = require('gulp'),
|
|
||||||
sourcemaps = require('gulp-sourcemaps'),
|
|
||||||
path = require('path'),
|
|
||||||
fs = require('fs'),
|
|
||||||
git = require('git-rev-sync'),
|
|
||||||
moment = require('moment'),
|
|
||||||
project = require('./package.json'),
|
|
||||||
_ = require('lodash'),
|
|
||||||
paths = {
|
|
||||||
main: 'openmct.js',
|
|
||||||
dist: 'dist',
|
|
||||||
reports: 'dist/reports',
|
|
||||||
scss: ['./platform/**/*.scss', './example/**/*.scss'],
|
|
||||||
assets: [
|
|
||||||
'./{example,platform}/**/*.{css,css.map,png,svg,ico,woff,eot,ttf}'
|
|
||||||
],
|
|
||||||
scripts: [ 'openmct.js', 'platform/**/*.js', 'src/**/*.js' ],
|
|
||||||
specs: [ 'platform/**/*Spec.js', 'src/**/*Spec.js' ],
|
|
||||||
},
|
|
||||||
options = {
|
|
||||||
requirejsOptimize: {
|
|
||||||
name: 'bower_components/almond/almond.js',
|
|
||||||
include: paths.main.replace('.js', ''),
|
|
||||||
wrap: {
|
|
||||||
start: (function () {
|
|
||||||
var buildVariables = {
|
|
||||||
version: project.version,
|
|
||||||
timestamp: moment.utc(Date.now()).format(),
|
|
||||||
revision: fs.existsSync('.git') ? git.long() : 'Unknown',
|
|
||||||
branch: fs.existsSync('.git') ? git.branch() : 'Unknown'
|
|
||||||
};
|
|
||||||
return fs.readFileSync("src/start.frag", 'utf-8')
|
|
||||||
.replace(/@@(\w+)/g, function (match, key) {
|
|
||||||
return buildVariables[key];
|
|
||||||
});;
|
|
||||||
}()),
|
|
||||||
endFile: "src/end.frag"
|
|
||||||
},
|
|
||||||
optimize: 'uglify2',
|
|
||||||
uglify2: { output: { comments: /@preserve/ } },
|
|
||||||
mainConfigFile: paths.main,
|
|
||||||
wrapShim: true
|
|
||||||
},
|
|
||||||
karma: {
|
|
||||||
configFile: path.resolve(__dirname, 'karma.conf.js'),
|
|
||||||
singleRun: true
|
|
||||||
},
|
|
||||||
sass: {
|
|
||||||
sourceComments: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
|
||||||
options.requirejsOptimize.optimize = 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
gulp.task('scripts', function () {
|
|
||||||
var requirejsOptimize = require('gulp-requirejs-optimize');
|
|
||||||
|
|
||||||
return gulp.src(paths.main)
|
|
||||||
.pipe(sourcemaps.init())
|
|
||||||
.pipe(requirejsOptimize(options.requirejsOptimize))
|
|
||||||
.pipe(sourcemaps.write('.'))
|
|
||||||
.pipe(gulp.dest(paths.dist));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('test', function (done) {
|
|
||||||
var karma = require('karma');
|
|
||||||
new karma.Server(options.karma, done).start();
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('stylesheets', function () {
|
|
||||||
var sass = require('gulp-sass');
|
|
||||||
var rename = require('gulp-rename');
|
|
||||||
var bourbon = require('node-bourbon');
|
|
||||||
options.sass.includePaths = bourbon.includePaths;
|
|
||||||
|
|
||||||
return gulp.src(paths.scss, {base: '.'})
|
|
||||||
.pipe(sourcemaps.init())
|
|
||||||
.pipe(sass(options.sass).on('error', sass.logError))
|
|
||||||
.pipe(rename(function (file) {
|
|
||||||
file.dirname =
|
|
||||||
file.dirname.replace(path.sep + 'sass', path.sep + 'css');
|
|
||||||
return file;
|
|
||||||
}))
|
|
||||||
.pipe(sourcemaps.write('.'))
|
|
||||||
.pipe(gulp.dest(__dirname));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('lint', function () {
|
|
||||||
var jshint = require('gulp-jshint');
|
|
||||||
var merge = require('merge-stream');
|
|
||||||
|
|
||||||
var nonspecs = paths.specs.map(function (glob) {
|
|
||||||
return "!" + glob;
|
|
||||||
}),
|
|
||||||
scriptLint = gulp.src(paths.scripts.concat(nonspecs))
|
|
||||||
.pipe(jshint()),
|
|
||||||
specLint = gulp.src(paths.specs)
|
|
||||||
.pipe(jshint({ jasmine: true }));
|
|
||||||
|
|
||||||
return merge(scriptLint, specLint)
|
|
||||||
.pipe(jshint.reporter('gulp-jshint-html-reporter', {
|
|
||||||
filename: paths.reports + '/lint/jshint-report.html',
|
|
||||||
createMissingFolders : true
|
|
||||||
}))
|
|
||||||
.pipe(jshint.reporter('default'))
|
|
||||||
.pipe(jshint.reporter('fail'));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('checkstyle', function () {
|
|
||||||
var jscs = require('gulp-jscs');
|
|
||||||
var mkdirp = require('mkdirp');
|
|
||||||
var reportName = 'jscs-html-report.html';
|
|
||||||
var reportPath = path.resolve(paths.reports, 'checkstyle', reportName);
|
|
||||||
var moveReport = fs.rename.bind(fs, reportName, reportPath, _.noop);
|
|
||||||
|
|
||||||
mkdirp.sync(path.resolve(paths.reports, 'checkstyle'));
|
|
||||||
|
|
||||||
return gulp.src(paths.scripts)
|
|
||||||
.pipe(jscs())
|
|
||||||
.pipe(jscs.reporter())
|
|
||||||
.pipe(jscs.reporter('jscs-html-reporter')).on('finish', moveReport)
|
|
||||||
.pipe(jscs.reporter('fail'));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('fixstyle', function () {
|
|
||||||
var jscs = require('gulp-jscs');
|
|
||||||
|
|
||||||
return gulp.src(paths.scripts, { base: '.' })
|
|
||||||
.pipe(jscs({ fix: true }))
|
|
||||||
.pipe(gulp.dest('.'));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('assets', ['stylesheets'], function () {
|
|
||||||
return gulp.src(paths.assets)
|
|
||||||
.pipe(gulp.dest(paths.dist));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('watch', function () {
|
|
||||||
return gulp.watch(paths.scss, ['stylesheets', 'assets']);
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('serve', function () {
|
|
||||||
console.log('Running development server with all defaults');
|
|
||||||
var app = require('./app.js');
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('develop', ['serve', 'stylesheets', 'watch']);
|
|
||||||
|
|
||||||
gulp.task('install', [ 'assets', 'scripts' ]);
|
|
||||||
|
|
||||||
gulp.task('verify', [ 'lint', 'test', 'checkstyle' ]);
|
|
||||||
|
|
||||||
gulp.task('build', [ 'verify', 'install' ]);
|
|
107
index.html
107
index.html
@ -26,66 +26,61 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no">
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<title></title>
|
<title></title>
|
||||||
<script src="bower_components/requirejs/require.js"> </script>
|
<script src="dist/openmct.js"></script>
|
||||||
<script>
|
<link rel="stylesheet" href="dist/openmct.css">
|
||||||
var THIRTY_MINUTES = 30 * 60 * 1000;
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-32x32.png" sizes="32x32">
|
||||||
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-96x96.png" sizes="96x96">
|
||||||
require(['openmct'], function (openmct) {
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-16x16.png" sizes="16x16">
|
||||||
[
|
<link rel="shortcut icon" href="dist/favicons/favicon.ico">
|
||||||
'example/eventGenerator',
|
|
||||||
'example/styleguide'
|
|
||||||
].forEach(
|
|
||||||
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
|
||||||
);
|
|
||||||
openmct.install(openmct.plugins.MyItems());
|
|
||||||
openmct.install(openmct.plugins.LocalStorage());
|
|
||||||
openmct.install(openmct.plugins.Espresso());
|
|
||||||
openmct.install(openmct.plugins.Generator());
|
|
||||||
openmct.install(openmct.plugins.ExampleImagery());
|
|
||||||
openmct.install(openmct.plugins.UTCTimeSystem());
|
|
||||||
openmct.install(openmct.plugins.ImportExport());
|
|
||||||
openmct.install(openmct.plugins.AutoflowView({
|
|
||||||
type: "telemetry.panel"
|
|
||||||
}));
|
|
||||||
openmct.install(openmct.plugins.Conductor({
|
|
||||||
menuOptions: [
|
|
||||||
{
|
|
||||||
name: "Fixed",
|
|
||||||
timeSystem: 'utc',
|
|
||||||
bounds: {
|
|
||||||
start: Date.now() - THIRTY_MINUTES,
|
|
||||||
end: Date.now()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Realtime",
|
|
||||||
timeSystem: 'utc',
|
|
||||||
clock: 'local',
|
|
||||||
clockOffsets: {
|
|
||||||
start: -25 * 60 * 1000,
|
|
||||||
end: 5 * 60 * 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}));
|
|
||||||
openmct.install(openmct.plugins.SummaryWidget());
|
|
||||||
openmct.install(openmct.plugins.Notebook());
|
|
||||||
openmct.time.clock('local', {start: -THIRTY_MINUTES, end: 0});
|
|
||||||
openmct.time.timeSystem('utc');
|
|
||||||
openmct.start();
|
|
||||||
window.openmct = openmct;
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="platform/commonUI/general/res/css/startup-base.css">
|
|
||||||
<link rel="stylesheet" href="platform/commonUI/general/res/css/openmct.css">
|
|
||||||
<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">
|
|
||||||
<link rel="icon" type="image/png" href="platform/commonUI/general/res/images/favicons/favicon-16x16.png" sizes="16x16">
|
|
||||||
<link rel="shortcut icon" href="platform/commonUI/general/res/images/favicons/favicon.ico">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="l-splash-holder s-splash-holder">
|
<div class="l-splash-holder s-splash-holder">
|
||||||
<div class="l-splash s-splash"></div>
|
<div class="l-splash s-splash"></div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
<script>
|
||||||
|
var THIRTY_MINUTES = 30 * 60 * 1000;
|
||||||
|
[
|
||||||
|
'example/eventGenerator',
|
||||||
|
'example/styleguide'
|
||||||
|
].forEach(
|
||||||
|
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
||||||
|
);
|
||||||
|
openmct.install(openmct.plugins.MyItems());
|
||||||
|
openmct.install(openmct.plugins.LocalStorage());
|
||||||
|
openmct.install(openmct.plugins.Espresso());
|
||||||
|
openmct.install(openmct.plugins.Generator());
|
||||||
|
openmct.install(openmct.plugins.ExampleImagery());
|
||||||
|
openmct.install(openmct.plugins.UTCTimeSystem());
|
||||||
|
openmct.install(openmct.plugins.ImportExport());
|
||||||
|
openmct.install(openmct.plugins.AutoflowView({
|
||||||
|
type: "telemetry.panel"
|
||||||
|
}));
|
||||||
|
openmct.install(openmct.plugins.Conductor({
|
||||||
|
menuOptions: [
|
||||||
|
{
|
||||||
|
name: "Fixed",
|
||||||
|
timeSystem: 'utc',
|
||||||
|
bounds: {
|
||||||
|
start: Date.now() - THIRTY_MINUTES,
|
||||||
|
end: Date.now()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Realtime",
|
||||||
|
timeSystem: 'utc',
|
||||||
|
clock: 'local',
|
||||||
|
clockOffsets: {
|
||||||
|
start: -25 * 60 * 1000,
|
||||||
|
end: 5 * 60 * 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}));
|
||||||
|
openmct.install(openmct.plugins.SummaryWidget());
|
||||||
|
openmct.install(openmct.plugins.Notebook());
|
||||||
|
openmct.time.clock('local', {start: -THIRTY_MINUTES, end: 0});
|
||||||
|
openmct.time.timeSystem('utc');
|
||||||
|
openmct.start();
|
||||||
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
@ -21,70 +21,40 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/*global module,process*/
|
/*global module,process*/
|
||||||
module.exports = function(config) {
|
|
||||||
|
const devMode = process.env.NODE_ENV !== 'production';
|
||||||
|
|
||||||
|
module.exports = (config) => {
|
||||||
|
|
||||||
|
const webpackConfig = require('./webpack.config.js');
|
||||||
|
delete webpackConfig.output;
|
||||||
|
|
||||||
|
if (!devMode) {
|
||||||
|
webpackConfig.module.rules.push({
|
||||||
|
test: /\.js$/,
|
||||||
|
exclude: /node_modules|example/,
|
||||||
|
use: 'istanbul-instrumenter-loader'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
config.set({
|
config.set({
|
||||||
|
|
||||||
// Base path that will be used to resolve all file patterns.
|
|
||||||
basePath: '',
|
basePath: '',
|
||||||
|
frameworks: ['jasmine'],
|
||||||
// Frameworks to use
|
|
||||||
// Available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
|
||||||
frameworks: ['jasmine', 'requirejs'],
|
|
||||||
|
|
||||||
// List of files / patterns to load in the browser.
|
|
||||||
// By default, files are also included in a script tag.
|
|
||||||
files: [
|
files: [
|
||||||
{pattern: 'bower_components/**/*.js', included: false},
|
'platform/**/*Spec.js',
|
||||||
{pattern: 'node_modules/d3-*/**/*.js', included: false},
|
'src/**/*Spec.js'
|
||||||
{pattern: 'node_modules/vue/**/*.js', included: false},
|
|
||||||
{pattern: 'node_modules/printj/dist/*.js', included: false},
|
|
||||||
{pattern: 'src/**/*', included: false},
|
|
||||||
{pattern: 'node_modules/painterro/build/*.js', included: false},
|
|
||||||
{pattern: 'node_modules/html2canvas/dist/*', included: false},
|
|
||||||
{pattern: 'example/**/*.html', included: false},
|
|
||||||
{pattern: 'example/**/*.js', included: false},
|
|
||||||
{pattern: 'example/**/*.json', included: false},
|
|
||||||
{pattern: 'platform/**/*.js', included: false},
|
|
||||||
{pattern: 'warp/**/*.js', included: false},
|
|
||||||
{pattern: 'platform/**/*.html', included: false},
|
|
||||||
'test-main.js'
|
|
||||||
],
|
],
|
||||||
|
|
||||||
// List of files to exclude.
|
|
||||||
exclude: [
|
|
||||||
'platform/framework/src/Main.js'
|
|
||||||
],
|
|
||||||
|
|
||||||
// Preprocess matching files before serving them to the browser.
|
|
||||||
// https://npmjs.org/browse/keyword/karma-preprocessor
|
|
||||||
preprocessors: {
|
|
||||||
'src/**/!(*Spec).js': [ 'coverage' ],
|
|
||||||
'platform/**/src/**/!(*Spec).js': [ 'coverage' ]
|
|
||||||
},
|
|
||||||
|
|
||||||
// Test results reporter to use
|
|
||||||
// Possible values: 'dots', 'progress'
|
|
||||||
// Available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
|
||||||
reporters: ['progress', 'coverage', 'html'],
|
|
||||||
|
|
||||||
// Web server port.
|
|
||||||
port: 9876,
|
port: 9876,
|
||||||
|
reporters: [
|
||||||
// Wnable / disable colors in the output (reporters and logs).
|
'progress',
|
||||||
|
'coverage',
|
||||||
|
'html'
|
||||||
|
],
|
||||||
|
browsers: ['ChromeHeadless'],
|
||||||
colors: true,
|
colors: true,
|
||||||
|
|
||||||
logLevel: config.LOG_INFO,
|
logLevel: config.LOG_INFO,
|
||||||
|
|
||||||
// Rerun tests when any file changes.
|
|
||||||
autoWatch: true,
|
autoWatch: true,
|
||||||
|
|
||||||
// Specify browsers to run tests in.
|
|
||||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
|
||||||
browsers: [
|
|
||||||
'ChromeHeadless'
|
|
||||||
],
|
|
||||||
|
|
||||||
// Code coverage reporting.
|
|
||||||
coverageReporter: {
|
coverageReporter: {
|
||||||
dir: process.env.CIRCLE_ARTIFACTS ?
|
dir: process.env.CIRCLE_ARTIFACTS ?
|
||||||
process.env.CIRCLE_ARTIFACTS + '/coverage' :
|
process.env.CIRCLE_ARTIFACTS + '/coverage' :
|
||||||
@ -104,8 +74,19 @@ module.exports = function(config) {
|
|||||||
foldAll: false
|
foldAll: false
|
||||||
},
|
},
|
||||||
|
|
||||||
// Continuous Integration mode.
|
preprocessors: {
|
||||||
// If true, Karma captures browsers, runs the tests and exits.
|
// add webpack as preprocessor
|
||||||
|
'platform/**/*Spec.js': [ 'webpack' ],
|
||||||
|
'src/**/*Spec.js': [ 'webpack' ]
|
||||||
|
},
|
||||||
|
|
||||||
|
webpack: webpackConfig,
|
||||||
|
|
||||||
|
webpackMiddleware: {
|
||||||
|
stats: 'errors-only',
|
||||||
|
logLevel: 'warn'
|
||||||
|
},
|
||||||
singleRun: true
|
singleRun: true
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
|
120
openmct.js
120
openmct.js
@ -19,102 +19,32 @@
|
|||||||
* this source code distribution or the Licensing information page available
|
* this source code distribution or the Licensing information page available
|
||||||
* at runtime from the About dialog for additional information.
|
* at runtime from the About dialog for additional information.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
/*global requirejs,BUILD_CONSTANTS*/
|
/*global module,BUILD_CONSTANTS*/
|
||||||
|
|
||||||
requirejs.config({
|
const matcher = /\/openmct.js$/;
|
||||||
"paths": {
|
if (document.currentScript) {
|
||||||
"legacyRegistry": "src/legacyRegistry",
|
let src = document.currentScript.src;
|
||||||
"angular": "bower_components/angular/angular.min",
|
if (src && matcher.test(src)) {
|
||||||
"angular-route": "bower_components/angular-route/angular-route.min",
|
// eslint-disable-next-line no-undef
|
||||||
"csv": "bower_components/comma-separated-values/csv.min",
|
__webpack_public_path__ = src.replace(matcher, '') + '/';
|
||||||
"EventEmitter": "bower_components/eventemitter3/index",
|
|
||||||
"es6-promise": "bower_components/es6-promise/es6-promise.min",
|
|
||||||
"moment": "bower_components/moment/moment",
|
|
||||||
"moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format",
|
|
||||||
"moment-timezone": "bower_components/moment-timezone/builds/moment-timezone-with-data",
|
|
||||||
"saveAs": "bower_components/file-saver/FileSaver.min",
|
|
||||||
"screenfull": "bower_components/screenfull/dist/screenfull.min",
|
|
||||||
"text": "bower_components/text/text",
|
|
||||||
"uuid": "bower_components/node-uuid/uuid",
|
|
||||||
"vue": "node_modules/vue/dist/vue.min",
|
|
||||||
"zepto": "bower_components/zepto/zepto.min",
|
|
||||||
"lodash": "bower_components/lodash/lodash",
|
|
||||||
"d3-selection": "node_modules/d3-selection/dist/d3-selection.min",
|
|
||||||
"d3-scale": "node_modules/d3-scale/build/d3-scale.min",
|
|
||||||
"d3-axis": "node_modules/d3-axis/build/d3-axis.min",
|
|
||||||
"d3-array": "node_modules/d3-array/build/d3-array.min",
|
|
||||||
"d3-collection": "node_modules/d3-collection/build/d3-collection.min",
|
|
||||||
"d3-color": "node_modules/d3-color/build/d3-color.min",
|
|
||||||
"d3-format": "node_modules/d3-format/build/d3-format.min",
|
|
||||||
"d3-interpolate": "node_modules/d3-interpolate/build/d3-interpolate.min",
|
|
||||||
"d3-time": "node_modules/d3-time/build/d3-time.min",
|
|
||||||
"d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min",
|
|
||||||
"html2canvas": "node_modules/html2canvas/dist/html2canvas.min",
|
|
||||||
"painterro": "node_modules/painterro/build/painterro.min",
|
|
||||||
"printj": "node_modules/printj/dist/printj.min"
|
|
||||||
},
|
|
||||||
"shim": {
|
|
||||||
"angular": {
|
|
||||||
"exports": "angular"
|
|
||||||
},
|
|
||||||
"angular-route": {
|
|
||||||
"deps": ["angular"]
|
|
||||||
},
|
|
||||||
"EventEmitter": {
|
|
||||||
"exports": "EventEmitter"
|
|
||||||
},
|
|
||||||
"moment-duration-format": {
|
|
||||||
"deps": ["moment"]
|
|
||||||
},
|
|
||||||
"painterro": {
|
|
||||||
"exports": "Painterro"
|
|
||||||
},
|
|
||||||
"saveAs": {
|
|
||||||
"exports": "saveAs"
|
|
||||||
},
|
|
||||||
"screenfull": {
|
|
||||||
"exports": "screenfull"
|
|
||||||
},
|
|
||||||
"zepto": {
|
|
||||||
"exports": "Zepto"
|
|
||||||
},
|
|
||||||
"lodash": {
|
|
||||||
"exports": "lodash"
|
|
||||||
},
|
|
||||||
"d3-selection": {
|
|
||||||
"exports": "d3-selection"
|
|
||||||
},
|
|
||||||
"d3-scale": {
|
|
||||||
"deps": ["d3-array", "d3-collection", "d3-color", "d3-format", "d3-interpolate", "d3-time", "d3-time-format"],
|
|
||||||
"exports": "d3-scale"
|
|
||||||
},
|
|
||||||
"d3-axis": {
|
|
||||||
"exports": "d3-axis"
|
|
||||||
},
|
|
||||||
"dom-to-image": {
|
|
||||||
"exports": "domtoimage"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
const Main = require('./platform/framework/src/Main');
|
||||||
|
const defaultRegistry = require('./src/defaultRegistry');
|
||||||
|
const MCT = require('./src/MCT');
|
||||||
|
const buildInfo = require('./src/plugins/buildInfo/plugin');
|
||||||
|
|
||||||
|
var openmct = new MCT();
|
||||||
|
|
||||||
|
openmct.legacyRegistry = defaultRegistry;
|
||||||
|
openmct.install(openmct.plugins.Plot());
|
||||||
|
|
||||||
|
if (typeof BUILD_CONSTANTS !== 'undefined') {
|
||||||
|
openmct.install(buildInfo(BUILD_CONSTANTS));
|
||||||
|
}
|
||||||
|
|
||||||
|
openmct.on('start', function () {
|
||||||
|
return new Main().run(defaultRegistry);
|
||||||
});
|
});
|
||||||
|
|
||||||
define([
|
module.exports = openmct;
|
||||||
'./platform/framework/src/Main',
|
|
||||||
'./src/defaultRegistry',
|
|
||||||
'./src/MCT',
|
|
||||||
'./src/plugins/buildInfo/plugin'
|
|
||||||
], function (Main, defaultRegistry, MCT, buildInfo) {
|
|
||||||
var openmct = new MCT();
|
|
||||||
|
|
||||||
openmct.legacyRegistry = defaultRegistry;
|
|
||||||
openmct.install(openmct.plugins.Plot());
|
|
||||||
|
|
||||||
if (typeof BUILD_CONSTANTS !== 'undefined') {
|
|
||||||
openmct.install(buildInfo(BUILD_CONSTANTS));
|
|
||||||
}
|
|
||||||
|
|
||||||
openmct.on('start', function () {
|
|
||||||
return new Main().run(defaultRegistry);
|
|
||||||
});
|
|
||||||
|
|
||||||
return openmct;
|
|
||||||
});
|
|
||||||
|
73
package.json
73
package.json
@ -2,7 +2,15 @@
|
|||||||
"name": "openmct",
|
"name": "openmct",
|
||||||
"version": "0.14.0-SNAPSHOT",
|
"version": "0.14.0-SNAPSHOT",
|
||||||
"description": "The Open MCT core platform",
|
"description": "The Open MCT core platform",
|
||||||
"dependencies": {
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"angular": "1.4.14",
|
||||||
|
"angular-route": "1.4.14",
|
||||||
|
"babel-eslint": "8.2.6",
|
||||||
|
"comma-separated-values": "^3.6.4",
|
||||||
|
"concurrently": "^3.6.1",
|
||||||
|
"copy-webpack-plugin": "^4.5.2",
|
||||||
|
"css-loader": "^1.0.0",
|
||||||
"d3-array": "1.2.x",
|
"d3-array": "1.2.x",
|
||||||
"d3-axis": "1.0.x",
|
"d3-axis": "1.0.x",
|
||||||
"d3-collection": "1.0.x",
|
"d3-collection": "1.0.x",
|
||||||
@ -13,59 +21,68 @@
|
|||||||
"d3-selection": "1.3.x",
|
"d3-selection": "1.3.x",
|
||||||
"d3-time": "1.0.x",
|
"d3-time": "1.0.x",
|
||||||
"d3-time-format": "2.1.x",
|
"d3-time-format": "2.1.x",
|
||||||
|
"eslint": "5.2.0",
|
||||||
|
"eventemitter3": "^1.2.0",
|
||||||
|
"exports-loader": "^0.7.0",
|
||||||
"express": "^4.13.1",
|
"express": "^4.13.1",
|
||||||
"minimist": "^1.1.1",
|
"fast-sass-loader": "^1.4.5",
|
||||||
"painterro": "^0.2.65",
|
"file-loader": "^1.1.11",
|
||||||
"request": "^2.69.0",
|
"file-saver": "^1.3.8",
|
||||||
"vue": "^2.5.6"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"bower": "^1.7.7",
|
|
||||||
"git-rev-sync": "^1.4.0",
|
"git-rev-sync": "^1.4.0",
|
||||||
"glob": ">= 3.0.0",
|
"glob": ">= 3.0.0",
|
||||||
"gulp": "^3.9.1",
|
"html-loader": "^0.5.5",
|
||||||
"gulp-jscs": "^3.0.2",
|
|
||||||
"gulp-jshint": "^2.0.0",
|
|
||||||
"gulp-jshint-html-reporter": "^0.1.3",
|
|
||||||
"gulp-rename": "^1.2.2",
|
|
||||||
"gulp-requirejs-optimize": "^0.3.1",
|
|
||||||
"gulp-sass": "^3.1.0",
|
|
||||||
"gulp-sourcemaps": "^1.6.0",
|
|
||||||
"html2canvas": "^1.0.0-alpha.12",
|
"html2canvas": "^1.0.0-alpha.12",
|
||||||
|
"imports-loader": "^0.8.0",
|
||||||
|
"istanbul-instrumenter-loader": "^3.0.1",
|
||||||
"jasmine-core": "^3.1.0",
|
"jasmine-core": "^3.1.0",
|
||||||
"jscs-html-reporter": "^0.1.0",
|
|
||||||
"jsdoc": "^3.3.2",
|
"jsdoc": "^3.3.2",
|
||||||
"jshint": "^2.7.0",
|
|
||||||
"karma": "^2.0.3",
|
"karma": "^2.0.3",
|
||||||
"karma-chrome-launcher": "^2.2.0",
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
"karma-cli": "^1.0.1",
|
"karma-cli": "^1.0.1",
|
||||||
"karma-coverage": "^1.1.2",
|
"karma-coverage": "^1.1.2",
|
||||||
"karma-html-reporter": "^0.2.7",
|
"karma-html-reporter": "^0.2.7",
|
||||||
"karma-jasmine": "^1.1.2",
|
"karma-jasmine": "^1.1.2",
|
||||||
"karma-requirejs": "^1.1.0",
|
"karma-webpack": "^3.0.0",
|
||||||
"lodash": "^3.10.1",
|
"lodash": "^3.10.1",
|
||||||
"markdown-toc": "^0.11.7",
|
"markdown-toc": "^0.11.7",
|
||||||
"marked": "^0.3.5",
|
"marked": "^0.3.5",
|
||||||
"merge-stream": "^1.0.0",
|
"mini-css-extract-plugin": "^0.4.1",
|
||||||
"mkdirp": "^0.5.1",
|
"minimist": "^1.1.1",
|
||||||
"moment": "^2.11.1",
|
"moment": "^2.11.1",
|
||||||
|
"moment-duration-format": "^2.2.2",
|
||||||
|
"moment-timezone": "^0.5.21",
|
||||||
"node-bourbon": "^4.2.3",
|
"node-bourbon": "^4.2.3",
|
||||||
|
"node-sass": "^4.9.2",
|
||||||
|
"painterro": "^0.2.65",
|
||||||
"printj": "^1.1.0",
|
"printj": "^1.1.0",
|
||||||
"requirejs": "2.1.x",
|
"raw-loader": "^0.5.1",
|
||||||
|
"request": "^2.69.0",
|
||||||
|
"screenfull": "^3.3.2",
|
||||||
"split": "^1.0.0",
|
"split": "^1.0.0",
|
||||||
"v8-compile-cache": "^1.1.0"
|
"style-loader": "^0.21.0",
|
||||||
|
"v8-compile-cache": "^1.1.0",
|
||||||
|
"vue": "2.5.6",
|
||||||
|
"vue-loader": "^15.2.6",
|
||||||
|
"vue-template-compiler": "2.5.6",
|
||||||
|
"webpack": "^4.16.2",
|
||||||
|
"webpack-cli": "^3.1.0",
|
||||||
|
"webpack-dev-middleware": "^3.1.3",
|
||||||
|
"zepto": "^1.2.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
|
"lint": "eslint platform src openmct.js",
|
||||||
|
"lint:fix": "eslint platform src openmct.js --fix",
|
||||||
|
"build:prod": "NODE_ENV=production webpack",
|
||||||
|
"build:dev": "webpack",
|
||||||
|
"build:watch": "webpack --watch",
|
||||||
"test": "karma start --single-run",
|
"test": "karma start --single-run",
|
||||||
"jshint": "jshint platform example",
|
"test:watch": "karma start --no-single-run",
|
||||||
"lint": "./node_modules/gulp/bin/gulp.js lint",
|
"verify": "concurrently 'npm:test' 'npm:lint'",
|
||||||
"checkstyle": "./node_modules/gulp/bin/gulp.js checkstyle",
|
|
||||||
"watch": "karma start",
|
|
||||||
"jsdoc": "jsdoc -c jsdoc.json -R API.md -r -d dist/docs/api",
|
"jsdoc": "jsdoc -c jsdoc.json -R API.md -r -d dist/docs/api",
|
||||||
"otherdoc": "node docs/gendocs.js --in docs/src --out dist/docs --suppress-toc 'docs/src/index.md|docs/src/process/index.md'",
|
"otherdoc": "node docs/gendocs.js --in docs/src --out dist/docs --suppress-toc 'docs/src/index.md|docs/src/process/index.md'",
|
||||||
"docs": "npm run jsdoc ; npm run otherdoc",
|
"docs": "npm run jsdoc ; npm run otherdoc",
|
||||||
"prepare": "node ./node_modules/bower/bin/bower install && node ./node_modules/gulp/bin/gulp.js install"
|
"prepare": "npm run build:prod"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
@ -21,17 +21,17 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
define([
|
define([
|
||||||
"text!./res/templates/about-dialog.html",
|
"./res/templates/about-dialog.html",
|
||||||
"./src/LogoController",
|
"./src/LogoController",
|
||||||
"./src/AboutController",
|
"./src/AboutController",
|
||||||
"./src/LicenseController",
|
"./src/LicenseController",
|
||||||
"text!./res/templates/app-logo.html",
|
"./res/templates/app-logo.html",
|
||||||
"text!./res/templates/about-logo.html",
|
"./res/templates/about-logo.html",
|
||||||
"text!./res/templates/overlay-about.html",
|
"./res/templates/overlay-about.html",
|
||||||
"text!./res/templates/license-apache.html",
|
"./res/templates/license-apache.html",
|
||||||
"text!./res/templates/license-mit.html",
|
"./res/templates/license-mit.html",
|
||||||
"text!./res/templates/licenses.html",
|
"./res/templates/licenses.html",
|
||||||
"text!./res/templates/licenses-export-md.html",
|
"./res/templates/licenses-export-md.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
aboutDialogTemplate,
|
aboutDialogTemplate,
|
||||||
|
@ -33,16 +33,16 @@ define([
|
|||||||
"./src/windowing/NewTabAction",
|
"./src/windowing/NewTabAction",
|
||||||
"./src/windowing/FullscreenAction",
|
"./src/windowing/FullscreenAction",
|
||||||
"./src/windowing/WindowTitler",
|
"./src/windowing/WindowTitler",
|
||||||
"text!./res/templates/browse.html",
|
"./res/templates/browse.html",
|
||||||
"text!./res/templates/browse-object.html",
|
"./res/templates/browse-object.html",
|
||||||
"text!./res/templates/items/grid-item.html",
|
"./res/templates/items/grid-item.html",
|
||||||
"text!./res/templates/browse/object-header.html",
|
"./res/templates/browse/object-header.html",
|
||||||
"text!./res/templates/browse/object-header-frame.html",
|
"./res/templates/browse/object-header-frame.html",
|
||||||
"text!./res/templates/menu-arrow.html",
|
"./res/templates/menu-arrow.html",
|
||||||
"text!./res/templates/back-arrow.html",
|
"./res/templates/back-arrow.html",
|
||||||
"text!./res/templates/items/items.html",
|
"./res/templates/items/items.html",
|
||||||
"text!./res/templates/browse/object-properties.html",
|
"./res/templates/browse/object-properties.html",
|
||||||
"text!./res/templates/browse/inspector-region.html",
|
"./res/templates/browse/inspector-region.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
BrowseController,
|
BrowseController,
|
||||||
|
@ -31,7 +31,6 @@ define(
|
|||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function BrowseObjectController($scope, $location, $route) {
|
function BrowseObjectController($scope, $location, $route) {
|
||||||
var navigatedObject;
|
|
||||||
function setViewForDomainObject(domainObject) {
|
function setViewForDomainObject(domainObject) {
|
||||||
|
|
||||||
var locationViewKey = $location.search().view;
|
var locationViewKey = $location.search().view;
|
||||||
@ -47,7 +46,6 @@ define(
|
|||||||
((domainObject && domainObject.useCapability('view')) || [])
|
((domainObject && domainObject.useCapability('view')) || [])
|
||||||
.forEach(selectViewIfMatching);
|
.forEach(selectViewIfMatching);
|
||||||
}
|
}
|
||||||
navigatedObject = domainObject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateQueryParam(viewKey) {
|
function updateQueryParam(viewKey) {
|
||||||
|
@ -161,7 +161,7 @@ define(
|
|||||||
instantiateController();
|
instantiateController();
|
||||||
return waitsForNavigation().then(function () {
|
return waitsForNavigation().then(function () {
|
||||||
expect(mockNavigationService.setNavigation)
|
expect(mockNavigationService.setNavigation)
|
||||||
.toHaveBeenCalledWith(mockDefaultRootObject);
|
.toHaveBeenCalledWith(mockDefaultRootObject);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ define(
|
|||||||
|
|
||||||
return waitsForNavigation().then(function () {
|
return waitsForNavigation().then(function () {
|
||||||
expect(mockNavigationService.setNavigation)
|
expect(mockNavigationService.setNavigation)
|
||||||
.toHaveBeenCalledWith(mockDefaultRootObject);
|
.toHaveBeenCalledWith(mockDefaultRootObject);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ define(
|
|||||||
describe("The PaneController", function () {
|
describe("The PaneController", function () {
|
||||||
var mockScope,
|
var mockScope,
|
||||||
mockAgentService,
|
mockAgentService,
|
||||||
mockDomainObjects,
|
|
||||||
mockWindow,
|
mockWindow,
|
||||||
controller,
|
controller,
|
||||||
mockLocation,
|
mockLocation,
|
||||||
@ -47,17 +46,6 @@ define(
|
|||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockScope = jasmine.createSpyObj("$scope", ["$on"]);
|
mockScope = jasmine.createSpyObj("$scope", ["$on"]);
|
||||||
mockDomainObjects = ['a', 'b'].map(function (id) {
|
|
||||||
var mockDomainObject = jasmine.createSpyObj(
|
|
||||||
'domainObject-' + id,
|
|
||||||
['getId', 'getModel', 'getCapability']
|
|
||||||
);
|
|
||||||
|
|
||||||
mockDomainObject.getId.and.returnValue(id);
|
|
||||||
mockDomainObject.getModel.and.returnValue({});
|
|
||||||
|
|
||||||
return mockDomainObject;
|
|
||||||
});
|
|
||||||
mockAgentService = jasmine.createSpyObj(
|
mockAgentService = jasmine.createSpyObj(
|
||||||
"agentService",
|
"agentService",
|
||||||
["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"]
|
["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"]
|
||||||
|
@ -56,7 +56,7 @@ define([
|
|||||||
return action.perform()
|
return action.perform()
|
||||||
.then(function () {
|
.then(function () {
|
||||||
expect(mockNavigationService.setNavigation)
|
expect(mockNavigationService.setNavigation)
|
||||||
.toHaveBeenCalledWith(mockDomainObject, true);
|
.toHaveBeenCalledWith(mockDomainObject, true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ define(
|
|||||||
|
|
||||||
it("toggles fullscreen mode when performed", function () {
|
it("toggles fullscreen mode when performed", function () {
|
||||||
action.perform();
|
action.perform();
|
||||||
expect(window.screenfull.toggle).toHaveBeenCalled();
|
expect(screenfull.toggle).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("provides displayable metadata", function () {
|
it("provides displayable metadata", function () {
|
||||||
|
@ -46,7 +46,7 @@ define(
|
|||||||
// tree is opened in a new tab using the
|
// tree is opened in a new tab using the
|
||||||
// context menu
|
// context menu
|
||||||
mockContextSelected = jasmine.createSpyObj("context", ["selectedObject",
|
mockContextSelected = jasmine.createSpyObj("context", ["selectedObject",
|
||||||
"domainObject"]);
|
"domainObject"]);
|
||||||
|
|
||||||
// Mocks the urlService used to make the new tab's url from a
|
// Mocks the urlService used to make the new tab's url from a
|
||||||
// domainObject and mode
|
// domainObject and mode
|
||||||
@ -54,11 +54,11 @@ define(
|
|||||||
|
|
||||||
// Action done using the current context or mockContextCurrent
|
// Action done using the current context or mockContextCurrent
|
||||||
actionCurrent = new NewTabAction(mockUrlService, mockWindow,
|
actionCurrent = new NewTabAction(mockUrlService, mockWindow,
|
||||||
mockContextCurrent);
|
mockContextCurrent);
|
||||||
|
|
||||||
// Action done using the selected context or mockContextSelected
|
// Action done using the selected context or mockContextSelected
|
||||||
actionSelected = new NewTabAction(mockUrlService, mockWindow,
|
actionSelected = new NewTabAction(mockUrlService, mockWindow,
|
||||||
mockContextSelected);
|
mockContextSelected);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ define(
|
|||||||
mockRootScope,
|
mockRootScope,
|
||||||
mockDocument,
|
mockDocument,
|
||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
titler;
|
titler; // eslint-disable-line
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockNavigationService = jasmine.createSpyObj(
|
mockNavigationService = jasmine.createSpyObj(
|
||||||
|
@ -23,13 +23,13 @@
|
|||||||
define([
|
define([
|
||||||
"./src/DialogService",
|
"./src/DialogService",
|
||||||
"./src/OverlayService",
|
"./src/OverlayService",
|
||||||
"text!./res/templates/overlay-dialog.html",
|
"./res/templates/overlay-dialog.html",
|
||||||
"text!./res/templates/overlay-options.html",
|
"./res/templates/overlay-options.html",
|
||||||
"text!./res/templates/dialog.html",
|
"./res/templates/dialog.html",
|
||||||
"text!./res/templates/overlay-blocking-message.html",
|
"./res/templates/overlay-blocking-message.html",
|
||||||
"text!./res/templates/message.html",
|
"./res/templates/message.html",
|
||||||
"text!./res/templates/overlay-message-list.html",
|
"./res/templates/overlay-message-list.html",
|
||||||
"text!./res/templates/overlay.html",
|
"./res/templates/overlay.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
DialogService,
|
DialogService,
|
||||||
|
@ -59,8 +59,8 @@ define(
|
|||||||
["resolve", "reject"]
|
["resolve", "reject"]
|
||||||
);
|
);
|
||||||
mockDocument = jasmine.createSpyObj(
|
mockDocument = jasmine.createSpyObj(
|
||||||
"$document",
|
"$document",
|
||||||
["find"]
|
["find"]
|
||||||
);
|
);
|
||||||
mockBody = jasmine.createSpyObj('body', ['on', 'off']);
|
mockBody = jasmine.createSpyObj('body', ['on', 'off']);
|
||||||
mockDocument.find.and.returnValue(mockBody);
|
mockDocument.find.and.returnValue(mockBody);
|
||||||
|
@ -49,14 +49,14 @@ define([
|
|||||||
"./src/creation/CreateActionProvider",
|
"./src/creation/CreateActionProvider",
|
||||||
"./src/creation/AddActionProvider",
|
"./src/creation/AddActionProvider",
|
||||||
"./src/creation/CreationService",
|
"./src/creation/CreationService",
|
||||||
"text!./res/templates/create/locator.html",
|
"./res/templates/create/locator.html",
|
||||||
"text!./res/templates/create/create-button.html",
|
"./res/templates/create/create-button.html",
|
||||||
"text!./res/templates/create/create-menu.html",
|
"./res/templates/create/create-menu.html",
|
||||||
"text!./res/templates/library.html",
|
"./res/templates/library.html",
|
||||||
"text!./res/templates/edit-object.html",
|
"./res/templates/edit-object.html",
|
||||||
"text!./res/templates/edit-action-buttons.html",
|
"./res/templates/edit-action-buttons.html",
|
||||||
"text!./res/templates/elements.html",
|
"./res/templates/elements.html",
|
||||||
"text!./res/templates/topbar-edit.html",
|
"./res/templates/topbar-edit.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
EditActionController,
|
EditActionController,
|
||||||
|
@ -25,12 +25,12 @@ define([
|
|||||||
'../creation/CreateWizard',
|
'../creation/CreateWizard',
|
||||||
'./SaveInProgressDialog'
|
'./SaveInProgressDialog'
|
||||||
],
|
],
|
||||||
function (
|
function (
|
||||||
CreateWizard,
|
CreateWizard,
|
||||||
SaveInProgressDialog
|
SaveInProgressDialog
|
||||||
) {
|
) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "Save" action; the action triggered by clicking Save from
|
* The "Save" action; the action triggered by clicking Save from
|
||||||
* Edit Mode. Exits the editing user interface and invokes object
|
* Edit Mode. Exits the editing user interface and invokes object
|
||||||
* capabilities to persist the changes that have been made.
|
* capabilities to persist the changes that have been made.
|
||||||
@ -38,189 +38,189 @@ define([
|
|||||||
* @implements {Action}
|
* @implements {Action}
|
||||||
* @memberof platform/commonUI/edit
|
* @memberof platform/commonUI/edit
|
||||||
*/
|
*/
|
||||||
function SaveAsAction(
|
function SaveAsAction(
|
||||||
$injector,
|
$injector,
|
||||||
policyService,
|
policyService,
|
||||||
dialogService,
|
dialogService,
|
||||||
copyService,
|
copyService,
|
||||||
notificationService,
|
notificationService,
|
||||||
context
|
context
|
||||||
) {
|
) {
|
||||||
this.domainObject = (context || {}).domainObject;
|
this.domainObject = (context || {}).domainObject;
|
||||||
this.injectObjectService = function () {
|
this.injectObjectService = function () {
|
||||||
this.objectService = $injector.get("objectService");
|
this.objectService = $injector.get("objectService");
|
||||||
};
|
};
|
||||||
this.policyService = policyService;
|
this.policyService = policyService;
|
||||||
this.dialogService = dialogService;
|
this.dialogService = dialogService;
|
||||||
this.copyService = copyService;
|
this.copyService = copyService;
|
||||||
this.notificationService = notificationService;
|
this.notificationService = notificationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
SaveAsAction.prototype.createWizard = function (parent) {
|
SaveAsAction.prototype.createWizard = function (parent) {
|
||||||
return new CreateWizard(
|
return new CreateWizard(
|
||||||
this.domainObject,
|
this.domainObject,
|
||||||
parent,
|
parent,
|
||||||
this.policyService
|
this.policyService
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
SaveAsAction.prototype.getObjectService = function () {
|
SaveAsAction.prototype.getObjectService = function () {
|
||||||
// Lazily acquire object service (avoids cyclical dependency)
|
// Lazily acquire object service (avoids cyclical dependency)
|
||||||
if (!this.objectService) {
|
if (!this.objectService) {
|
||||||
this.injectObjectService();
|
this.injectObjectService();
|
||||||
}
|
|
||||||
return this.objectService;
|
|
||||||
};
|
|
||||||
|
|
||||||
function resolveWith(object) {
|
|
||||||
return function () {
|
|
||||||
return object;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
return this.objectService;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
function resolveWith(object) {
|
||||||
|
return function () {
|
||||||
|
return object;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
* Save changes and conclude editing.
|
* Save changes and conclude editing.
|
||||||
*
|
*
|
||||||
* @returns {Promise} a promise that will be fulfilled when
|
* @returns {Promise} a promise that will be fulfilled when
|
||||||
* cancellation has completed
|
* cancellation has completed
|
||||||
* @memberof platform/commonUI/edit.SaveAction#
|
* @memberof platform/commonUI/edit.SaveAction#
|
||||||
*/
|
*/
|
||||||
SaveAsAction.prototype.perform = function () {
|
SaveAsAction.prototype.perform = function () {
|
||||||
// Discard the current root view (which will be the editing
|
// Discard the current root view (which will be the editing
|
||||||
// UI, which will have been pushed atop the Browse UI.)
|
// UI, which will have been pushed atop the Browse UI.)
|
||||||
function returnToBrowse(object) {
|
function returnToBrowse(object) {
|
||||||
if (object) {
|
if (object) {
|
||||||
object.getCapability("action").perform("navigate");
|
object.getCapability("action").perform("navigate");
|
||||||
}
|
|
||||||
return object;
|
|
||||||
}
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
return this.save().then(returnToBrowse);
|
return this.save().then(returnToBrowse);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
SaveAsAction.prototype.save = function () {
|
SaveAsAction.prototype.save = function () {
|
||||||
var self = this,
|
var self = this,
|
||||||
domainObject = this.domainObject,
|
domainObject = this.domainObject,
|
||||||
copyService = this.copyService,
|
copyService = this.copyService,
|
||||||
dialog = new SaveInProgressDialog(this.dialogService),
|
dialog = new SaveInProgressDialog(this.dialogService),
|
||||||
toUndirty = [];
|
toUndirty = [];
|
||||||
|
|
||||||
function doWizardSave(parent) {
|
function doWizardSave(parent) {
|
||||||
var wizard = self.createWizard(parent);
|
var wizard = self.createWizard(parent);
|
||||||
|
|
||||||
return self.dialogService
|
return self.dialogService
|
||||||
.getUserInput(wizard.getFormStructure(true),
|
.getUserInput(wizard.getFormStructure(true),
|
||||||
wizard.getInitialFormValue())
|
wizard.getInitialFormValue())
|
||||||
.then(wizard.populateObjectFromInput.bind(wizard), function (failureReason) {
|
.then(wizard.populateObjectFromInput.bind(wizard), function (failureReason) {
|
||||||
return Promise.reject("user canceled");
|
return Promise.reject("user canceled");
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showBlockingDialog(object) {
|
|
||||||
dialog.show();
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
function hideBlockingDialog(object) {
|
|
||||||
dialog.hide();
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchObject(objectId) {
|
|
||||||
return self.getObjectService().getObjects([objectId]).then(function (objects) {
|
|
||||||
return objects[objectId];
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getParent(object) {
|
function showBlockingDialog(object) {
|
||||||
return fetchObject(object.getModel().location);
|
dialog.show();
|
||||||
}
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
function allowClone(objectToClone) {
|
function hideBlockingDialog(object) {
|
||||||
var allowed =
|
dialog.hide();
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchObject(objectId) {
|
||||||
|
return self.getObjectService().getObjects([objectId]).then(function (objects) {
|
||||||
|
return objects[objectId];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getParent(object) {
|
||||||
|
return fetchObject(object.getModel().location);
|
||||||
|
}
|
||||||
|
|
||||||
|
function allowClone(objectToClone) {
|
||||||
|
var allowed =
|
||||||
(objectToClone.getId() === domainObject.getId()) ||
|
(objectToClone.getId() === domainObject.getId()) ||
|
||||||
objectToClone.getCapability('location').isOriginal();
|
objectToClone.getCapability('location').isOriginal();
|
||||||
if (allowed) {
|
if (allowed) {
|
||||||
toUndirty.push(objectToClone);
|
toUndirty.push(objectToClone);
|
||||||
}
|
|
||||||
return allowed;
|
|
||||||
}
|
}
|
||||||
|
return allowed;
|
||||||
|
}
|
||||||
|
|
||||||
function cloneIntoParent(parent) {
|
function cloneIntoParent(parent) {
|
||||||
return copyService.perform(domainObject, parent, allowClone);
|
return copyService.perform(domainObject, parent, allowClone);
|
||||||
|
}
|
||||||
|
|
||||||
|
function undirty(object) {
|
||||||
|
return object.getCapability('persistence').refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
function undirtyOriginals(object) {
|
||||||
|
return Promise.all(toUndirty.map(undirty))
|
||||||
|
.then(resolveWith(object));
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveAfterClone(clonedObject) {
|
||||||
|
return domainObject.getCapability("editor").save()
|
||||||
|
.then(resolveWith(clonedObject));
|
||||||
|
}
|
||||||
|
|
||||||
|
function finishEditing(clonedObject) {
|
||||||
|
return domainObject.getCapability("editor").finish()
|
||||||
|
.then(function () {
|
||||||
|
return fetchObject(clonedObject.getId());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSuccess(object) {
|
||||||
|
self.notificationService.info("Save Succeeded");
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onFailure(reason) {
|
||||||
|
hideBlockingDialog();
|
||||||
|
if (reason !== "user canceled") {
|
||||||
|
self.notificationService.error("Save Failed");
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function undirty(object) {
|
return getParent(domainObject)
|
||||||
return object.getCapability('persistence').refresh();
|
.then(doWizardSave)
|
||||||
}
|
.then(showBlockingDialog)
|
||||||
|
.then(getParent)
|
||||||
function undirtyOriginals(object) {
|
.then(cloneIntoParent)
|
||||||
return Promise.all(toUndirty.map(undirty))
|
.then(undirtyOriginals)
|
||||||
.then(resolveWith(object));
|
.then(saveAfterClone)
|
||||||
}
|
.then(finishEditing)
|
||||||
|
.then(hideBlockingDialog)
|
||||||
function saveAfterClone(clonedObject) {
|
.then(onSuccess)
|
||||||
return domainObject.getCapability("editor").save()
|
.catch(onFailure);
|
||||||
.then(resolveWith(clonedObject));
|
};
|
||||||
}
|
|
||||||
|
|
||||||
function finishEditing(clonedObject) {
|
|
||||||
return domainObject.getCapability("editor").finish()
|
|
||||||
.then(function () {
|
|
||||||
return fetchObject(clonedObject.getId());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onSuccess(object) {
|
|
||||||
self.notificationService.info("Save Succeeded");
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onFailure(reason) {
|
|
||||||
hideBlockingDialog();
|
|
||||||
if (reason !== "user canceled") {
|
|
||||||
self.notificationService.error("Save Failed");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return getParent(domainObject)
|
|
||||||
.then(doWizardSave)
|
|
||||||
.then(showBlockingDialog)
|
|
||||||
.then(getParent)
|
|
||||||
.then(cloneIntoParent)
|
|
||||||
.then(undirtyOriginals)
|
|
||||||
.then(saveAfterClone)
|
|
||||||
.then(finishEditing)
|
|
||||||
.then(hideBlockingDialog)
|
|
||||||
.then(onSuccess)
|
|
||||||
.catch(onFailure);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if this action is applicable in a given context.
|
* Check if this action is applicable in a given context.
|
||||||
* This will ensure that a domain object is present in the context,
|
* This will ensure that a domain object is present in the context,
|
||||||
* and that this domain object is in Edit mode.
|
* and that this domain object is in Edit mode.
|
||||||
* @returns true if applicable
|
* @returns true if applicable
|
||||||
*/
|
*/
|
||||||
SaveAsAction.appliesTo = function (context) {
|
SaveAsAction.appliesTo = function (context) {
|
||||||
var domainObject = (context || {}).domainObject;
|
var domainObject = (context || {}).domainObject;
|
||||||
return domainObject !== undefined &&
|
return domainObject !== undefined &&
|
||||||
domainObject.hasCapability('editor') &&
|
domainObject.hasCapability('editor') &&
|
||||||
domainObject.getCapability('editor').isEditContextRoot() &&
|
domainObject.getCapability('editor').isEditContextRoot() &&
|
||||||
domainObject.getModel().persisted === undefined;
|
domainObject.getModel().persisted === undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
return SaveAsAction;
|
return SaveAsAction;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -49,8 +49,8 @@ define(
|
|||||||
// present context.
|
// present context.
|
||||||
function updateActions() {
|
function updateActions() {
|
||||||
$scope.saveActions = $scope.action ?
|
$scope.saveActions = $scope.action ?
|
||||||
$scope.action.getActions(SAVE_ACTION_CONTEXT) :
|
$scope.action.getActions(SAVE_ACTION_CONTEXT) :
|
||||||
[];
|
[];
|
||||||
|
|
||||||
$scope.saveActionsAsMenuOptions = $scope.saveActions.map(actionToMenuOption);
|
$scope.saveActionsAsMenuOptions = $scope.saveActions.map(actionToMenuOption);
|
||||||
|
|
||||||
@ -59,8 +59,8 @@ define(
|
|||||||
};
|
};
|
||||||
|
|
||||||
$scope.otherEditActions = $scope.action ?
|
$scope.otherEditActions = $scope.action ?
|
||||||
$scope.action.getActions(OTHERS_ACTION_CONTEXT) :
|
$scope.action.getActions(OTHERS_ACTION_CONTEXT) :
|
||||||
[];
|
[];
|
||||||
|
|
||||||
// Required because Angular does not allow 'bind'
|
// Required because Angular does not allow 'bind'
|
||||||
// in expressions.
|
// in expressions.
|
||||||
|
@ -49,7 +49,7 @@ define(
|
|||||||
function searchElements(value) {
|
function searchElements(value) {
|
||||||
if ($scope.searchText) {
|
if ($scope.searchText) {
|
||||||
return value.getModel().name.toLowerCase().search(
|
return value.getModel().name.toLowerCase().search(
|
||||||
$scope.searchText.toLowerCase()) !== -1;
|
$scope.searchText.toLowerCase()) !== -1;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,8 @@ define(
|
|||||||
// Update the set of Create actions
|
// Update the set of Create actions
|
||||||
function refreshActions() {
|
function refreshActions() {
|
||||||
$scope.createActions = $scope.action ?
|
$scope.createActions = $scope.action ?
|
||||||
$scope.action.getActions('create') :
|
$scope.action.getActions('create') :
|
||||||
[];
|
[];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listen for new instances of the represented object's
|
// Listen for new instances of the represented object's
|
||||||
|
@ -59,7 +59,7 @@ define(
|
|||||||
(view.key === 'plot' && type.getKey() === 'telemetry.panel') ||
|
(view.key === 'plot' && type.getKey() === 'telemetry.panel') ||
|
||||||
(view.key === 'table' && type.getKey() === 'table') ||
|
(view.key === 'table' && type.getKey() === 'table') ||
|
||||||
(view.key === 'rt-table' && type.getKey() === 'rttable')
|
(view.key === 'rt-table' && type.getKey() === 'rttable')
|
||||||
) {
|
) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -25,8 +25,7 @@ define(
|
|||||||
function (EditAndComposeAction) {
|
function (EditAndComposeAction) {
|
||||||
|
|
||||||
describe("The Link action", function () {
|
describe("The Link action", function () {
|
||||||
var mockQ,
|
var mockDomainObject,
|
||||||
mockDomainObject,
|
|
||||||
mockParent,
|
mockParent,
|
||||||
mockContext,
|
mockContext,
|
||||||
mockComposition,
|
mockComposition,
|
||||||
@ -47,13 +46,10 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
|
|
||||||
|
|
||||||
mockDomainObject = jasmine.createSpyObj(
|
mockDomainObject = jasmine.createSpyObj(
|
||||||
"domainObject",
|
"domainObject",
|
||||||
["getId", "getCapability"]
|
["getId", "getCapability"]
|
||||||
);
|
);
|
||||||
mockQ = { when: mockPromise };
|
|
||||||
mockParent = {
|
mockParent = {
|
||||||
getModel: function () {
|
getModel: function () {
|
||||||
return model;
|
return model;
|
||||||
|
@ -34,7 +34,6 @@ define(
|
|||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
capabilities = {},
|
capabilities = {},
|
||||||
mockEditAction,
|
mockEditAction,
|
||||||
mockSaveAction,
|
|
||||||
action;
|
action;
|
||||||
|
|
||||||
function mockPromise(value) {
|
function mockPromise(value) {
|
||||||
@ -83,12 +82,6 @@ define(
|
|||||||
mockDomainObject.getCapability.and.callFake(function (name) {
|
mockDomainObject.getCapability.and.callFake(function (name) {
|
||||||
return capabilities[name];
|
return capabilities[name];
|
||||||
});
|
});
|
||||||
mockSaveAction = jasmine.createSpyObj(
|
|
||||||
"saveAction",
|
|
||||||
[
|
|
||||||
"perform"
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
capabilities.action = jasmine.createSpyObj(
|
capabilities.action = jasmine.createSpyObj(
|
||||||
"actionCapability",
|
"actionCapability",
|
||||||
|
@ -142,11 +142,11 @@ define(
|
|||||||
|
|
||||||
it("populates the model on the associated object", function () {
|
it("populates the model on the associated object", function () {
|
||||||
var formValue = {
|
var formValue = {
|
||||||
"A": "ValueA",
|
"A": "ValueA",
|
||||||
"B": "ValueB",
|
"B": "ValueB",
|
||||||
"C": "ValueC"
|
"C": "ValueC"
|
||||||
},
|
},
|
||||||
compareModel = wizard.createModel(formValue);
|
compareModel = wizard.createModel(formValue);
|
||||||
//populateObjectFromInput adds a .location attribute that is not added by createModel.
|
//populateObjectFromInput adds a .location attribute that is not added by createModel.
|
||||||
compareModel.location = undefined;
|
compareModel.location = undefined;
|
||||||
wizard.populateObjectFromInput(formValue);
|
wizard.populateObjectFromInput(formValue);
|
||||||
|
@ -114,7 +114,7 @@ define(
|
|||||||
mockNewObject.getId.and.returnValue('newId');
|
mockNewObject.getId.and.returnValue('newId');
|
||||||
mockNewObject.getCapability.and.callFake(function (c) {
|
mockNewObject.getCapability.and.callFake(function (c) {
|
||||||
return c === 'persistence' ?
|
return c === 'persistence' ?
|
||||||
mockNewPersistenceCapability : undefined;
|
mockNewPersistenceCapability : undefined;
|
||||||
});
|
});
|
||||||
|
|
||||||
mockPersistenceCapability.persist
|
mockPersistenceCapability.persist
|
||||||
|
@ -76,66 +76,66 @@ define(
|
|||||||
describe("when context is available", function () {
|
describe("when context is available", function () {
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockContext.getRoot.and.returnValue(mockRootObject);
|
mockContext.getRoot.and.returnValue(mockRootObject);
|
||||||
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("adds a treeModel to scope", function () {
|
it("adds a treeModel to scope", function () {
|
||||||
expect(mockScope.treeModel).toBeDefined();
|
expect(mockScope.treeModel).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("watches for changes to treeModel", function () {
|
it("watches for changes to treeModel", function () {
|
||||||
// This is what the embedded tree representation
|
// This is what the embedded tree representation
|
||||||
// will be modifying.
|
// will be modifying.
|
||||||
expect(mockScope.$watch).toHaveBeenCalledWith(
|
expect(mockScope.$watch).toHaveBeenCalledWith(
|
||||||
"treeModel.selectedObject",
|
"treeModel.selectedObject",
|
||||||
jasmine.any(Function)
|
jasmine.any(Function)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("changes its own model on embedded model updates", function () {
|
it("changes its own model on embedded model updates", function () {
|
||||||
// Need to pass on selection changes as updates to
|
// Need to pass on selection changes as updates to
|
||||||
// the control's value
|
// the control's value
|
||||||
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
||||||
mockTimeout.calls.mostRecent().args[0]();
|
mockTimeout.calls.mostRecent().args[0]();
|
||||||
expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
|
expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
|
||||||
expect(mockScope.rootObject).toEqual(mockRootObject);
|
expect(mockScope.rootObject).toEqual(mockRootObject);
|
||||||
|
|
||||||
// Verify that the capability we expect to have been used
|
// Verify that the capability we expect to have been used
|
||||||
// was used.
|
// was used.
|
||||||
expect(mockDomainObject.getCapability)
|
expect(mockDomainObject.getCapability)
|
||||||
.toHaveBeenCalledWith("context");
|
.toHaveBeenCalledWith("context");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rejects changes which fail validation", function () {
|
it("rejects changes which fail validation", function () {
|
||||||
mockScope.structure = { validate: jasmine.createSpy('validate') };
|
mockScope.structure = { validate: jasmine.createSpy('validate') };
|
||||||
mockScope.structure.validate.and.returnValue(false);
|
mockScope.structure.validate.and.returnValue(false);
|
||||||
|
|
||||||
// Pass selection change
|
// Pass selection change
|
||||||
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
||||||
mockTimeout.calls.mostRecent().args[0]();
|
mockTimeout.calls.mostRecent().args[0]();
|
||||||
|
|
||||||
expect(mockScope.structure.validate).toHaveBeenCalled();
|
expect(mockScope.structure.validate).toHaveBeenCalled();
|
||||||
// Change should have been rejected
|
// Change should have been rejected
|
||||||
expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
|
expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("treats a lack of a selection as invalid", function () {
|
it("treats a lack of a selection as invalid", function () {
|
||||||
mockScope.ngModelController = jasmine.createSpyObj(
|
mockScope.ngModelController = jasmine.createSpyObj(
|
||||||
'ngModelController',
|
'ngModelController',
|
||||||
['$setValidity']
|
['$setValidity']
|
||||||
);
|
);
|
||||||
|
|
||||||
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
mockScope.$watch.calls.mostRecent().args[1](mockDomainObject);
|
||||||
mockTimeout.calls.mostRecent().args[0]();
|
mockTimeout.calls.mostRecent().args[0]();
|
||||||
expect(mockScope.ngModelController.$setValidity)
|
expect(mockScope.ngModelController.$setValidity)
|
||||||
.toHaveBeenCalledWith(jasmine.any(String), true);
|
.toHaveBeenCalledWith(jasmine.any(String), true);
|
||||||
|
|
||||||
mockScope.$watch.calls.mostRecent().args[1](undefined);
|
mockScope.$watch.calls.mostRecent().args[1](undefined);
|
||||||
mockTimeout.calls.mostRecent().args[0]();
|
mockTimeout.calls.mostRecent().args[0]();
|
||||||
expect(mockScope.ngModelController.$setValidity)
|
expect(mockScope.ngModelController.$setValidity)
|
||||||
.toHaveBeenCalledWith(jasmine.any(String), false);
|
.toHaveBeenCalledWith(jasmine.any(String), false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe("when no context is available", function () {
|
describe("when no context is available", function () {
|
||||||
var defaultRoot = "DEFAULT_ROOT";
|
var defaultRoot = "DEFAULT_ROOT";
|
||||||
|
@ -27,7 +27,6 @@ define(
|
|||||||
describe("The Edit action policy", function () {
|
describe("The Edit action policy", function () {
|
||||||
var editableView,
|
var editableView,
|
||||||
nonEditableView,
|
nonEditableView,
|
||||||
undefinedView,
|
|
||||||
testViews,
|
testViews,
|
||||||
testContext,
|
testContext,
|
||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
@ -67,7 +66,6 @@ define(
|
|||||||
|
|
||||||
editableView = { editable: true };
|
editableView = { editable: true };
|
||||||
nonEditableView = { editable: false };
|
nonEditableView = { editable: false };
|
||||||
undefinedView = { someKey: "some value" };
|
|
||||||
plotView = { key: "plot", editable: false };
|
plotView = { key: "plot", editable: false };
|
||||||
testViews = [];
|
testViews = [];
|
||||||
|
|
||||||
|
@ -75,25 +75,25 @@ define(
|
|||||||
|
|
||||||
it('Allows "remove" action when navigated object in edit mode,' +
|
it('Allows "remove" action when navigated object in edit mode,' +
|
||||||
' and selected object not editable, but its parent is.',
|
' and selected object not editable, but its parent is.',
|
||||||
function () {
|
function () {
|
||||||
var mockParent = jasmine.createSpyObj("parentObject", ["hasCapability"]),
|
var mockParent = jasmine.createSpyObj("parentObject", ["hasCapability"]),
|
||||||
mockContextCapability = jasmine.createSpyObj("contextCapability", ["getParent"]);
|
mockContextCapability = jasmine.createSpyObj("contextCapability", ["getParent"]);
|
||||||
|
|
||||||
mockParent.hasCapability.and.returnValue(true);
|
mockParent.hasCapability.and.returnValue(true);
|
||||||
mockContextCapability.getParent.and.returnValue(mockParent);
|
mockContextCapability.getParent.and.returnValue(mockParent);
|
||||||
navigatedObject.hasCapability.and.returnValue(true);
|
navigatedObject.hasCapability.and.returnValue(true);
|
||||||
|
|
||||||
mockDomainObject.getCapability.and.returnValue(mockContextCapability);
|
mockDomainObject.getCapability.and.returnValue(mockContextCapability);
|
||||||
mockDomainObject.hasCapability.and.callFake(function (capability) {
|
mockDomainObject.hasCapability.and.callFake(function (capability) {
|
||||||
switch (capability) {
|
switch (capability) {
|
||||||
case "editor": return false;
|
case "editor": return false;
|
||||||
case "context": return true;
|
case "context": return true;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
metadata.key = "remove";
|
|
||||||
|
|
||||||
expect(policy.allow(mockAction, context)).toBe(true);
|
|
||||||
});
|
});
|
||||||
|
metadata.key = "remove";
|
||||||
|
|
||||||
|
expect(policy.allow(mockAction, context)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
it('Disallows "move" action when navigated object in edit mode,' +
|
it('Disallows "move" action when navigated object in edit mode,' +
|
||||||
' but selected object not in edit mode ', function () {
|
' but selected object not in edit mode ', function () {
|
||||||
|
@ -37,8 +37,8 @@ define(
|
|||||||
);
|
);
|
||||||
mockDomainObject.getCapability.and.returnValue({
|
mockDomainObject.getCapability.and.returnValue({
|
||||||
inEditContext: function () {
|
inEditContext: function () {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
mockDomainObject.hasCapability.and.callFake(function (c) {
|
mockDomainObject.hasCapability.and.callFake(function (c) {
|
||||||
return (c === 'editor') && testMode;
|
return (c === 'editor') && testMode;
|
||||||
|
@ -30,12 +30,6 @@ define(
|
|||||||
mockObjects,
|
mockObjects,
|
||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
testStructure,
|
testStructure,
|
||||||
testAB,
|
|
||||||
testABC,
|
|
||||||
testABC2,
|
|
||||||
testABCXYZ,
|
|
||||||
testABCYZ,
|
|
||||||
testM,
|
|
||||||
toolbar;
|
toolbar;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
@ -53,22 +47,15 @@ define(
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
testStructure = [
|
testStructure = [
|
||||||
{ name: "A", property: "a", domainObject: mockDomainObject },
|
{ name: "A", property: "a", domainObject: mockDomainObject },
|
||||||
{ name: "B", property: "b", domainObject: mockDomainObject },
|
{ name: "B", property: "b", domainObject: mockDomainObject },
|
||||||
{ name: "C", property: "c", domainObject: mockDomainObject },
|
{ name: "C", property: "c", domainObject: mockDomainObject },
|
||||||
{ name: "X", property: "x", domainObject: mockDomainObject },
|
{ name: "X", property: "x", domainObject: mockDomainObject },
|
||||||
{ name: "Y", property: "y", domainObject: mockDomainObject },
|
{ name: "Y", property: "y", domainObject: mockDomainObject },
|
||||||
{ name: "Z", property: "z", domainObject: mockDomainObject },
|
{ name: "Z", property: "z", domainObject: mockDomainObject },
|
||||||
{ name: "M", method: "m", domainObject: mockDomainObject }
|
{ name: "M", method: "m", domainObject: mockDomainObject }
|
||||||
];
|
];
|
||||||
|
|
||||||
testAB = { a: 0, b: 1 };
|
|
||||||
testABC = { a: 0, b: 1, c: 2 };
|
|
||||||
testABC2 = { a: 4, b: 1, c: 2 }; // For inconsistent-state checking
|
|
||||||
testABCXYZ = { a: 0, b: 1, c: 2, x: 'X!', y: 'Y!', z: 'Z!' };
|
|
||||||
testABCYZ = { a: 0, b: 1, c: 2, y: 'Y!', z: 'Z!' };
|
|
||||||
testM = { m: jasmine.createSpy("method") };
|
|
||||||
|
|
||||||
toolbar = new EditToolbar(mockScope, mockOpenMCT, testStructure);
|
toolbar = new EditToolbar(mockScope, mockOpenMCT, testStructure);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -43,13 +43,12 @@ define(["../../src/services/NestedTransaction"], function (NestedTransaction) {
|
|||||||
|
|
||||||
describe("when callbacks are added", function () {
|
describe("when callbacks are added", function () {
|
||||||
var mockCommit,
|
var mockCommit,
|
||||||
mockCancel,
|
mockCancel;
|
||||||
remove;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockCommit = jasmine.createSpy('commit');
|
mockCommit = jasmine.createSpy('commit');
|
||||||
mockCancel = jasmine.createSpy('cancel');
|
mockCancel = jasmine.createSpy('cancel');
|
||||||
remove = nestedTransaction.add(mockCommit, mockCancel);
|
nestedTransaction.add(mockCommit, mockCancel);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not interact with its parent transaction", function () {
|
it("does not interact with its parent transaction", function () {
|
||||||
|
@ -76,8 +76,8 @@ define(
|
|||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
onCommits = [0, 1, 2].map(function (val) {
|
onCommits = [0, 1, 2].map(function (val) {
|
||||||
return jasmine.createSpy("onCommit" + val);
|
return jasmine.createSpy("onCommit" + val);
|
||||||
});
|
});
|
||||||
|
|
||||||
transactionService.startTransaction();
|
transactionService.startTransaction();
|
||||||
onCommits.forEach(transactionService.addToTransaction.bind(transactionService));
|
onCommits.forEach(transactionService.addToTransaction.bind(transactionService));
|
||||||
|
@ -92,8 +92,8 @@ define([
|
|||||||
return true;
|
return true;
|
||||||
}]
|
}]
|
||||||
].filter(function (row) {
|
].filter(function (row) {
|
||||||
return row[1](momentified);
|
return row[1](momentified);
|
||||||
})[0][0];
|
})[0][0];
|
||||||
|
|
||||||
if (format !== undefined) {
|
if (format !== undefined) {
|
||||||
return moment.utc(d).format(format);
|
return moment.utc(d).format(format);
|
||||||
|
@ -52,26 +52,26 @@ define([
|
|||||||
"./src/directives/MCTPreview",
|
"./src/directives/MCTPreview",
|
||||||
"./src/actions/MCTPreviewAction",
|
"./src/actions/MCTPreviewAction",
|
||||||
"./src/filters/ReverseFilter",
|
"./src/filters/ReverseFilter",
|
||||||
"text!./res/templates/bottombar.html",
|
"./res/templates/bottombar.html",
|
||||||
"text!./res/templates/controls/action-button.html",
|
"./res/templates/controls/action-button.html",
|
||||||
"text!./res/templates/controls/input-filter.html",
|
"./res/templates/controls/input-filter.html",
|
||||||
"text!./res/templates/angular-indicator.html",
|
"./res/templates/angular-indicator.html",
|
||||||
"text!./res/templates/message-banner.html",
|
"./res/templates/message-banner.html",
|
||||||
"text!./res/templates/progress-bar.html",
|
"./res/templates/progress-bar.html",
|
||||||
"text!./res/templates/controls/time-controller.html",
|
"./res/templates/controls/time-controller.html",
|
||||||
"text!./res/templates/containers/accordion.html",
|
"./res/templates/containers/accordion.html",
|
||||||
"text!./res/templates/subtree.html",
|
"./res/templates/subtree.html",
|
||||||
"text!./res/templates/tree.html",
|
"./res/templates/tree.html",
|
||||||
"text!./res/templates/tree-node.html",
|
"./res/templates/tree-node.html",
|
||||||
"text!./res/templates/label.html",
|
"./res/templates/label.html",
|
||||||
"text!./res/templates/controls/action-group.html",
|
"./res/templates/controls/action-group.html",
|
||||||
"text!./res/templates/menu/context-menu.html",
|
"./res/templates/menu/context-menu.html",
|
||||||
"text!./res/templates/controls/switcher.html",
|
"./res/templates/controls/switcher.html",
|
||||||
"text!./res/templates/object-inspector.html",
|
"./res/templates/object-inspector.html",
|
||||||
"text!./res/templates/controls/selector.html",
|
"./res/templates/controls/selector.html",
|
||||||
"text!./res/templates/controls/datetime-picker.html",
|
"./res/templates/controls/datetime-picker.html",
|
||||||
"text!./res/templates/controls/datetime-field.html",
|
"./res/templates/controls/datetime-field.html",
|
||||||
"text!./res/templates/preview.html",
|
"./res/templates/preview.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
UrlService,
|
UrlService,
|
||||||
@ -173,12 +173,6 @@ define([
|
|||||||
"key": "reverse"
|
"key": "reverse"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"stylesheets": [
|
|
||||||
{
|
|
||||||
"stylesheetUrl": "css/normalize.min.css",
|
|
||||||
"priority": "mandatory"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"templates": [
|
"templates": [
|
||||||
{
|
{
|
||||||
"key": "bottombar",
|
"key": "bottombar",
|
||||||
@ -418,11 +412,11 @@ define([
|
|||||||
"description": "Preview in large dialog",
|
"description": "Preview in large dialog",
|
||||||
"category": [
|
"category": [
|
||||||
"contextual",
|
"contextual",
|
||||||
"view-control"
|
"view-control"
|
||||||
],
|
],
|
||||||
"depends": [
|
"depends": [
|
||||||
"$compile",
|
"$compile",
|
||||||
"$rootScope"
|
"$rootScope"
|
||||||
],
|
],
|
||||||
"priority": "preferred"
|
"priority": "preferred"
|
||||||
}
|
}
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
/* http://meyerweb.com/eric/tools/css/reset/
|
|
||||||
v2.0 | 20110126
|
|
||||||
License: none (public domain)
|
|
||||||
*/
|
|
||||||
|
|
||||||
html, body, div, span, applet, object, iframe,
|
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
|
||||||
a, abbr, acronym, address, big, cite, code,
|
|
||||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
|
||||||
small, strike, strong, sub, sup, tt, var,
|
|
||||||
b, u, i, center,
|
|
||||||
dl, dt, dd, ol, ul, li,
|
|
||||||
fieldset, form, label, legend,
|
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, embed,
|
|
||||||
figure, figcaption, footer, header, hgroup,
|
|
||||||
menu, nav, output, ruby, section, summary,
|
|
||||||
time, mark, audio, video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
font: inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
/* HTML5 display-role reset for older browsers */
|
|
||||||
article, aside, details, figcaption, figure,
|
|
||||||
footer, header, hgroup, menu, nav, section {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
ol, ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
blockquote, q {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
blockquote:before, blockquote:after,
|
|
||||||
q:before, q:after {
|
|
||||||
content: '';
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
@ -38,8 +38,8 @@ define(
|
|||||||
// Refresh variable "menuActions" in the scope
|
// Refresh variable "menuActions" in the scope
|
||||||
function updateActions() {
|
function updateActions() {
|
||||||
$scope.menuActions = $scope.action ?
|
$scope.menuActions = $scope.action ?
|
||||||
$scope.action.getActions({ category: 'contextual' }) :
|
$scope.action.getActions({ category: 'contextual' }) :
|
||||||
[];
|
[];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update using the action capability
|
// Update using the action capability
|
||||||
|
@ -188,7 +188,7 @@ define(
|
|||||||
// Ensure some useful default
|
// Ensure some useful default
|
||||||
$scope.ngModel[$scope.field] =
|
$scope.ngModel[$scope.field] =
|
||||||
$scope.ngModel[$scope.field] === undefined ?
|
$scope.ngModel[$scope.field] === undefined ?
|
||||||
now() : $scope.ngModel[$scope.field];
|
now() : $scope.ngModel[$scope.field];
|
||||||
|
|
||||||
$scope.$watch('ngModel[field]', updateFromModel);
|
$scope.$watch('ngModel[field]', updateFromModel);
|
||||||
$scope.$watchCollection('date', updateFromView);
|
$scope.$watchCollection('date', updateFromView);
|
||||||
|
@ -28,16 +28,16 @@ define(['zepto', '../services/Overlay'], function ($, Overlay) {
|
|||||||
notebookAction = actions.getActions({key: 'notebook-new-entry'})[0];
|
notebookAction = actions.getActions({key: 'notebook-new-entry'})[0];
|
||||||
|
|
||||||
var notebookButton = notebookAction ?
|
var notebookButton = notebookAction ?
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
class: 'icon-notebook new-notebook-entry',
|
class: 'icon-notebook new-notebook-entry',
|
||||||
title: 'New Notebook Entry',
|
title: 'New Notebook Entry',
|
||||||
clickHandler: function (event) {
|
clickHandler: function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
notebookAction.perform();
|
notebookAction.perform();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
] : [];
|
||||||
] : [];
|
|
||||||
|
|
||||||
var overlayService = new Overlay({
|
var overlayService = new Overlay({
|
||||||
$document: $document,
|
$document: $document,
|
||||||
|
@ -62,8 +62,8 @@ define(
|
|||||||
// Determine how long to wait before the next update
|
// Determine how long to wait before the next update
|
||||||
function currentInterval() {
|
function currentInterval() {
|
||||||
return attrs.mctResizeInterval ?
|
return attrs.mctResizeInterval ?
|
||||||
scope.$eval(attrs.mctResizeInterval) :
|
scope.$eval(attrs.mctResizeInterval) :
|
||||||
DEFAULT_INTERVAL;
|
DEFAULT_INTERVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Evaluate mct-resize with the current bounds
|
// Evaluate mct-resize with the current bounds
|
||||||
|
@ -103,16 +103,16 @@ define(
|
|||||||
splitterSize,
|
splitterSize,
|
||||||
|
|
||||||
alias = $attrs.alias !== undefined ?
|
alias = $attrs.alias !== undefined ?
|
||||||
"mctSplitPane-" + $attrs.alias : undefined,
|
"mctSplitPane-" + $attrs.alias : undefined,
|
||||||
|
|
||||||
//convert string to number from localStorage
|
//convert string to number from localStorage
|
||||||
userWidthPreference = $window.localStorage.getItem(alias) === null ?
|
userWidthPreference = $window.localStorage.getItem(alias) === null ?
|
||||||
undefined : Number($window.localStorage.getItem(alias));
|
undefined : Number($window.localStorage.getItem(alias));
|
||||||
|
|
||||||
// Get relevant size (height or width) of DOM element
|
// Get relevant size (height or width) of DOM element
|
||||||
function getSize(domElement) {
|
function getSize(domElement) {
|
||||||
return (anchor.orientation === 'vertical' ?
|
return (anchor.orientation === 'vertical' ?
|
||||||
domElement.offsetWidth : domElement.offsetHeight);
|
domElement.offsetWidth : domElement.offsetHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply styles to child elements
|
// Apply styles to child elements
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* at runtime from the About dialog for additional information.
|
* at runtime from the About dialog for additional information.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module defining OverlayService. Created by deeptailor on 03/29/2018
|
* Module defining OverlayService. Created by deeptailor on 03/29/2018
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
define([
|
define([
|
||||||
'zepto',
|
'zepto',
|
||||||
'text!../../res/templates/tree/toggle.html'
|
'../../res/templates/tree/toggle.html'
|
||||||
], function ($, toggleTemplate) {
|
], function ($, toggleTemplate) {
|
||||||
function ToggleView(state) {
|
function ToggleView(state) {
|
||||||
this.expanded = !!state;
|
this.expanded = !!state;
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
define([
|
define([
|
||||||
'zepto',
|
'zepto',
|
||||||
'text!../../res/templates/tree/tree-label.html'
|
'../../res/templates/tree/tree-label.html'
|
||||||
], function ($, labelTemplate) {
|
], function ($, labelTemplate) {
|
||||||
|
|
||||||
function TreeLabelView(gestureService) {
|
function TreeLabelView(gestureService) {
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
define([
|
define([
|
||||||
'zepto',
|
'zepto',
|
||||||
'text!../../res/templates/tree/node.html',
|
'../../res/templates/tree/node.html',
|
||||||
'./ToggleView',
|
'./ToggleView',
|
||||||
'./TreeLabelView'
|
'./TreeLabelView'
|
||||||
], function ($, nodeTemplate, ToggleView, TreeLabelView) {
|
], function ($, nodeTemplate, ToggleView, TreeLabelView) {
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
define([
|
define([
|
||||||
'zepto',
|
'zepto',
|
||||||
'./TreeNodeView',
|
'./TreeNodeView',
|
||||||
'text!../../res/templates/tree/wait-node.html'
|
'../../res/templates/tree/wait-node.html'
|
||||||
], function ($, TreeNodeView, spinnerTemplate) {
|
], function ($, TreeNodeView, spinnerTemplate) {
|
||||||
|
|
||||||
function TreeView(gestureService, openmct, selectFn) {
|
function TreeView(gestureService, openmct, selectFn) {
|
||||||
|
@ -31,7 +31,7 @@ define(
|
|||||||
mockHead,
|
mockHead,
|
||||||
mockElement,
|
mockElement,
|
||||||
testBundle,
|
testBundle,
|
||||||
loader;
|
loader; // eslint-disable-line
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
testBundle = {
|
testBundle = {
|
||||||
|
@ -41,7 +41,6 @@ define(
|
|||||||
mockScope,
|
mockScope,
|
||||||
mockElement,
|
mockElement,
|
||||||
testAttrs,
|
testAttrs,
|
||||||
mockBody,
|
|
||||||
mockTransclude,
|
mockTransclude,
|
||||||
mockParentEl,
|
mockParentEl,
|
||||||
mockNewElement,
|
mockNewElement,
|
||||||
@ -59,8 +58,6 @@ define(
|
|||||||
jasmine.createSpyObj("$scope", ["$eval", "$apply", "$on"]);
|
jasmine.createSpyObj("$scope", ["$eval", "$apply", "$on"]);
|
||||||
mockElement =
|
mockElement =
|
||||||
jasmine.createSpyObj("element", JQLITE_METHODS);
|
jasmine.createSpyObj("element", JQLITE_METHODS);
|
||||||
mockBody =
|
|
||||||
jasmine.createSpyObj("body", JQLITE_METHODS);
|
|
||||||
mockTransclude =
|
mockTransclude =
|
||||||
jasmine.createSpy("transclude");
|
jasmine.createSpy("transclude");
|
||||||
mockParentEl =
|
mockParentEl =
|
||||||
|
@ -25,13 +25,13 @@ define(
|
|||||||
function (MCTSplitPane) {
|
function (MCTSplitPane) {
|
||||||
|
|
||||||
var JQLITE_METHODS = [
|
var JQLITE_METHODS = [
|
||||||
'on',
|
'on',
|
||||||
'addClass',
|
'addClass',
|
||||||
'children',
|
'children',
|
||||||
'eq',
|
'eq',
|
||||||
'toggleClass',
|
'toggleClass',
|
||||||
'css'
|
'css'
|
||||||
];
|
];
|
||||||
|
|
||||||
describe("The mct-split-pane directive", function () {
|
describe("The mct-split-pane directive", function () {
|
||||||
var mockParse,
|
var mockParse,
|
||||||
|
@ -24,10 +24,10 @@ define([
|
|||||||
"./src/gestures/InfoGesture",
|
"./src/gestures/InfoGesture",
|
||||||
"./src/gestures/InfoButtonGesture",
|
"./src/gestures/InfoButtonGesture",
|
||||||
"./src/services/InfoService",
|
"./src/services/InfoService",
|
||||||
"text!./res/info-table.html",
|
"./res/info-table.html",
|
||||||
"text!./res/info-bubble.html",
|
"./res/info-bubble.html",
|
||||||
"text!./res/bubble.html",
|
"./res/bubble.html",
|
||||||
"text!./res/templates/info-button.html",
|
"./res/templates/info-button.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
InfoGesture,
|
InfoGesture,
|
||||||
|
@ -25,8 +25,7 @@ define(
|
|||||||
function (InfoButtonGesture) {
|
function (InfoButtonGesture) {
|
||||||
|
|
||||||
describe("The info button gesture", function () {
|
describe("The info button gesture", function () {
|
||||||
var mockTimeout,
|
var mockDocument,
|
||||||
mockDocument,
|
|
||||||
mockBody,
|
mockBody,
|
||||||
mockAgentService,
|
mockAgentService,
|
||||||
mockInfoService,
|
mockInfoService,
|
||||||
@ -42,7 +41,6 @@ define(
|
|||||||
fireDismissGesture;
|
fireDismissGesture;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockTimeout = jasmine.createSpy('$timeout');
|
|
||||||
mockDocument = jasmine.createSpyObj('$document', ['find']);
|
mockDocument = jasmine.createSpyObj('$document', ['find']);
|
||||||
mockBody = jasmine.createSpyObj('body', ['on', 'off', 'scope', 'css', 'unbind']);
|
mockBody = jasmine.createSpyObj('body', ['on', 'off', 'scope', 'css', 'unbind']);
|
||||||
mockDocument.find.and.returnValue(mockBody);
|
mockDocument.find.and.returnValue(mockBody);
|
||||||
|
@ -114,9 +114,9 @@ define(
|
|||||||
location = [vertical, horizontal].join('-');
|
location = [vertical, horizontal].join('-');
|
||||||
describe("when bubble goes " + location, function () {
|
describe("when bubble goes " + location, function () {
|
||||||
var expectedLocation = [
|
var expectedLocation = [
|
||||||
goesUp ? "bottom" : "top",
|
goesUp ? "bottom" : "top",
|
||||||
goesLeft ? "right" : "left"
|
goesLeft ? "right" : "left"
|
||||||
].join('-');
|
].join('-');
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockPopup.goesUp.and.returnValue(goesUp);
|
mockPopup.goesUp.and.returnValue(goesUp);
|
||||||
|
@ -70,11 +70,11 @@ define(
|
|||||||
|
|
||||||
TEST_PERMUTATIONS.forEach(function (trueMethods) {
|
TEST_PERMUTATIONS.forEach(function (trueMethods) {
|
||||||
var summary = trueMethods.length === 0 ?
|
var summary = trueMethods.length === 0 ?
|
||||||
"device has no detected characteristics" :
|
"device has no detected characteristics" :
|
||||||
"device " + (trueMethods.join(", "));
|
"device " + (trueMethods.join(", "));
|
||||||
|
|
||||||
describe("when " + summary, function () {
|
describe("when " + summary, function () {
|
||||||
var classifier;
|
var classifier; // eslint-disable-line
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
trueMethods.forEach(function (m) {
|
trueMethods.forEach(function (m) {
|
||||||
|
@ -24,7 +24,7 @@ define([
|
|||||||
"./src/NotificationIndicatorController",
|
"./src/NotificationIndicatorController",
|
||||||
"./src/NotificationIndicator",
|
"./src/NotificationIndicator",
|
||||||
"./src/NotificationService",
|
"./src/NotificationService",
|
||||||
"text!./res/notification-indicator.html",
|
"./res/notification-indicator.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
NotificationIndicatorController,
|
NotificationIndicatorController,
|
||||||
|
@ -283,10 +283,10 @@ define(
|
|||||||
*/
|
*/
|
||||||
NotificationService.prototype.setHighestSeverity = function () {
|
NotificationService.prototype.setHighestSeverity = function () {
|
||||||
var severity = {
|
var severity = {
|
||||||
"info": 1,
|
"info": 1,
|
||||||
"alert": 2,
|
"alert": 2,
|
||||||
"error": 3
|
"error": 3
|
||||||
};
|
};
|
||||||
this.highest.severity = this.notifications.reduce(function (previous, notification) {
|
this.highest.severity = this.notifications.reduce(function (previous, notification) {
|
||||||
if (severity[notification.model.severity] > severity[previous]) {
|
if (severity[notification.model.severity] > severity[previous]) {
|
||||||
return notification.model.severity;
|
return notification.model.severity;
|
||||||
|
@ -41,7 +41,7 @@ define(
|
|||||||
editableRegionPolicy = new EditableRegionPolicy();
|
editableRegionPolicy = new EditableRegionPolicy();
|
||||||
|
|
||||||
mockEditorCapability = jasmine.createSpyObj("editorCapability", [
|
mockEditorCapability = jasmine.createSpyObj("editorCapability", [
|
||||||
"inEditContext"
|
"inEditContext"
|
||||||
]);
|
]);
|
||||||
mockDomainObject = jasmine.createSpyObj("domainObject", [
|
mockDomainObject = jasmine.createSpyObj("domainObject", [
|
||||||
"hasCapability", "getCapability"
|
"hasCapability", "getCapability"
|
||||||
|
@ -41,11 +41,11 @@ define(
|
|||||||
it("adding a region at a specified index adds it in that" +
|
it("adding a region at a specified index adds it in that" +
|
||||||
" position", function () {
|
" position", function () {
|
||||||
|
|
||||||
region.addRegion(part2, 1);
|
region.addRegion(part2, 1);
|
||||||
|
|
||||||
expect(region.regions.length).toBe(4);
|
expect(region.regions.length).toBe(4);
|
||||||
expect(region.regions[1]).toBe(part2);
|
expect(region.regions[1]).toBe(part2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("adding a region without an index adds it at the end", function () {
|
it("adding a region without an index adds it at the end", function () {
|
||||||
var partN = new Region({'name': 'partN'});
|
var partN = new Region({'name': 'partN'});
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
define([
|
|
||||||
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
|
|
||||||
legacyRegistry.register("platform/commonUI/themes/espresso", {
|
|
||||||
"name": "Espresso",
|
|
||||||
"description": "Espresso theme: dark and rich",
|
|
||||||
"extensions": {
|
|
||||||
"stylesheets": [
|
|
||||||
{
|
|
||||||
"stylesheetUrl": "css/theme-espresso.css",
|
|
||||||
"priority": 1000
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"constants": [
|
|
||||||
{
|
|
||||||
"key": "THEME",
|
|
||||||
"value": "espresso"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,49 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
define([
|
|
||||||
|
|
||||||
'legacyRegistry'
|
|
||||||
], function (
|
|
||||||
|
|
||||||
legacyRegistry
|
|
||||||
) {
|
|
||||||
|
|
||||||
legacyRegistry.register("platform/commonUI/themes/snow", {
|
|
||||||
"name": "Snow",
|
|
||||||
"description": "Snow theme: light and cool",
|
|
||||||
"extensions": {
|
|
||||||
"stylesheets": [
|
|
||||||
{
|
|
||||||
"stylesheetUrl": "css/theme-snow.css",
|
|
||||||
"priority": 1000
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"constants": [
|
|
||||||
{
|
|
||||||
"key": "THEME",
|
|
||||||
"value": "snow"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
@ -52,7 +52,7 @@ define(
|
|||||||
|
|
||||||
// Convert to an array if necessary
|
// Convert to an array if necessary
|
||||||
categories = Array.isArray(categories) ?
|
categories = Array.isArray(categories) ?
|
||||||
categories : [categories];
|
categories : [categories];
|
||||||
|
|
||||||
// Store action under all relevant categories
|
// Store action under all relevant categories
|
||||||
categories.forEach(function (category) {
|
categories.forEach(function (category) {
|
||||||
|
@ -62,7 +62,7 @@ define(
|
|||||||
CompositionCapability.prototype.add = function (domainObject, index) {
|
CompositionCapability.prototype.add = function (domainObject, index) {
|
||||||
var self = this,
|
var self = this,
|
||||||
id = typeof domainObject === 'string' ?
|
id = typeof domainObject === 'string' ?
|
||||||
domainObject : domainObject.getId(),
|
domainObject : domainObject.getId(),
|
||||||
model = self.domainObject.getModel(),
|
model = self.domainObject.getModel(),
|
||||||
composition = model.composition,
|
composition = model.composition,
|
||||||
oldIndex = composition.indexOf(id);
|
oldIndex = composition.indexOf(id);
|
||||||
@ -104,7 +104,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return this.domainObject.useCapability('mutation', addIdToModel)
|
return this.domainObject.useCapability('mutation', addIdToModel)
|
||||||
.then(contextualize);
|
.then(contextualize);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,7 +82,7 @@ define(
|
|||||||
parentContext =
|
parentContext =
|
||||||
parentObject && parentObject.getCapability('context'),
|
parentObject && parentObject.getCapability('context'),
|
||||||
parentPath = parentContext ?
|
parentPath = parentContext ?
|
||||||
parentContext.getPath() : [this.parentObject];
|
parentContext.getPath() : [this.parentObject];
|
||||||
|
|
||||||
return parentPath.concat([this.domainObject]);
|
return parentPath.concat([this.domainObject]);
|
||||||
};
|
};
|
||||||
@ -102,8 +102,8 @@ define(
|
|||||||
this.parentObject.getCapability('context');
|
this.parentObject.getCapability('context');
|
||||||
|
|
||||||
return parentContext ?
|
return parentContext ?
|
||||||
parentContext.getRoot() :
|
parentContext.getRoot() :
|
||||||
(this.parentObject || this.domainObject);
|
(this.parentObject || this.domainObject);
|
||||||
};
|
};
|
||||||
|
|
||||||
return ContextCapability;
|
return ContextCapability;
|
||||||
|
@ -54,8 +54,8 @@ define(
|
|||||||
// Intercept requests for a context capability.
|
// Intercept requests for a context capability.
|
||||||
contextualObject.getCapability = function (name) {
|
contextualObject.getCapability = function (name) {
|
||||||
return name === "context" ?
|
return name === "context" ?
|
||||||
contextCapability :
|
contextCapability :
|
||||||
domainObject.getCapability.apply(this, arguments);
|
domainObject.getCapability.apply(this, arguments);
|
||||||
};
|
};
|
||||||
|
|
||||||
return contextualObject;
|
return contextualObject;
|
||||||
|
@ -56,8 +56,8 @@ define(
|
|||||||
function filterCapabilities(model, id) {
|
function filterCapabilities(model, id) {
|
||||||
return capabilities.filter(function (capability) {
|
return capabilities.filter(function (capability) {
|
||||||
return capability.appliesTo ?
|
return capability.appliesTo ?
|
||||||
capability.appliesTo(model, id) :
|
capability.appliesTo(model, id) :
|
||||||
true;
|
true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,10 +91,10 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return this.doesDelegateCapability(key) ?
|
return this.doesDelegateCapability(key) ?
|
||||||
promiseChildren().then(
|
promiseChildren().then(
|
||||||
filterObjectsWithCapability(key)
|
filterObjectsWithCapability(key)
|
||||||
) :
|
) :
|
||||||
this.$q.when([]);
|
this.$q.when([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user