Compare commits
57 Commits
select-tab
...
fix-lint-e
Author | SHA1 | Date | |
---|---|---|---|
1e64cf4657 | |||
60ba2c23e6 | |||
606aaf29c7 | |||
61c31454ac | |||
8b715f331c | |||
d6950a0976 | |||
68f3436792 | |||
4414161faf | |||
5f1dc5d5e2 | |||
7477536478 | |||
c13b07e648 | |||
2ecff75da5 | |||
ff5b88b544 | |||
9b7a986475 | |||
c054914a9c | |||
69b6f8afa9 | |||
45164a2f68 | |||
b189a887e6 | |||
71abfbc336 | |||
ee690545fb | |||
fcf3c76aa1 | |||
5dbd77d10c | |||
43515ca84e | |||
54fe881e71 | |||
7c32700b69 | |||
e98d0cc7c5 | |||
2200503e48 | |||
8f0081acc8 | |||
003c3e9fbe | |||
bba3306a98 | |||
35743577c9 | |||
7b2b682eea | |||
51ab52e9f1 | |||
acc24ccd72 | |||
02ef58ced1 | |||
e89881c266 | |||
fa66289d5c | |||
4f3a3befe0 | |||
a0864a8702 | |||
a34ad4e58c | |||
7e50010463 | |||
974be0ae2c | |||
3dc6dac12d | |||
aafe524454 | |||
e84ade1752 | |||
3b094e43e3 | |||
e6a7b4ed6c | |||
97230bb21f | |||
768d99d928 | |||
c760190a29 | |||
7fe4a77c43 | |||
8578d78c51 | |||
362e565a09 | |||
9517c1f2cd | |||
262d35804d | |||
e0587bf0e7 | |||
f1494fd285 |
@ -99,10 +99,10 @@ define([
|
|||||||
|
|
||||||
GeneratorMetadataProvider.prototype.getMetadata = function (domainObject) {
|
GeneratorMetadataProvider.prototype.getMetadata = function (domainObject) {
|
||||||
return _.extend(
|
return _.extend(
|
||||||
{},
|
{},
|
||||||
domainObject.telemetry,
|
domainObject.telemetry,
|
||||||
METADATA_BY_TYPE[domainObject.type]
|
METADATA_BY_TYPE[domainObject.type]
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
return GeneratorMetadataProvider;
|
return GeneratorMetadataProvider;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<span class="h-indicator" ng-controller="DialogLaunchController">
|
<span class="h-indicator" ng-controller="DialogLaunchController">
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator icon-box-with-arrow s-status-available"><span class="label">
|
<div class="c-indicator c-indicator--clickable icon-box-with-arrow s-status-available"><span class="label c-indicator__label">
|
||||||
<a ng-click="launchProgress(true)">Known</a>
|
<button ng-click="launchProgress(true)">Known</button>
|
||||||
<a ng-click="launchProgress(false)">Unknown</a>
|
<button ng-click="launchProgress(false)">Unknown</button>
|
||||||
<a ng-click="launchError()">Error</a>
|
<button ng-click="launchError()">Error</button>
|
||||||
<a ng-click="launchInfo()">Info</a>
|
<button ng-click="launchInfo()">Info</button>
|
||||||
</span></div>
|
</span></div>
|
||||||
</span>
|
</span>
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<span class="h-indicator" ng-controller="NotificationLaunchController">
|
<span class="h-indicator" ng-controller="NotificationLaunchController">
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator icon-bell s-status-available"><span class="label">
|
<div class="c-indicator c-indicator--clickable icon-bell s-status-available"><span class="label c-indicator__label">
|
||||||
<a ng-click="newInfo()">Success</a>
|
<button ng-click="newInfo()">Success</button>
|
||||||
<a ng-click="newError()">Error</a>
|
<button ng-click="newError()">Error</button>
|
||||||
<a ng-click="newAlert()">Alert</a>
|
<button ng-click="newAlert()">Alert</button>
|
||||||
<a ng-click="newProgress()">Progress</a>
|
<button ng-click="newProgress()">Progress</button>
|
||||||
</span></div>
|
</span></div>
|
||||||
</span>
|
</span>
|
||||||
|
14
index.html
@ -27,11 +27,9 @@
|
|||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<title></title>
|
<title></title>
|
||||||
<script src="dist/openmct.js"></script>
|
<script src="dist/openmct.js"></script>
|
||||||
<link rel="stylesheet" href="dist/styles/openmct.css">
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-96x96.png" sizes="96x96" type="image/x-icon">
|
||||||
<link rel="icon" type="image/png" href="dist/favicons/favicon-32x32.png" sizes="32x32">
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-32x32.png" sizes="32x32" type="image/x-icon">
|
||||||
<link rel="icon" type="image/png" href="dist/favicons/favicon-96x96.png" sizes="96x96">
|
<link rel="icon" type="image/png" href="dist/favicons/favicon-16x16.png" sizes="16x16" type="image/x-icon">
|
||||||
<link rel="icon" type="image/png" href="dist/favicons/favicon-16x16.png" sizes="16x16">
|
|
||||||
<link rel="shortcut icon" href="dist/favicons/favicon.ico">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
</body>
|
</body>
|
||||||
@ -50,7 +48,6 @@
|
|||||||
openmct.install(openmct.plugins.Generator());
|
openmct.install(openmct.plugins.Generator());
|
||||||
openmct.install(openmct.plugins.ExampleImagery());
|
openmct.install(openmct.plugins.ExampleImagery());
|
||||||
openmct.install(openmct.plugins.UTCTimeSystem());
|
openmct.install(openmct.plugins.UTCTimeSystem());
|
||||||
openmct.install(openmct.plugins.ImportExport());
|
|
||||||
openmct.install(openmct.plugins.AutoflowView({
|
openmct.install(openmct.plugins.AutoflowView({
|
||||||
type: "telemetry.panel"
|
type: "telemetry.panel"
|
||||||
}));
|
}));
|
||||||
@ -80,13 +77,10 @@
|
|||||||
}));
|
}));
|
||||||
openmct.install(openmct.plugins.SummaryWidget());
|
openmct.install(openmct.plugins.SummaryWidget());
|
||||||
openmct.install(openmct.plugins.Notebook());
|
openmct.install(openmct.plugins.Notebook());
|
||||||
openmct.install(openmct.plugins.FolderView());
|
|
||||||
openmct.install(openmct.plugins.Tabs());
|
|
||||||
openmct.install(openmct.plugins.FlexibleLayout());
|
|
||||||
openmct.install(openmct.plugins.LADTable());
|
openmct.install(openmct.plugins.LADTable());
|
||||||
openmct.install(openmct.plugins.Filters(['table', 'telemetry.plot.overlay']));
|
openmct.install(openmct.plugins.Filters(['table', 'telemetry.plot.overlay']));
|
||||||
openmct.install(openmct.plugins.ObjectMigration());
|
openmct.install(openmct.plugins.ObjectMigration());
|
||||||
openmct.install(openmct.plugins.GoToOriginalAction());
|
openmct.install(openmct.plugins.ClearData(['table', 'telemetry.plot.overlay', 'telemetry.plot.stacked']));
|
||||||
openmct.start();
|
openmct.start();
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
/*global module,process*/
|
/*global module,process*/
|
||||||
|
|
||||||
const devMode = process.env.NODE_ENV !== 'production';
|
const devMode = process.env.NODE_ENV !== 'production';
|
||||||
|
const browsers = [process.env.NODE_ENV === 'debug' ? 'ChromeDebugging' : 'ChromeHeadless'];
|
||||||
|
|
||||||
module.exports = (config) => {
|
module.exports = (config) => {
|
||||||
|
|
||||||
const webpackConfig = require('./webpack.config.js');
|
const webpackConfig = require('./webpack.config.js');
|
||||||
delete webpackConfig.output;
|
delete webpackConfig.output;
|
||||||
|
|
||||||
@ -50,11 +50,17 @@ module.exports = (config) => {
|
|||||||
'coverage',
|
'coverage',
|
||||||
'html'
|
'html'
|
||||||
],
|
],
|
||||||
browsers: ['ChromeHeadless'],
|
browsers: browsers,
|
||||||
|
customLaunchers: {
|
||||||
|
ChromeDebugging: {
|
||||||
|
base: 'Chrome',
|
||||||
|
flags: ['--remote-debugging-port=9222'],
|
||||||
|
debug: true
|
||||||
|
}
|
||||||
|
},
|
||||||
colors: true,
|
colors: true,
|
||||||
logLevel: config.LOG_INFO,
|
logLevel: config.LOG_INFO,
|
||||||
autoWatch: true,
|
autoWatch: true,
|
||||||
|
|
||||||
coverageReporter: {
|
coverageReporter: {
|
||||||
dir: process.env.CIRCLE_ARTIFACTS ?
|
dir: process.env.CIRCLE_ARTIFACTS ?
|
||||||
process.env.CIRCLE_ARTIFACTS + '/coverage' :
|
process.env.CIRCLE_ARTIFACTS + '/coverage' :
|
||||||
@ -66,22 +72,18 @@ module.exports = (config) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// HTML test reporting.
|
// HTML test reporting.
|
||||||
htmlReporter: {
|
htmlReporter: {
|
||||||
outputDir: "dist/reports/tests",
|
outputDir: "dist/reports/tests",
|
||||||
preserveDescribeNesting: true,
|
preserveDescribeNesting: true,
|
||||||
foldAll: false
|
foldAll: false
|
||||||
},
|
},
|
||||||
|
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
// add webpack as preprocessor
|
// add webpack as preprocessor
|
||||||
'platform/**/*Spec.js': [ 'webpack' ],
|
'platform/**/*Spec.js': [ 'webpack', 'sourcemap' ],
|
||||||
'src/**/*Spec.js': [ 'webpack' ]
|
'src/**/*Spec.js': [ 'webpack', 'sourcemap' ]
|
||||||
},
|
},
|
||||||
|
|
||||||
webpack: webpackConfig,
|
webpack: webpackConfig,
|
||||||
|
|
||||||
webpackMiddleware: {
|
webpackMiddleware: {
|
||||||
stats: 'errors-only',
|
stats: 'errors-only',
|
||||||
logLevel: 'warn'
|
logLevel: 'warn'
|
||||||
@ -89,4 +91,3 @@ module.exports = (config) => {
|
|||||||
singleRun: true
|
singleRun: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
* 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 module,BUILD_CONSTANTS*/
|
/*global module*/
|
||||||
|
|
||||||
const matcher = /\/openmct.js$/;
|
const matcher = /\/openmct.js$/;
|
||||||
if (document.currentScript) {
|
if (document.currentScript) {
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "openmct",
|
"name": "openmct",
|
||||||
"version": "0.14.0-SNAPSHOT",
|
"version": "1.0.0-beta",
|
||||||
"description": "The Open MCT core platform",
|
"description": "The Open MCT core platform",
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"acorn": "6.2.0",
|
||||||
"angular": "1.4.14",
|
"angular": "1.4.14",
|
||||||
"angular-route": "1.4.14",
|
"angular-route": "1.4.14",
|
||||||
"babel-eslint": "8.2.6",
|
"babel-eslint": "8.2.6",
|
||||||
@ -42,6 +43,7 @@
|
|||||||
"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-sourcemap-loader": "^0.3.7",
|
||||||
"karma-webpack": "^3.0.0",
|
"karma-webpack": "^3.0.0",
|
||||||
"location-bar": "^3.0.1",
|
"location-bar": "^3.0.1",
|
||||||
"lodash": "^3.10.1",
|
"lodash": "^3.10.1",
|
||||||
@ -78,6 +80,7 @@
|
|||||||
"build:dev": "webpack",
|
"build:dev": "webpack",
|
||||||
"build:watch": "webpack --watch",
|
"build:watch": "webpack --watch",
|
||||||
"test": "karma start --single-run",
|
"test": "karma start --single-run",
|
||||||
|
"test-debug": "NODE_ENV=debug karma start --no-single-run",
|
||||||
"test:watch": "karma start --no-single-run",
|
"test:watch": "karma start --no-single-run",
|
||||||
"verify": "concurrently 'npm:test' 'npm:lint'",
|
"verify": "concurrently 'npm:test' 'npm:lint'",
|
||||||
"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",
|
||||||
|
@ -21,12 +21,6 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
define([
|
define([
|
||||||
"./src/BrowseController",
|
|
||||||
"./src/PaneController",
|
|
||||||
"./src/InspectorPaneController",
|
|
||||||
"./src/BrowseObjectController",
|
|
||||||
"./src/MenuArrowController",
|
|
||||||
"./src/ObjectHeaderController",
|
|
||||||
"./src/navigation/NavigationService",
|
"./src/navigation/NavigationService",
|
||||||
"./src/navigation/NavigateAction",
|
"./src/navigation/NavigateAction",
|
||||||
"./src/navigation/OrphanNavigationHandler",
|
"./src/navigation/OrphanNavigationHandler",
|
||||||
@ -41,12 +35,6 @@ define([
|
|||||||
"./res/templates/browse/inspector-region.html",
|
"./res/templates/browse/inspector-region.html",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
BrowseController,
|
|
||||||
PaneController,
|
|
||||||
InspectorPaneController,
|
|
||||||
BrowseObjectController,
|
|
||||||
MenuArrowController,
|
|
||||||
ObjectHeaderController,
|
|
||||||
NavigationService,
|
NavigationService,
|
||||||
NavigateAction,
|
NavigateAction,
|
||||||
OrphanNavigationHandler,
|
OrphanNavigationHandler,
|
||||||
@ -73,70 +61,6 @@ define([
|
|||||||
"priority": "fallback"
|
"priority": "fallback"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"controllers": [
|
|
||||||
{
|
|
||||||
"key": "BrowseController",
|
|
||||||
"implementation": BrowseController,
|
|
||||||
"depends": [
|
|
||||||
"$scope",
|
|
||||||
"$route",
|
|
||||||
"$location",
|
|
||||||
"objectService",
|
|
||||||
"navigationService",
|
|
||||||
"urlService",
|
|
||||||
"DEFAULT_PATH"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "PaneController",
|
|
||||||
"implementation": PaneController,
|
|
||||||
"priority": "preferred",
|
|
||||||
"depends": [
|
|
||||||
"$scope",
|
|
||||||
"agentService",
|
|
||||||
"$window",
|
|
||||||
"$location",
|
|
||||||
"$attrs",
|
|
||||||
"navigationService"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "BrowseObjectController",
|
|
||||||
"implementation": BrowseObjectController,
|
|
||||||
"depends": [
|
|
||||||
"$scope",
|
|
||||||
"$location",
|
|
||||||
"$route"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "MenuArrowController",
|
|
||||||
"implementation": MenuArrowController,
|
|
||||||
"depends": [
|
|
||||||
"$scope"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "InspectorPaneController",
|
|
||||||
"implementation": InspectorPaneController,
|
|
||||||
"priority": "preferred",
|
|
||||||
"depends": [
|
|
||||||
"$scope",
|
|
||||||
"agentService",
|
|
||||||
"$window",
|
|
||||||
"navigationService",
|
|
||||||
"$location",
|
|
||||||
"$attrs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "ObjectHeaderController",
|
|
||||||
"implementation": ObjectHeaderController,
|
|
||||||
"depends": [
|
|
||||||
"$scope"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"representations": [
|
"representations": [
|
||||||
{
|
{
|
||||||
"key": "browse-object",
|
"key": "browse-object",
|
||||||
|
@ -1,215 +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.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This bundle implements Browse mode.
|
|
||||||
* @namespace platform/commonUI/browse
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
['lodash'],
|
|
||||||
function (_) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The BrowseController is used to populate the initial scope in Browse
|
|
||||||
* mode. It loads the root object from the objectService and makes it
|
|
||||||
* available in the scope for Angular template's; this is the point at
|
|
||||||
* which Angular templates first have access to the domain object
|
|
||||||
* hierarchy.
|
|
||||||
*
|
|
||||||
* @memberof platform/commonUI/browse
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function BrowseController(
|
|
||||||
$scope,
|
|
||||||
$route,
|
|
||||||
$location,
|
|
||||||
objectService,
|
|
||||||
navigationService,
|
|
||||||
urlService,
|
|
||||||
defaultPath
|
|
||||||
) {
|
|
||||||
window.browseScope = $scope;
|
|
||||||
var initialPath = ($route.current.params.ids || defaultPath).split("/"),
|
|
||||||
currentIds;
|
|
||||||
|
|
||||||
$scope.treeModel = {
|
|
||||||
selectedObject: undefined,
|
|
||||||
onSelection: function (object) {
|
|
||||||
navigationService.setNavigation(object, true);
|
|
||||||
},
|
|
||||||
allowSelection: function (object) {
|
|
||||||
var domainObjectInView = navigationService.getNavigation(),
|
|
||||||
isInEditMode = domainObjectInView.getCapability('status').get('editing');
|
|
||||||
|
|
||||||
if (isInEditMode) {
|
|
||||||
|
|
||||||
var actions = object.getCapability('action'),
|
|
||||||
previewAction = actions.getActions({key: 'mct-preview-action'})[0];
|
|
||||||
|
|
||||||
if (previewAction && previewAction.perform) {
|
|
||||||
previewAction.perform();
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return navigationService.shouldNavigate();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function idsForObject(domainObject) {
|
|
||||||
return urlService
|
|
||||||
.urlForLocation("", domainObject)
|
|
||||||
.replace('/', '');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find an object in an array of objects.
|
|
||||||
function findObject(domainObjects, id) {
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < domainObjects.length; i += 1) {
|
|
||||||
if (domainObjects[i].getId() === id) {
|
|
||||||
return domainObjects[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// helper, fetch a single object from the object service.
|
|
||||||
function getObject(id) {
|
|
||||||
return objectService.getObjects([id])
|
|
||||||
.then(function (results) {
|
|
||||||
return results[id];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// recursively locate and return an object inside of a container
|
|
||||||
// via a path. If at any point in the recursion it fails to find
|
|
||||||
// the next object, it will return the parent.
|
|
||||||
function findViaComposition(containerObject, path) {
|
|
||||||
var nextId = path.shift();
|
|
||||||
if (!nextId) {
|
|
||||||
return containerObject;
|
|
||||||
}
|
|
||||||
return containerObject.useCapability('composition')
|
|
||||||
.then(function (composees) {
|
|
||||||
var nextObject = findObject(composees, nextId);
|
|
||||||
if (!nextObject) {
|
|
||||||
return containerObject;
|
|
||||||
}
|
|
||||||
if (!nextObject.hasCapability('composition')) {
|
|
||||||
return nextObject;
|
|
||||||
}
|
|
||||||
return findViaComposition(nextObject, path);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function navigateToObject(desiredObject) {
|
|
||||||
$scope.navigatedObject = desiredObject;
|
|
||||||
$scope.treeModel.selectedObject = desiredObject;
|
|
||||||
currentIds = idsForObject(desiredObject);
|
|
||||||
$route.current.pathParams.ids = currentIds;
|
|
||||||
$location.path('/browse/' + currentIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLastChildIfRoot(object) {
|
|
||||||
if (object.getId() !== 'ROOT') {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
return object.useCapability('composition')
|
|
||||||
.then(function (composees) {
|
|
||||||
return composees[composees.length - 1];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function navigateToPath(path) {
|
|
||||||
return getObject('ROOT')
|
|
||||||
.then(function (root) {
|
|
||||||
return findViaComposition(root, path);
|
|
||||||
})
|
|
||||||
.then(getLastChildIfRoot)
|
|
||||||
.then(function (object) {
|
|
||||||
navigationService.setNavigation(object);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
getObject('ROOT')
|
|
||||||
.then(function (root) {
|
|
||||||
$scope.domainObject = root;
|
|
||||||
navigateToPath(initialPath);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handle navigation events from view service. Only navigates
|
|
||||||
// if path has changed.
|
|
||||||
function navigateDirectlyToModel(domainObject) {
|
|
||||||
var newIds = idsForObject(domainObject);
|
|
||||||
if (currentIds !== newIds) {
|
|
||||||
currentIds = newIds;
|
|
||||||
navigateToObject(domainObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Listen for changes in navigation state.
|
|
||||||
navigationService.addListener(navigateDirectlyToModel);
|
|
||||||
|
|
||||||
// Listen for route changes which are caused by browser events
|
|
||||||
// (e.g. bookmarks to pages in OpenMCT) and prevent them. Instead,
|
|
||||||
// navigate to the path ourselves, which results in it being
|
|
||||||
// properly set.
|
|
||||||
$scope.$on('$routeChangeStart', function (event, route, oldRoute) {
|
|
||||||
if (route.$$route === $route.current.$$route) {
|
|
||||||
if (route.pathParams.ids &&
|
|
||||||
route.pathParams.ids !== $route.current.pathParams.ids) {
|
|
||||||
|
|
||||||
var otherParams = _.omit(route.params, 'ids');
|
|
||||||
var oldOtherParams = _.omit(oldRoute.params, 'ids');
|
|
||||||
var deletedParams = _.omit(oldOtherParams, _.keys(otherParams));
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
navigateToPath(route.pathParams.ids.split('/'))
|
|
||||||
.then(function () {
|
|
||||||
if (!_.isEqual(otherParams, oldOtherParams)) {
|
|
||||||
_.forEach(otherParams, function (v, k) {
|
|
||||||
$location.search(k, v);
|
|
||||||
});
|
|
||||||
_.forEach(deletedParams, function (k) {
|
|
||||||
$location.search(k, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
navigateToPath([]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Clean up when the scope is destroyed
|
|
||||||
$scope.$on("$destroy", function () {
|
|
||||||
navigationService.removeListener(navigateDirectlyToModel);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return BrowseController;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
@ -1,72 +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(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controller for the `browse-object` representation of a domain
|
|
||||||
* object (the right-hand side of Browse mode.)
|
|
||||||
* @memberof platform/commonUI/browse
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function BrowseObjectController($scope, $location, $route) {
|
|
||||||
function setViewForDomainObject(domainObject) {
|
|
||||||
|
|
||||||
var locationViewKey = $location.search().view;
|
|
||||||
|
|
||||||
function selectViewIfMatching(view) {
|
|
||||||
if (view.key === locationViewKey) {
|
|
||||||
$scope.representation = $scope.representation || {};
|
|
||||||
$scope.representation.selected = view;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (locationViewKey) {
|
|
||||||
((domainObject && domainObject.useCapability('view')) || [])
|
|
||||||
.forEach(selectViewIfMatching);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateQueryParam(viewKey) {
|
|
||||||
if (viewKey && $location.search().view !== viewKey) {
|
|
||||||
$location.search('view', viewKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.$watch('domainObject', setViewForDomainObject);
|
|
||||||
$scope.$watch('representation.selected.key', updateQueryParam);
|
|
||||||
$scope.$on('$locationChangeSuccess', function () {
|
|
||||||
setViewForDomainObject($scope.domainObject);
|
|
||||||
});
|
|
||||||
|
|
||||||
$scope.doAction = function (action) {
|
|
||||||
return $scope[action] && $scope[action]();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return BrowseObjectController;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT Web includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
define(
|
|
||||||
["./PaneController"],
|
|
||||||
function (PaneController) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pane controller that reveals inspector, if hidden, when object
|
|
||||||
* switches to edit mode.
|
|
||||||
*
|
|
||||||
* @param $scope
|
|
||||||
* @param agentService
|
|
||||||
* @param $window
|
|
||||||
* @param navigationService
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function InspectorPaneController($scope, agentService, $window, navigationService, $location, $attrs) {
|
|
||||||
PaneController.call(this, $scope, agentService, $window, $location, $attrs);
|
|
||||||
var statusListener,
|
|
||||||
self = this;
|
|
||||||
|
|
||||||
function showInspector(statuses) {
|
|
||||||
if (statuses.indexOf('editing') !== -1 && !self.visible()) {
|
|
||||||
self.toggle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function attachStatusListener(domainObject) {
|
|
||||||
// Remove existing status listener if existing
|
|
||||||
if (statusListener) {
|
|
||||||
statusListener();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (domainObject.hasCapability("status")) {
|
|
||||||
statusListener = domainObject.getCapability("status").listen(showInspector);
|
|
||||||
}
|
|
||||||
return statusListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
var domainObject = navigationService.getNavigation();
|
|
||||||
if (domainObject) {
|
|
||||||
attachStatusListener(domainObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
navigationService.addListener(attachStatusListener);
|
|
||||||
|
|
||||||
$scope.$on("$destroy", function () {
|
|
||||||
statusListener();
|
|
||||||
navigationService.removeListener(attachStatusListener);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
InspectorPaneController.prototype = Object.create(PaneController.prototype);
|
|
||||||
|
|
||||||
return InspectorPaneController;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,92 +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(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controller to provide the ability to inline edit an object name.
|
|
||||||
*
|
|
||||||
* @constructor
|
|
||||||
* @memberof platform/commonUI/browse
|
|
||||||
*/
|
|
||||||
function ObjectHeaderController($scope) {
|
|
||||||
this.$scope = $scope;
|
|
||||||
this.domainObject = $scope.domainObject;
|
|
||||||
this.editable = this.allowEdit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the object name on blur and enter keypress events.
|
|
||||||
*
|
|
||||||
* @param event the mouse event
|
|
||||||
*/
|
|
||||||
ObjectHeaderController.prototype.updateName = function (event) {
|
|
||||||
if (!event || !event.currentTarget) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.type === 'blur') {
|
|
||||||
this.updateModel(event);
|
|
||||||
} else if (event.which === 13) {
|
|
||||||
this.updateModel(event);
|
|
||||||
event.currentTarget.blur();
|
|
||||||
window.getSelection().removeAllRanges();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the model.
|
|
||||||
*
|
|
||||||
* @param event the mouse event
|
|
||||||
* @param private
|
|
||||||
*/
|
|
||||||
ObjectHeaderController.prototype.updateModel = function (event) {
|
|
||||||
var name = event.currentTarget.textContent.replace(/\n/g, ' ');
|
|
||||||
|
|
||||||
if (name.length === 0) {
|
|
||||||
name = "Unnamed " + this.domainObject.getCapability("type").typeDef.name;
|
|
||||||
event.currentTarget.textContent = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name !== this.domainObject.getModel().name) {
|
|
||||||
this.domainObject.getCapability('mutation').mutate(function (model) {
|
|
||||||
model.name = name;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the domain object is editable.
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @return true if object is editable
|
|
||||||
*/
|
|
||||||
ObjectHeaderController.prototype.allowEdit = function () {
|
|
||||||
var type = this.domainObject && this.domainObject.getCapability('type');
|
|
||||||
return !!(type && type.hasFeature('creation'));
|
|
||||||
};
|
|
||||||
|
|
||||||
return ObjectHeaderController;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,88 +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(
|
|
||||||
[],
|
|
||||||
function () {
|
|
||||||
var navigationListenerAdded = false;
|
|
||||||
/**
|
|
||||||
* Controller to provide the ability to show/hide the tree in
|
|
||||||
* Browse mode.
|
|
||||||
* @constructor
|
|
||||||
* @memberof platform/commonUI/browse
|
|
||||||
*/
|
|
||||||
function PaneController($scope, agentService, $window, $location, $attrs, navigationService) {
|
|
||||||
var self = this;
|
|
||||||
this.agentService = agentService;
|
|
||||||
var hideParameterPresent = $location.search().hasOwnProperty($attrs.hideParameter);
|
|
||||||
|
|
||||||
if ($attrs.hideParameter && hideParameterPresent) {
|
|
||||||
this.state = false;
|
|
||||||
$location.search($attrs.hideParameter, undefined);
|
|
||||||
} else {
|
|
||||||
this.state = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback to invoke when any selection occurs in the tree.
|
|
||||||
* This controller can be passed in as the `parameters` object
|
|
||||||
* to the tree representation.
|
|
||||||
*
|
|
||||||
* @property {Function} callback
|
|
||||||
* @memberof platform/commonUI/browse.PaneController#
|
|
||||||
*/
|
|
||||||
this.callback = function () {
|
|
||||||
// Note that, since this is a callback to pass, this is not
|
|
||||||
// declared as a method but as a property which happens to
|
|
||||||
// be a function.
|
|
||||||
if (agentService.isPhone() && agentService.isPortrait()) {
|
|
||||||
// On phones, trees should collapse in portrait mode
|
|
||||||
// when something is navigated-to.
|
|
||||||
self.state = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (navigationService && navigationService.addListener && !navigationListenerAdded) {
|
|
||||||
navigationService.addListener(this.callback);
|
|
||||||
navigationListenerAdded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle the visibility of the pane.
|
|
||||||
*/
|
|
||||||
PaneController.prototype.toggle = function () {
|
|
||||||
this.state = !this.state;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the desired visibility state of the pane.
|
|
||||||
* @returns {boolean} true when visible
|
|
||||||
*/
|
|
||||||
PaneController.prototype.visible = function () {
|
|
||||||
return !!this.state;
|
|
||||||
};
|
|
||||||
|
|
||||||
return PaneController;
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,266 +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.
|
|
||||||
*****************************************************************************/
|
|
||||||
/*global console*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MCTRepresentationSpec. Created by vwoeltje on 11/6/14.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
[
|
|
||||||
"../src/BrowseController",
|
|
||||||
"../src/navigation/NavigationService"
|
|
||||||
],
|
|
||||||
function (
|
|
||||||
BrowseController,
|
|
||||||
NavigationService
|
|
||||||
) {
|
|
||||||
|
|
||||||
describe("The browse controller", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockRoute,
|
|
||||||
mockLocation,
|
|
||||||
mockObjectService,
|
|
||||||
mockNavigationService,
|
|
||||||
mockRootObject,
|
|
||||||
mockUrlService,
|
|
||||||
mockDefaultRootObject,
|
|
||||||
mockOtherDomainObject,
|
|
||||||
mockNextObject,
|
|
||||||
testDefaultRoot,
|
|
||||||
controller;
|
|
||||||
|
|
||||||
function waitsForNavigation() {
|
|
||||||
return new Promise(function (resolve) {
|
|
||||||
mockNavigationService.setNavigation.and.callFake(function (obj) {
|
|
||||||
var returnValue;
|
|
||||||
try {
|
|
||||||
returnValue = NavigationService.prototype.setNavigation.call(mockNavigationService, obj);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
//Not rejecting because 'setNavigation' has been called, which is what's being tested here.
|
|
||||||
//Rejecting will fail tests.
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
return returnValue;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function instantiateController() {
|
|
||||||
controller = new BrowseController(
|
|
||||||
mockScope,
|
|
||||||
mockRoute,
|
|
||||||
mockLocation,
|
|
||||||
mockObjectService,
|
|
||||||
mockNavigationService,
|
|
||||||
mockUrlService,
|
|
||||||
testDefaultRoot
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
testDefaultRoot = "some-root-level-domain-object";
|
|
||||||
|
|
||||||
mockScope = jasmine.createSpyObj(
|
|
||||||
"$scope",
|
|
||||||
["$on", "$watch"]
|
|
||||||
);
|
|
||||||
mockRoute = { current: { params: {}, pathParams: {} } };
|
|
||||||
mockUrlService = jasmine.createSpyObj(
|
|
||||||
"urlService",
|
|
||||||
["urlForLocation"]
|
|
||||||
);
|
|
||||||
mockUrlService.urlForLocation.and.callFake(function (mode, object) {
|
|
||||||
if (object === mockDefaultRootObject) {
|
|
||||||
return [mode, testDefaultRoot].join('/');
|
|
||||||
}
|
|
||||||
if (object === mockOtherDomainObject) {
|
|
||||||
return [mode, 'other'].join('/');
|
|
||||||
}
|
|
||||||
if (object === mockNextObject) {
|
|
||||||
return [mode, testDefaultRoot, 'next'].join('/');
|
|
||||||
}
|
|
||||||
throw new Error('Tried to get url for unexpected object');
|
|
||||||
});
|
|
||||||
mockLocation = jasmine.createSpyObj(
|
|
||||||
"$location",
|
|
||||||
["path"]
|
|
||||||
);
|
|
||||||
mockObjectService = jasmine.createSpyObj(
|
|
||||||
"objectService",
|
|
||||||
["getObjects"]
|
|
||||||
);
|
|
||||||
mockNavigationService = new NavigationService({});
|
|
||||||
[
|
|
||||||
"getNavigation",
|
|
||||||
"setNavigation",
|
|
||||||
"addListener",
|
|
||||||
"removeListener"
|
|
||||||
].forEach(function (method) {
|
|
||||||
spyOn(mockNavigationService, method)
|
|
||||||
.and.callThrough();
|
|
||||||
});
|
|
||||||
mockRootObject = jasmine.createSpyObj(
|
|
||||||
"rootObjectContainer",
|
|
||||||
["getId", "getCapability", "getModel", "useCapability", "hasCapability"]
|
|
||||||
);
|
|
||||||
mockDefaultRootObject = jasmine.createSpyObj(
|
|
||||||
"defaultRootObject",
|
|
||||||
["getId", "getCapability", "getModel", "useCapability", "hasCapability"]
|
|
||||||
);
|
|
||||||
mockOtherDomainObject = jasmine.createSpyObj(
|
|
||||||
"otherDomainObject",
|
|
||||||
["getId", "getCapability", "getModel", "useCapability", "hasCapability"]
|
|
||||||
);
|
|
||||||
mockNextObject = jasmine.createSpyObj(
|
|
||||||
"nestedDomainObject",
|
|
||||||
["getId", "getCapability", "getModel", "useCapability", "hasCapability"]
|
|
||||||
);
|
|
||||||
mockObjectService.getObjects.and.returnValue(Promise.resolve({
|
|
||||||
ROOT: mockRootObject
|
|
||||||
}));
|
|
||||||
mockRootObject.useCapability.and.returnValue(Promise.resolve([
|
|
||||||
mockOtherDomainObject,
|
|
||||||
mockDefaultRootObject
|
|
||||||
]));
|
|
||||||
mockRootObject.hasCapability.and.returnValue(true);
|
|
||||||
mockDefaultRootObject.useCapability.and.returnValue(Promise.resolve([
|
|
||||||
mockNextObject
|
|
||||||
]));
|
|
||||||
mockDefaultRootObject.hasCapability.and.returnValue(true);
|
|
||||||
mockOtherDomainObject.hasCapability.and.returnValue(false);
|
|
||||||
mockNextObject.useCapability.and.returnValue(undefined);
|
|
||||||
mockNextObject.hasCapability.and.returnValue(false);
|
|
||||||
mockNextObject.getId.and.returnValue("next");
|
|
||||||
mockDefaultRootObject.getId.and.returnValue(testDefaultRoot);
|
|
||||||
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("uses composition to set the navigated object, if there is none", function () {
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockNavigationService.setNavigation)
|
|
||||||
.toHaveBeenCalledWith(mockDefaultRootObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("navigates to a root-level object, even when default path is not found", function () {
|
|
||||||
mockDefaultRootObject.getId
|
|
||||||
.and.returnValue("something-other-than-the-" + testDefaultRoot);
|
|
||||||
instantiateController();
|
|
||||||
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockNavigationService.setNavigation)
|
|
||||||
.toHaveBeenCalledWith(mockDefaultRootObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("does not try to override navigation", function () {
|
|
||||||
mockNavigationService.getNavigation.and.returnValue(mockDefaultRootObject);
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockScope.navigatedObject).toBe(mockDefaultRootObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates scope when navigated object changes", function () {
|
|
||||||
// Should have registered a listener - call it
|
|
||||||
mockNavigationService.addListener.calls.mostRecent().args[0](
|
|
||||||
mockOtherDomainObject
|
|
||||||
);
|
|
||||||
expect(mockScope.navigatedObject).toEqual(mockOtherDomainObject);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
it("releases its navigation listener when its scope is destroyed", function () {
|
|
||||||
expect(mockScope.$on).toHaveBeenCalledWith(
|
|
||||||
"$destroy",
|
|
||||||
jasmine.any(Function)
|
|
||||||
);
|
|
||||||
mockScope.$on.calls.mostRecent().args[1]();
|
|
||||||
|
|
||||||
// Should remove the listener it added earlier
|
|
||||||
expect(mockNavigationService.removeListener).toHaveBeenCalledWith(
|
|
||||||
mockNavigationService.addListener.calls.mostRecent().args[0]
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("uses route parameters to choose initially-navigated object", function () {
|
|
||||||
mockRoute.current.params.ids = testDefaultRoot + "/next";
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockScope.navigatedObject).toBe(mockNextObject);
|
|
||||||
expect(mockNavigationService.setNavigation)
|
|
||||||
.toHaveBeenCalledWith(mockNextObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("handles invalid IDs by going as far as possible", function () {
|
|
||||||
// Idea here is that if we get a bad path of IDs,
|
|
||||||
// browse controller should traverse down it until
|
|
||||||
// it hits an invalid ID.
|
|
||||||
mockRoute.current.params.ids = testDefaultRoot + "/junk";
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockScope.navigatedObject).toBe(mockDefaultRootObject);
|
|
||||||
expect(mockNavigationService.setNavigation)
|
|
||||||
.toHaveBeenCalledWith(mockDefaultRootObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("handles compositionless objects by going as far as possible", function () {
|
|
||||||
// Idea here is that if we get a path which passes
|
|
||||||
// through an object without a composition, browse controller
|
|
||||||
// should stop at it since remaining IDs cannot be loaded.
|
|
||||||
mockRoute.current.params.ids = testDefaultRoot + "/next/junk";
|
|
||||||
instantiateController();
|
|
||||||
return waitsForNavigation().then(function () {
|
|
||||||
expect(mockScope.navigatedObject).toBe(mockNextObject);
|
|
||||||
expect(mockNavigationService.setNavigation)
|
|
||||||
.toHaveBeenCalledWith(mockNextObject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates the displayed route to reflect current navigation", function () {
|
|
||||||
// In order to trigger a route update and not a route change,
|
|
||||||
// the current route must be updated before location.path is
|
|
||||||
// called.
|
|
||||||
expect(mockRoute.current.pathParams.ids)
|
|
||||||
.not
|
|
||||||
.toBe(testDefaultRoot + '/next');
|
|
||||||
mockLocation.path.and.callFake(function () {
|
|
||||||
expect(mockRoute.current.pathParams.ids)
|
|
||||||
.toBe(testDefaultRoot + '/next');
|
|
||||||
});
|
|
||||||
mockNavigationService.addListener.calls.mostRecent().args[0](
|
|
||||||
mockNextObject
|
|
||||||
);
|
|
||||||
expect(mockLocation.path).toHaveBeenCalledWith(
|
|
||||||
'/browse/' + testDefaultRoot + '/next'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,93 +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(
|
|
||||||
["../src/BrowseObjectController"],
|
|
||||||
function (BrowseObjectController) {
|
|
||||||
|
|
||||||
describe("The browse object controller", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockLocation,
|
|
||||||
mockRoute,
|
|
||||||
controller;
|
|
||||||
|
|
||||||
// Utility function; look for a $watch on scope and fire it
|
|
||||||
function fireWatch(expr, value) {
|
|
||||||
mockScope.$watch.calls.all().forEach(function (call) {
|
|
||||||
if (call.args[0] === expr) {
|
|
||||||
call.args[1](value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockScope = jasmine.createSpyObj(
|
|
||||||
"$scope",
|
|
||||||
["$on", "$watch"]
|
|
||||||
);
|
|
||||||
mockRoute = { current: { params: {} } };
|
|
||||||
mockLocation = jasmine.createSpyObj(
|
|
||||||
"$location",
|
|
||||||
["path", "search"]
|
|
||||||
);
|
|
||||||
mockLocation.search.and.returnValue({});
|
|
||||||
|
|
||||||
controller = new BrowseObjectController(
|
|
||||||
mockScope,
|
|
||||||
mockLocation,
|
|
||||||
mockRoute
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates query parameters when selected view changes", function () {
|
|
||||||
fireWatch("representation.selected.key", "xyz");
|
|
||||||
expect(mockLocation.search).toHaveBeenCalledWith('view', "xyz");
|
|
||||||
|
|
||||||
// Allows the path index to be checked
|
|
||||||
// prior to setting $route.current
|
|
||||||
mockLocation.path.and.returnValue("/browse/");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("sets the active view from query parameters", function () {
|
|
||||||
var mockDomainObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
['getId', 'getModel', 'getCapability', 'useCapability']
|
|
||||||
),
|
|
||||||
testViews = [
|
|
||||||
{ key: 'abc' },
|
|
||||||
{ key: 'def', someKey: 'some value' },
|
|
||||||
{ key: 'xyz' }
|
|
||||||
];
|
|
||||||
|
|
||||||
mockDomainObject.useCapability.and.callFake(function (c) {
|
|
||||||
return (c === 'view') && testViews;
|
|
||||||
});
|
|
||||||
mockLocation.search.and.returnValue({ view: 'def' });
|
|
||||||
|
|
||||||
fireWatch('domainObject', mockDomainObject);
|
|
||||||
expect(mockScope.representation.selected)
|
|
||||||
.toEqual(testViews[1]);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,103 +0,0 @@
|
|||||||
/*****************************************************************************
|
|
||||||
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
|
||||||
* Administration. All rights reserved.
|
|
||||||
*
|
|
||||||
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
* Open MCT Web includes source code licensed under additional open source
|
|
||||||
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
||||||
* this source code distribution or the Licensing information page available
|
|
||||||
* at runtime from the About dialog for additional information.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
define(
|
|
||||||
["../src/InspectorPaneController"],
|
|
||||||
function (InspectorPaneController) {
|
|
||||||
|
|
||||||
describe("The InspectorPaneController", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockAgentService,
|
|
||||||
mockDomainObject,
|
|
||||||
mockWindow,
|
|
||||||
mockStatusCapability,
|
|
||||||
mockNavigationService,
|
|
||||||
mockNavigationUnlistener,
|
|
||||||
mockStatusUnlistener,
|
|
||||||
controller,
|
|
||||||
mockLocation,
|
|
||||||
mockAttrs;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockScope = jasmine.createSpyObj("$scope", ["$on"]);
|
|
||||||
mockWindow = jasmine.createSpyObj("$window", ["open"]);
|
|
||||||
mockAgentService = jasmine.createSpyObj(
|
|
||||||
"agentService",
|
|
||||||
["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockNavigationUnlistener = jasmine.createSpy("navigationUnlistener");
|
|
||||||
mockNavigationService = jasmine.createSpyObj(
|
|
||||||
"navigationService",
|
|
||||||
["getNavigation", "addListener"]
|
|
||||||
);
|
|
||||||
mockNavigationService.addListener.and.returnValue(mockNavigationUnlistener);
|
|
||||||
|
|
||||||
mockStatusUnlistener = jasmine.createSpy("statusUnlistener");
|
|
||||||
mockStatusCapability = jasmine.createSpyObj(
|
|
||||||
"statusCapability",
|
|
||||||
["listen"]
|
|
||||||
);
|
|
||||||
mockStatusCapability.listen.and.returnValue(mockStatusUnlistener);
|
|
||||||
|
|
||||||
mockDomainObject = jasmine.createSpyObj(
|
|
||||||
'domainObject',
|
|
||||||
[
|
|
||||||
'getId',
|
|
||||||
'getModel',
|
|
||||||
'getCapability',
|
|
||||||
'hasCapability'
|
|
||||||
]
|
|
||||||
);
|
|
||||||
mockDomainObject.getId.and.returnValue("domainObject");
|
|
||||||
mockDomainObject.getModel.and.returnValue({});
|
|
||||||
mockDomainObject.hasCapability.and.returnValue(true);
|
|
||||||
mockDomainObject.getCapability.and.returnValue(mockStatusCapability);
|
|
||||||
|
|
||||||
mockLocation = jasmine.createSpyObj('location', ['search']);
|
|
||||||
mockLocation.search.and.returnValue({});
|
|
||||||
|
|
||||||
mockAttrs = {};
|
|
||||||
|
|
||||||
controller = new InspectorPaneController(mockScope, mockAgentService, mockWindow, mockNavigationService, mockLocation, mockAttrs);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("listens for changes to navigation and attaches a status" +
|
|
||||||
" listener", function () {
|
|
||||||
expect(mockNavigationService.addListener).toHaveBeenCalledWith(jasmine.any(Function));
|
|
||||||
mockNavigationService.addListener.calls.mostRecent().args[0](mockDomainObject);
|
|
||||||
expect(mockStatusCapability.listen).toHaveBeenCalledWith(jasmine.any(Function));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("if hidden, shows the inspector when domain object switches to" +
|
|
||||||
" edit mode", function () {
|
|
||||||
controller.toggle();
|
|
||||||
// test pre-condition that inspector is hidden
|
|
||||||
expect(controller.visible()).toBe(false);
|
|
||||||
mockNavigationService.addListener.calls.mostRecent().args[0](mockDomainObject);
|
|
||||||
mockStatusCapability.listen.calls.mostRecent().args[0](["editing"]);
|
|
||||||
expect(controller.visible()).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,79 +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.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MenuArrowControllerSpec. Created by shale on 07/02/2015.
|
|
||||||
*/
|
|
||||||
define(
|
|
||||||
["../src/MenuArrowController"],
|
|
||||||
function (MenuArrowController) {
|
|
||||||
|
|
||||||
describe("The menu arrow controller ", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockDomainObject,
|
|
||||||
mockEvent,
|
|
||||||
mockContextMenuAction,
|
|
||||||
mockActionContext,
|
|
||||||
controller;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockScope = jasmine.createSpyObj(
|
|
||||||
"$scope",
|
|
||||||
[""]
|
|
||||||
);
|
|
||||||
mockDomainObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
["getCapability"]
|
|
||||||
);
|
|
||||||
mockEvent = jasmine.createSpyObj(
|
|
||||||
"event",
|
|
||||||
["preventDefault"]
|
|
||||||
);
|
|
||||||
mockContextMenuAction = jasmine.createSpyObj(
|
|
||||||
"action",
|
|
||||||
["perform", "getActions"]
|
|
||||||
);
|
|
||||||
mockActionContext = jasmine.createSpyObj(
|
|
||||||
"actionContext",
|
|
||||||
[""]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockActionContext.domainObject = mockDomainObject;
|
|
||||||
mockActionContext.event = mockEvent;
|
|
||||||
mockScope.domainObject = mockDomainObject;
|
|
||||||
mockDomainObject.getCapability.and.returnValue(mockContextMenuAction);
|
|
||||||
mockContextMenuAction.perform.and.returnValue(jasmine.any(Function));
|
|
||||||
|
|
||||||
controller = new MenuArrowController(mockScope);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("calls the context menu action when clicked", function () {
|
|
||||||
// Simulate a click on the menu arrow
|
|
||||||
controller.showMenu(mockEvent);
|
|
||||||
|
|
||||||
// Expect the menu action to be performed
|
|
||||||
expect(mockDomainObject.getCapability).toHaveBeenCalledWith('action');
|
|
||||||
expect(mockContextMenuAction.perform).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,137 +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(
|
|
||||||
["../src/ObjectHeaderController"],
|
|
||||||
function (ObjectHeaderController) {
|
|
||||||
|
|
||||||
describe("The object header controller", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockDomainObject,
|
|
||||||
mockCapabilities,
|
|
||||||
mockMutationCapability,
|
|
||||||
mockTypeCapability,
|
|
||||||
mockEvent,
|
|
||||||
mockCurrentTarget,
|
|
||||||
model,
|
|
||||||
controller;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockMutationCapability = jasmine.createSpyObj("mutation", ["mutate"]);
|
|
||||||
mockTypeCapability = jasmine.createSpyObj("type", ["typeDef", "hasFeature"]);
|
|
||||||
mockTypeCapability.typeDef = { name: ""};
|
|
||||||
mockTypeCapability.hasFeature.and.callFake(function (feature) {
|
|
||||||
return feature === 'creation';
|
|
||||||
});
|
|
||||||
|
|
||||||
mockCapabilities = {
|
|
||||||
mutation: mockMutationCapability,
|
|
||||||
type: mockTypeCapability
|
|
||||||
};
|
|
||||||
|
|
||||||
model = {
|
|
||||||
name: "Test name"
|
|
||||||
};
|
|
||||||
mockDomainObject = jasmine.createSpyObj("domainObject", ["getCapability", "getModel"]);
|
|
||||||
mockDomainObject.getModel.and.returnValue(model);
|
|
||||||
mockDomainObject.getCapability.and.callFake(function (key) {
|
|
||||||
return mockCapabilities[key];
|
|
||||||
});
|
|
||||||
|
|
||||||
mockScope = {
|
|
||||||
domainObject: mockDomainObject
|
|
||||||
};
|
|
||||||
|
|
||||||
mockCurrentTarget = jasmine.createSpyObj("currentTarget", ["blur", "textContent"]);
|
|
||||||
mockCurrentTarget.blur.and.returnValue(mockCurrentTarget);
|
|
||||||
|
|
||||||
mockEvent = {
|
|
||||||
which: {},
|
|
||||||
type: {},
|
|
||||||
currentTarget: mockCurrentTarget
|
|
||||||
};
|
|
||||||
|
|
||||||
controller = new ObjectHeaderController(mockScope);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates the model with new name on blur", function () {
|
|
||||||
mockEvent.type = "blur";
|
|
||||||
mockCurrentTarget.textContent = "New name";
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockMutationCapability.mutate).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates the model with a default for blank names", function () {
|
|
||||||
mockEvent.type = "blur";
|
|
||||||
mockCurrentTarget.textContent = "";
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockCurrentTarget.textContent.length).not.toEqual(0);
|
|
||||||
expect(mockMutationCapability.mutate).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("does not update the model if the same name", function () {
|
|
||||||
mockEvent.type = "blur";
|
|
||||||
mockCurrentTarget.textContent = mockDomainObject.getModel().name;
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockMutationCapability.mutate).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("updates the model on enter keypress event only", function () {
|
|
||||||
mockCurrentTarget.textContent = "New name";
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockMutationCapability.mutate).not.toHaveBeenCalled();
|
|
||||||
|
|
||||||
mockEvent.which = 13;
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockMutationCapability.mutate).toHaveBeenCalledWith(jasmine.any(Function));
|
|
||||||
|
|
||||||
mockMutationCapability.mutate.calls.mostRecent().args[0](model);
|
|
||||||
|
|
||||||
expect(mockDomainObject.getModel().name).toBe("New name");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("blurs the field on enter key press", function () {
|
|
||||||
mockCurrentTarget.textContent = "New name";
|
|
||||||
mockEvent.which = 13;
|
|
||||||
controller.updateName(mockEvent);
|
|
||||||
|
|
||||||
expect(mockEvent.currentTarget.blur).toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("allows editting name when object is creatable", function () {
|
|
||||||
expect(controller.allowEdit()).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("disallows editting name when object is non-creatable", function () {
|
|
||||||
mockTypeCapability.hasFeature.and.returnValue(false);
|
|
||||||
|
|
||||||
expect(controller.allowEdit()).toBe(false);
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -1,106 +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(
|
|
||||||
["../src/PaneController"],
|
|
||||||
function (PaneController) {
|
|
||||||
|
|
||||||
describe("The PaneController", function () {
|
|
||||||
var mockScope,
|
|
||||||
mockAgentService,
|
|
||||||
mockWindow,
|
|
||||||
controller,
|
|
||||||
mockLocation,
|
|
||||||
mockAttrs;
|
|
||||||
|
|
||||||
// We want to reinstantiate for each test case
|
|
||||||
// because device state can influence constructor-time behavior
|
|
||||||
function instantiateController() {
|
|
||||||
return new PaneController(
|
|
||||||
mockScope,
|
|
||||||
mockAgentService,
|
|
||||||
mockWindow,
|
|
||||||
mockLocation,
|
|
||||||
mockAttrs
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockScope = jasmine.createSpyObj("$scope", ["$on"]);
|
|
||||||
mockAgentService = jasmine.createSpyObj(
|
|
||||||
"agentService",
|
|
||||||
["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"]
|
|
||||||
);
|
|
||||||
mockWindow = jasmine.createSpyObj("$window", ["open"]);
|
|
||||||
|
|
||||||
mockLocation = jasmine.createSpyObj('location', ['search']);
|
|
||||||
mockLocation.search.and.returnValue({});
|
|
||||||
|
|
||||||
mockAttrs = {};
|
|
||||||
});
|
|
||||||
|
|
||||||
it("is initially visible", function () {
|
|
||||||
expect(instantiateController().visible()).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("allows visibility to be toggled", function () {
|
|
||||||
controller = instantiateController();
|
|
||||||
controller.toggle();
|
|
||||||
expect(controller.visible()).toBeFalsy();
|
|
||||||
controller.toggle();
|
|
||||||
expect(controller.visible()).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("collapses on navigation changes on portrait-oriented phones", function () {
|
|
||||||
mockAgentService.isMobile.and.returnValue(true);
|
|
||||||
mockAgentService.isPhone.and.returnValue(true);
|
|
||||||
mockAgentService.isPortrait.and.returnValue(true);
|
|
||||||
controller = instantiateController();
|
|
||||||
expect(controller.visible()).toBeTruthy();
|
|
||||||
|
|
||||||
// Simulate a change from the tree by invoking controller's
|
|
||||||
controller.callback();
|
|
||||||
|
|
||||||
// Tree should have collapsed
|
|
||||||
expect(controller.visible()).toBeFalsy();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("specifying hideParameter", function () {
|
|
||||||
beforeEach(function () {
|
|
||||||
mockAttrs = {hideParameter: 'hideTree'};
|
|
||||||
});
|
|
||||||
|
|
||||||
it("sets pane state to false when in location.search", function () {
|
|
||||||
mockLocation.search.and.returnValue({'hideTree': true});
|
|
||||||
expect(instantiateController().visible()).toBe(false);
|
|
||||||
expect(mockLocation.search).toHaveBeenCalledWith('hideTree', undefined);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("sets state to true when not found in location.search", function () {
|
|
||||||
mockLocation.search.and.returnValue({});
|
|
||||||
expect(instantiateController().visible()).toBe(true);
|
|
||||||
expect(mockLocation.search).not.toHaveBeenCalledWith('hideTree', undefined);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -97,7 +97,7 @@ define(
|
|||||||
this.$timeout(() => {
|
this.$timeout(() => {
|
||||||
// Create the overlay element and add it to the document's body
|
// Create the overlay element and add it to the document's body
|
||||||
element = this.$compile(TEMPLATE)(scope);
|
element = this.$compile(TEMPLATE)(scope);
|
||||||
|
|
||||||
// Append so that most recent dialog is last in DOM. This means the most recent dialog will be on top when
|
// Append so that most recent dialog is last in DOM. This means the most recent dialog will be on top when
|
||||||
// multiple overlays with the same z-index are active.
|
// multiple overlays with the same z-index are active.
|
||||||
this.findBody().append(element);
|
this.findBody().append(element);
|
||||||
|
@ -27,7 +27,6 @@ define([
|
|||||||
"./src/actions/EditAndComposeAction",
|
"./src/actions/EditAndComposeAction",
|
||||||
"./src/actions/EditAction",
|
"./src/actions/EditAction",
|
||||||
"./src/actions/PropertiesAction",
|
"./src/actions/PropertiesAction",
|
||||||
"./src/actions/RemoveAction",
|
|
||||||
"./src/actions/SaveAction",
|
"./src/actions/SaveAction",
|
||||||
"./src/actions/SaveAndStopEditingAction",
|
"./src/actions/SaveAndStopEditingAction",
|
||||||
"./src/actions/SaveAsAction",
|
"./src/actions/SaveAsAction",
|
||||||
@ -58,7 +57,6 @@ define([
|
|||||||
EditAndComposeAction,
|
EditAndComposeAction,
|
||||||
EditAction,
|
EditAction,
|
||||||
PropertiesAction,
|
PropertiesAction,
|
||||||
RemoveAction,
|
|
||||||
SaveAction,
|
SaveAction,
|
||||||
SaveAndStopEditingAction,
|
SaveAndStopEditingAction,
|
||||||
SaveAsAction,
|
SaveAsAction,
|
||||||
@ -158,18 +156,6 @@ define([
|
|||||||
"dialogService"
|
"dialogService"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "remove",
|
|
||||||
"category": "legacy",
|
|
||||||
"implementation": RemoveAction,
|
|
||||||
"cssClass": "icon-trash",
|
|
||||||
"name": "Remove",
|
|
||||||
"description": "Remove this object from its containing object.",
|
|
||||||
"depends": [
|
|
||||||
"openmct",
|
|
||||||
"navigationService"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "save-and-stop-editing",
|
"key": "save-and-stop-editing",
|
||||||
"category": "save",
|
"category": "save",
|
||||||
|
@ -1,131 +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.
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module defining RemoveAction. Created by vwoeltje on 11/17/14.
|
|
||||||
*/
|
|
||||||
define([], function () {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct an action which will remove the provided object manifestation.
|
|
||||||
* The object will be removed from its parent's composition; the parent
|
|
||||||
* is looked up via the "context" capability (so this will be the
|
|
||||||
* immediate ancestor by which this specific object was reached.)
|
|
||||||
*
|
|
||||||
* @param {DialogService} dialogService a service which will show the dialog
|
|
||||||
* @param {NavigationService} navigationService a service that maintains the current navigation state
|
|
||||||
* @param {ActionContext} context the context in which this action is performed
|
|
||||||
* @memberof platform/commonUI/edit
|
|
||||||
* @constructor
|
|
||||||
* @implements {Action}
|
|
||||||
*/
|
|
||||||
function RemoveAction(openmct, navigationService, context) {
|
|
||||||
this.domainObject = (context || {}).domainObject;
|
|
||||||
this.openmct = openmct;
|
|
||||||
this.navigationService = navigationService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform this action.
|
|
||||||
*/
|
|
||||||
RemoveAction.prototype.perform = function () {
|
|
||||||
var dialog,
|
|
||||||
domainObject = this.domainObject,
|
|
||||||
navigationService = this.navigationService;
|
|
||||||
/*
|
|
||||||
* Check whether an object ID matches the ID of the object being
|
|
||||||
* removed (used to filter a parent's composition to handle the
|
|
||||||
* removal.)
|
|
||||||
*/
|
|
||||||
function isNotObject(otherObjectId) {
|
|
||||||
return otherObjectId !== domainObject.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mutate a parent object such that it no longer contains the object
|
|
||||||
* which is being removed.
|
|
||||||
*/
|
|
||||||
function doMutate(model) {
|
|
||||||
model.composition = model.composition.filter(isNotObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Checks current object and ascendants of current
|
|
||||||
* object with object being removed, if the current
|
|
||||||
* object or any in the current object's path is being removed,
|
|
||||||
* navigate back to parent of removed object.
|
|
||||||
*/
|
|
||||||
function checkObjectNavigation(object, parentObject) {
|
|
||||||
// Traverse object starts at current location
|
|
||||||
var traverseObject = (navigationService).getNavigation(),
|
|
||||||
context;
|
|
||||||
|
|
||||||
// Stop when object is not defined (above ROOT)
|
|
||||||
while (traverseObject) {
|
|
||||||
// If object currently traversed to is object being removed
|
|
||||||
// navigate to parent of current object and then exit loop
|
|
||||||
if (traverseObject.getId() === object.getId()) {
|
|
||||||
navigationService.setNavigation(parentObject);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Traverses to parent of current object, moving
|
|
||||||
// up the ascendant path
|
|
||||||
context = traverseObject.getCapability('context');
|
|
||||||
traverseObject = context && context.getParent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Remove the object from its parent, as identified by its context
|
|
||||||
* capability. Based on object's location and selected object's location
|
|
||||||
* user may be navigated to existing parent object
|
|
||||||
*/
|
|
||||||
function removeFromContext() {
|
|
||||||
var contextCapability = domainObject.getCapability('context'),
|
|
||||||
parent = contextCapability.getParent();
|
|
||||||
|
|
||||||
// If currently within path of removed object(s),
|
|
||||||
// navigates to existing object up tree
|
|
||||||
checkObjectNavigation(domainObject, parent);
|
|
||||||
|
|
||||||
return parent.useCapability('mutation', doMutate);
|
|
||||||
}
|
|
||||||
|
|
||||||
removeFromContext();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Object needs to have a parent for Remove to be applicable
|
|
||||||
RemoveAction.appliesTo = function (context) {
|
|
||||||
var object = (context || {}).domainObject,
|
|
||||||
contextCapability = object && object.getCapability("context"),
|
|
||||||
parent = contextCapability && contextCapability.getParent(),
|
|
||||||
parentType = parent && parent.getCapability('type'),
|
|
||||||
parentCreatable = parentType && parentType.hasFeature('creation');
|
|
||||||
|
|
||||||
// Only creatable types should be modifiable
|
|
||||||
return parent !== undefined &&
|
|
||||||
Array.isArray(parent.getModel().composition) &&
|
|
||||||
parentCreatable;
|
|
||||||
};
|
|
||||||
|
|
||||||
return RemoveAction;
|
|
||||||
});
|
|
@ -1,255 +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(
|
|
||||||
["../../src/actions/RemoveAction"],
|
|
||||||
function (RemoveAction) {
|
|
||||||
|
|
||||||
describe("The Remove action", function () {
|
|
||||||
var action,
|
|
||||||
actionContext,
|
|
||||||
capabilities,
|
|
||||||
mockContext,
|
|
||||||
mockOverlayAPI,
|
|
||||||
mockDomainObject,
|
|
||||||
mockMutation,
|
|
||||||
mockNavigationService,
|
|
||||||
mockParent,
|
|
||||||
mockType,
|
|
||||||
model;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockDomainObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
["getId", "getCapability", "getModel"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockMutation = jasmine.createSpyObj("mutation", ["invoke"]);
|
|
||||||
mockType = jasmine.createSpyObj("type", ["hasFeature"]);
|
|
||||||
mockType.hasFeature.and.returnValue(true);
|
|
||||||
|
|
||||||
capabilities = {
|
|
||||||
mutation: mockMutation,
|
|
||||||
type: mockType
|
|
||||||
};
|
|
||||||
|
|
||||||
model = {
|
|
||||||
composition: ["a", "test", "b"]
|
|
||||||
};
|
|
||||||
|
|
||||||
mockParent = {
|
|
||||||
getModel: function () {
|
|
||||||
return model;
|
|
||||||
},
|
|
||||||
getCapability: function (k) {
|
|
||||||
return capabilities[k];
|
|
||||||
},
|
|
||||||
useCapability: function (k, v) {
|
|
||||||
return capabilities[k].invoke(v);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mockOverlayAPI = jasmine.createSpyObj(
|
|
||||||
"overlayAPI",
|
|
||||||
["dialog"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockNavigationService = jasmine.createSpyObj(
|
|
||||||
"navigationService",
|
|
||||||
[
|
|
||||||
"getNavigation",
|
|
||||||
"setNavigation",
|
|
||||||
"addListener",
|
|
||||||
"removeListener"
|
|
||||||
]
|
|
||||||
);
|
|
||||||
mockNavigationService.getNavigation.and.returnValue(mockDomainObject);
|
|
||||||
|
|
||||||
mockContext = jasmine.createSpyObj("context", ["getParent"]);
|
|
||||||
mockContext.getParent.and.returnValue(mockParent);
|
|
||||||
|
|
||||||
mockDomainObject.getId.and.returnValue("test");
|
|
||||||
mockDomainObject.getCapability.and.returnValue(mockContext);
|
|
||||||
mockDomainObject.getModel.and.returnValue({name: 'test object'});
|
|
||||||
|
|
||||||
mockContext.getParent.and.returnValue(mockParent);
|
|
||||||
mockType.hasFeature.and.returnValue(true);
|
|
||||||
|
|
||||||
actionContext = { domainObject: mockDomainObject };
|
|
||||||
|
|
||||||
action = new RemoveAction({overlays: mockOverlayAPI}, mockNavigationService, actionContext);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("only applies to objects with parents", function () {
|
|
||||||
expect(RemoveAction.appliesTo(actionContext)).toBeTruthy();
|
|
||||||
|
|
||||||
mockContext.getParent.and.returnValue(undefined);
|
|
||||||
|
|
||||||
expect(RemoveAction.appliesTo(actionContext)).toBeFalsy();
|
|
||||||
|
|
||||||
// Also verify that creatability was checked
|
|
||||||
expect(mockType.hasFeature).toHaveBeenCalledWith('creation');
|
|
||||||
});
|
|
||||||
|
|
||||||
it("shows a blocking message dialog", function () {
|
|
||||||
mockParent = jasmine.createSpyObj(
|
|
||||||
"parent",
|
|
||||||
["getModel", "getCapability", "useCapability"]
|
|
||||||
);
|
|
||||||
|
|
||||||
action.perform();
|
|
||||||
|
|
||||||
expect(mockOverlayAPI.dialog).toHaveBeenCalled();
|
|
||||||
|
|
||||||
// Also check that no mutation happens at this point
|
|
||||||
expect(mockParent.useCapability).not.toHaveBeenCalledWith("mutation", jasmine.any(Function));
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("after the remove callback is triggered", function () {
|
|
||||||
var mockChildContext,
|
|
||||||
mockChildObject,
|
|
||||||
mockDialogHandle,
|
|
||||||
mockGrandchildContext,
|
|
||||||
mockGrandchildObject,
|
|
||||||
mockRootContext,
|
|
||||||
mockRootObject;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
mockChildObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
["getId", "getCapability"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockDialogHandle = jasmine.createSpyObj(
|
|
||||||
"dialogHandle",
|
|
||||||
["dismiss"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockGrandchildObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
["getId", "getCapability"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockRootObject = jasmine.createSpyObj(
|
|
||||||
"domainObject",
|
|
||||||
["getId", "getCapability"]
|
|
||||||
);
|
|
||||||
|
|
||||||
mockChildContext = jasmine.createSpyObj("context", ["getParent"]);
|
|
||||||
mockGrandchildContext = jasmine.createSpyObj("context", ["getParent"]);
|
|
||||||
mockRootContext = jasmine.createSpyObj("context", ["getParent"]);
|
|
||||||
|
|
||||||
mockOverlayAPI.dialog.and.returnValue(mockDialogHandle);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("mutates the parent when performed", function () {
|
|
||||||
action.perform();
|
|
||||||
mockOverlayAPI.dialog.calls.mostRecent().args[0]
|
|
||||||
.buttons[0].callback();
|
|
||||||
|
|
||||||
expect(mockMutation.invoke)
|
|
||||||
.toHaveBeenCalledWith(jasmine.any(Function));
|
|
||||||
});
|
|
||||||
|
|
||||||
it("changes composition from its mutation function", function () {
|
|
||||||
var mutator, result;
|
|
||||||
|
|
||||||
action.perform();
|
|
||||||
mockOverlayAPI.dialog.calls.mostRecent().args[0]
|
|
||||||
.buttons[0].callback();
|
|
||||||
|
|
||||||
mutator = mockMutation.invoke.calls.mostRecent().args[0];
|
|
||||||
result = mutator(model);
|
|
||||||
|
|
||||||
// Should not have cancelled the mutation
|
|
||||||
expect(result).not.toBe(false);
|
|
||||||
|
|
||||||
// Simulate mutate's behavior (remove can either return a
|
|
||||||
// new model or modify this one in-place)
|
|
||||||
result = result || model;
|
|
||||||
|
|
||||||
// Should have removed "test" - that was our
|
|
||||||
// mock domain object's id.
|
|
||||||
expect(result.composition).toEqual(["a", "b"]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("removes parent of object currently navigated to", function () {
|
|
||||||
// Navigates to child object
|
|
||||||
mockNavigationService.getNavigation.and.returnValue(mockChildObject);
|
|
||||||
|
|
||||||
// Test is id of object being removed
|
|
||||||
// Child object has different id
|
|
||||||
mockDomainObject.getId.and.returnValue("test");
|
|
||||||
mockChildObject.getId.and.returnValue("not test");
|
|
||||||
|
|
||||||
// Sets context for the child and domainObject
|
|
||||||
mockDomainObject.getCapability.and.returnValue(mockContext);
|
|
||||||
mockChildObject.getCapability.and.returnValue(mockChildContext);
|
|
||||||
|
|
||||||
// Parents of child and domainObject are set
|
|
||||||
mockContext.getParent.and.returnValue(mockParent);
|
|
||||||
mockChildContext.getParent.and.returnValue(mockDomainObject);
|
|
||||||
|
|
||||||
mockType.hasFeature.and.returnValue(true);
|
|
||||||
|
|
||||||
action.perform();
|
|
||||||
mockOverlayAPI.dialog.calls.mostRecent().args[0]
|
|
||||||
.buttons[0].callback();
|
|
||||||
|
|
||||||
// Expects navigation to parent of domainObject (removed object)
|
|
||||||
expect(mockNavigationService.setNavigation).toHaveBeenCalledWith(mockParent);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("checks if removing object not in ascendent path (reaches ROOT)", function () {
|
|
||||||
// Navigates to grandchild of ROOT
|
|
||||||
mockNavigationService.getNavigation.and.returnValue(mockGrandchildObject);
|
|
||||||
|
|
||||||
// domainObject (grandparent) is set as ROOT, child and grandchild
|
|
||||||
// are set objects not being removed
|
|
||||||
mockDomainObject.getId.and.returnValue("test 1");
|
|
||||||
mockRootObject.getId.and.returnValue("ROOT");
|
|
||||||
mockChildObject.getId.and.returnValue("not test 2");
|
|
||||||
mockGrandchildObject.getId.and.returnValue("not test 3");
|
|
||||||
|
|
||||||
// Sets context for the grandchild, child, and domainObject
|
|
||||||
mockRootObject.getCapability.and.returnValue(mockRootContext);
|
|
||||||
mockChildObject.getCapability.and.returnValue(mockChildContext);
|
|
||||||
mockGrandchildObject.getCapability.and.returnValue(mockGrandchildContext);
|
|
||||||
|
|
||||||
// Parents of grandchild and child are set
|
|
||||||
mockChildContext.getParent.and.returnValue(mockRootObject);
|
|
||||||
mockGrandchildContext.getParent.and.returnValue(mockChildObject);
|
|
||||||
|
|
||||||
mockType.hasFeature.and.returnValue(true);
|
|
||||||
|
|
||||||
action.perform();
|
|
||||||
mockOverlayAPI.dialog.calls.mostRecent().args[0]
|
|
||||||
.buttons[0].callback();
|
|
||||||
|
|
||||||
// Expects no navigation to occur
|
|
||||||
expect(mockNavigationService.setNavigation).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
@ -25,7 +25,7 @@ define(
|
|||||||
["../../src/actions/SaveAsAction"],
|
["../../src/actions/SaveAsAction"],
|
||||||
function (SaveAsAction) {
|
function (SaveAsAction) {
|
||||||
|
|
||||||
describe("The Save As action", function () {
|
xdescribe("The Save As action", function () {
|
||||||
var mockDomainObject,
|
var mockDomainObject,
|
||||||
mockClonedObject,
|
mockClonedObject,
|
||||||
mockEditorCapability,
|
mockEditorCapability,
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
["../../src/capabilities/EditorCapability"],
|
["../../src/capabilities/EditorCapability"],
|
||||||
function (EditorCapability) {
|
function (EditorCapability) {
|
||||||
|
|
||||||
describe("The editor capability", function () {
|
xdescribe("The editor capability", function () {
|
||||||
var mockDomainObject,
|
var mockDomainObject,
|
||||||
capabilities,
|
capabilities,
|
||||||
mockParentObject,
|
mockParentObject,
|
||||||
|
@ -27,7 +27,7 @@ define(
|
|||||||
["../../src/creation/CreateAction"],
|
["../../src/creation/CreateAction"],
|
||||||
function (CreateAction) {
|
function (CreateAction) {
|
||||||
|
|
||||||
describe("The create action", function () {
|
xdescribe("The create action", function () {
|
||||||
var mockType,
|
var mockType,
|
||||||
mockParent,
|
mockParent,
|
||||||
mockContext,
|
mockContext,
|
||||||
|
@ -27,7 +27,7 @@ define(
|
|||||||
["../../src/creation/CreateWizard"],
|
["../../src/creation/CreateWizard"],
|
||||||
function (CreateWizard) {
|
function (CreateWizard) {
|
||||||
|
|
||||||
describe("The create wizard", function () {
|
xdescribe("The create wizard", function () {
|
||||||
var mockType,
|
var mockType,
|
||||||
mockParent,
|
mockParent,
|
||||||
mockProperties,
|
mockProperties,
|
||||||
|
@ -20,8 +20,7 @@
|
|||||||
at runtime from the About dialog for additional information.
|
at runtime from the About dialog for additional information.
|
||||||
-->
|
-->
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator {{ngModel.getCssClass()}}"
|
<div class="c-indicator {{ngModel.getCssClass()}}"
|
||||||
title="{{ngModel.getDescription()}}"
|
|
||||||
ng-show="ngModel.getText().length > 0">
|
ng-show="ngModel.getText().length > 0">
|
||||||
<span class="label">{{ngModel.getText()}}</span>
|
<span class="label c-indicator__label">{{ngModel.getText()}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -26,7 +26,7 @@ define([
|
|||||||
'zepto'
|
'zepto'
|
||||||
], function (TreeView, $) {
|
], function (TreeView, $) {
|
||||||
|
|
||||||
describe("TreeView", function () {
|
xdescribe("TreeView", function () {
|
||||||
var mockGestureService,
|
var mockGestureService,
|
||||||
mockGestureHandle,
|
mockGestureHandle,
|
||||||
mockDomainObject,
|
mockDomainObject,
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div ng-show="notifications.length > 0" class="ls-indicator s-status-{{highest.severity}} icon-bell"
|
<div ng-show="notifications.length > 0" class="c-indicator c-indicator--clickable s-status-{{highest.severity}} icon-bell"
|
||||||
ng-controller="NotificationIndicatorController">
|
ng-controller="NotificationIndicatorController">
|
||||||
<span class="label">
|
<span class="label c-indicator__label">
|
||||||
<a ng-click="showNotificationsList()">
|
<button ng-click="showNotificationsList()">
|
||||||
{{notifications.length}} Notification<span ng-show="notifications.length > 1">s</span></a>
|
{{notifications.length}} Notification<span ng-show="notifications.length > 1">s</span></button>
|
||||||
</span><span class="count">{{notifications.length}}</span>
|
</span><span class="c-indicator__count">{{notifications.length}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
['../src/NotificationIndicatorController'],
|
['../src/NotificationIndicatorController'],
|
||||||
function (NotificationIndicatorController) {
|
function (NotificationIndicatorController) {
|
||||||
|
|
||||||
describe("The notification indicator controller ", function () {
|
xdescribe("The notification indicator controller ", function () {
|
||||||
var mockNotificationService,
|
var mockNotificationService,
|
||||||
mockScope,
|
mockScope,
|
||||||
mockDialogService,
|
mockDialogService,
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
define(
|
define(
|
||||||
["../src/ComposeActionPolicy"],
|
["../src/ComposeActionPolicy"],
|
||||||
function (ComposeActionPolicy) {
|
function (ComposeActionPolicy) {
|
||||||
describe("The compose action policy", function () {
|
xdescribe("The compose action policy", function () {
|
||||||
var mockInjector,
|
var mockInjector,
|
||||||
mockPolicyService,
|
mockPolicyService,
|
||||||
mockTypes,
|
mockTypes,
|
||||||
|
@ -42,7 +42,7 @@ define(
|
|||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe("CopyService", function () {
|
xdescribe("CopyService", function () {
|
||||||
var policyService;
|
var policyService;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
|
@ -29,7 +29,7 @@ define(
|
|||||||
],
|
],
|
||||||
function (LinkService, domainObjectFactory, ControlledPromise) {
|
function (LinkService, domainObjectFactory, ControlledPromise) {
|
||||||
|
|
||||||
describe("LinkService", function () {
|
xdescribe("LinkService", function () {
|
||||||
|
|
||||||
var linkService,
|
var linkService,
|
||||||
mockPolicyService;
|
mockPolicyService;
|
||||||
|
@ -34,7 +34,7 @@ define(
|
|||||||
ControlledPromise
|
ControlledPromise
|
||||||
) {
|
) {
|
||||||
|
|
||||||
describe("MoveService", function () {
|
xdescribe("MoveService", function () {
|
||||||
|
|
||||||
var moveService,
|
var moveService,
|
||||||
policyService,
|
policyService,
|
||||||
|
@ -49,7 +49,7 @@ define(
|
|||||||
};
|
};
|
||||||
|
|
||||||
ClockIndicator.prototype.getCssClass = function () {
|
ClockIndicator.prototype.getCssClass = function () {
|
||||||
return "t-indicator-clock icon-clock no-collapse float-right";
|
return "t-indicator-clock icon-clock no-minify c-indicator--not-clickable";
|
||||||
};
|
};
|
||||||
|
|
||||||
ClockIndicator.prototype.getText = function () {
|
ClockIndicator.prototype.getText = function () {
|
||||||
|
@ -31,7 +31,7 @@ define([
|
|||||||
MCT,
|
MCT,
|
||||||
$
|
$
|
||||||
) {
|
) {
|
||||||
describe("The timer-following indicator", function () {
|
xdescribe("The timer-following indicator", function () {
|
||||||
var timerService;
|
var timerService;
|
||||||
var openmct;
|
var openmct;
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ define(
|
|||||||
var MOCK_ELEMENT_TEMPLATE =
|
var MOCK_ELEMENT_TEMPLATE =
|
||||||
'<div class="l-image-thumbs-wrapper"></div>';
|
'<div class="l-image-thumbs-wrapper"></div>';
|
||||||
|
|
||||||
describe("The Imagery controller", function () {
|
xdescribe("The Imagery controller", function () {
|
||||||
var $scope,
|
var $scope,
|
||||||
openmct,
|
openmct,
|
||||||
oldDomainObject,
|
oldDomainObject,
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
["../src/MCTFileInput"],
|
["../src/MCTFileInput"],
|
||||||
function (MCTFileInput) {
|
function (MCTFileInput) {
|
||||||
|
|
||||||
describe("The mct-file-input directive", function () {
|
xdescribe("The mct-file-input directive", function () {
|
||||||
|
|
||||||
var mockScope,
|
var mockScope,
|
||||||
mockFileInputService,
|
mockFileInputService,
|
||||||
|
@ -55,13 +55,13 @@ define([
|
|||||||
|
|
||||||
FrameworkLayer.prototype.initializeApplication = function (
|
FrameworkLayer.prototype.initializeApplication = function (
|
||||||
angular,
|
angular,
|
||||||
legacyRegistry,
|
openmct,
|
||||||
logLevel
|
logLevel
|
||||||
) {
|
) {
|
||||||
var $http = this.$http,
|
var $http = this.$http,
|
||||||
$log = this.$log,
|
$log = this.$log,
|
||||||
app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
|
app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
|
||||||
loader = new BundleLoader($http, $log, legacyRegistry),
|
loader = new BundleLoader($http, $log, openmct.legacyRegistry),
|
||||||
resolver = new BundleResolver(
|
resolver = new BundleResolver(
|
||||||
new ExtensionResolver(
|
new ExtensionResolver(
|
||||||
new ImplementationLoader({}),
|
new ImplementationLoader({}),
|
||||||
@ -77,7 +77,7 @@ define([
|
|||||||
),
|
),
|
||||||
bootstrapper = new ApplicationBootstrapper(
|
bootstrapper = new ApplicationBootstrapper(
|
||||||
angular,
|
angular,
|
||||||
window.document,
|
openmct.element,
|
||||||
$log
|
$log
|
||||||
),
|
),
|
||||||
initializer = new FrameworkInitializer(
|
initializer = new FrameworkInitializer(
|
||||||
|
@ -41,7 +41,7 @@ define(
|
|||||||
function Main() {
|
function Main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.prototype.run = function (legacyRegistry) {
|
Main.prototype.run = function (openmct) {
|
||||||
// Get a reference to Angular's injector, so we can get $http and $log
|
// Get a reference to Angular's injector, so we can get $http and $log
|
||||||
// services, which are useful to the framework layer.
|
// services, which are useful to the framework layer.
|
||||||
var injector = angular.injector(['ng']);
|
var injector = angular.injector(['ng']);
|
||||||
@ -53,7 +53,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return injector.instantiate(['$http', '$log', FrameworkLayer])
|
return injector.instantiate(['$http', '$log', FrameworkLayer])
|
||||||
.initializeApplication(angular, legacyRegistry, logLevel());
|
.initializeApplication(angular, openmct, logLevel());
|
||||||
};
|
};
|
||||||
|
|
||||||
return Main;
|
return Main;
|
||||||
|
@ -72,7 +72,6 @@ define([
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
openmct.legacyRegistry.enable('platform/import-export');
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -19,8 +19,7 @@
|
|||||||
* 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.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
define(['zepto', '../../../../src/api/objects/object-utils.js'], function ($, objectUtils) {
|
||||||
define(['zepto'], function ($) {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ImportAsJSONAction is available from context menus and allows a user
|
* The ImportAsJSONAction is available from context menus and allows a user
|
||||||
@ -61,9 +60,15 @@ define(['zepto'], function ($) {
|
|||||||
|
|
||||||
ImportAsJSONAction.prototype.importObjectTree = function (objTree) {
|
ImportAsJSONAction.prototype.importObjectTree = function (objTree) {
|
||||||
var parent = this.context.domainObject;
|
var parent = this.context.domainObject;
|
||||||
var tree = this.generateNewIdentifiers(objTree);
|
var namespace = parent.useCapability('adapter').identifier.namespace;
|
||||||
|
|
||||||
|
var tree = this.generateNewIdentifiers(objTree, namespace);
|
||||||
var rootId = tree.rootId;
|
var rootId = tree.rootId;
|
||||||
var rootObj = this.instantiate(tree.openmct[rootId], rootId);
|
|
||||||
|
var rootModel = tree.openmct[rootId];
|
||||||
|
delete rootModel.persisted;
|
||||||
|
|
||||||
|
var rootObj = this.instantiate(rootModel, rootId);
|
||||||
var newStyleParent = parent.useCapability('adapter');
|
var newStyleParent = parent.useCapability('adapter');
|
||||||
var newStyleRootObj = rootObj.useCapability('adapter');
|
var newStyleRootObj = rootObj.useCapability('adapter');
|
||||||
|
|
||||||
@ -105,8 +110,10 @@ define(['zepto'], function ($) {
|
|||||||
if (!tree[keystring] || seen.includes(keystring)) {
|
if (!tree[keystring] || seen.includes(keystring)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let newModel = tree[keystring];
|
||||||
|
delete newModel.persisted;
|
||||||
|
|
||||||
newObj = this.instantiate(tree[keystring], keystring);
|
newObj = this.instantiate(newModel, keystring);
|
||||||
newObj.getCapability("location")
|
newObj.getCapability("location")
|
||||||
.setPrimaryLocation(tree[keystring].location);
|
.setPrimaryLocation(tree[keystring].location);
|
||||||
this.deepInstantiate(newObj, tree, seen);
|
this.deepInstantiate(newObj, tree, seen);
|
||||||
@ -114,11 +121,17 @@ define(['zepto'], function ($) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ImportAsJSONAction.prototype.generateNewIdentifiers = function (tree) {
|
ImportAsJSONAction.prototype.generateNewIdentifiers = function (tree, namespace) {
|
||||||
// For each domain object in the file, generate new ID, replace in tree
|
// For each domain object in the file, generate new ID, replace in tree
|
||||||
Object.keys(tree.openmct).forEach(function (domainObjectId) {
|
Object.keys(tree.openmct).forEach(function (domainObjectId) {
|
||||||
var newId = this.identifierService.generate();
|
let newId = {
|
||||||
tree = this.rewriteId(domainObjectId, newId, tree);
|
namespace: namespace,
|
||||||
|
key: this.identifierService.generate()
|
||||||
|
};
|
||||||
|
|
||||||
|
let oldId = objectUtils.parseKeyString(domainObjectId);
|
||||||
|
|
||||||
|
tree = this.rewriteId(oldId, newId, tree);
|
||||||
}, this);
|
}, this);
|
||||||
return tree;
|
return tree;
|
||||||
};
|
};
|
||||||
@ -129,9 +142,21 @@ define(['zepto'], function ($) {
|
|||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ImportAsJSONAction.prototype.rewriteId = function (oldID, newID, tree) {
|
ImportAsJSONAction.prototype.rewriteId = function (oldId, newId, tree) {
|
||||||
tree = JSON.stringify(tree).replace(new RegExp(oldID, 'g'), newID);
|
let newIdKeyString = this.openmct.objects.makeKeyString(newId);
|
||||||
return JSON.parse(tree);
|
let oldIdKeyString = this.openmct.objects.makeKeyString(oldId);
|
||||||
|
tree = JSON.stringify(tree).replace(new RegExp(oldIdKeyString, 'g'), newIdKeyString);
|
||||||
|
|
||||||
|
return JSON.parse(tree, (key, value) => {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(value, 'key') &&
|
||||||
|
Object.prototype.hasOwnProperty.call(value, 'namespace') &&
|
||||||
|
value.key === oldId.key &&
|
||||||
|
value.namespace === oldId.namespace) {
|
||||||
|
return newId
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
ImportAsJSONAction.prototype.getFormModel = function () {
|
ImportAsJSONAction.prototype.getFormModel = function () {
|
||||||
|
@ -29,7 +29,7 @@ define(
|
|||||||
],
|
],
|
||||||
function (ExportAsJSONAction, domainObjectFactory, MCT, AdapterCapability) {
|
function (ExportAsJSONAction, domainObjectFactory, MCT, AdapterCapability) {
|
||||||
|
|
||||||
describe("The export JSON action", function () {
|
xdescribe("The export JSON action", function () {
|
||||||
|
|
||||||
var context,
|
var context,
|
||||||
action,
|
action,
|
||||||
|
@ -27,7 +27,7 @@ define(
|
|||||||
],
|
],
|
||||||
function (ImportAsJSONAction, domainObjectFactory) {
|
function (ImportAsJSONAction, domainObjectFactory) {
|
||||||
|
|
||||||
describe("The import JSON action", function () {
|
xdescribe("The import JSON action", function () {
|
||||||
|
|
||||||
var context = {};
|
var context = {};
|
||||||
var action,
|
var action,
|
||||||
|
@ -100,7 +100,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
CouchIndicator.prototype.getCssClass = function () {
|
CouchIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database " + this.state.statusClass;
|
return "c-indicator--clickable icon-suitcase " + this.state.statusClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
CouchIndicator.prototype.getGlyphClass = function () {
|
CouchIndicator.prototype.getGlyphClass = function () {
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
["../src/CouchIndicator"],
|
["../src/CouchIndicator"],
|
||||||
function (CouchIndicator) {
|
function (CouchIndicator) {
|
||||||
|
|
||||||
describe("The CouchDB status indicator", function () {
|
xdescribe("The CouchDB status indicator", function () {
|
||||||
var mockHttp,
|
var mockHttp,
|
||||||
mockInterval,
|
mockInterval,
|
||||||
testPath,
|
testPath,
|
||||||
|
@ -84,7 +84,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ElasticIndicator.prototype.getCssClass = function () {
|
ElasticIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database";
|
return "c-indicator--clickable icon-suitcase";
|
||||||
};
|
};
|
||||||
ElasticIndicator.prototype.getGlyphClass = function () {
|
ElasticIndicator.prototype.getGlyphClass = function () {
|
||||||
return this.state.glyphClass;
|
return this.state.glyphClass;
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
["../src/ElasticIndicator"],
|
["../src/ElasticIndicator"],
|
||||||
function (ElasticIndicator) {
|
function (ElasticIndicator) {
|
||||||
|
|
||||||
describe("The ElasticSearch status indicator", function () {
|
xdescribe("The ElasticSearch status indicator", function () {
|
||||||
var mockHttp,
|
var mockHttp,
|
||||||
mockInterval,
|
mockInterval,
|
||||||
testPath,
|
testPath,
|
||||||
@ -59,7 +59,7 @@ define(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("has a database icon", function () {
|
it("has a database icon", function () {
|
||||||
expect(indicator.getCssClass()).toEqual("icon-database");
|
expect(indicator.getCssClass()).toEqual("icon-suitcase");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("consults the database at the configured path", function () {
|
it("consults the database at the configured path", function () {
|
||||||
|
@ -41,7 +41,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LocalStorageIndicator.prototype.getCssClass = function () {
|
LocalStorageIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database s-status-caution";
|
return "c-indicator--clickable icon-suitcase s-status-caution";
|
||||||
};
|
};
|
||||||
LocalStorageIndicator.prototype.getGlyphClass = function () {
|
LocalStorageIndicator.prototype.getGlyphClass = function () {
|
||||||
return 'caution';
|
return 'caution';
|
||||||
|
@ -24,7 +24,7 @@ define(
|
|||||||
["../src/LocalStorageIndicator"],
|
["../src/LocalStorageIndicator"],
|
||||||
function (LocalStorageIndicator) {
|
function (LocalStorageIndicator) {
|
||||||
|
|
||||||
describe("The local storage status indicator", function () {
|
xdescribe("The local storage status indicator", function () {
|
||||||
var indicator;
|
var indicator;
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
@ -38,7 +38,7 @@ define(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("has a database icon", function () {
|
it("has a database icon", function () {
|
||||||
expect(indicator.getCssClass()).toEqual("icon-database s-status-caution");
|
expect(indicator.getCssClass()).toEqual("icon-suitcase s-status-caution");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("has a 'caution' class to draw attention", function () {
|
it("has a 'caution' class to draw attention", function () {
|
||||||
|
@ -32,14 +32,6 @@ define(
|
|||||||
mockPromise,
|
mockPromise,
|
||||||
handler;
|
handler;
|
||||||
|
|
||||||
function asPromise(value) {
|
|
||||||
return (value || {}).then ? value : {
|
|
||||||
then: function (callback) {
|
|
||||||
return asPromise(callback(value));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function makeMockFailure(id, index) {
|
function makeMockFailure(id, index) {
|
||||||
var mockFailure = jasmine.createSpyObj(
|
var mockFailure = jasmine.createSpyObj(
|
||||||
'failure-' + id,
|
'failure-' + id,
|
||||||
|
@ -29,6 +29,7 @@ define([
|
|||||||
"./res/templates/search.html",
|
"./res/templates/search.html",
|
||||||
"./res/templates/search-menu.html",
|
"./res/templates/search-menu.html",
|
||||||
"raw-loader!./src/services/GenericSearchWorker.js",
|
"raw-loader!./src/services/GenericSearchWorker.js",
|
||||||
|
"raw-loader!./src/services/BareBonesSearchWorker.js",
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (
|
], function (
|
||||||
SearchController,
|
SearchController,
|
||||||
@ -39,6 +40,7 @@ define([
|
|||||||
searchTemplate,
|
searchTemplate,
|
||||||
searchMenuTemplate,
|
searchMenuTemplate,
|
||||||
searchWorkerText,
|
searchWorkerText,
|
||||||
|
BareBonesSearchWorkerText,
|
||||||
legacyRegistry
|
legacyRegistry
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@ -53,6 +55,11 @@ define([
|
|||||||
"ROOT"
|
"ROOT"
|
||||||
],
|
],
|
||||||
"priority": "fallback"
|
"priority": "fallback"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "USE_LEGACY_INDEXER",
|
||||||
|
"value": false,
|
||||||
|
"priority": 2
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"controllers": [
|
"controllers": [
|
||||||
@ -101,6 +108,7 @@ define([
|
|||||||
"workerService",
|
"workerService",
|
||||||
"topic",
|
"topic",
|
||||||
"GENERIC_SEARCH_ROOTS",
|
"GENERIC_SEARCH_ROOTS",
|
||||||
|
"USE_LEGACY_INDEXER",
|
||||||
"openmct"
|
"openmct"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -115,6 +123,10 @@ define([
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"workers": [
|
"workers": [
|
||||||
|
{
|
||||||
|
"key": "bareBonesSearchWorker",
|
||||||
|
"scriptText": BareBonesSearchWorkerText
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "genericSearchWorker",
|
"key": "genericSearchWorker",
|
||||||
"scriptText": searchWorkerText
|
"scriptText": searchWorkerText
|
||||||
|
80
platform/search/src/services/BareBonesSearchWorker.js
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*global self*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module defining BareBonesSearchWorker. Created by deeptailor on 10/03/2019.
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
// An array of objects composed of domain object IDs and names
|
||||||
|
// {id: domainObject's ID, name: domainObject's name}
|
||||||
|
var indexedItems = [];
|
||||||
|
|
||||||
|
function indexItem(id, model) {
|
||||||
|
indexedItems.push({
|
||||||
|
id: id,
|
||||||
|
name: model.name.toLowerCase()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets search results from the indexedItems based on provided search
|
||||||
|
* input. Returns matching results from indexedItems
|
||||||
|
*
|
||||||
|
* @param data An object which contains:
|
||||||
|
* * input: The original string which we are searching with
|
||||||
|
* * maxResults: The maximum number of search results desired
|
||||||
|
* * queryId: an id identifying this query, will be returned.
|
||||||
|
*/
|
||||||
|
function search(data) {
|
||||||
|
// This results dictionary will have domain object ID keys which
|
||||||
|
// point to the value the domain object's score.
|
||||||
|
var results,
|
||||||
|
input = data.input.trim().toLowerCase(),
|
||||||
|
message = {
|
||||||
|
request: 'search',
|
||||||
|
results: {},
|
||||||
|
total: 0,
|
||||||
|
queryId: data.queryId
|
||||||
|
};
|
||||||
|
|
||||||
|
results = indexedItems.filter((indexedItem) => {
|
||||||
|
return indexedItem.name.includes(input);
|
||||||
|
});
|
||||||
|
|
||||||
|
message.total = results.length;
|
||||||
|
message.results = results
|
||||||
|
.slice(0, data.maxResults);
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.onmessage = function (event) {
|
||||||
|
if (event.data.request === 'index') {
|
||||||
|
indexItem(event.data.id, event.data.model);
|
||||||
|
} else if (event.data.request === 'search') {
|
||||||
|
self.postMessage(search(event.data));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}());
|
@ -44,7 +44,7 @@ define([
|
|||||||
* @param {TopicService} topic the topic service.
|
* @param {TopicService} topic the topic service.
|
||||||
* @param {Array} ROOTS An array of object Ids to begin indexing.
|
* @param {Array} ROOTS An array of object Ids to begin indexing.
|
||||||
*/
|
*/
|
||||||
function GenericSearchProvider($q, $log, modelService, workerService, topic, ROOTS, openmct) {
|
function GenericSearchProvider($q, $log, modelService, workerService, topic, ROOTS, USE_LEGACY_INDEXER, openmct) {
|
||||||
var provider = this;
|
var provider = this;
|
||||||
this.$q = $q;
|
this.$q = $q;
|
||||||
this.$log = $log;
|
this.$log = $log;
|
||||||
@ -58,6 +58,8 @@ define([
|
|||||||
|
|
||||||
this.pendingQueries = {};
|
this.pendingQueries = {};
|
||||||
|
|
||||||
|
this.USE_LEGACY_INDEXER = USE_LEGACY_INDEXER;
|
||||||
|
|
||||||
this.worker = this.startWorker(workerService);
|
this.worker = this.startWorker(workerService);
|
||||||
this.indexOnMutation(topic);
|
this.indexOnMutation(topic);
|
||||||
|
|
||||||
@ -101,8 +103,14 @@ define([
|
|||||||
* @returns worker the created search worker.
|
* @returns worker the created search worker.
|
||||||
*/
|
*/
|
||||||
GenericSearchProvider.prototype.startWorker = function (workerService) {
|
GenericSearchProvider.prototype.startWorker = function (workerService) {
|
||||||
var worker = workerService.run('genericSearchWorker'),
|
var provider = this,
|
||||||
provider = this;
|
worker;
|
||||||
|
|
||||||
|
if (this.USE_LEGACY_INDEXER) {
|
||||||
|
worker = workerService.run('genericSearchWorker');
|
||||||
|
} else {
|
||||||
|
worker = workerService.run('bareBonesSearchWorker');
|
||||||
|
}
|
||||||
|
|
||||||
worker.addEventListener('message', function (messageEvent) {
|
worker.addEventListener('message', function (messageEvent) {
|
||||||
provider.onWorkerMessage(messageEvent);
|
provider.onWorkerMessage(messageEvent);
|
||||||
@ -242,18 +250,34 @@ define([
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pendingQuery = this.pendingQueries[event.data.queryId],
|
var pendingQuery,
|
||||||
|
modelResults;
|
||||||
|
|
||||||
|
if (this.USE_LEGACY_INDEXER) {
|
||||||
|
pendingQuery = this.pendingQueries[event.data.queryId];
|
||||||
modelResults = {
|
modelResults = {
|
||||||
total: event.data.total
|
total: event.data.total
|
||||||
};
|
};
|
||||||
|
|
||||||
modelResults.hits = event.data.results.map(function (hit) {
|
modelResults.hits = event.data.results.map(function (hit) {
|
||||||
return {
|
return {
|
||||||
id: hit.item.id,
|
id: hit.item.id,
|
||||||
model: hit.item.model,
|
model: hit.item.model,
|
||||||
score: hit.matchCount
|
score: hit.matchCount
|
||||||
|
};
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
pendingQuery = this.pendingQueries[event.data.queryId];
|
||||||
|
modelResults = {
|
||||||
|
total: event.data.total
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
modelResults.hits = event.data.results.map(function (hit) {
|
||||||
|
return {
|
||||||
|
id: hit.id
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
pendingQuery.resolve(modelResults);
|
pendingQuery.resolve(modelResults);
|
||||||
delete this.pendingQueries[event.data.queryId];
|
delete this.pendingQueries[event.data.queryId];
|
||||||
|
@ -29,7 +29,7 @@ define([
|
|||||||
GenericSearchProvider
|
GenericSearchProvider
|
||||||
) {
|
) {
|
||||||
|
|
||||||
describe('GenericSearchProvider', function () {
|
xdescribe('GenericSearchProvider', function () {
|
||||||
var $q,
|
var $q,
|
||||||
$log,
|
$log,
|
||||||
modelService,
|
modelService,
|
||||||
|
24
src/MCT.js
@ -38,8 +38,8 @@ define([
|
|||||||
'./ui/router/ApplicationRouter',
|
'./ui/router/ApplicationRouter',
|
||||||
'./ui/router/Browse',
|
'./ui/router/Browse',
|
||||||
'../platform/framework/src/Main',
|
'../platform/framework/src/Main',
|
||||||
'./styles-new/core.scss',
|
'./styles/core.scss',
|
||||||
'./styles-new/notebook.scss',
|
'./styles/notebook.scss',
|
||||||
'./ui/layout/Layout.vue',
|
'./ui/layout/Layout.vue',
|
||||||
'../platform/core/src/objects/DomainObjectImpl',
|
'../platform/core/src/objects/DomainObjectImpl',
|
||||||
'../platform/core/src/capabilities/ContextualDomainObject',
|
'../platform/core/src/capabilities/ContextualDomainObject',
|
||||||
@ -95,12 +95,15 @@ define([
|
|||||||
*/
|
*/
|
||||||
function MCT() {
|
function MCT() {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
|
/* eslint-disable no-undef */
|
||||||
this.buildInfo = {
|
this.buildInfo = {
|
||||||
version: __OPENMCT_VERSION__,
|
version: __OPENMCT_VERSION__,
|
||||||
buildDate: __OPENMCT_BUILD_DATE__,
|
buildDate: __OPENMCT_BUILD_DATE__,
|
||||||
revision: __OPENMCT_REVISION__,
|
revision: __OPENMCT_REVISION__,
|
||||||
branch: __OPENMCT_BUILD_BRANCH__
|
branch: __OPENMCT_BUILD_BRANCH__
|
||||||
};
|
};
|
||||||
|
/* eslint-enable no-undef */
|
||||||
|
|
||||||
|
|
||||||
this.legacyBundle = { extensions: {
|
this.legacyBundle = { extensions: {
|
||||||
services: [
|
services: [
|
||||||
@ -246,16 +249,20 @@ define([
|
|||||||
this.branding = BrandingAPI.default;
|
this.branding = BrandingAPI.default;
|
||||||
|
|
||||||
this.legacyRegistry = defaultRegistry;
|
this.legacyRegistry = defaultRegistry;
|
||||||
|
|
||||||
|
// Plugin's that are installed by default
|
||||||
|
|
||||||
this.install(this.plugins.Plot());
|
this.install(this.plugins.Plot());
|
||||||
this.install(this.plugins.TelemetryTable());
|
this.install(this.plugins.TelemetryTable());
|
||||||
this.install(PreviewPlugin.default());
|
this.install(PreviewPlugin.default());
|
||||||
this.install(LegacyIndicatorsPlugin());
|
this.install(LegacyIndicatorsPlugin());
|
||||||
this.install(LicensesPlugin.default());
|
this.install(LicensesPlugin.default());
|
||||||
this.install(RemoveActionPlugin.default());
|
this.install(RemoveActionPlugin.default());
|
||||||
|
this.install(this.plugins.ImportExport());
|
||||||
if (typeof BUILD_CONSTANTS !== 'undefined') {
|
this.install(this.plugins.FolderView());
|
||||||
this.install(buildInfoPlugin(BUILD_CONSTANTS));
|
this.install(this.plugins.Tabs());
|
||||||
}
|
this.install(this.plugins.FlexibleLayout());
|
||||||
|
this.install(this.plugins.GoToOriginalAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
MCT.prototype = Object.create(EventEmitter.prototype);
|
MCT.prototype = Object.create(EventEmitter.prototype);
|
||||||
@ -336,6 +343,8 @@ define([
|
|||||||
domElement = document.body;
|
domElement = document.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.element = domElement;
|
||||||
|
|
||||||
this.legacyExtension('runs', {
|
this.legacyExtension('runs', {
|
||||||
depends: ['navigationService'],
|
depends: ['navigationService'],
|
||||||
implementation: function (navigationService) {
|
implementation: function (navigationService) {
|
||||||
@ -365,7 +374,8 @@ define([
|
|||||||
* @event start
|
* @event start
|
||||||
* @memberof module:openmct.MCT~
|
* @memberof module:openmct.MCT~
|
||||||
*/
|
*/
|
||||||
var startPromise = new Main().run(this.legacyRegistry)
|
const startPromise = new Main()
|
||||||
|
startPromise.run(this)
|
||||||
.then(function (angular) {
|
.then(function (angular) {
|
||||||
this.$angular = angular;
|
this.$angular = angular;
|
||||||
// OpenMCT Object provider doesn't operate properly unless
|
// OpenMCT Object provider doesn't operate properly unless
|
||||||
|
@ -25,7 +25,7 @@ define([
|
|||||||
'./plugins/plugins',
|
'./plugins/plugins',
|
||||||
'legacyRegistry'
|
'legacyRegistry'
|
||||||
], function (MCT, plugins, legacyRegistry) {
|
], function (MCT, plugins, legacyRegistry) {
|
||||||
describe("MCT", function () {
|
xdescribe("MCT", function () {
|
||||||
var openmct;
|
var openmct;
|
||||||
var mockPlugin;
|
var mockPlugin;
|
||||||
var mockPlugin2;
|
var mockPlugin2;
|
||||||
|
@ -26,6 +26,7 @@ const OUTSIDE_EDIT_PATH_BLACKLIST = ["copy", "follow", "properties", "move", "li
|
|||||||
export default class LegacyContextMenuAction {
|
export default class LegacyContextMenuAction {
|
||||||
constructor(openmct, LegacyAction) {
|
constructor(openmct, LegacyAction) {
|
||||||
this.openmct = openmct;
|
this.openmct = openmct;
|
||||||
|
this.key = LegacyAction.definition.key;
|
||||||
this.name = LegacyAction.definition.name;
|
this.name = LegacyAction.definition.name;
|
||||||
this.description = LegacyAction.definition.description;
|
this.description = LegacyAction.definition.description;
|
||||||
this.cssClass = LegacyAction.definition.cssClass;
|
this.cssClass = LegacyAction.definition.cssClass;
|
||||||
|
@ -37,7 +37,7 @@ define(
|
|||||||
var legacyExtensionFunction = MCT.prototype.legacyExtension;
|
var legacyExtensionFunction = MCT.prototype.legacyExtension;
|
||||||
var legacyIndicatorsRunsFunction;
|
var legacyIndicatorsRunsFunction;
|
||||||
|
|
||||||
describe('The legacy indicators plugin', function () {
|
xdescribe('The legacy indicators plugin', function () {
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
mockLegacyExtensionFunction();
|
mockLegacyExtensionFunction();
|
||||||
|
|
||||||
|
@ -21,13 +21,13 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
export default function legacyCompositionPolicyAdapter(openmct) {
|
export default function legacyCompositionPolicyAdapter(openmct) {
|
||||||
const instantiate = this.openmct.$injector.get('instantiate');
|
const instantiate = openmct.$injector.get('instantiate');
|
||||||
const policyService = this.openmct.$injector.get('policyService');
|
const policyService = openmct.$injector.get('policyService');
|
||||||
|
|
||||||
openmct.composition.addPolicy((parent, child) => {
|
openmct.composition.addPolicy((parent, child) => {
|
||||||
|
|
||||||
let parentId = this.openmct.objects.makeKeyString(parent.identifier);
|
let parentId = openmct.objects.makeKeyString(parent.identifier);
|
||||||
let childId = this.openmct.objects.makeKeyString(child.identifier);
|
let childId = openmct.objects.makeKeyString(child.identifier);
|
||||||
|
|
||||||
let legacyParent = instantiate(parent, parentId);
|
let legacyParent = instantiate(parent, parentId);
|
||||||
let legacyChild = instantiate(child, childId);
|
let legacyChild = instantiate(child, childId);
|
||||||
|
@ -108,6 +108,9 @@ define([
|
|||||||
link();
|
link();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onClearData() {
|
||||||
|
scope.$broadcast('clearData');
|
||||||
|
},
|
||||||
destroy: function () {
|
destroy: function () {
|
||||||
element.off();
|
element.off();
|
||||||
element.remove();
|
element.remove();
|
||||||
@ -126,7 +129,7 @@ define([
|
|||||||
return priority;
|
return priority;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
return LegacyViewProvider;
|
return LegacyViewProvider;
|
||||||
|
|
||||||
|
@ -3,17 +3,6 @@ define([
|
|||||||
], function (
|
], function (
|
||||||
|
|
||||||
) {
|
) {
|
||||||
const DEFAULT_VIEW_PRIORITY = 100;
|
|
||||||
|
|
||||||
const PRIORITY_LEVELS = {
|
|
||||||
"fallback": Number.NEGATIVE_INFINITY,
|
|
||||||
"default": -100,
|
|
||||||
"none": 0,
|
|
||||||
"optional": DEFAULT_VIEW_PRIORITY,
|
|
||||||
"preferred": 1000,
|
|
||||||
"mandatory": Number.POSITIVE_INFINITY
|
|
||||||
};
|
|
||||||
|
|
||||||
function TypeInspectorViewProvider(typeDefinition, openmct, convertToLegacyObject) {
|
function TypeInspectorViewProvider(typeDefinition, openmct, convertToLegacyObject) {
|
||||||
console.warn(`DEPRECATION WARNING: Migrate ${typeDefinition.key} from ${typeDefinition.bundle.path} to use the new Inspector View APIs. Legacy Inspector view support will be removed soon.`);
|
console.warn(`DEPRECATION WARNING: Migrate ${typeDefinition.key} from ${typeDefinition.bundle.path} to use the new Inspector View APIs. Legacy Inspector view support will be removed soon.`);
|
||||||
let representation = openmct.$injector.get('representations[]')
|
let representation = openmct.$injector.get('representations[]')
|
||||||
@ -102,7 +91,7 @@ define([
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
return TypeInspectorViewProvider;
|
return TypeInspectorViewProvider;
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ let brandingOptions = {};
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set branding options for the application. These will override certain visual elements
|
* Set branding options for the application. These will override certain visual elements
|
||||||
* of the application and allow for customization of the application.
|
* of the application and allow for customization of the application.
|
||||||
* @param {BrandingOptions} options
|
* @param {BrandingOptions} options
|
||||||
*/
|
*/
|
||||||
|
@ -49,6 +49,9 @@ class ContextMenuAPI {
|
|||||||
* a single sentence or short paragraph) of this kind of view
|
* a single sentence or short paragraph) of this kind of view
|
||||||
* @property {string} cssClass the CSS class to apply to labels for this
|
* @property {string} cssClass the CSS class to apply to labels for this
|
||||||
* view (to add icons, for instance)
|
* view (to add icons, for instance)
|
||||||
|
* @property {string} key unique key to identify the context menu action
|
||||||
|
* (used in custom context menu eg table rows, to identify which actions to include)
|
||||||
|
* @property {boolean} hideInDefaultMenu optional flag to hide action from showing in the default context menu (tree item)
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @method appliesTo
|
* @method appliesTo
|
||||||
@ -72,12 +75,21 @@ class ContextMenuAPI {
|
|||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
_showContextMenuForObjectPath(objectPath, x, y) {
|
_showContextMenuForObjectPath(objectPath, x, y, actionsToBeIncluded) {
|
||||||
|
|
||||||
let applicableActions = this._allActions.filter((action) => {
|
let applicableActions = this._allActions.filter((action) => {
|
||||||
if (action.appliesTo === undefined) {
|
|
||||||
return true;
|
if (actionsToBeIncluded) {
|
||||||
|
if (action.appliesTo === undefined && actionsToBeIncluded.includes(action.key)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return action.appliesTo(objectPath, actionsToBeIncluded) && actionsToBeIncluded.includes(action.key);
|
||||||
|
} else {
|
||||||
|
if (action.appliesTo === undefined) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return action.appliesTo(objectPath) && !action.hideInDefaultMenu;
|
||||||
}
|
}
|
||||||
return action.appliesTo(objectPath);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this._activeContextMenu) {
|
if (this._activeContextMenu) {
|
||||||
|
@ -29,7 +29,7 @@ define(
|
|||||||
MCT,
|
MCT,
|
||||||
MCTIndicators
|
MCTIndicators
|
||||||
) {
|
) {
|
||||||
describe("The Indicator API", function () {
|
xdescribe("The Indicator API", function () {
|
||||||
var openmct;
|
var openmct;
|
||||||
var directive;
|
var directive;
|
||||||
var holderElement;
|
var holderElement;
|
||||||
|
@ -28,11 +28,11 @@ define(['zepto', './res/indicator-template.html'],
|
|||||||
this.openmct = openmct;
|
this.openmct = openmct;
|
||||||
this.element = $(indicatorTemplate)[0];
|
this.element = $(indicatorTemplate)[0];
|
||||||
|
|
||||||
this.textElement = this.element.querySelector('.indicator-text');
|
this.textElement = this.element.querySelector('.js-indicator-text');
|
||||||
|
|
||||||
//Set defaults
|
//Set defaults
|
||||||
this.text('New Indicator');
|
this.text('New Indicator');
|
||||||
this.description('A simple indicator');
|
this.description('');
|
||||||
this.iconClass(DEFAULT_ICON_CLASS);
|
this.iconClass(DEFAULT_ICON_CLASS);
|
||||||
this.statusClass('');
|
this.statusClass('');
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<div class="ls-indicator" title="">
|
<div class="c-indicator c-indicator--clickable c-indicator--simple" title="">
|
||||||
<span class="label indicator-text"></span>
|
<span class="label js-indicator-text c-indicator__label"></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -42,7 +42,7 @@ import EventEmitter from 'EventEmitter';
|
|||||||
*
|
*
|
||||||
* @typedef {object} NotificationModel
|
* @typedef {object} NotificationModel
|
||||||
* @property {string} message The message to be displayed by the notification
|
* @property {string} message The message to be displayed by the notification
|
||||||
* @property {number | 'unknown'} [progress] The progres of some ongoing task. Should be a number between 0 and 100, or
|
* @property {number | 'unknown'} [progress] The progres of some ongoing task. Should be a number between 0 and 100, or
|
||||||
* with the string literal 'unknown'.
|
* with the string literal 'unknown'.
|
||||||
* @property {string} [progressText] A message conveying progress of some ongoing task.
|
* @property {string} [progressText] A message conveying progress of some ongoing task.
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@
|
|||||||
&.message-severity-error:before {
|
&.message-severity-error:before {
|
||||||
@include legacyMessage();
|
@include legacyMessage();
|
||||||
content: $glyph-icon-alert-triangle;
|
content: $glyph-icon-alert-triangle;
|
||||||
color: $colorWarningLo;
|
color: $colorWarningHi;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Messages in a list
|
// Messages in a list
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__top-bar {
|
&__top-bar {
|
||||||
|
@ -25,7 +25,7 @@ define([
|
|||||||
], function (
|
], function (
|
||||||
TelemetryAPI
|
TelemetryAPI
|
||||||
) {
|
) {
|
||||||
describe('Telemetry API', function () {
|
xdescribe('Telemetry API', function () {
|
||||||
var openmct;
|
var openmct;
|
||||||
var telemetryAPI;
|
var telemetryAPI;
|
||||||
var mockTypeService;
|
var mockTypeService;
|
||||||
@ -329,7 +329,7 @@ define([
|
|||||||
hints: {
|
hints: {
|
||||||
priority: 2
|
priority: 2
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "timestamp",
|
key: "timestamp",
|
||||||
@ -365,7 +365,7 @@ define([
|
|||||||
{
|
{
|
||||||
key: "name",
|
key: "name",
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "timestamp",
|
key: "timestamp",
|
||||||
@ -392,7 +392,7 @@ define([
|
|||||||
{
|
{
|
||||||
key: "name",
|
key: "name",
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "timestamp-utc",
|
key: "timestamp-utc",
|
||||||
@ -434,7 +434,7 @@ define([
|
|||||||
{
|
{
|
||||||
key: "name",
|
key: "name",
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "timestamp-utc",
|
key: "timestamp-utc",
|
||||||
@ -486,7 +486,7 @@ define([
|
|||||||
hints: {
|
hints: {
|
||||||
priority: 1
|
priority: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "timestamp-utc",
|
key: "timestamp-utc",
|
||||||
|
@ -32,6 +32,6 @@ class CSVExporter {
|
|||||||
let blob = new Blob([csvText], { type: "text/csv" });
|
let blob = new Blob([csvText], { type: "text/csv" });
|
||||||
saveAs(blob, filename);
|
saveAs(blob, filename);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
export default CSVExporter;
|
export default CSVExporter;
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<metadata>Generated by IcoMoon</metadata>
|
|
||||||
<defs>
|
|
||||||
<font id="openmct-symbols-12px" horiz-adv-x="1024">
|
|
||||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
|
||||||
<missing-glyph horiz-adv-x="1024" />
|
|
||||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
|
||||||
<glyph unicode="" glyph-name="icon12-crosshair" d="M597.333 938.667h-170.667v-256h170.667v256zM1024 512h-256v-170.667h256v170.667zM597.333 170.667h-170.667v-256h170.667v256zM256 512h-256v-170.667h256v170.667z" />
|
|
||||||
<glyph unicode="" glyph-name="icon12-grippy" horiz-adv-x="745" d="M186.347 706.027c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM186.347 426.8c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM186.347 147.307c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM465.573 845.494c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM465.573 566.267c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM379.028 379.939c51.328-3.652 89.978-48.223 86.325-99.551s-48.223-89.978-99.551-86.325c-51.328 3.652-89.978 48.223-86.325 99.551s48.223 89.978 99.551 86.325zM379.017 100.707c51.328-3.652 89.978-48.223 86.325-99.551s-48.223-89.978-99.551-86.325c-51.328 3.652-89.978 48.223-86.325 99.551s48.223 89.978 99.551 86.325zM744.773 706.027c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM744.773 426.8c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173zM744.773 147.307c0-51.458-41.715-93.173-93.173-93.173s-93.173 41.715-93.173 93.173c0 51.458 41.715 93.173 93.173 93.173s93.173-41.715 93.173-93.173z" />
|
|
||||||
<glyph unicode="󡁂" glyph-name="icon12-list-view" d="M0 938.667h1024v-170.667h-1024v170.667zM0 512h1024v-170.667h-1024v170.667zM0 85.334h1024v-170.667h-1024v170.667z" />
|
|
||||||
<glyph unicode="󡄉" glyph-name="icon12-folder" d="M938.667 768h-341.333l-110.32 110.32c-33.2 33.2-98.667 60.347-145.68 60.347h-256c-47.073-0.136-85.197-38.26-85.333-85.32v-341.346c0.136 47.073 38.26 85.197 85.32 85.333h853.346c47.073-0.136 85.197-38.26 85.333-85.32v170.654c-0.136 47.073-38.26 85.197-85.32 85.333zM85.333 512h853.333c47.128 0 85.333-38.205 85.333-85.333v-426.667c0-47.128-38.205-85.333-85.333-85.333h-853.333c-47.128 0-85.333 38.205-85.333 85.333v426.667c0 47.128 38.205 85.333 85.333 85.333z" />
|
|
||||||
</font></defs></svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,123 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<metadata>Generated by IcoMoon</metadata>
|
|
||||||
<defs>
|
|
||||||
<font id="openmct-symbols-16px" horiz-adv-x="1024">
|
|
||||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
|
||||||
<missing-glyph horiz-adv-x="1024" />
|
|
||||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
|
||||||
<glyph unicode="" glyph-name="icon-alert-rect" d="M896 960h-768c-70.6-0.2-127.8-57.4-128-128v-768c0.2-70.6 57.4-127.8 128-128h768c70.6 0.2 127.8 57.4 128 128v768c-0.2 70.6-57.4 127.8-128 128zM576 64h-128v128h128v-128zM597.8 448l-37.8-192h-96l-37.8 192v384h171.8v-384z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-alert-triangle" d="M998.2 111.2l-422.6 739.6c-35 61.2-92 61.2-127 0l-422.8-739.6c-35-61.2-6-111.2 64.4-111.2h843.4c70.6 0 99.6 50 64.6 111.2zM576 64h-128v128h128v-128zM597.8 448l-37.8-192h-96l-37.8 192v256h171.8v-256z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-down" d="M512 192l512 512h-1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-left" d="M256 448l512-512v1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-right" d="M768 448l-512 512v-1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-double-up" d="M510 450l512-512h-1024zM510 962l512-512h-1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-tall-up" d="M512 960l512-1024h-1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-tall-down" d="M512-64l-512 1024h1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-double-down" d="M510 450l-512 512h1024zM510-62l-512 512h1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-up" d="M512 704l-512-512h1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-asterisk" d="M1004.166 619.542l-97.522 168.916-330.534-229.414 33.414 400.956h-195.048l33.414-400.956-330.534 229.414-97.522-168.916 363.944-171.542-363.944-171.542 97.522-168.916 330.534 229.414-33.414-400.956h195.048l-33.414 400.956 330.534-229.414 97.522 168.916-363.944 171.542z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-bell" d="M512-64c106 0 192 86 192 192h-384c0-106 86-192 192-192zM896 512v64c0 212-172 384-384 384s-384-172-384-384v-64c0-70.6-57.4-128-128-128v-128h1024v128c-70.6 0-128 57.4-128 128z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-box" d="M0 960h1024v-1024h-1024v1024z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-box-with-arrow-cursor" d="M894 962h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h400c-2.2 3.8-4 7.6-5.8 11.4l-255.2 576.8c-21.4 48.4-10.8 105 26.6 142.4 24.4 24.4 57.2 37.4 90.4 37.4 17.4 0 35.2-3.6 51.8-11l576.6-255.4c4-1.8 7.8-3.8 11.4-5.8v400.2c0.2 70.4-57.4 128-127.8 128zM958.6 322.6l-576.6 255.4 255.4-576.6 64.6 128.6 192-192 128 128-192 192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-check" d="M1024 960l-640-640-384 384v-384l384-384 640 640z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-connectivity" d="M704 384c0-70.4-57.6-128-128-128h-128c-70.4 0-128 57.6-128 128v128c0 70.4 57.6 128 128 128h128c70.4 0 128-57.6 128-128v-128zM1024 448l-192 320v-640zM0 448l192 320v-640z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-database-in-brackets" d="M768 608c0-53.019-114.615-96-256-96s-256 42.981-256 96c0 53.019 114.615 96 256 96s256-42.981 256-96zM768 288v256c0-53-114.6-96-256-96s-256 43-256 96v-256c0-53 114.6-96 256-96s256 43 256 96zM832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-eye-open" d="M512 843.6c-245.8 0-452.2-168-510.8-395.6 58.6-227.4 265-395.6 510.8-395.6s452.2 168 510.8 395.6c-58.6 227.4-265 395.6-510.8 395.6zM829.2 371.6c-22.6-34.4-50.6-64.8-83-90.4-32.8-25.8-69-45.6-108-59.4-40.4-14.2-82.8-21.4-126-21.4s-85.8 7.2-126 21.4c-39 13.8-75.4 33.8-108 59.4-32.4 25.6-60.4 55.8-83 90.4-15.8 24-28.8 49.6-38.6 76.4 10 26.8 23 52.4 38.6 76.4 22.6 34.4 50.6 64.8 83 90.4 32.8 25.8 69 45.6 108 59.4 40.4 14.2 82.8 21.4 126 21.4s85.8-7.2 126-21.4c39-13.8 75.4-33.8 108-59.4 32.4-25.6 60.4-55.8 83-90.4 15.8-24 28.8-49.6 38.6-76.4-9.8-26.8-22.8-52.4-38.6-76.4zM704 448c0-106.039-85.961-192-192-192s-192 85.961-192 192c0 106.039 85.961 192 192 192s192-85.961 192-192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-gear" d="M1024 384v128l-140.976 35.244c-8.784 32.922-21.818 64.106-38.504 92.918l74.774 124.622-90.51 90.51-124.622-74.774c-28.812 16.686-59.996 29.72-92.918 38.504l-35.244 140.976h-128l-35.244-140.976c-32.922-8.784-64.106-21.818-92.918-38.504l-124.622 74.774-90.51-90.51 74.774-124.622c-16.686-28.812-29.72-59.996-38.504-92.918l-140.976-35.244v-128l140.976-35.244c8.784-32.922 21.818-64.106 38.504-92.918l-74.774-124.622 90.51-90.51 124.622 74.774c28.812-16.686 59.996-29.72 92.918-38.504l35.244-140.976h128l35.244 140.976c32.922 8.784 64.106 21.818 92.918 38.504l124.622-74.774 90.51 90.51-74.774 124.622c16.686 28.812 29.72 59.996 38.504 92.918l140.976 35.244zM704 448c0-106.038-85.962-192-192-192s-192 85.962-192 192 85.962 192 192 192 192-85.962 192-192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-hourglass" d="M1024 960h-1024c0-282.8 229.2-512 512-512s512 229.2 512 512zM512 576c-102.6 0-199 40-271.6 112.4-41.2 41.2-72 90.2-90.8 143.6h724.6c-18.8-53.4-49.6-102.4-90.8-143.6-72.4-72.4-168.8-112.4-271.4-112.4zM512 448c-282.8 0-512-229.2-512-512h1024c0 282.8-229.2 512-512 512z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-info" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM512 832c70.6 0 128-57.4 128-128s-57.4-128-128-128c-70.6 0-128 57.4-128 128s57.4 128 128 128zM704 128h-384v128h64v256h256v-256h64v-128z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-link" d="M1024 448l-512 512v-307.2l-512-204.8v-256h512v-256z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-lock" d="M832 576h-32v96c0 158.8-129.2 288-288 288s-288-129.2-288-288v-96h-32c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h640c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128zM416 672c0 53 43 96 96 96s96-43 96-96v-96h-192v96z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-minus" d="M960 320c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h896z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-people" d="M704 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM256 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM832 576h-192c-34.908 0-67.716-9.448-96-25.904 57.278-33.324 96-95.404 96-166.096v-448h384v448c0 105.6-86.4 192-192 192zM384 576h-192c-105.6 0-192-86.4-192-192v-448h576v448c0 105.6-86.4 192-192 192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-person" d="M768 704c0-105.6-86.4-192-192-192h-128c-105.6 0-192 86.4-192 192v64c0 105.6 86.4 192 192 192h128c105.6 0 192-86.4 192-192v-64zM64-64v192c0 140.8 115.2 256 256 256h384c140.8 0 256-115.2 256-256v-192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-plus" d="M960 576h-330v320c0 35.2-28.8 64-64 64h-108c-35.2 0-64-28.8-64-64v-320h-330c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h330v-320c0-35.2 28.8-64 64-64h108c35.2 0 64 28.8 64 64v320h330c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-trash" d="M832 832h-192.36v64c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-64h-191.64c-105.6 0-192-72-192-160s0-160 0-160h64v-384c0-105.6 86.4-192 192-192h512c105.6 0 192 86.4 192 192v384h64c0 0 0 72 0 160s-86.4 160-192 160zM320 128h-128v384h128v-384zM576 128h-128v384h128v-384zM832 128h-128v384h128v-384z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-brackets" d="M832 960h-192v-192h191.66l0.34-0.34v-639.32l-0.34-0.34h-191.66v-192h192c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM384 128h-191.66l-0.34 0.34v639.32l0.34 0.34h191.66v192h-192c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h192v192z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-crosshair" d="M574 962h-128v-320h128v320zM1022 514h-320v-128h320v128zM574 258h-128v-320h128v320zM318 514h-320v-128h320v128z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-grippy-v2" horiz-adv-x="586" d="M146.4 777.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM146.4 557.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM146.4 338.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM146.4 118.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.8 886.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.8 667.4c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.8 448c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.8 228.6c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.8 9.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM585.2 777.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM585.2 557.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM585.2 338.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM585.2 118.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2z" />
|
|
||||||
<glyph unicode="" glyph-name="icon-arrow-right-equilateral" d="M962 448l-896-512v1024z" />
|
|
||||||
<glyph unicode="󡀀" glyph-name="icon-arrows-out" d="M0 448l256-256v512zM512 960l-256-256h512zM512-64l256 256h-512zM768 704v-512l256 256z" />
|
|
||||||
<glyph unicode="󡀁" glyph-name="icon-arrows-right-left" d="M1024 448l-448-512v1024zM448 960l-448-512 448-512z" />
|
|
||||||
<glyph unicode="󡀂" glyph-name="icon-arrows-up-down" d="M512 960l512-448h-1024zM0 384l512-448 512 448z" />
|
|
||||||
<glyph unicode="󡀄" glyph-name="icon-bullet" d="M832 208c0-44-36-80-80-80h-480c-44 0-80 36-80 80v480c0 44 36 80 80 80h480c44 0 80-36 80-80v-480z" />
|
|
||||||
<glyph unicode="󡀅" glyph-name="icon-calendar" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 512h-256v192h256v-192zM384 448h256v-192h-256v192zM320 256h-256v192h256v-192zM320 704v-192h-256v192h256zM128 0c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 256h-256v192h256v-192zM960 512h-256v192h256v-192z" />
|
|
||||||
<glyph unicode="󡀆" glyph-name="icon-chain-links" d="M958.4 894.4c-43.8 43.8-101 65.6-158.4 65.6s-114.6-21.8-158.4-65.6l-128-128c-74-74-85.4-187-34-273l-12.8-12.8c-35.4 20.8-75 31.4-114.8 31.4-57.4 0-114.6-21.8-158.4-65.6l-128-128c-87.4-87.4-87.4-229.4 0-316.8 43.8-43.8 101-65.6 158.4-65.6s114.6 21.8 158.4 65.6l128 128c74 74 85.4 187 34 273l12.8 12.8c35.2-21 75-31.6 114.6-31.6 57.4 0 114.6 21.8 158.4 65.6l128 128c87.6 87.6 87.6 229.6 0.2 317zM419.8 220.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2s-49.8 10-67.8 28.2c-37.4 37.4-37.4 98.4 0 135.8l128 128c18.2 18.2 42.2 28.2 67.8 28.2 5.6 0 11.2-0.6 16.8-1.4l-55.6-55.6c-10.4-10.4-16.2-24.2-16.2-38.8s5.8-28.6 16.2-38.8c10.4-10.4 24.2-16.2 38.8-16.2s28.6 5.8 38.8 16.2l55.6 55.6c5.4-30.4-3.6-62.2-26.6-85zM867.8 668.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2-5.6 0-11.2 0.6-16.8 1.4l55.6 55.6c10.4 10.4 16.2 24.2 16.2 38.8s-5.8 28.6-16.2 38.8c-10.4 10.4-24.2 16.2-38.8 16.2s-28.6-5.8-38.8-16.2l-55.6-55.6c-5.2 29.8 3.6 61.6 26.6 84.6l128 128c18 18.4 42.2 28.4 67.8 28.4s49.8-10 67.8-28.2c37.6-37.4 37.6-98.2 0-135.6z" />
|
|
||||||
<glyph unicode="󡀇" glyph-name="icon-pane-collapse-left" horiz-adv-x="832" d="M0 960h192v-1024h-192v1024zM832 704h-256v256l-320-416 320-416v256h256v320z" />
|
|
||||||
<glyph unicode="󡀈" glyph-name="icon-pane-collapse-right" horiz-adv-x="832" d="M640 960h192v-1024h-192v1024zM0 704h256v256l320-416-320-416v256h-256v320z" />
|
|
||||||
<glyph unicode="󡀉" glyph-name="icon-download" d="M832 384v-255.66l-0.34-0.34-639.66 0.34v255.66h-192v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-192zM512 320l448 448h-256v192h-384v-192h-256l448-448z" />
|
|
||||||
<glyph unicode="󡀐" glyph-name="icon-duplicate" d="M640 704v128c0 70.4-57.6 128-128 128h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h128v139.6c0 134.8 109.6 244.4 244.4 244.4h139.6zM896 576h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h384c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128z" />
|
|
||||||
<glyph unicode="󡀑" glyph-name="icon-folder-new" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM704 160h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
|
|
||||||
<glyph unicode="󡀒" glyph-name="icon-fullscreen-expand" d="M192.344 128c-0.118 0.1-0.244 0.224-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192h192v192h-191.656zM192 767.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656zM832 960h-192v-192h191.656c0.118-0.1 0.244-0.226 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192zM832 128.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656z" />
|
|
||||||
<glyph unicode="󡀓" glyph-name="icon-fullscreen-collapse" d="M191.656 128c0.118-0.1 0.244-0.224 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192h-192v-192h191.656zM192 768.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656zM832 576h192v192h-191.656c-0.118 0.1-0.244 0.226-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192zM832 127.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656z" />
|
|
||||||
<glyph unicode="󡀔" glyph-name="icon-layers" d="M1024 576l-512 384-512-384 512-384zM512 64l-426.666 320-85.334-64 512-384 512 384-85.334 64z" />
|
|
||||||
<glyph unicode="󡀕" glyph-name="icon-line-horz" d="M64 384c-35.346 0-64 28.654-64 64s28.654 64 64 64h896c35.346 0 64-28.654 64-64s-28.654-64-64-64h-896z" />
|
|
||||||
<glyph unicode="󡀖" glyph-name="icon-magnify" d="M1024 64l-256.8 256.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128zM212.4 340.4c-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0 112.4-294.8 0-407.2c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4z" />
|
|
||||||
<glyph unicode="󡀗" glyph-name="icon-magnify-in" d="M1024 64l-256.86 256.86c40.681 62.963 64.861 139.898 64.861 222.481 0 0.232 0 0.464-0.001 0.696v-0.036c0 229.76-186.24 416-416 416s-416-186.24-416-416 186.24-416 416-416c0.196 0 0.427-0.001 0.659-0.001 82.583 0 159.518 24.18 224.112 65.846l-1.631-0.985 256.86-256.86zM212.36 340.36c-52.114 52.117-84.346 124.114-84.346 203.64 0 159.058 128.942 288 288 288s288-128.942 288-288c0-159.058-128.942-288-288-288-0.005 0-0.010 0-0.014 0h0.001c-0.242-0.001-0.529-0.001-0.815-0.001-79.271 0-151.010 32.251-202.811 84.348l-0.013 0.014zM224 608h384v-128h-384v128zM352 736h128v-384h-128v384z" />
|
|
||||||
<glyph unicode="󡀘" glyph-name="icon-magnify-out" d="M767.2 320.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128-256.8 256.8zM619.6 340.4c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0c112.4-112.4 112.4-294.8 0-407.2zM224 608h384v-128h-384v128z" />
|
|
||||||
<glyph unicode="󡀙" glyph-name="icon-menu" d="M0 832h1024v-128h-1024v128zM0 512h1024v-128h-1024v128zM0 192h1024v-128h-1024v128z" />
|
|
||||||
<glyph unicode="󡀠" glyph-name="icon-move" d="M293.4 448l218.6 218.6 256-256v421.4c0 70.4-57.6 128-128 128h-512c-70.4 0-128-57.6-128-128v-512c0-70.4 57.6-128 128-128h421.4l-256 256zM1024 512h-128v-320l-384 384-128-128 384-384h-320v-128h576z" />
|
|
||||||
<glyph unicode="󡀡" glyph-name="icon-new-window" d="M448 960v-128h320l-384-384 128-128 384 384v-320h128v576zM576 285.726v-157.382c-0.1-0.118-0.226-0.244-0.344-0.344h-383.312c-0.118 0.1-0.244 0.226-0.344 0.344v383.312c0.1 0.118 0.226 0.244 0.344 0.344h157.382l192 192h-349.726c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h384c105.6 0 192 86.4 192 192v349.726l-192-192z" />
|
|
||||||
<glyph unicode="󡀢" glyph-name="icon-paint-bucket" d="M544 736v-224c0-88.4-71.6-160-160-160s-160 71.6-160 160v97.2l-197.4-196.4c-50-50-12.4-215.2 112.4-340s290-162.4 340-112.4l417 423.6-352 352zM896-64c70.6 0 128 57.4 128 128 0 108.6-128 192-128 192s-128-83.4-128-192c0-70.6 57.4-128 128-128zM384 448c-35.4 0-64 28.6-64 64v384c0 35.4 28.6 64 64 64s64-28.6 64-64v-384c0-35.4-28.6-64-64-64z" />
|
|
||||||
<glyph unicode="󡀣" glyph-name="icon-pause" d="M126 962h256v-1024h-256v1024zM638 962h256v-1024h-256v1024z" />
|
|
||||||
<glyph unicode="󡀤" glyph-name="icon-pencil" d="M922.344 858.32c-38.612 38.596-81.306 69.232-120.304 86.324-68.848 30.25-104.77 9.078-120.194-6.344l-516.228-516.216-3.136-9.152-162.482-476.932 485.998 165.612 6.73 6.806 509.502 509.506c9.882 9.866 21.768 27.77 21.768 56.578 0.002 50.71-38.996 121.148-101.654 183.818zM237.982 104.34l-69.73 69.728 69.25 203.228 18.498 6.704h64v-128h128v-64l-6.846-18.506-203.172-69.154z" />
|
|
||||||
<glyph unicode="󡀥" glyph-name="icon-play" d="M1024 448l-1024-512v1024z" />
|
|
||||||
<glyph unicode="󡀦" glyph-name="icon-plot-resource" d="M255.884 256c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h255.884c0.040 0.034 0.082 0.074 0.116 0.116v127.884c0 70.58 57.42 128 128 128h143.658c-93.832 117.038-237.98 192-399.658 192-282.77 0-512-229.23-512-512 0-67.904 13.25-132.704 37.256-192h218.628zM768.116 640c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-255.884c-0.040-0.034-0.082-0.074-0.116-0.116v-127.884c0-70.58-57.42-128-128-128h-143.658c93.832-117.038 237.98-192 399.658-192 282.77 0 512 229.23 512 512 0 67.904-13.25 132.704-37.256 192h-218.628z" />
|
|
||||||
<glyph unicode="󡀧" glyph-name="icon-pointer-left" horiz-adv-x="512" d="M510-64l-256 512 256 512h-256l-256-512 256-512z" />
|
|
||||||
<glyph unicode="󡀨" glyph-name="icon-pointer-right" horiz-adv-x="512" d="M-2 960l256-512-256-512h256l256 512-256 512z" />
|
|
||||||
<glyph unicode="󡀩" glyph-name="icon-refresh" d="M960 528v432l-164.8-164.8c-79.8 65.2-178.8 100.8-283.2 100.8-119.6 0-232.2-46.6-316.8-131.2s-131.2-197.2-131.2-316.8 46.6-232.2 131.2-316.8c84.6-84.6 197.2-131.2 316.8-131.2s232.2 46.6 316.8 131.2c69.4 69.4 113.2 157.4 126.6 252.8h-130c-29.8-145.8-159-256-313.6-256-176.4 0-320 143.6-320 320s143.8 320 320.2 320c72 0 138.4-23.8 192-64l-176-176h432z" />
|
|
||||||
<glyph unicode="󡀰" glyph-name="icon-save" d="M192.2 384c-0.2 0-0.2 0 0 0l-0.2-448h640v447.8c0 0 0 0-0.2 0.2h-639.6zM978.8 749.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-576c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128v448c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-448c70.4 0 128 57.6 128 128v576c0 35.2-20.4 84.4-45.2 109.2zM704 704c0-35.2-28.8-64-64-64h-448c-35.2 0-64 28.8-64 64v192h320v-192h128v192h128v-192z" />
|
|
||||||
<glyph unicode="󡀱" glyph-name="icon-sine" d="M1022.294 448c-1.746 7.196-3.476 14.452-5.186 21.786-20.036 85.992-53.302 208.976-98 306.538-22.42 48.938-45.298 86.556-69.946 115.006-48.454 55.93-98.176 67.67-131.356 67.67s-82.902-11.74-131.356-67.672c-24.648-28.45-47.528-66.068-69.948-115.006-44.696-97.558-77.962-220.544-98-306.538-21.646-92.898-46.444-175.138-71.71-237.836-16.308-40.46-30.222-66.358-40.6-82.604-10.378 16.246-24.292 42.142-40.6 82.604-23.272 57.75-46.144 132.088-66.524 216.052h-197.362c1.746-7.196 3.476-14.452 5.186-21.786 20.036-85.992 53.302-208.976 98-306.538 22.42-48.938 45.298-86.556 69.946-115.006 48.454-55.932 98.176-67.672 131.356-67.672s82.902 11.74 131.356 67.672c24.648 28.45 47.528 66.068 69.948 115.006 44.696 97.558 77.962 220.544 98 306.538 21.646 92.898 46.444 175.138 71.71 237.836 16.308 40.46 30.222 66.358 40.6 82.604 10.378-16.246 24.292-42.142 40.6-82.604 23.274-57.748 46.146-132.086 66.526-216.050h197.36z" />
|
|
||||||
<glyph unicode="󡀲" glyph-name="icon-T" d="M0 960v-256h128v64h256v-704h-192v-128h640v128h-192v704h256v-64h128v256z" />
|
|
||||||
<glyph unicode="󡀳" glyph-name="icon-thumbs-strip" d="M448 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM448 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320z" />
|
|
||||||
<glyph unicode="󡀴" glyph-name="icon-two-parts-both" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM128 832h320v-768h-320v768zM896 64h-320v768h320v-768z" />
|
|
||||||
<glyph unicode="󡀵" glyph-name="icon-two-parts-one-only" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-320v768h320v-768z" />
|
|
||||||
<glyph unicode="󡀶" glyph-name="icon-resync" d="M795.2 795.2c-79.8 65.2-178.8 100.8-283.2 100.8-119.6 0-232.2-46.6-316.8-131.2-69.4-69.4-113.2-157.4-126.6-252.8h130c29.6 145.8 158.8 256 313.4 256 72 0 138.4-23.8 192-64l-176-176h432v432l-164.8-164.8zM512 128c-72 0-138.4 23.8-192 64l176 176h-432v-432l164.8 164.8c79.8-65.2 178.8-100.8 283.2-100.8 119.6 0 232.2 46.6 316.8 131.2 69.4 69.4 113.2 157.4 126.6 252.8h-130c-29.6-145.8-158.8-256-313.4-256z" />
|
|
||||||
<glyph unicode="󡀷" glyph-name="icon-reset" d="M460.8 499.2l-187.8 187.8c57.2 42.8 128 68.2 204.8 68.2 188.2 0 341.6-153.2 341.6-341.4s-153.2-341.2-341.4-341.2c-165 0-302.8 117.6-334.6 273h-138.4c14.2-101.8 61-195.6 135-269.6 90.2-90.2 210.4-140 338-140s247.6 49.8 338 140 140 210.4 140 338-49.8 247.6-140 338-210.4 140-338 140c-111.4 0-217-38-302-107.6l-176 175.6v-460.8h460.8z" />
|
|
||||||
<glyph unicode="󡀸" glyph-name="icon-x-in-circle" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM832 256l-128-128-192 192-192-192-128 128 192 192-192 192 128 128 192-192 192 192 128-128-192-192 192-192z" />
|
|
||||||
<glyph unicode="󡀹" glyph-name="icon-brightness" d="M253.414 641.939l-155.172 116.384c-50.233-66.209-85.127-146.713-97.91-234.39l191.586-30.216c8.145 56.552 29.998 106.879 62.068 149.006zM191.98 402.283l-191.919-27.434c13.115-90.459 48.009-170.963 99.174-238.453l154.18 117.665c-31.476 41.347-53.309 91.675-61.231 146.504zM466.283 768.020l-27.434 191.919c-90.459-13.115-170.963-48.009-238.453-99.174l117.665-154.18c41.347 31.476 91.675 53.309 146.504 61.231zM822.323 861.758c-66.209 50.233-146.713 85.127-234.39 97.91l-30.216-191.586c56.552-8.145 106.879-29.998 149.006-62.068zM832.020 493.717l191.919 27.434c-13.115 90.459-48.009 170.963-99.174 238.453l-154.18-117.665c31.476-41.347 53.309-91.675 61.231-146.504zM201.677 34.242c66.209-50.233 146.713-85.127 234.39-97.91l30.216 191.586c-56.552 8.145-106.879 29.998-149.006 62.068zM770.586 254.061l155.131-116.343c50.233 66.209 85.127 146.713 97.91 234.39l-191.586 30.216c-8.125-56.564-29.966-106.906-62.028-149.049zM557.717 127.98l27.434-191.919c90.459 13.115 170.963 48.009 238.453 99.174l-117.665 154.18c-41.347-31.476-91.675-53.309-146.504-61.231zM770.586 448c0-142.813-115.773-258.586-258.586-258.586s-258.586 115.773-258.586 258.586c0 142.813 115.773 258.586 258.586 258.586s258.586-115.773 258.586-258.586z" />
|
|
||||||
<glyph unicode="󡁀" glyph-name="icon-contrast" d="M512 960c-282.78 0-512-229.24-512-512s229.22-512 512-512 512 229.24 512 512-229.22 512-512 512zM783.52 176.48c-69.111-69.481-164.785-112.481-270.502-112.481-0.358 0-0.716 0-1.074 0.001l0.055 768c212.070-0.010 383.982-171.929 383.982-384 0-106.034-42.977-202.031-112.462-271.52z" />
|
|
||||||
<glyph unicode="󡁁" glyph-name="icon-expand" d="M960 960c0 0 0 0 0 0h-320v-128h165.4l-210.6-210.8c-25-25-25-65.6 0-90.6 12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8l210.8 210.8v-165.4h128v384h-64zM896 154.6l-210.8 210.6c-25 25-65.6 25-90.6 0s-25-65.6 0-90.6l210.8-210.6h-165.4v-128h384v384h-128v-165.4zM218.6 832h165.4v128h-320c0 0 0 0 0 0h-64v-384h128v165.4l210.8-210.8c12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8c25 25 25 65.6 0 90.6l-210.6 210.8zM338.8 365.2l-210.8-210.6v165.4h-128v-384h384v128h-165.4l210.8 210.8c25 25 25 65.6 0 90.6-25.2 24.8-65.6 24.8-90.6-0.2z" />
|
|
||||||
<glyph unicode="󡁂" glyph-name="icon-list-view" d="M0 896h1024v-128h-1024v128zM0 640h1024v-128h-1024v128zM0 384h1024v-128h-1024v128zM0 128h1024v-128h-1024v128z" />
|
|
||||||
<glyph unicode="󡁃" glyph-name="icon-grid-snap-to" d="M382 130h448v448h-448v-448zM510 450h192v-192h-192v192zM-2 386h320v-64h-320v64zM894 386h128v-64h-128v64zM574 962h64v-320h-64v320zM574 66h64v-128h-64v128zM574 386h64v-64h-64v64z" />
|
|
||||||
<glyph unicode="󡁄" glyph-name="icon-grid-snap-no" d="M768 384h192v-64h-192v64zM256 384h192v-64h-192v64zM0 384h192v-64h-192v64zM640 448h-64v-64h-64v-64h64v-64h64v64h64v64h-64zM576 704h64v-192h-64v192zM576 960h64v-192h-64v192zM576 192h64v-192h-64v192z" />
|
|
||||||
<glyph unicode="󡁅" glyph-name="icon-frame-show" d="M0 896v-896h1024v896h-1024zM896 128h-768v640h768v-640zM192 704h384v-128h-384v128z" />
|
|
||||||
<glyph unicode="󡁆" glyph-name="icon-frame-hide" d="M128 770h420l104 128h-652v-802.4l128 157.4zM896 130h-420l-104-128h652v802.4l-128-157.4zM832 962l-832-1024h192l832 1024zM392 578l104 128h-304v-128z" />
|
|
||||||
<glyph unicode="󡁇" glyph-name="icon-import" d="M832 767.6v-639.4c0-0.2-0.2-0.2-0.4-0.4h-319.6v-192h320c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192h-320v-192h319.6c0.2 0 0.4-0.2 0.4-0.4zM192 256v-192l384 384-384 384v-192h-192v-384z" />
|
|
||||||
<glyph unicode="󡁈" glyph-name="icon-export" d="M192 128.34v639.32l0.34 0.34h319.66v192h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h320v192h-319.66zM1024 448l-384 384v-192h-192v-384h192v-192l384 384z" />
|
|
||||||
<glyph unicode="󡄀" glyph-name="icon-activity" d="M576 896h-256l320-320h-290.256c-44.264 76.516-126.99 128-221.744 128h-128v-512h128c94.754 0 177.48 51.484 221.744 128h290.256l-320-320h256l448 448-448 448z" />
|
|
||||||
<glyph unicode="󡄁" glyph-name="icon-activity-mode" d="M512 960c-214.866 0-398.786-132.372-474.744-320h90.744c56.86 0 107.938-24.724 143.094-64h240.906l-192 192h256l320-320-320-320h-256l192 192h-240.906c-35.156-39.276-86.234-64-143.094-64h-90.744c75.958-187.628 259.878-320 474.744-320 282.77 0 512 229.23 512 512s-229.23 512-512 512z" />
|
|
||||||
<glyph unicode="󡄂" glyph-name="icon-autoflow-tabular" d="M192 960c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h64v1024h-64zM384 960h256v-1024h-256v1024zM832 960h-64v-704h256v512c0 105.6-86.4 192-192 192z" />
|
|
||||||
<glyph unicode="󡄃" glyph-name="icon-clock" d="M512 960c-282.76 0-512-229.24-512-512s229.24-512 512-512 512 229.24 512 512-229.24 512-512 512zM782 270c-12.681-21.673-35.844-36-62.354-36-0.023 0-0.047 0-0.070 0-0.016 0-0.040 0-0.064 0-13.234 0-25.63 3.587-36.269 9.843l-221.644 127.977q-1.2 0.7-2.38 1.46l-0.86 0.56-1.86 1.28-1.26 0.9-1.26 0.96-1.7 1.34-0.64 0.54c-0.72 0.6-1.44 1.22-2.14 1.84v0c-5.012 4.562-9.331 9.758-12.863 15.491-0.457 0.769-0.717 1.249-0.997 1.709s-0.58 0.98-0.86 1.48c-3.092 5.53-5.561 11.936-7.071 18.704l-0.089 0.596c-0.2 0.92-0.38 1.84-0.54 2.76 0 0.28-0.1 0.56-0.16 0.84-0.12 0.7-0.22 1.42-0.3 2.14s-0.14 1.040-0.2 1.58-0.1 1.020-0.14 1.54-0.12 1.5-0.18 2.24c0 0.34 0 0.68 0 1.040q0 1.4 0 2.78c0 0.1 0 0.22 0 0.32v364.080c0 39.765 32.235 72 72 72s72-32.235 72-72v-322.44l185.7-107.22c21.605-12.697 35.879-35.823 35.879-62.284 0-13.278-3.594-25.716-9.862-36.395z" />
|
|
||||||
<glyph unicode="󡄄" glyph-name="icon-database" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.77 0-512 85.962-512 192v-512c0-106.038 229.23-192 512-192s512 85.962 512 192v512c0-106.038-229.23-192-512-192z" />
|
|
||||||
<glyph unicode="󡄅" glyph-name="icon-database-query" d="M683.52 140.714c-50.782-28.456-109.284-44.714-171.52-44.714-194.094 0-352 157.906-352 352s157.906 352 352 352 352-157.906 352-352c0-62.236-16.258-120.738-44.714-171.52l191.692-191.692c8.516 13.89 13.022 28.354 13.022 43.212v640c0 106.038-229.23 192-512 192s-512-85.962-512-192v-640c0-106.038 229.23-192 512-192 126.11 0 241.548 17.108 330.776 45.46l-159.256 159.254zM352 448c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160-160-71.776-160-160z" />
|
|
||||||
<glyph unicode="󡄆" glyph-name="icon-dataset" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM320 64h-128v320h128v-320zM576 64h-128v320h128v-320zM832 64h-128v320h128v-320z" />
|
|
||||||
<glyph unicode="󡄇" glyph-name="icon-datatable" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.8 0-512 86-512 192v-512c0-106 229.2-192 512-192s512 86 512 192v512c0-106-229.2-192-512-192zM896 385v-256c-36.6-15.6-79.8-28.8-128-39.4v256c48.2 10.6 91.4 23.8 128 39.4zM256 345.6v-256c-48.2 10.4-91.4 23.8-128 39.4v256c36.6-15.6 79.8-28.8 128-39.4zM384 70v256c41-4 83.8-6 128-6s87 2.2 128 6v-256c-41-4-83.8-6-128-6s-87 2.2-128 6z" />
|
|
||||||
<glyph unicode="󡄈" glyph-name="icon-dictionary" d="M832 320c105.6 0 192 86.4 192 192v256c0 105.6-86.4 192-192 192v-320l-128 64-128-64v320h-384c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v192c0-105.6-86.4-192-192-192h-640v192h640z" />
|
|
||||||
<glyph unicode="󡄉" glyph-name="icon-folder" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128z" />
|
|
||||||
<glyph unicode="󡄐" glyph-name="icon-image" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-768v768h768v-768zM320 704l-128-128v-448h640v320l-128 128-128-128z" />
|
|
||||||
<glyph unicode="󡄑" glyph-name="icon-layout" d="M448 960h-256c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h256v1024zM832 960h-256v-577.664h448v385.664c0 105.6-86.4 192-192 192zM576-64h256c105.6 0 192 86.4 192 192v129.664h-448v-321.664z" />
|
|
||||||
<glyph unicode="󡄒" glyph-name="icon-object" d="M512-64l512 320v384l-512.020 320-511.98-320v-384l512-320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
|
|
||||||
<glyph unicode="󡄓" glyph-name="icon-object-unknown" d="M510 962l-512-320v-384l512-320 512 320v384l-512 320zM585.4 100.8c-21.2-20.8-46-30.8-76-30.8-31.2 0-56.2 9.8-76.2 29.6-20 20-29.6 44.8-29.6 76.2 0 30.4 10.2 55.2 31 76.2s45.2 31.2 74.8 31.2c29.6 0 54.2-10.4 75.6-32s31.8-46.4 31.8-76c-0.2-29-10.8-54-31.4-74.4zM638.2 413.4c-23.6-11.8-37.4-22-43.4-32.4-3.6-6.2-6-14.8-7.4-26.8v-41h-161.4v44.2c0 40.2 4.4 69.8 13 88 8 17.2 22.6 30.2 44.8 40l34.8 15.4c32 14.2 48.2 35.2 48.2 62.8 0 16-6 30.4-17.2 41.8-11.2 11.2-25.6 17.2-41.6 17.2-24 0-54.4-10-62.8-57.4l-2.2-12.2h-147l1.4 16.2c4 44.6 17 82.4 38.8 112.2 19.6 27 45.6 48.6 77 64.6s64.6 24 98.2 24c60.6 0 110.2-19.4 151.4-59.6 41.2-40 61.2-88 61.2-147.2 0-70.8-28.8-121.4-85.8-149.8z" />
|
|
||||||
<glyph unicode="󡄔" glyph-name="icon-packet" d="M511.98 960l-511.98-320v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512l-512.020 320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
|
|
||||||
<glyph unicode="󡄕" glyph-name="icon-page" d="M702 452c-105.6 0-192 86.4-192 192v320h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v320h-320zM766 580h256l-384 384v-256c0-70.4 57.6-128 128-128z" />
|
|
||||||
<glyph unicode="󡄖" glyph-name="icon-plot-overlay" d="M830 960h-636c-106.7 0-194-87.3-194-194v-406.82c14.18-18.64 25.66-28.34 32-30.84 14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 42.46 108.48 116.32 237.76 227.040 237.76 11.354-0.003 22.389-1.366 32.952-3.936l-0.952 57.936c0 106.7-87.3 194-194 194zM992 567.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-42.46-108.48-116.32-237.76-227.040-237.76-11.355 0.003-22.389 1.367-32.952 3.936l0.952-57.936c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v406.82c-14.18 18.64-25.66 28.34-32 30.84z" />
|
|
||||||
<glyph unicode="󡄗" glyph-name="icon-plot-stacked" d="M89.6 648c24.98 0 48.96 26.52 85.52 70.18 45.42 54.28 102 121.82 196 121.82 44.64 0 86.62-15.46 124.8-46 28.68-22.9 51.16-50.42 72.92-77.060 38.42-46.94 59.16-68.94 83.96-68.94h371.2v118c0 106.7-87.3 194-194 194h-636c-106.7 0-194-87.3-194-194v-118h89.6zM529.5 549.6c-28.24 22.64-50.52 50-72 76.28-35.5 43.48-58.76 70.12-86.3 70.12-25.060 0-49.080-26.54-85.66-70.24-45.4-54.24-102-121.76-196-121.76h-89.54v-112h371.2c44 0 85.54-15.34 123.3-45.6 28.24-22.64 50.52-50 72-76.28 35.5-43.48 58.76-70.12 86.3-70.12 25.060 0 49.080 26.54 85.66 70.24 45.4 54.24 102 121.76 196 121.76h89.54v112h-371.2c-44.060 0-85.54 15.34-123.3 45.6zM934.4 248c-24.98 0-48.96-26.52-85.52-70.18-45.42-54.28-102-121.82-196-121.82-44.64 0-86.62 15.46-124.8 46-28.68 22.9-51.16 50.42-72.92 77.060-38.42 46.94-59.16 68.94-83.96 68.94h-371.2v-118c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v118h-89.6z" />
|
|
||||||
<glyph unicode="󡄘" glyph-name="icon-session" d="M635.6 435.6c6.6-4.2 13.2-8.6 19.2-13.6l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l135.2 108c0.2 4.8 0.2 9.4 0.2 14.2 0 52.2-7.8 102.4-22.2 149.8l-154.8-123.6c-58.2-46.6-140.2-59.2-211.4-38.4zM248.6 325.8l120.4 96.4c58 46.4 140 59.2 211.2 38.4-6.6 4.2-13.2 8.6-19.2 13.6l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.6c-40-32-91.4-48-143-48-21.6 0-43 2.8-63.8 8.4 0-0.6 0-1.2 0-1.6 5-3.4 10-6.8 14.6-10.6l120.4-96.4c29.8-23.8 83.8-23.8 113.4 0zM120.6 581.8l120.4 96.4c80.2 64.2 205.6 64.2 285.8 0l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l181 144.8c-91.2 140.4-249.6 233.4-429.6 233.4-238.6 0-439.2-163.2-496-384.2 30.8-17.6 77.8-15.6 104.6 6zM689 218l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.4c-40-32-91.4-48-143-48-47.8 0-95.4 13.8-134.2 41.4 85.6-163.6 256.8-275.4 454.2-275.4s368.6 111.8 454.2 275.4c-80.4-57.4-199.8-55.2-277.2 6.6z" />
|
|
||||||
<glyph unicode="󡄙" glyph-name="icon-tabular" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 512h-256v192h256v-192zM384 448h256v-192h-256v192zM320 256h-256v192h256v-192zM320 704v-192h-256v192h256zM128 0c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 256h-256v192h256v-192zM960 512h-256v192h256v-192z" />
|
|
||||||
<glyph unicode="󡄠" glyph-name="icon-tabular-lad" d="M896 960h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128zM64 704h256v-192h-256v192zM64 448h256v-192h-256v192zM128 0c-35.26 0.214-63.786 28.74-64 63.98v128.020h256v-192h-192zM384 0v192h256v-192h-256zM960 64c-0.214-35.26-28.74-63.786-63.98-64h-192.020v192h256v-128zM960 448v-192h-576v192h64v64h-64v192h576v-192h-64v-64h64zM782.32 412.62l-110.32 55.16v172.22c0 17.673-14.327 32-32 32s-32-14.327-32-32v-211.78l145.68-72.84c4.172-2.133 9.1-3.383 14.32-3.383 17.675 0 32.003 14.328 32.003 32.003 0 12.454-7.114 23.247-17.501 28.536z" />
|
|
||||||
<glyph unicode="󡄡" glyph-name="icon-tabular-lad-set" d="M128 192v576c-70.606-0.215-127.785-57.394-128-127.979v-576.021c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979l-576 0.021c-70.606 0.215-127.785 57.394-128 127.979zM896 960h-576c-70.606-0.215-127.785-57.394-128-127.979v-576.021c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979v576.021c-0.215 70.606-57.394 127.785-127.979 128zM256 768h192v-128h-192v128zM256 576h192v-192h-192v192zM320 192c-35.26 0.214-63.786 28.74-64 63.98v64.020h192v-128h-128zM512 192v128h192v-128h-192zM960 256c-0.214-35.26-28.74-63.786-63.98-64h-128.020v128h192v-64zM960 384h-448v384h448v-384zM832 480c0.002 0 0.005 0 0.007 0 17.673 0 32 14.327 32 32 0 14.055-9.062 25.994-21.662 30.293l-74.345 24.767v104.94c0 17.673-14.327 32-32 32s-32-14.327-32-32v-151.060l117.88-39.3c3.018-1.040 6.495-1.64 10.113-1.64 0.003 0 0.005 0 0.008 0z" />
|
|
||||||
<glyph unicode="󡄢" glyph-name="icon-tabular-realtime" d="M896 960h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128zM448 668l25.060-25.32c7.916-7.922 18.856-12.822 30.94-12.822s23.024 4.9 30.94 12.822l75.5 76.3c29.97 30.338 71.571 49.128 117.56 49.128s87.59-18.79 117.544-49.112l50.456-50.997v-152.2c-24.111 8.83-44.678 22.255-61.542 39.342l-75.518 76.318c-7.916 7.922-18.856 12.822-30.94 12.822s-23.024-4.9-30.94-12.822l-75.5-76.3c-29.971-30.343-71.575-49.137-117.568-49.137-20.084 0-39.331 3.584-57.137 10.146l1.145 151.831zM320 0h-192c-35.26 0.214-63.786 28.74-64 63.98v128.020h256v-192zM320 256h-256v192h256v-192zM320 512h-256v192h256v-192zM640 0h-256v192h256v-192zM448 323.38v174.5c1.88-1.74 3.74-3.5 5.56-5.34l75.5-76.3c7.916-7.922 18.856-12.822 30.94-12.822s23.024 4.9 30.94 12.822l75.5 76.3c29.966 30.333 71.56 49.119 117.542 49.119 43.28 0 82.673-16.644 112.128-43.879l-0.11-174.399c-1.88 1.74-3.74 3.5-5.56 5.34l-75.5 76.3c-7.916 7.922-18.856 12.822-30.94 12.822s-23.024-4.9-30.94-12.822l-75.5-76.3c-29.966-30.333-71.56-49.119-117.542-49.119-43.28 0-82.673 16.644-112.128 43.879zM960 64c-0.214-35.26-28.74-63.786-63.98-64h-192.020v192h256v-128z" />
|
|
||||||
<glyph unicode="󡄣" glyph-name="icon-tabular-scrolling" d="M64 960c-35.2 0-64-28.8-64-64v-192h448v256h-384zM1024 704v192c0 35.2-28.8 64-64 64h-384v-256h448zM0 576v-192c0-35.2 28.8-64 64-64h384v256h-448zM960 320c35.2 0 64 28.8 64 64v192h-448v-256h384zM512-64l-256 256h512z" />
|
|
||||||
<glyph unicode="󡄤" glyph-name="icon-telemetry" d="M32 328.34c14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 37.4 95.5 99.14 207.14 188.94 232.46-90.462 152.598-254.314 253.3-441.686 253.3-0.075 0-0.15 0-0.226 0-282.748 0-511.988-229.24-511.988-512 0-0.032 0-0.070 0-0.108 0-35.719 3.641-70.587 10.572-104.255 8.968-7.457 16.648-13.417 21.428-15.297zM992 567.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-37.4-95.5-99.14-207.14-188.94-232.46 90.462-152.598 254.314-253.3 441.686-253.3 0.075 0 0.15 0 0.226 0 282.748 0 511.988 229.24 511.988 512 0 0.032 0 0.070 0 0.108 0 35.719-3.641 70.587-10.572 104.255-8.968 7.457-16.648 13.417-21.428 15.297z" />
|
|
||||||
<glyph unicode="󡄥" glyph-name="icon-telemetry-panel" d="M169.2 512c14 56.4 33 122 56.6 176.8 15.4 35.8 31.2 63.2 48.2 84 18.4 22.4 49 49.2 91 49.2s72.6-26.8 91-49.2c17-20.6 32.6-48.2 48.2-84 23.6-54.8 42.8-120.4 56.6-176.8h461.2v256c0 105.6-86.4 192-192 192h-640c-105.6 0-192-86.4-192-192v-256h171.2zM718.6 384h-127.2c25-93.4 48.4-144.4 63.6-168.6 15.2 24.2 38.6 75.2 63.6 168.6zM301.4 512h127.2c-25 93.4-48.4 144.4-63.6 168.6-15.2-24.2-38.6-75.2-63.6-168.6zM850.8 384c-14-56.4-33-122-56.6-176.8-15.4-35.8-31.2-63.2-48.2-84-18.4-22.4-49-49.2-91-49.2s-72.6 26.8-91 49.2c-17 20.6-32.6 48.2-48.2 84-23.6 54.8-42.8 120.4-56.6 176.8h-461.2v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-171.2z" />
|
|
||||||
<glyph unicode="󡄦" glyph-name="icon-timeline" d="M256 704h384v-128h-384v128zM384 512h384v-128h-384v128zM320 320h384v-128h-384v128zM832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.2c0 0.2 0.2 0.2 0.4 0.4h127.6v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
|
|
||||||
<glyph unicode="󡄧" glyph-name="icon-timer-v1.5" horiz-adv-x="896" d="M576 813.4v82.58c0 35.346-28.654 64-64 64h-128c-35.346 0-64-28.654-64-64v-82.58c-185.040-55.080-320-226.48-320-429.42 0-247.42 200.58-448 448-448s448 200.58 448 448c0 202.96-135 374.4-320 429.42zM468 363.98l-263.76-211c-57.105 59.935-92.24 141.251-92.24 230.772 0 0.080 0 0.16 0 0.24 0 185.268 150.72 335.988 336 335.988 6.72 0 13.38-0.22 20-0.62v-355.38z" />
|
|
||||||
<glyph unicode="󡄨" glyph-name="icon-topic" d="M454.36 483.36l86.3 86.3c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c19.328-19.358 42.832-34.541 69.047-44.082l1.313 171.722-57.64 57.64c-34.407 34.33-81.9 55.558-134.35 55.558s-99.943-21.228-134.354-55.562l-86.296-86.297c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-28.674 28.654v-172.14c19.045-7.022 41.040-11.084 63.984-11.084 52.463 0 99.966 21.239 134.379 55.587zM505.64 412.64l-86.3-86.3c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-86.294 86.294c-2 2-4.2 4-6.36 6v-197.36c33.664-30.72 78.65-49.537 128.031-49.537 52.44 0 99.923 21.22 134.333 55.541l86.296 86.296c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c2-2 4.2-4 6.36-6v197.36c-33.664 30.72-78.65 49.537-128.031 49.537-52.44 0-99.923-21.22-134.333-55.541zM832 960h-128v-192h127.66l0.34-0.34v-639.32l-0.34-0.34h-127.66v-192h128c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM320 128h-127.66l-0.34 0.34v639.32l0.34 0.34h127.66v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192z" />
|
|
||||||
<glyph unicode="󡄩" glyph-name="icon-box-with-dashed-lines" d="M0 576h128v-256h-128v256zM128 831.78l0.22 0.22h191.78v128h-192c-70.606-0.215-127.785-57.394-128-127.979v-192.021h128v191.78zM128 64.22v191.78h-128v-192c0.215-70.606 57.394-127.785 127.979-128h192.021v128h-191.78zM384 960h256v-128h-256v128zM896 64.22l-0.22-0.22h-191.78v-128h192c70.606 0.215 127.785 57.394 128 127.979v192.021h-128v-191.78zM896 960h-192v-128h191.78l0.22-0.22v-191.78h128v192c-0.215 70.606-57.394 127.785-127.979 128zM896 576h128v-256h-128v256zM384 64h256v-128h-256v128zM256 704h512v-512h-512v512z" />
|
|
||||||
<glyph unicode="󡄰" glyph-name="icon-summary-widget" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM847.8 349.6l-82.6-143.2-189.6 131.6 19.2-230h-165.4l19.2 230-189.6-131.6-82.6 143.2 208.6 98.4-208.8 98.4 82.6 143.2 189.6-131.6-19.2 230h165.4l-19.2-230 189.6 131.6 82.6-143.2-208.6-98.4 208.8-98.4z" />
|
|
||||||
<glyph unicode="󡄱" glyph-name="icon-notebook" d="M896 849.2c0 79.8-55.4 127.4-123 105.4l-773-250.6h896v145.2zM896 640h-896v-576c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v448c0 70.4-57.6 128-128 128zM832 128h-384v320h384v-320z" />
|
|
||||||
</font></defs></svg>
|
|
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 348 B |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 628 B |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 15 KiB |
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
viewBox="20 0 640 150" enable-background="new 20 0 640 150" xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M90.7,13.2c14.8,0,22.8,8,22.8,22.8v46.3c0,14.8-8,22.8-22.8,22.8H62.8c-14.8,0-22.8-8-22.8-22.8V36
|
|
||||||
c0-14.8,8-22.8,22.8-22.8H90.7z M97.8,36.2c0-5.8-3.1-9.2-9.2-9.2h-24c-5.8,0-9.2,3.2-9.2,9.2v45.9c0,6,3.4,9.2,9.2,9.2h24
|
|
||||||
c6,0,9.2-3.2,9.2-9.2V36.2z"/>
|
|
||||||
<path fill="#FFFFFF" d="M173.2,13.2c14.8,0,22.8,8,22.8,22.8v46.3c0,14.8-8,22.8-22.8,22.8h-9c-11.2,0-19.2-6.6-26.5-13.6v44.2
|
|
||||||
h-15.5V13.2h15.5v13.6c7.3-7,15.3-13.6,26.5-13.6H173.2z M180.3,36.2c0-5.8-3.1-9.2-9.2-9.2h-8.3c-9.4,0-17,3.6-25.2,9.2v45.9
|
|
||||||
c8.2,5.6,15.8,9.2,25.2,9.2h8.3c6.1,0,9.2-3.4,9.2-9.2V36.2z"/>
|
|
||||||
<path fill="#FFFFFF" d="M220.3,82.8c0,6,3.2,9.2,9.2,9.2h23c6,0,9.2-3.4,9.2-9.2V76h15.6v6.3c0,14.8-8,22.8-22.8,22.8h-27
|
|
||||||
c-14.8,0-22.8-8-22.8-22.8V36c0-14.8,8-22.8,22.8-22.8h27c14.8,0,22.8,8,22.8,22.8v26.9h-57V82.8z M229.5,26.3
|
|
||||||
c-6,0-9.2,3.2-9.2,9.2v15.8h41.3V35.5c0-6-3.1-9.2-9.2-9.2H229.5z"/>
|
|
||||||
<path fill="#FFFFFF" d="M285.7,13.2h15.5v13.6c7.3-7,15.3-13.6,26.5-13.6h7.1c14.8,0,22.8,8,22.8,22.8v69.1h-15.5V36.6
|
|
||||||
c0-6-3.2-9.2-9.2-9.2h-6.6c-9.4,0-17,3.4-25.2,9.2v68.5h-15.5V13.2z"/>
|
|
||||||
<path fill="#4F79F7" d="M495.4,105.1c-12.5,0-18.4-6-18.4-18.4V28.7c0-12.5,6.2-18.4,18.7-18.4h42.2c12.5,0,18.1,6,18.1,18.4v17.7
|
|
||||||
h-25.4V33.9c0-1.9-0.5-2.4-2.4-2.4h-23.3c-1.9,0-2.4,0.5-2.4,2.4v47.6c0,1.9,0.5,2.4,2.4,2.4h23.3c1.9,0,2.4-0.5,2.4-2.4V69H556
|
|
||||||
v17.7c0,12.5-6,18.4-18.4,18.4H495.4z"/>
|
|
||||||
<path fill="#4F79F7" d="M613.7,32v73.1h-25.4V32H562V10.3h78V32H613.7z"/>
|
|
||||||
<path fill="#4F79F7" d="M425.3,93.6l17.4-42.4v48.6c0,3,2.4,5.4,5.4,5.4h19V15.7c0-3-2.4-5.4-5.4-5.4h-23.3l-21.2,49.4l-21.2-49.4
|
|
||||||
h-23.3c-3,0-5.4,2.4-5.4,5.4v89.5h19c3,0,5.4-2.4,5.4-5.4V51.2l17.4,42.4H425.3z"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.0 KiB |
@ -1,159 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 17.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
||||||
<svg version="1.1" id="NASA_insignia_color" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
x="0px" y="0px" width="318px" height="260px" viewBox="0 0 318 260" enable-background="new 0 0 318 260" xml:space="preserve">
|
|
||||||
<path fill="#0B3D91" d="M275.948,130.19c0,69.085-56.915,125.944-126.068,125.944S23.811,199.275,23.811,130.19
|
|
||||||
c0-69.086,56.915-125.944,126.068-125.944S275.948,61.104,275.948,130.19z"/>
|
|
||||||
<path fill="#FFFFFF" d="M178.316,196.477c53.713,22.095,44.551-33.774,15.798-76.703c-16.269-24.291-37.487-44.525-50.87-54.292
|
|
||||||
c-44.55-32.512-71.723-12.626-40.443,51.136c10.133,20.655,23.146,34.595,33.313,47.733c7.762,10.03,22.884,15.054,17.557,19.815
|
|
||||||
c-6.004,5.366-20.538-18.308-20.538-18.308c-10.742-12.941-20.972-26.762-31.516-45.711C77.525,76.845,81,32.654,124.603,51.909
|
|
||||||
c37.008,16.343,72.355,62.183,86.571,94.737c6.587,15.086,24.332,74.451-32.542,50.463"/>
|
|
||||||
<path fill="#FC3D21" d="M10.826,167.524c23.697-15.783,46.161-25.971,84.393-38.597c53.718-17.741,94.156-29.671,143.763-54.607
|
|
||||||
c24.158-12.144,59.858-35.653,74.25-58.396c-4.121,8.423-16.642,25.26-22.434,32.512C223.499,132.715,80.125,127.94,11.77,168.405"
|
|
||||||
/>
|
|
||||||
<path fill="#FFFFFF" d="M45.201,105.929c21.582,0.167,19.56-0.044,19.812,0.209c0.379,0,17.315,29.166,17.315,29.418
|
|
||||||
c0,0.127-0.126-10.365-0.126-23.484c0-1.515-4.171-5.935-4.045-5.935c6.191,0,14.282,0.126,14.282,0.126
|
|
||||||
c-3.033,3.535-3.639,3.245-3.665,5.429c-0.084,7.028-0.166,20.012,0,34.595c0.025,2.186,1.643,3.03,4.297,6.818H73.228
|
|
||||||
c-6.446-10.732-18.256-30.865-18.2-30.808c0.092,0.092-0.252,12.626,0.127,22.726c0.125,3.337,1.643,4.419,4.424,7.45
|
|
||||||
c0,0,3.202-0.085-15.545,0.125c5.687-3.029,4.931-6.817,4.929-6.943c-0.205-13.952-0.042-25.884-0.042-33.586
|
|
||||||
c0-1.263-0.084-1.137-4.002-5.935"/>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M112.971,127.475c1.818-6.321,3.375-11.973,4.112-15.656c0.126-0.631-1.39-2.904-3.792-5.176l-0.169-0.353
|
|
||||||
c11.58,0.038,23.677,0.1,23.677,0.1c3.16,7.702,10.363,29.292,15.798,42.549c1.437,3.505,3.918,4.167,3.918,4.167
|
|
||||||
c-9.858-0.127-28.152-0.042-28.058-0.127c4.929-4.418,4.297-4.418,2.148-10.857h-15.419c-3.16,7.322,0.985,10.759,1.517,10.731
|
|
||||||
c-3.51,0.181-15.419,0-15.419,0c6.445-4.546,6.066-5.935,6.066-5.935C109.122,140.62,111.175,133.721,112.971,127.475l6.324,0.001
|
|
||||||
c-1.358,4.357-2.717,8.712-2.717,8.712h12.259l-6.825-17.424c0,0-1.358,4.356-2.717,8.711L112.971,127.475z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M218.881,128.106c1.818-6.321,3.375-11.973,4.112-15.655c0.126-0.632-1.391-2.904-3.791-5.177l-0.169-0.353
|
|
||||||
c11.58,0.038,23.676,0.1,23.676,0.1c3.16,7.702,10.364,29.292,15.798,42.55c1.437,3.505,3.919,4.166,3.919,4.166
|
|
||||||
c-9.858-0.126-28.152-0.041-28.058-0.126c4.929-4.419,4.297-4.419,2.148-10.858h-15.419c-3.16,7.322,0.985,10.76,1.517,10.732
|
|
||||||
c-3.511,0.18-15.419,0-15.419,0c6.445-4.546,6.066-5.935,6.066-5.935C215.032,141.252,217.085,134.353,218.881,128.106l6.324,0
|
|
||||||
c-1.359,4.356-2.717,8.712-2.717,8.712h12.259l-6.824-17.424c0,0-1.359,4.356-2.718,8.712L218.881,128.106z"/>
|
|
||||||
</g>
|
|
||||||
<path fill="#FFFFFF" d="M198.98,117.753c-0.253-8.964,0-11.869,0-11.869c-3.918,3.157-1.939,2.756-11.754,1.136
|
|
||||||
c-28.311-4.671-30.459,21.717-15.04,27.652c12.918,4.971,17.49,5.943,15.545,10.605c-0.632,1.515-12.386,7.07-24.518-4.167
|
|
||||||
l0.254,15.657c1.516-1.562,5.688-4.42,5.688-4.42c0.125,0,13.147,5.739,24.897-0.252c18.072-9.217,9.051-24.133-10.237-30.05
|
|
||||||
c-16.051-4.924-0.885-16.414,15.039-4.167"/>
|
|
||||||
<path fill="#FC3D21" d="M313.486,16.375c-19.213,56.998-96.179,101.005-160.969,143.028
|
|
||||||
c-39.086,25.352-77.893,54.537-104.606,79.367c-7.044,6.547,1.436-2.449-1.264,0.316c37.283-42.93,80.167-68.494,103.864-84.592
|
|
||||||
c40.082-27.229,62.877-34.09,132.019-97.784"/>
|
|
||||||
<path fill="#FFFFFF" d="M178.316,196.477c53.713,22.095,44.551-33.774,15.798-76.703c-16.269-24.291-36.335-43.56-50.87-54.292
|
|
||||||
c-16.976-12.535-18.642-13.573-18.642-13.573c37.916,17.992,72.355,62.183,86.571,94.737c6.587,15.086,24.332,74.451-32.542,50.463"
|
|
||||||
/>
|
|
||||||
<path fill="#FFFFFF" d="M151.617,15.688c0,0.562-0.463,1.025-1.026,1.025c-0.563,0-1.026-0.463-1.026-1.025
|
|
||||||
c0-0.563,0.463-1.026,1.026-1.026C151.154,14.662,151.617,15.125,151.617,15.688z"/>
|
|
||||||
<path fill="#FFFFFF" d="M158.727,31.233c0,0.693-0.57,1.263-1.264,1.263s-1.264-0.57-1.264-1.263c0-0.692,0.57-1.262,1.264-1.262
|
|
||||||
S158.727,30.541,158.727,31.233z"/>
|
|
||||||
<path fill="#FFFFFF" d="M177.21,56.644c0,0.692-0.57,1.263-1.263,1.263c-0.694,0-1.264-0.57-1.264-1.263
|
|
||||||
c0-0.693,0.569-1.263,1.264-1.263C176.64,55.381,177.21,55.951,177.21,56.644z"/>
|
|
||||||
<path fill="#FFFFFF" d="M147.51,39.993c0,0.563-0.463,1.026-1.026,1.026c-0.564,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.463-1.025,1.027-1.025C147.047,38.967,147.51,39.43,147.51,39.993z"/>
|
|
||||||
<path fill="#FFFFFF" d="M158.568,45.833c0,0.562-0.463,1.026-1.026,1.026c-0.564,0-1.026-0.463-1.026-1.026
|
|
||||||
c0-0.563,0.463-1.026,1.026-1.026C158.105,44.807,158.568,45.27,158.568,45.833z"/>
|
|
||||||
<path fill="#FFFFFF" d="M144.193,29.498c0,0.692-0.571,1.263-1.264,1.263c-0.693,0-1.264-0.57-1.264-1.263
|
|
||||||
c0-0.693,0.57-1.263,1.264-1.263C143.622,28.235,144.193,28.805,144.193,29.498z"/>
|
|
||||||
<path fill="#FFFFFF" d="M127.447,39.677c0,0.562-0.463,1.026-1.027,1.026s-1.027-0.463-1.027-1.026s0.463-1.026,1.027-1.026
|
|
||||||
S127.447,39.115,127.447,39.677z"/>
|
|
||||||
<path fill="#FFFFFF" d="M130.448,41.729c0,0.562-0.463,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.563,0.464-1.026,1.027-1.026C129.985,40.703,130.448,41.166,130.448,41.729z"/>
|
|
||||||
<path fill="#FFFFFF" d="M133.45,43.781c0,0.562-0.464,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.563,0.463-1.026,1.027-1.026C132.986,42.755,133.45,43.218,133.45,43.781z"/>
|
|
||||||
<path fill="#FFFFFF" d="M128.869,47.726c0,0.563-0.464,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.463-1.025,1.027-1.025C128.405,46.701,128.869,47.164,128.869,47.726z"/>
|
|
||||||
<path fill="#FFFFFF" d="M105.014,64.456c0,0.563-0.464,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.464-1.025,1.027-1.025C104.55,63.43,105.014,63.893,105.014,64.456z"/>
|
|
||||||
<path fill="#FFFFFF" d="M109.437,69.822c0,0.563-0.463,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.463-1.026,1.027-1.026C108.974,68.796,109.437,69.259,109.437,69.822z"/>
|
|
||||||
<path fill="#FFFFFF" d="M105.961,156.468c0,0.562-0.463,1.025-1.027,1.025c-0.563,0-1.027-0.463-1.027-1.025
|
|
||||||
s0.463-1.025,1.027-1.025C105.498,155.442,105.961,155.905,105.961,156.468z"/>
|
|
||||||
<path fill="#FFFFFF" d="M106.593,180.378c0,0.693-0.57,1.264-1.264,1.264c-0.693,0-1.264-0.57-1.264-1.264
|
|
||||||
c0-0.691,0.571-1.262,1.264-1.262C106.023,179.116,106.593,179.687,106.593,180.378z"/>
|
|
||||||
<path fill="#FFFFFF" d="M93.007,192.61c0,0.562-0.463,1.025-1.027,1.025c-0.563,0-1.027-0.463-1.027-1.025s0.464-1.026,1.027-1.026
|
|
||||||
C92.543,191.584,93.007,192.048,93.007,192.61z"/>
|
|
||||||
<path fill="#FFFFFF" d="M76.735,197.581c0,0.693-0.571,1.263-1.264,1.263c-0.693,0-1.264-0.569-1.264-1.263
|
|
||||||
c0-0.692,0.57-1.262,1.264-1.262C76.165,196.319,76.735,196.889,76.735,197.581z"/>
|
|
||||||
<path fill="#FFFFFF" d="M73.417,186.534c0,0.691-0.571,1.262-1.264,1.262c-0.693,0-1.264-0.57-1.264-1.262
|
|
||||||
c0-0.693,0.571-1.264,1.264-1.264C72.847,185.27,73.417,185.841,73.417,186.534z"/>
|
|
||||||
<path fill="#FFFFFF" d="M71.521,193.557c0,0.563-0.463,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.464-1.026,1.027-1.026C71.058,192.53,71.521,192.994,71.521,193.557z"/>
|
|
||||||
<path fill="#FFFFFF" d="M59.357,187.718c0,0.562-0.464,1.025-1.027,1.025c-0.563,0-1.027-0.463-1.027-1.025s0.464-1.026,1.027-1.026
|
|
||||||
C58.894,186.691,59.357,187.155,59.357,187.718z"/>
|
|
||||||
<path fill="#FFFFFF" d="M101.854,207.445c0,0.563-0.463,1.026-1.027,1.026c-0.563,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.463-1.026,1.027-1.026C101.391,206.419,101.854,206.883,101.854,207.445z"/>
|
|
||||||
<path fill="#FFFFFF" d="M114.65,198.055c0,0.692-0.571,1.263-1.264,1.263c-0.693,0-1.264-0.57-1.264-1.263
|
|
||||||
c0-0.692,0.571-1.263,1.264-1.263C114.08,196.792,114.65,197.362,114.65,198.055z"/>
|
|
||||||
<path fill="#FFFFFF" d="M116.072,210.128c0,0.562-0.464,1.027-1.027,1.027c-0.563,0-1.027-0.465-1.027-1.027
|
|
||||||
s0.463-1.025,1.027-1.025C115.608,209.103,116.072,209.565,116.072,210.128z"/>
|
|
||||||
<path fill="#FFFFFF" d="M168.68,198.606c0,0.563-0.463,1.027-1.027,1.027c-0.562,0-1.026-0.464-1.026-1.027
|
|
||||||
c0-0.562,0.464-1.025,1.026-1.025C168.217,197.581,168.68,198.044,168.68,198.606z"/>
|
|
||||||
<path fill="#FFFFFF" d="M144.193,207.288c0,0.562-0.464,1.025-1.027,1.025c-0.564,0-1.027-0.463-1.027-1.025
|
|
||||||
s0.464-1.026,1.027-1.026C143.729,206.262,144.193,206.726,144.193,207.288z"/>
|
|
||||||
<path fill="#FFFFFF" d="M210.07,219.755c0,0.562-0.464,1.027-1.026,1.027c-0.563,0-1.027-0.465-1.027-1.027s0.464-1.025,1.027-1.025
|
|
||||||
C209.606,218.729,210.07,219.192,210.07,219.755z"/>
|
|
||||||
<path fill="#FFFFFF" d="M215.441,171.225c0,0.692-0.57,1.263-1.264,1.263c-0.692,0-1.264-0.57-1.264-1.263
|
|
||||||
c0-0.692,0.571-1.263,1.264-1.263C214.871,169.962,215.441,170.532,215.441,171.225z"/>
|
|
||||||
<path fill="#FFFFFF" d="M205.331,178.09c0,0.563-0.463,1.026-1.026,1.026c-0.564,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.463-1.026,1.027-1.026C204.868,177.063,205.331,177.527,205.331,178.09z"/>
|
|
||||||
<path fill="#FFFFFF" d="M215.283,180.062c0,0.692-0.569,1.263-1.264,1.263c-0.692,0-1.264-0.57-1.264-1.263s0.571-1.263,1.264-1.263
|
|
||||||
C214.714,178.8,215.283,179.37,215.283,180.062z"/>
|
|
||||||
<path fill="#FFFFFF" d="M205.331,192.294c0,0.562-0.463,1.025-1.026,1.025c-0.564,0-1.027-0.463-1.027-1.025
|
|
||||||
s0.463-1.025,1.027-1.025C204.868,191.269,205.331,191.731,205.331,192.294z"/>
|
|
||||||
<path fill="#FFFFFF" d="M231.082,164.358c0,0.563-0.464,1.027-1.026,1.027c-0.564,0-1.027-0.464-1.027-1.027
|
|
||||||
c0-0.562,0.464-1.025,1.027-1.025C230.618,163.333,231.082,163.796,231.082,164.358z"/>
|
|
||||||
<path fill="#FFFFFF" d="M233.609,170.593c0,0.693-0.57,1.264-1.264,1.264s-1.264-0.57-1.264-1.264c0-0.692,0.57-1.262,1.264-1.262
|
|
||||||
S233.609,169.9,233.609,170.593z"/>
|
|
||||||
<path fill="#FFFFFF" d="M251.303,178.011c0,0.693-0.57,1.263-1.263,1.263c-0.694,0-1.264-0.569-1.264-1.263
|
|
||||||
c0-0.692,0.569-1.262,1.264-1.262C250.732,176.749,251.303,177.318,251.303,178.011z"/>
|
|
||||||
<path fill="#FFFFFF" d="M233.294,191.189c0,0.562-0.464,1.026-1.027,1.026c-0.563,0-1.027-0.464-1.027-1.026
|
|
||||||
s0.464-1.026,1.027-1.026C232.83,190.163,233.294,190.627,233.294,191.189z"/>
|
|
||||||
<path fill="#FFFFFF" d="M244.668,180.458c0,0.562-0.463,1.025-1.026,1.025c-0.563,0-1.027-0.463-1.027-1.025
|
|
||||||
c0-0.563,0.464-1.026,1.027-1.026C244.205,179.432,244.668,179.895,244.668,180.458z"/>
|
|
||||||
<path fill="#FFFFFF" d="M242.614,197.028c0,0.564-0.463,1.026-1.026,1.026c-0.564,0-1.027-0.463-1.027-1.026
|
|
||||||
c0-0.562,0.464-1.025,1.027-1.025C242.151,196.003,242.614,196.466,242.614,197.028z"/>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M247.394,169.488c0,0.866-0.713,1.579-1.58,1.579c-0.866,0-1.579-0.713-1.579-1.579
|
|
||||||
s0.713-1.578,1.579-1.578C246.681,167.91,247.394,168.622,247.394,169.488z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#FFFFFF" points="245.813,164.675 245.34,169.015 241.035,169.488 245.379,169.962 245.852,174.46 246.327,169.962
|
|
||||||
250.592,169.409 246.287,169.015 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M236.335,196.95c0,0.865-0.713,1.578-1.58,1.578c-0.866,0-1.579-0.713-1.579-1.578
|
|
||||||
c0-0.865,0.713-1.578,1.579-1.578C235.622,195.372,236.335,196.085,236.335,196.95z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#FFFFFF" points="234.755,192.136 234.281,196.477 229.977,196.95 234.32,197.423 234.794,201.921 235.269,197.423
|
|
||||||
239.533,196.871 235.228,196.477 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M118.481,66.587c0,0.866-0.713,1.578-1.58,1.578c-0.866,0-1.58-0.712-1.58-1.578
|
|
||||||
c0-0.866,0.713-1.578,1.58-1.578C117.768,65.008,118.481,65.721,118.481,66.587z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#FFFFFF" points="116.901,61.773 116.428,66.113 112.123,66.587 116.467,67.06 116.941,71.558 117.415,67.06
|
|
||||||
121.681,66.507 117.375,66.113 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M177.25,28.393c0,0.866-0.714,1.579-1.58,1.579s-1.58-0.713-1.58-1.579s0.714-1.578,1.58-1.578
|
|
||||||
S177.25,27.527,177.25,28.393z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#FFFFFF" points="175.67,23.579 175.196,27.919 170.891,28.393 175.235,28.866 175.71,33.364 176.184,28.866
|
|
||||||
180.449,28.314 176.144,27.919 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#FFFFFF" d="M105.843,222.202c0,0.865-0.713,1.578-1.58,1.578s-1.58-0.713-1.58-1.578c0-0.865,0.713-1.578,1.58-1.578
|
|
||||||
S105.843,221.337,105.843,222.202z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#FFFFFF" points="104.263,217.388 103.789,221.729 99.484,222.202 103.829,222.675 104.303,227.173 104.776,222.675
|
|
||||||
109.042,222.124 104.737,221.729 "/>
|
|
||||||
</g>
|
|
||||||
<path fill="#EF3E42" d="M26.852,157.585c-6.899,3.377-13.081,6.711-18.324,9.967l3.191,1.16c4.584-2.822,10.091-5.771,15.891-8.365"
|
|
||||||
/>
|
|
||||||
<path fill="#EF3E42" d="M63.279,221.362c-6.307,5.506-12.825,11.383-19.365,17.543l-0.29,4.35
|
|
||||||
c5.988-6.168,13.34-12.828,21.829-19.895"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 12 KiB |
@ -38,7 +38,7 @@ define([
|
|||||||
canEdit: function (domainObject) {
|
canEdit: function (domainObject) {
|
||||||
return domainObject.type === 'LadTableSet';
|
return domainObject.type === 'LadTableSet';
|
||||||
},
|
},
|
||||||
view: function (domainObject) {
|
view: function (domainObject, isEditing, objectPath) {
|
||||||
let component;
|
let component;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -49,7 +49,8 @@ define([
|
|||||||
},
|
},
|
||||||
provide: {
|
provide: {
|
||||||
openmct,
|
openmct,
|
||||||
domainObject
|
domainObject,
|
||||||
|
objectPath
|
||||||
},
|
},
|
||||||
el: element,
|
el: element,
|
||||||
template: '<lad-table-set></lad-table-set>'
|
template: '<lad-table-set></lad-table-set>'
|
||||||
|
@ -38,7 +38,7 @@ define([
|
|||||||
canEdit: function (domainObject) {
|
canEdit: function (domainObject) {
|
||||||
return domainObject.type === 'LadTable';
|
return domainObject.type === 'LadTable';
|
||||||
},
|
},
|
||||||
view: function (domainObject) {
|
view: function (domainObject, isEditing, objectPath) {
|
||||||
let component;
|
let component;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -49,7 +49,8 @@ define([
|
|||||||
},
|
},
|
||||||
provide: {
|
provide: {
|
||||||
openmct,
|
openmct,
|
||||||
domainObject
|
domainObject,
|
||||||
|
objectPath
|
||||||
},
|
},
|
||||||
el: element,
|
el: element,
|
||||||
template: '<lad-table-component></lad-table-component>'
|
template: '<lad-table-component></lad-table-component>'
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
@ -21,7 +22,7 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<tr>
|
<tr @contextmenu.prevent="showContextMenu">
|
||||||
<td>{{name}}</td>
|
<td>{{name}}</td>
|
||||||
<td>{{timestamp}}</td>
|
<td>{{timestamp}}</td>
|
||||||
<td :class="valueClass">
|
<td :class="valueClass">
|
||||||
@ -35,15 +36,25 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
const CONTEXT_MENU_ACTIONS = [
|
||||||
|
'viewHistoricalData',
|
||||||
|
'remove'
|
||||||
|
];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
inject: ['openmct'],
|
inject: ['openmct', 'objectPath'],
|
||||||
props: ['domainObject'],
|
props: ['domainObject'],
|
||||||
data() {
|
data() {
|
||||||
|
let currentObjectPath = this.objectPath.slice();
|
||||||
|
currentObjectPath.unshift(this.domainObject);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: this.domainObject.name,
|
name: this.domainObject.name,
|
||||||
timestamp: '---',
|
timestamp: '---',
|
||||||
value: '---',
|
value: '---',
|
||||||
valueClass: ''
|
valueClass: '',
|
||||||
|
currentObjectPath
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@ -73,11 +84,15 @@ export default {
|
|||||||
.request(this.domainObject, {strategy: 'latest'})
|
.request(this.domainObject, {strategy: 'latest'})
|
||||||
.then((array) => this.updateValues(array[array.length - 1]));
|
.then((array) => this.updateValues(array[array.length - 1]));
|
||||||
|
|
||||||
|
},
|
||||||
|
showContextMenu(event) {
|
||||||
|
this.openmct.contextMenu._showContextMenuForObjectPath(this.currentObjectPath, event.x, event.y, CONTEXT_MENU_ACTIONS);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.metadata = this.openmct.telemetry.getMetadata(this.domainObject);
|
this.metadata = this.openmct.telemetry.getMetadata(this.domainObject);
|
||||||
this.formats = this.openmct.telemetry.getFormatMap(this.metadata);
|
this.formats = this.openmct.telemetry.getFormatMap(this.metadata);
|
||||||
|
this.keyString = this.openmct.objects.makeKeyString(this.domainObject.identifier);
|
||||||
|
|
||||||
this.limitEvaluator = openmct
|
this.limitEvaluator = openmct
|
||||||
.telemetry
|
.telemetry
|
||||||
|
@ -44,7 +44,7 @@ import lodash from 'lodash';
|
|||||||
import LadRow from './LADRow.vue';
|
import LadRow from './LADRow.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
inject: ['openmct', 'domainObject'],
|
inject: ['openmct', 'domainObject', 'objectPath'],
|
||||||
components: {
|
components: {
|
||||||
LadRow
|
LadRow
|
||||||
},
|
},
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
* Open MCT, Copyright (c) 2014-2019, United States Government
|
||||||
* as represented by the Administrator of the National Aeronautics and Space
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
* Administration. All rights reserved.
|
* Administration. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -35,7 +35,7 @@ define(
|
|||||||
) {
|
) {
|
||||||
var defaultAjaxFunction = $.ajax;
|
var defaultAjaxFunction = $.ajax;
|
||||||
|
|
||||||
describe("The URLIndicator", function () {
|
xdescribe("The URLIndicator", function () {
|
||||||
var openmct;
|
var openmct;
|
||||||
var indicatorElement;
|
var indicatorElement;
|
||||||
var pluginOptions;
|
var pluginOptions;
|
||||||
|
@ -27,7 +27,7 @@ define([
|
|||||||
'zepto',
|
'zepto',
|
||||||
'./dom-observer'
|
'./dom-observer'
|
||||||
], function (AutoflowTabularPlugin, AutoflowTabularConstants, MCT, $, DOMObserver) {
|
], function (AutoflowTabularPlugin, AutoflowTabularConstants, MCT, $, DOMObserver) {
|
||||||
describe("AutoflowTabularPlugin", function () {
|
xdescribe("AutoflowTabularPlugin", function () {
|
||||||
var testType;
|
var testType;
|
||||||
var testObject;
|
var testObject;
|
||||||
var mockmct;
|
var mockmct;
|
||||||
|
@ -20,40 +20,21 @@
|
|||||||
* at runtime from the About dialog for additional information.
|
* at runtime from the About dialog for additional information.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/**
|
export default class ClearDataAction {
|
||||||
* Module defining MenuArrowController. Created by shale on 06/30/2015.
|
constructor(openmct, appliesToObjects) {
|
||||||
*/
|
this.name = 'Clear Data for Object';
|
||||||
define(
|
this.description = 'Clears current data for object, unsubscribes and resubscribes to data';
|
||||||
[],
|
this.cssClass = 'icon-clear-data';
|
||||||
function () {
|
|
||||||
|
|
||||||
/**
|
this._openmct = openmct;
|
||||||
* A left-click on the menu arrow should display a
|
this._appliesToObjects = appliesToObjects;
|
||||||
* context menu. This controller launches the context
|
|
||||||
* menu.
|
|
||||||
* @memberof platform/commonUI/browse
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
function MenuArrowController($scope) {
|
|
||||||
this.$scope = $scope;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show a context menu for the domain object in this scope.
|
|
||||||
*
|
|
||||||
* @param event the browser event which caused this (used to
|
|
||||||
* position the menu)
|
|
||||||
*/
|
|
||||||
MenuArrowController.prototype.showMenu = function (event) {
|
|
||||||
var actionContext = {
|
|
||||||
key: 'menu',
|
|
||||||
domainObject: this.$scope.domainObject,
|
|
||||||
event: event
|
|
||||||
};
|
|
||||||
|
|
||||||
this.$scope.domainObject.getCapability('action').perform(actionContext);
|
|
||||||
};
|
|
||||||
|
|
||||||
return MenuArrowController;
|
|
||||||
}
|
}
|
||||||
);
|
invoke(objectPath) {
|
||||||
|
this._openmct.objectViews.emit('clearData', objectPath[0]);
|
||||||
|
}
|
||||||
|
appliesTo(objectPath) {
|
||||||
|
let contextualDomainObject = objectPath[0];
|
||||||
|
|
||||||
|
return this._appliesToObjects.filter(type => contextualDomainObject.type === type).length;
|
||||||
|
}
|
||||||
|
}
|
18
src/plugins/clearData/components/globalClearIndicator.vue
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<div class="c-indicator c-indicator--clickable icon-clear-data s-status-caution">
|
||||||
|
<span class="label c-indicator__label">
|
||||||
|
<button @click="globalClearEmit">Clear Data</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
inject: ['openmct'],
|
||||||
|
methods: {
|
||||||
|
globalClearEmit() {
|
||||||
|
this.openmct.objectViews.emit('clearData');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
54
src/plugins/clearData/plugin.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2019, 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([
|
||||||
|
'./components/globalClearIndicator.vue',
|
||||||
|
'./clearDataAction',
|
||||||
|
'vue'
|
||||||
|
], function (
|
||||||
|
GlobaClearIndicator,
|
||||||
|
ClearDataAction,
|
||||||
|
Vue
|
||||||
|
) {
|
||||||
|
return function plugin(appliesToObjects) {
|
||||||
|
appliesToObjects = appliesToObjects || [];
|
||||||
|
|
||||||
|
return function install(openmct) {
|
||||||
|
let component = new Vue ({
|
||||||
|
provide: {
|
||||||
|
openmct
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
GlobalClearIndicator: GlobaClearIndicator.default
|
||||||
|
},
|
||||||
|
template: '<GlobalClearIndicator></GlobalClearIndicator>'
|
||||||
|
}),
|
||||||
|
indicator = {
|
||||||
|
element: component.$mount().$el
|
||||||
|
};
|
||||||
|
|
||||||
|
openmct.indicators.add(indicator);
|
||||||
|
|
||||||
|
openmct.contextMenu.registerAction(new ClearDataAction.default(openmct, appliesToObjects));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
62
src/plugins/clearData/test/clearDataActionSpec.js
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
import ClearDataActionPlugin from '../plugin.js';
|
||||||
|
import ClearDataAction from '../clearDataAction.js';
|
||||||
|
|
||||||
|
describe('When the Clear Data Plugin is installed,', function () {
|
||||||
|
var mockObjectViews = jasmine.createSpyObj('objectViews', ['emit']),
|
||||||
|
mockIndicatorProvider = jasmine.createSpyObj('indicators', ['add']),
|
||||||
|
mockContextMenuProvider = jasmine.createSpyObj('contextMenu', ['registerAction']),
|
||||||
|
openmct = {
|
||||||
|
objectViews: mockObjectViews,
|
||||||
|
indicators: mockIndicatorProvider,
|
||||||
|
contextMenu: mockContextMenuProvider,
|
||||||
|
install: function (plugin) {
|
||||||
|
plugin(this);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mockObjectPath = [
|
||||||
|
{name: 'mockObject1'},
|
||||||
|
{name: 'mockObject2'}
|
||||||
|
];
|
||||||
|
|
||||||
|
it('Global Clear Indicator is installed', function () {
|
||||||
|
openmct.install(ClearDataActionPlugin([]));
|
||||||
|
|
||||||
|
expect(mockIndicatorProvider.add).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Clear Data context menu action is installed', function () {
|
||||||
|
openmct.install(ClearDataActionPlugin([]));
|
||||||
|
|
||||||
|
expect(mockContextMenuProvider.registerAction).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('clear data action emits a clearData event when invoked', function () {
|
||||||
|
let action = new ClearDataAction(openmct);
|
||||||
|
|
||||||
|
action.invoke(mockObjectPath);
|
||||||
|
|
||||||
|
expect(mockObjectViews.emit).toHaveBeenCalledWith('clearData', mockObjectPath[0]);
|
||||||
|
});
|
||||||
|
});
|
@ -29,7 +29,7 @@ define([
|
|||||||
function isTelemetryObject(selectionPath) {
|
function isTelemetryObject(selectionPath) {
|
||||||
let selectedObject = selectionPath[0].context.item;
|
let selectedObject = selectionPath[0].context.item;
|
||||||
let parentObject = selectionPath[1].context.item;
|
let parentObject = selectionPath[1].context.item;
|
||||||
return parentObject &&
|
return parentObject &&
|
||||||
parentObject.type === 'layout' &&
|
parentObject.type === 'layout' &&
|
||||||
selectedObject &&
|
selectedObject &&
|
||||||
openmct.telemetry.isTelemetryObject(selectedObject) &&
|
openmct.telemetry.isTelemetryObject(selectedObject) &&
|
||||||
@ -46,13 +46,14 @@ define([
|
|||||||
|
|
||||||
return selection.every(isTelemetryObject);
|
return selection.every(isTelemetryObject);
|
||||||
},
|
},
|
||||||
view: function (selection) {
|
view: function (domainObject, isEditing, objectPath) {
|
||||||
let component;
|
let component;
|
||||||
return {
|
return {
|
||||||
show: function (element) {
|
show: function (element) {
|
||||||
component = new Vue({
|
component = new Vue({
|
||||||
provide: {
|
provide: {
|
||||||
openmct
|
openmct,
|
||||||
|
objectPath
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
AlphanumericFormatView: AlphanumericFormatView.default
|
AlphanumericFormatView: AlphanumericFormatView.default
|
||||||
@ -74,4 +75,4 @@ define([
|
|||||||
}
|
}
|
||||||
|
|
||||||
return AlphanumericFormatViewProvider;
|
return AlphanumericFormatViewProvider;
|
||||||
});
|
});
|
||||||
|