mirror of
https://github.com/nasa/openmct.git
synced 2025-04-09 04:14:32 +00:00
Refactor Notifications to use Vue, and add clear all option (#3068)
[Notifications] Need a clear all notifications option #3006 * create new notifications indicator in vue, and sunset old one * add notifications list overlay * working notifications * add support for progress notifications * update percentage on mounted * Markup cleanups in new Vue Notifications files - Removed unneeded markup and class wrappers; - Removed unneeded inline styling; * remove example notifications * fix lint errors * make reviewer requested changes, remove old not needed files, add test * update testTools to testUtils Co-authored-by: charlesh88 <charlesh88@gmail.com>
This commit is contained in:
parent
8363c65312
commit
ab463e93fe
@ -6,6 +6,12 @@
|
||||
ng-show="ngModel.dialog.messages.length > 1 ||
|
||||
ngModel.dialog.messages.length == 0">s</span>
|
||||
</div>
|
||||
<button
|
||||
ng-if="ngModel.dialog.topBarButton"
|
||||
class="c-button c-button--major"
|
||||
ng-click="ngModel.topBarButton.onClick">
|
||||
{{ ngModel.topBarButton.label }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="w-messages c-overlay__messages">
|
||||
<mct-include
|
||||
@ -16,7 +22,7 @@
|
||||
<button ng-repeat="dialogAction in ngModel.dialog.actions"
|
||||
class="c-button c-button--major"
|
||||
ng-click="dialogAction.action()">
|
||||
{{dialogAction.label}}
|
||||
{{ dialogAction.label }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -21,44 +21,15 @@
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
"./src/NotificationIndicatorController",
|
||||
"./src/NotificationIndicator",
|
||||
"./src/NotificationService",
|
||||
"./res/notification-indicator.html"
|
||||
"./src/NotificationService"
|
||||
], function (
|
||||
NotificationIndicatorController,
|
||||
NotificationIndicator,
|
||||
NotificationService,
|
||||
notificationIndicatorTemplate
|
||||
NotificationService
|
||||
) {
|
||||
|
||||
return {
|
||||
name:"platform/commonUI/notification",
|
||||
definition: {
|
||||
"extensions": {
|
||||
"templates": [
|
||||
{
|
||||
"key": "notificationIndicatorTemplate",
|
||||
"template": notificationIndicatorTemplate
|
||||
}
|
||||
],
|
||||
"controllers": [
|
||||
{
|
||||
"key": "NotificationIndicatorController",
|
||||
"implementation": NotificationIndicatorController,
|
||||
"depends": [
|
||||
"$scope",
|
||||
"openmct",
|
||||
"dialogService"
|
||||
]
|
||||
}
|
||||
],
|
||||
"indicators": [
|
||||
{
|
||||
"implementation": NotificationIndicator,
|
||||
"priority": "fallback"
|
||||
}
|
||||
],
|
||||
"services": [
|
||||
{
|
||||
"key": "notificationService",
|
||||
|
@ -1,8 +0,0 @@
|
||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||
<div ng-show="notifications.length > 0" class="c-indicator c-indicator--clickable s-status-{{highest.severity}} icon-bell"
|
||||
ng-controller="NotificationIndicatorController">
|
||||
<span class="label c-indicator__label">
|
||||
<button ng-click="showNotificationsList()">
|
||||
{{notifications.length}} Notification<span ng-show="notifications.length > 1">s</span></button>
|
||||
</span><span class="c-indicator__count">{{notifications.length}}</span>
|
||||
</div>
|
@ -1,73 +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 () {
|
||||
|
||||
/**
|
||||
* Provides an indicator that is visible when there are
|
||||
* banner notifications that have been minimized. Will also indicate
|
||||
* the number of notifications. Notifications can be viewed by
|
||||
* clicking on the indicator to launch a dialog showing a list of
|
||||
* notifications.
|
||||
* @param $scope
|
||||
* @param notificationService
|
||||
* @param dialogService
|
||||
* @constructor
|
||||
*/
|
||||
function NotificationIndicatorController($scope, openmct, dialogService) {
|
||||
$scope.notifications = openmct.notifications.notifications;
|
||||
$scope.highest = openmct.notifications.highest;
|
||||
|
||||
/**
|
||||
* Launch a dialog showing a list of current notifications.
|
||||
*/
|
||||
$scope.showNotificationsList = function () {
|
||||
let notificationsList = openmct.notifications.notifications.map(notification => {
|
||||
if (notification.model.severity === 'alert' || notification.model.severity === 'info') {
|
||||
notification.model.primaryOption = {
|
||||
label: 'Dismiss',
|
||||
callback: () => {
|
||||
let currentIndex = notificationsList.indexOf(notification);
|
||||
notification.dismiss();
|
||||
notificationsList.splice(currentIndex, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return notification;
|
||||
})
|
||||
dialogService.getDialogResponse('overlay-message-list', {
|
||||
dialog: {
|
||||
title: "Messages",
|
||||
//Launch the message list dialog with the models
|
||||
// from the notifications
|
||||
messages: notificationsList
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
}
|
||||
return NotificationIndicatorController;
|
||||
}
|
||||
);
|
||||
|
@ -1,60 +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/NotificationIndicatorController'],
|
||||
function (NotificationIndicatorController) {
|
||||
|
||||
xdescribe("The notification indicator controller ", function () {
|
||||
var mockNotificationService,
|
||||
mockScope,
|
||||
mockDialogService,
|
||||
controller;
|
||||
|
||||
beforeEach(function () {
|
||||
mockNotificationService = jasmine.createSpy("notificationService");
|
||||
mockScope = jasmine.createSpy("$scope");
|
||||
mockDialogService = jasmine.createSpyObj(
|
||||
"dialogService",
|
||||
["getDialogResponse","dismiss"]
|
||||
);
|
||||
mockNotificationService.highest = {
|
||||
severity: "error"
|
||||
};
|
||||
controller = new NotificationIndicatorController(mockScope, mockNotificationService, mockDialogService);
|
||||
});
|
||||
|
||||
it("exposes the highest notification severity to the template", function () {
|
||||
expect(mockScope.highest).toBeTruthy();
|
||||
expect(mockScope.highest.severity).toBe("error");
|
||||
});
|
||||
|
||||
it("invokes the dialog service to show list of messages", function () {
|
||||
expect(mockScope.showNotificationsList).toBeDefined();
|
||||
mockScope.showNotificationsList();
|
||||
expect(mockDialogService.getDialogResponse).toHaveBeenCalled();
|
||||
expect(mockDialogService.getDialogResponse.calls.mostRecent().args[0]).toBe('overlay-message-list');
|
||||
expect(mockDialogService.getDialogResponse.calls.mostRecent().args[1].dialog).toBeDefined();
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
621
report.20200527.134750.93992.001.json
Normal file
621
report.20200527.134750.93992.001.json
Normal file
@ -0,0 +1,621 @@
|
||||
|
||||
{
|
||||
"header": {
|
||||
"event": "Allocation failed - JavaScript heap out of memory",
|
||||
"location": "OnFatalError",
|
||||
"filename": "report.20200527.134750.93992.001.json",
|
||||
"dumpEventTime": "2020-05-27T13:47:50Z",
|
||||
"dumpEventTimeStamp": "1590612470877",
|
||||
"processId": 93992,
|
||||
"commandLine": [
|
||||
"node",
|
||||
"/Users/dtailor/Desktop/openmct/node_modules/.bin/karma",
|
||||
"start",
|
||||
"--single-run"
|
||||
],
|
||||
"nodejsVersion": "v11.9.0",
|
||||
"wordSize": 64,
|
||||
"componentVersions": {
|
||||
"node": "11.9.0",
|
||||
"v8": "7.0.276.38-node.16",
|
||||
"uv": "1.25.0",
|
||||
"zlib": "1.2.11",
|
||||
"brotli": "1.0.7",
|
||||
"ares": "1.15.0",
|
||||
"modules": "67",
|
||||
"nghttp2": "1.34.0",
|
||||
"napi": "4",
|
||||
"llhttp": "1.0.1",
|
||||
"http_parser": "2.8.0",
|
||||
"openssl": "1.1.1a",
|
||||
"cldr": "34.0",
|
||||
"icu": "63.1",
|
||||
"tz": "2018e",
|
||||
"unicode": "11.0",
|
||||
"arch": "x64",
|
||||
"platform": "darwin",
|
||||
"release": "node"
|
||||
},
|
||||
"osVersion": "Darwin 18.7.0 Darwin Kernel Version 18.7.0: Thu Jan 23 06:52:12 PST 2020; root:xnu-4903.278.25~1/RELEASE_X86_64",
|
||||
"machine": "Darwin 18.7.0 Darwin Kernel Version 18.7.0: Thu Jan 23 06:52:12 PST 2020; root:xnu-4903.278.25~1/RELEASE_X86_64tailor x86_64"
|
||||
},
|
||||
"javascriptStack": {
|
||||
"message": "No stack.",
|
||||
"stack": [
|
||||
"Unavailable."
|
||||
]
|
||||
},
|
||||
"nativeStack": [
|
||||
" [pc=0x10013090e] report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, v8::Local<v8::String>) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x100063744] node::OnFatalError(char const*, char const*) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1001a8c47] v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1001a8be4] v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005add42] v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005b0273] v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005ac7a8] v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005aa965] v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005b720c] v8::internal::Heap::AllocateRawWithLightRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1005b728f] v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x100586484] v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x1008389a4] v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node]",
|
||||
" [pc=0x14acfddcfc7d] "
|
||||
],
|
||||
"javascriptHeap": {
|
||||
"totalMemory": 1479229440,
|
||||
"totalCommittedMemory": 1477309024,
|
||||
"usedMemory": 1445511032,
|
||||
"availableMemory": 50296592,
|
||||
"memoryLimit": 1526909922,
|
||||
"heapSpaces": {
|
||||
"read_only_space": {
|
||||
"memorySize": 524288,
|
||||
"committedMemory": 42224,
|
||||
"capacity": 515584,
|
||||
"used": 33520,
|
||||
"available": 482064
|
||||
},
|
||||
"new_space": {
|
||||
"memorySize": 4194304,
|
||||
"committedMemory": 4194288,
|
||||
"capacity": 2062336,
|
||||
"used": 59016,
|
||||
"available": 2003320
|
||||
},
|
||||
"old_space": {
|
||||
"memorySize": 305860608,
|
||||
"committedMemory": 305138544,
|
||||
"capacity": 283264904,
|
||||
"used": 282942208,
|
||||
"available": 322696
|
||||
},
|
||||
"code_space": {
|
||||
"memorySize": 6291456,
|
||||
"committedMemory": 5687328,
|
||||
"capacity": 5237152,
|
||||
"used": 5237152,
|
||||
"available": 0
|
||||
},
|
||||
"map_space": {
|
||||
"memorySize": 5255168,
|
||||
"committedMemory": 5143024,
|
||||
"capacity": 2523280,
|
||||
"used": 2523280,
|
||||
"available": 0
|
||||
},
|
||||
"large_object_space": {
|
||||
"memorySize": 1157103616,
|
||||
"committedMemory": 1157103616,
|
||||
"capacity": 1202204368,
|
||||
"used": 1154715856,
|
||||
"available": 47488512
|
||||
},
|
||||
"new_large_object_space": {
|
||||
"memorySize": 0,
|
||||
"committedMemory": 0,
|
||||
"capacity": 0,
|
||||
"used": 0,
|
||||
"available": 0
|
||||
}
|
||||
}
|
||||
},
|
||||
"resourceUsage": {
|
||||
"userCpuSeconds": 43.1616,
|
||||
"kernelCpuSeconds": 43.1616,
|
||||
"cpuConsumptionPercent": 5.42705e-06,
|
||||
"maxRss": 1966080000000,
|
||||
"pageFaults": {
|
||||
"IORequired": 245,
|
||||
"IONotRequired": 832598
|
||||
},
|
||||
"fsActivity": {
|
||||
"reads": 0,
|
||||
"writes": 0
|
||||
}
|
||||
},
|
||||
"libuv": [
|
||||
],
|
||||
"environmentVariables": {
|
||||
"npm_config_save_dev": "",
|
||||
"npm_config_legacy_bundling": "",
|
||||
"npm_config_dry_run": "",
|
||||
"npm_package_devDependencies_markdown_toc": "^0.11.7",
|
||||
"npm_config_only": "",
|
||||
"npm_config_browser": "",
|
||||
"npm_config_viewer": "man",
|
||||
"npm_config_commit_hooks": "true",
|
||||
"npm_package_gitHead": "7126abe7ec1d66d3252f3598fbd6bd27217018bc",
|
||||
"npm_config_also": "",
|
||||
"npm_package_scripts_otherdoc": "node docs/gendocs.js --in docs/src --out dist/docs --suppress-toc 'docs/src/index.md|docs/src/process/index.md'",
|
||||
"npm_package_devDependencies_minimist": "^1.1.1",
|
||||
"npm_config_sign_git_commit": "",
|
||||
"npm_config_rollback": "true",
|
||||
"npm_package_devDependencies_fast_sass_loader": "1.4.6",
|
||||
"TERM_PROGRAM": "Apple_Terminal",
|
||||
"npm_config_usage": "",
|
||||
"npm_config_audit": "true",
|
||||
"npm_package_devDependencies_git_rev_sync": "^1.4.0",
|
||||
"npm_package_devDependencies_file_loader": "^1.1.11",
|
||||
"npm_package_devDependencies_d3_selection": "1.3.x",
|
||||
"NODE": "/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node",
|
||||
"npm_package_homepage": "https://github.com/nasa/openmct#readme",
|
||||
"INIT_CWD": "/Users/dtailor/Desktop/openmct",
|
||||
"NVM_CD_FLAGS": "",
|
||||
"npm_config_globalignorefile": "/Users/dtailor/.nvm/versions/node/v11.9.0/etc/npmignore",
|
||||
"npm_package_devDependencies_comma_separated_values": "^3.6.4",
|
||||
"SHELL": "/bin/bash",
|
||||
"TERM": "xterm-256color",
|
||||
"npm_config_init_author_url": "",
|
||||
"npm_config_shell": "/bin/bash",
|
||||
"npm_config_maxsockets": "50",
|
||||
"npm_package_devDependencies_vue_template_compiler": "2.5.6",
|
||||
"npm_package_devDependencies_style_loader": "^1.0.1",
|
||||
"npm_package_devDependencies_moment_duration_format": "^2.2.2",
|
||||
"npm_config_parseable": "",
|
||||
"npm_config_shrinkwrap": "true",
|
||||
"npm_config_metrics_registry": "https://registry.npmjs.org/",
|
||||
"TMPDIR": "/var/folders/ks/ytghmh9x4lj3cchr5km5lhkcb7v9y2/T/",
|
||||
"npm_config_timing": "",
|
||||
"npm_config_init_license": "ISC",
|
||||
"npm_package_scripts_lint": "eslint platform example src --ext .js,.vue openmct.js",
|
||||
"npm_package_devDependencies_d3_array": "1.2.x",
|
||||
"Apple_PubSub_Socket_Render": "/private/tmp/com.apple.launchd.PsV6Dfq4Tm/Render",
|
||||
"npm_config_if_present": "",
|
||||
"npm_package_devDependencies_concurrently": "^3.6.1",
|
||||
"TERM_PROGRAM_VERSION": "421.2",
|
||||
"npm_package_scripts_jsdoc": "jsdoc -c jsdoc.json -R API.md -r -d dist/docs/api",
|
||||
"npm_config_sign_git_tag": "",
|
||||
"npm_config_init_author_email": "",
|
||||
"npm_config_cache_max": "Infinity",
|
||||
"npm_config_preid": "",
|
||||
"npm_config_long": "",
|
||||
"npm_config_local_address": "",
|
||||
"npm_config_cert": "",
|
||||
"npm_config_git_tag_version": "true",
|
||||
"npm_package_devDependencies_exports_loader": "^0.7.0",
|
||||
"TERM_SESSION_ID": "0630D2FA-BAC2-48D3-A21D-9AB58A79FB14",
|
||||
"npm_config_noproxy": "",
|
||||
"npm_config_registry": "https://registry.npmjs.org/",
|
||||
"npm_config_fetch_retries": "2",
|
||||
"npm_package_private": "true",
|
||||
"npm_package_devDependencies_karma_jasmine": "^1.1.2",
|
||||
"npm_package_repository_url": "git+https://github.com/nasa/openmct.git",
|
||||
"npm_config_versions": "",
|
||||
"npm_config_key": "",
|
||||
"npm_config_message": "%s",
|
||||
"npm_package_readmeFilename": "README.md",
|
||||
"npm_package_devDependencies_painterro": "^0.2.65",
|
||||
"npm_package_scripts_verify": "concurrently 'npm:test' 'npm:lint'",
|
||||
"npm_package_devDependencies_webpack": "^4.16.2",
|
||||
"npm_package_devDependencies_eventemitter3": "^1.2.0",
|
||||
"npm_package_description": "The Open MCT core platform",
|
||||
"USER": "dtailor",
|
||||
"NVM_DIR": "/Users/dtailor/.nvm",
|
||||
"npm_package_license": "Apache-2.0",
|
||||
"npm_package_scripts_build_dev": "webpack",
|
||||
"npm_package_devDependencies_webpack_cli": "^3.1.0",
|
||||
"npm_package_devDependencies_location_bar": "^3.0.1",
|
||||
"npm_package_devDependencies_jasmine_core": "^3.1.0",
|
||||
"npm_config_globalconfig": "/Users/dtailor/.nvm/versions/node/v11.9.0/etc/npmrc",
|
||||
"npm_package_devDependencies_karma": "^2.0.3",
|
||||
"npm_config_prefer_online": "",
|
||||
"npm_config_always_auth": "",
|
||||
"npm_config_logs_max": "10",
|
||||
"npm_package_devDependencies_angular": "1.7.9",
|
||||
"SSH_AUTH_SOCK": "/private/tmp/com.apple.launchd.JH8E4KgH06/Listeners",
|
||||
"npm_package_devDependencies_request": "^2.69.0",
|
||||
"npm_package_devDependencies_eslint": "5.2.0",
|
||||
"__CF_USER_TEXT_ENCODING": "0x167DA7C2:0x0:0x0",
|
||||
"npm_execpath": "/Users/dtailor/.nvm/versions/node/v11.9.0/lib/node_modules/npm/bin/npm-cli.js",
|
||||
"npm_config_global_style": "",
|
||||
"npm_config_cache_lock_retries": "10",
|
||||
"npm_config_cafile": "",
|
||||
"npm_config_update_notifier": "true",
|
||||
"npm_package_scripts_test_debug": "cross-env NODE_ENV=debug karma start --no-single-run",
|
||||
"npm_package_devDependencies_glob": ">= 3.0.0",
|
||||
"npm_config_heading": "npm",
|
||||
"npm_config_audit_level": "low",
|
||||
"npm_package_devDependencies_mini_css_extract_plugin": "^0.4.1",
|
||||
"npm_package_devDependencies_copy_webpack_plugin": "^4.5.2",
|
||||
"npm_config_read_only": "",
|
||||
"npm_config_offline": "",
|
||||
"npm_config_searchlimit": "20",
|
||||
"npm_config_fetch_retry_mintimeout": "10000",
|
||||
"npm_package_devDependencies_webpack_dev_middleware": "^3.1.3",
|
||||
"npm_config_json": "",
|
||||
"npm_config_access": "",
|
||||
"npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"test\"],\"original\":[\"run\",\"test\"]}",
|
||||
"npm_package_scripts_lint_fix": "eslint platform example src --ext .js,.vue openmct.js --fix",
|
||||
"npm_package_devDependencies_uuid": "^3.3.3",
|
||||
"npm_package_devDependencies_karma_coverage": "^1.1.2",
|
||||
"PATH": "/Users/dtailor/.nvm/versions/node/v11.9.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/dtailor/Desktop/openmct/node_modules/.bin:/Users/dtailor/.nvm/versions/node/v11.9.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/dtailor/Desktop/openmct/node_modules/.bin:/Users/dtailor/.nvm/versions/node/v11.9.0/bin:/Users/dtailor/.homebrew/bin:/Users/dtailor/local/bin:/Users/dtailor/.homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/dtailor/Applications/Visual Studio Code.app/Contents/Resources/app/bin:/opt/local/bin:/Users/dtailor/.homebrew/bin:/Users/dtailor/.homebrew/bin:/Users/dtailor/.homebrew/bin:/Users/dtailor/local/bin:/Users/dtailor/.homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
|
||||
"npm_config_allow_same_version": "",
|
||||
"npm_config_https_proxy": "",
|
||||
"npm_config_engine_strict": "",
|
||||
"npm_config_description": "true",
|
||||
"npm_package_devDependencies_html2canvas": "^1.0.0-alpha.12",
|
||||
"_": "/Users/dtailor/Desktop/openmct/node_modules/.bin/karma",
|
||||
"npm_config_userconfig": "/Users/dtailor/.npmrc",
|
||||
"npm_config_init_module": "/Users/dtailor/.npm-init.js",
|
||||
"npm_package_author": "",
|
||||
"npm_package_devDependencies_karma_chrome_launcher": "^2.2.0",
|
||||
"npm_package_devDependencies_d3_scale": "1.0.x",
|
||||
"npm_config_cidr": "",
|
||||
"npm_package_devDependencies_printj": "^1.2.1",
|
||||
"PWD": "/Users/dtailor/Desktop/openmct",
|
||||
"npm_config_user": "377333698",
|
||||
"npm_config_node_version": "11.9.0",
|
||||
"npm_package_bugs_url": "https://github.com/nasa/openmct/issues",
|
||||
"npm_package_scripts_test_watch": "karma start --no-single-run",
|
||||
"npm_lifecycle_event": "test",
|
||||
"npm_package_devDependencies_v8_compile_cache": "^1.1.0",
|
||||
"npm_config_ignore_prepublish": "",
|
||||
"npm_config_save": "true",
|
||||
"npm_config_editor": "vi",
|
||||
"npm_config_auth_type": "legacy",
|
||||
"npm_package_repository_type": "git",
|
||||
"npm_package_devDependencies_vue": "2.5.6",
|
||||
"npm_package_devDependencies_marked": "^0.3.5",
|
||||
"npm_package_devDependencies_angular_route": "1.4.14",
|
||||
"npm_package_name": "openmct",
|
||||
"LANG": "en_US.UTF-8",
|
||||
"npm_config_script_shell": "",
|
||||
"npm_config_tag": "latest",
|
||||
"npm_config_global": "",
|
||||
"npm_config_progress": "true",
|
||||
"npm_package_scripts_start": "node app.js",
|
||||
"npm_package_devDependencies_karma_coverage_istanbul_reporter": "^2.1.1",
|
||||
"npm_config_ham_it_up": "",
|
||||
"npm_config_searchstaleness": "900",
|
||||
"npm_config_optional": "true",
|
||||
"npm_package_scripts_docs": "npm run jsdoc ; npm run otherdoc",
|
||||
"npm_package_devDependencies_istanbul_instrumenter_loader": "^3.0.1",
|
||||
"XPC_FLAGS": "0x0",
|
||||
"npm_config_save_prod": "",
|
||||
"npm_config_force": "",
|
||||
"npm_config_bin_links": "true",
|
||||
"npm_package_devDependencies_moment": "2.25.3",
|
||||
"npm_package_devDependencies_karma_webpack": "^3.0.0",
|
||||
"npm_package_devDependencies_express": "^4.13.1",
|
||||
"npm_config_searchopts": "",
|
||||
"npm_package_devDependencies_d3_time": "1.0.x",
|
||||
"FORCE_COLOR": "2",
|
||||
"npm_config_node_gyp": "/Users/dtailor/.nvm/versions/node/v11.9.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js",
|
||||
"npm_config_depth": "Infinity",
|
||||
"npm_package_scripts_build_prod": "cross-env NODE_ENV=production webpack",
|
||||
"npm_config_sso_poll_frequency": "500",
|
||||
"npm_config_rebuild_bundle": "true",
|
||||
"npm_package_version": "1.0.0-snapshot",
|
||||
"XPC_SERVICE_NAME": "0",
|
||||
"npm_config_unicode": "true",
|
||||
"npm_package_devDependencies_jsdoc": "^3.3.2",
|
||||
"SHLVL": "4",
|
||||
"HOME": "/Users/dtailor",
|
||||
"npm_config_fetch_retry_maxtimeout": "60000",
|
||||
"npm_package_scripts_test": "karma start --single-run",
|
||||
"npm_package_devDependencies_zepto": "^1.2.0",
|
||||
"npm_package_devDependencies_eslint_plugin_vue": "^6.0.0",
|
||||
"npm_config_ca": "",
|
||||
"npm_config_tag_version_prefix": "v",
|
||||
"npm_config_strict_ssl": "true",
|
||||
"npm_config_sso_type": "oauth",
|
||||
"npm_config_scripts_prepend_node_path": "warn-only",
|
||||
"npm_config_save_prefix": "^",
|
||||
"npm_config_loglevel": "notice",
|
||||
"npm_package_devDependencies_lodash": "^3.10.1",
|
||||
"npm_package_devDependencies_karma_cli": "^1.0.1",
|
||||
"npm_package_devDependencies_d3_color": "1.0.x",
|
||||
"npm_config_save_exact": "",
|
||||
"npm_config_dev": "",
|
||||
"npm_config_group": "1286109195",
|
||||
"npm_config_fetch_retry_factor": "10",
|
||||
"npm_package_devDependencies_webpack_hot_middleware": "^2.22.3",
|
||||
"npm_package_devDependencies_cross_env": "^6.0.3",
|
||||
"npm_package_devDependencies_babel_eslint": "8.2.6",
|
||||
"HOMEBREW_PREFIX": "/Users/dtailor/.homebrew",
|
||||
"npm_config_version": "",
|
||||
"npm_config_prefer_offline": "",
|
||||
"npm_config_cache_lock_stale": "60000",
|
||||
"npm_config_otp": "",
|
||||
"npm_config_cache_min": "10",
|
||||
"npm_package_devDependencies_vue_loader": "^15.2.6",
|
||||
"npm_config_searchexclude": "",
|
||||
"npm_config_cache": "/Users/dtailor/.npm",
|
||||
"npm_package_scripts_test_coverage": "./scripts/test-coverage.sh",
|
||||
"npm_package_devDependencies_d3_interpolate": "1.1.x",
|
||||
"npm_package_devDependencies_d3_format": "1.2.x",
|
||||
"LOGNAME": "dtailor",
|
||||
"npm_lifecycle_script": "karma start --single-run",
|
||||
"npm_config_color": "true",
|
||||
"npm_package_devDependencies_node_bourbon": "^4.2.3",
|
||||
"npm_package_devDependencies_karma_sourcemap_loader": "^0.3.7",
|
||||
"npm_package_devDependencies_karma_html_reporter": "^0.2.7",
|
||||
"npm_config_proxy": "",
|
||||
"npm_config_package_lock": "true",
|
||||
"npm_package_devDependencies_d3_time_format": "2.1.x",
|
||||
"npm_package_devDependencies_d3_axis": "1.0.x",
|
||||
"npm_config_package_lock_only": "",
|
||||
"npm_package_devDependencies_moment_timezone": "0.5.28",
|
||||
"npm_config_save_optional": "",
|
||||
"NVM_BIN": "/Users/dtailor/.nvm/versions/node/v11.9.0/bin",
|
||||
"npm_config_ignore_scripts": "",
|
||||
"npm_config_user_agent": "npm/6.5.0 node/v11.9.0 darwin x64",
|
||||
"npm_package_devDependencies_imports_loader": "^0.8.0",
|
||||
"npm_package_devDependencies_file_saver": "^1.3.8",
|
||||
"npm_config_cache_lock_wait": "10000",
|
||||
"npm_config_production": "",
|
||||
"npm_package_scripts_build_watch": "webpack --watch",
|
||||
"DISPLAY": "/private/tmp/com.apple.launchd.E3N8oC6RMf/org.macosforge.xquartz:0",
|
||||
"npm_config_send_metrics": "",
|
||||
"npm_config_save_bundle": "",
|
||||
"npm_package_scripts_prepare": "npm run build:prod",
|
||||
"npm_config_node_options": "",
|
||||
"npm_config_umask": "0022",
|
||||
"npm_config_init_version": "1.0.0",
|
||||
"npm_package_devDependencies_split": "^1.0.0",
|
||||
"npm_package_devDependencies_raw_loader": "^0.5.1",
|
||||
"npm_config_init_author_name": "",
|
||||
"npm_config_git": "git",
|
||||
"npm_config_scope": "",
|
||||
"npm_package_scripts_clean": "rm -rf ./dist",
|
||||
"npm_package_devDependencies_node_sass": "^4.9.2",
|
||||
"npm_package_devDependencies_css_loader": "^1.0.0",
|
||||
"DISABLE_UPDATE_CHECK": "1",
|
||||
"npm_config_onload_script": "",
|
||||
"npm_config_unsafe_perm": "true",
|
||||
"npm_config_tmp": "/var/folders/ks/ytghmh9x4lj3cchr5km5lhkcb7v9y2/T",
|
||||
"npm_package_devDependencies_d3_collection": "1.0.x",
|
||||
"npm_node_execpath": "/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node",
|
||||
"npm_config_link": "",
|
||||
"npm_config_prefix": "/Users/dtailor/.nvm/versions/node/v11.9.0",
|
||||
"npm_package_devDependencies_html_loader": "^0.5.5"
|
||||
},
|
||||
"userLimits": {
|
||||
"core_file_size_blocks": {
|
||||
"soft": 0,
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"data_seg_size_kbytes": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"file_size_blocks": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"max_locked_memory_bytes": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"max_memory_size_kbytes": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"open_files": {
|
||||
"soft": 24576,
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"stack_size_bytes": {
|
||||
"soft": 8388608,
|
||||
"hard": 67104768
|
||||
},
|
||||
"cpu_time_seconds": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
},
|
||||
"max_user_processes": {
|
||||
"soft": 1418,
|
||||
"hard": 2128
|
||||
},
|
||||
"virtual_memory_kbytes": {
|
||||
"soft": "unlimited",
|
||||
"hard": "unlimited"
|
||||
}
|
||||
},
|
||||
"sharedObjects": [
|
||||
"/Users/dtailor/.nvm/versions/node/v11.9.0/bin/node",
|
||||
"/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation",
|
||||
"/usr/lib/libSystem.B.dylib",
|
||||
"/usr/lib/libc++.1.dylib",
|
||||
"/usr/lib/libobjc.A.dylib",
|
||||
"/usr/lib/libDiagnosticMessagesClient.dylib",
|
||||
"/usr/lib/libicucore.A.dylib",
|
||||
"/usr/lib/libz.1.dylib",
|
||||
"/usr/lib/libc++abi.dylib",
|
||||
"/usr/lib/system/libcache.dylib",
|
||||
"/usr/lib/system/libcommonCrypto.dylib",
|
||||
"/usr/lib/system/libcompiler_rt.dylib",
|
||||
"/usr/lib/system/libcopyfile.dylib",
|
||||
"/usr/lib/system/libcorecrypto.dylib",
|
||||
"/usr/lib/system/libdispatch.dylib",
|
||||
"/usr/lib/system/libdyld.dylib",
|
||||
"/usr/lib/system/libkeymgr.dylib",
|
||||
"/usr/lib/system/liblaunch.dylib",
|
||||
"/usr/lib/system/libmacho.dylib",
|
||||
"/usr/lib/system/libquarantine.dylib",
|
||||
"/usr/lib/system/libremovefile.dylib",
|
||||
"/usr/lib/system/libsystem_asl.dylib",
|
||||
"/usr/lib/system/libsystem_blocks.dylib",
|
||||
"/usr/lib/system/libsystem_c.dylib",
|
||||
"/usr/lib/system/libsystem_configuration.dylib",
|
||||
"/usr/lib/system/libsystem_coreservices.dylib",
|
||||
"/usr/lib/system/libsystem_darwin.dylib",
|
||||
"/usr/lib/system/libsystem_dnssd.dylib",
|
||||
"/usr/lib/system/libsystem_info.dylib",
|
||||
"/usr/lib/system/libsystem_m.dylib",
|
||||
"/usr/lib/system/libsystem_malloc.dylib",
|
||||
"/usr/lib/system/libsystem_networkextension.dylib",
|
||||
"/usr/lib/system/libsystem_notify.dylib",
|
||||
"/usr/lib/system/libsystem_sandbox.dylib",
|
||||
"/usr/lib/system/libsystem_secinit.dylib",
|
||||
"/usr/lib/system/libsystem_kernel.dylib",
|
||||
"/usr/lib/system/libsystem_platform.dylib",
|
||||
"/usr/lib/system/libsystem_pthread.dylib",
|
||||
"/usr/lib/system/libsystem_symptoms.dylib",
|
||||
"/usr/lib/system/libsystem_trace.dylib",
|
||||
"/usr/lib/system/libunwind.dylib",
|
||||
"/usr/lib/system/libxpc.dylib",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices",
|
||||
"/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics",
|
||||
"/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO",
|
||||
"/System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis",
|
||||
"/System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight",
|
||||
"/System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface",
|
||||
"/usr/lib/libxml2.2.dylib",
|
||||
"/System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate",
|
||||
"/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation",
|
||||
"/usr/lib/libcompression.dylib",
|
||||
"/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration",
|
||||
"/System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay",
|
||||
"/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit",
|
||||
"/System/Library/Frameworks/Metal.framework/Versions/A/Metal",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders",
|
||||
"/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport",
|
||||
"/System/Library/Frameworks/Security.framework/Versions/A/Security",
|
||||
"/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore",
|
||||
"/usr/lib/libbsm.0.dylib",
|
||||
"/usr/lib/liblzma.5.dylib",
|
||||
"/usr/lib/libauto.dylib",
|
||||
"/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration",
|
||||
"/usr/lib/libarchive.2.dylib",
|
||||
"/usr/lib/liblangid.dylib",
|
||||
"/usr/lib/libCRFSuite.dylib",
|
||||
"/usr/lib/libenergytrace.dylib",
|
||||
"/usr/lib/system/libkxld.dylib",
|
||||
"/System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression",
|
||||
"/usr/lib/libOpenScriptingUtil.dylib",
|
||||
"/usr/lib/libcoretls.dylib",
|
||||
"/usr/lib/libcoretls_cfhelpers.dylib",
|
||||
"/usr/lib/libpam.2.dylib",
|
||||
"/usr/lib/libsqlite3.dylib",
|
||||
"/usr/lib/libxar.1.dylib",
|
||||
"/usr/lib/libbz2.1.0.dylib",
|
||||
"/usr/lib/libnetwork.dylib",
|
||||
"/usr/lib/libapple_nghttp2.dylib",
|
||||
"/usr/lib/libpcap.A.dylib",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices",
|
||||
"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList",
|
||||
"/System/Library/Frameworks/NetFS.framework/Versions/A/NetFS",
|
||||
"/System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth",
|
||||
"/System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport",
|
||||
"/System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC",
|
||||
"/System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP",
|
||||
"/System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities",
|
||||
"/usr/lib/libmecabra.dylib",
|
||||
"/usr/lib/libmecab.1.0.0.dylib",
|
||||
"/usr/lib/libgermantok.dylib",
|
||||
"/usr/lib/libThaiTokenizer.dylib",
|
||||
"/usr/lib/libChineseTokenizer.dylib",
|
||||
"/usr/lib/libiconv.2.dylib",
|
||||
"/usr/lib/libcharset.1.dylib",
|
||||
"/System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling",
|
||||
"/System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji",
|
||||
"/System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon",
|
||||
"/System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData",
|
||||
"/usr/lib/libcmph.dylib",
|
||||
"/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData",
|
||||
"/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory",
|
||||
"/System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS",
|
||||
"/usr/lib/libutil.dylib",
|
||||
"/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement",
|
||||
"/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement",
|
||||
"/usr/lib/libxslt.1.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib",
|
||||
"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib",
|
||||
"/System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler",
|
||||
"/System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator",
|
||||
"/System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment",
|
||||
"/System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSCore.framework/Versions/A/MPSCore",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSImage.framework/Versions/A/MPSImage",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix",
|
||||
"/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector",
|
||||
"/System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools",
|
||||
"/System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary",
|
||||
"/usr/lib/libMobileGestalt.dylib",
|
||||
"/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage",
|
||||
"/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",
|
||||
"/System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer",
|
||||
"/System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore",
|
||||
"/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL",
|
||||
"/usr/lib/libFosl_dynamic.dylib",
|
||||
"/System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib",
|
||||
"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib",
|
||||
"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib",
|
||||
"/System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib",
|
||||
"/usr/lib/libcups.2.dylib",
|
||||
"/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos",
|
||||
"/System/Library/Frameworks/GSS.framework/Versions/A/GSS",
|
||||
"/usr/lib/libresolv.9.dylib",
|
||||
"/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal",
|
||||
"/usr/lib/libheimdal-asn1.dylib",
|
||||
"/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory",
|
||||
"/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth",
|
||||
"/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation",
|
||||
"/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio",
|
||||
"/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox",
|
||||
"/System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce",
|
||||
"/System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices",
|
||||
"/System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard"
|
||||
]
|
||||
}
|
@ -266,6 +266,7 @@ define([
|
||||
this.install(this.plugins.WebPage());
|
||||
this.install(this.plugins.Condition());
|
||||
this.install(this.plugins.ConditionWidget());
|
||||
this.install(this.plugins.NotificationIndicator());
|
||||
}
|
||||
|
||||
MCT.prototype = Object.create(EventEmitter.prototype);
|
||||
|
@ -128,6 +128,11 @@ export default class NotificationAPI extends EventEmitter {
|
||||
return this._notify(notificationModel);
|
||||
}
|
||||
|
||||
dismissAllNotifications() {
|
||||
this.notifications = [];
|
||||
this.emit('dismiss-all');
|
||||
}
|
||||
|
||||
/**
|
||||
* Minimize a notification. The notification will still be available
|
||||
* from the notification list. Typically notifications with a
|
||||
|
@ -0,0 +1,70 @@
|
||||
<template>
|
||||
<div
|
||||
v-if="notifications.length > 0"
|
||||
class="c-indicator c-indicator--clickable icon-bell"
|
||||
:class="[severityClass]"
|
||||
>
|
||||
<span class="c-indicator__label">
|
||||
<button @click="toggleNotificationsList(true)">
|
||||
{{ notificationsCountMessage(notifications.length) }}
|
||||
</button>
|
||||
<button @click="dismissAllNotifications()">
|
||||
Clear All
|
||||
</button>
|
||||
</span>
|
||||
<span class="c-indicator__count">{{ notifications.length }}</span>
|
||||
|
||||
<notifications-list
|
||||
v-if="showNotificationsOverlay"
|
||||
:notifications="notifications"
|
||||
@close="toggleNotificationsList"
|
||||
@clear-all="dismissAllNotifications"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NotificationsList from './NotificationsList.vue';
|
||||
|
||||
export default {
|
||||
inject: ['openmct'],
|
||||
components: {
|
||||
NotificationsList
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
notifications: this.openmct.notifications.notifications,
|
||||
highest: this.openmct.notifications.highest,
|
||||
showNotificationsOverlay: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
severityClass() {
|
||||
return `s-status-${this.highest.severity}`;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.openmct.notifications.on('notification', this.updateNotifications);
|
||||
this.openmct.notifications.on('dismiss-all', this.updateNotifications);
|
||||
},
|
||||
methods: {
|
||||
dismissAllNotifications() {
|
||||
this.openmct.notifications.dismissAllNotifications();
|
||||
},
|
||||
toggleNotificationsList(flag) {
|
||||
this.showNotificationsOverlay = flag;
|
||||
},
|
||||
updateNotifications() {
|
||||
this.notifications = this.openmct.notifications.notifications;
|
||||
this.highest = this.openmct.notifications.highest;
|
||||
},
|
||||
notificationsCountMessage(count) {
|
||||
if (count > 1) {
|
||||
return `${count} Notifications`;
|
||||
} else {
|
||||
return `${count} Notification`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,85 @@
|
||||
<template>
|
||||
<div
|
||||
class="c-message"
|
||||
:class="'message-severity-' + notification.model.severity"
|
||||
>
|
||||
<div class="c-ne__time-and-content">
|
||||
<div class="c-ne__time">
|
||||
<span>{{ notification.model.timestamp }}</span>
|
||||
</div>
|
||||
<div class="c-ne__content">
|
||||
<div class="w-message-contents">
|
||||
<div class="c-message__top-bar">
|
||||
<div class="c-message__title">{{ notification.model.message }}</div>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
<progress-bar
|
||||
v-if="isProgressNotification"
|
||||
:model="progressObject"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="c-overlay__button-bar">
|
||||
<button
|
||||
v-for="(dialogOption, index) in notification.model.options"
|
||||
:key="index"
|
||||
class="c-button"
|
||||
@click="dialogOption.callback()"
|
||||
>
|
||||
{{ dialogOption.label }}
|
||||
</button>
|
||||
<button
|
||||
v-if="notification.model.primaryOption"
|
||||
class="c-button c-button--major"
|
||||
@click="notification.model.primaryOption.callback()"
|
||||
>
|
||||
{{ notification.model.primaryOption.label }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProgressBar from '../../../ui/components/ProgressBar.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
ProgressBar
|
||||
},
|
||||
props:{
|
||||
notification: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isProgressNotification: false,
|
||||
progressPerc: this.notification.model.progressPerc,
|
||||
progressText: this.notification.model.progressText
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
progressObject() {
|
||||
return {
|
||||
progressPerc: this.progressPerc,
|
||||
progressText: this.progressText
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (this.notification.model.progressPerc) {
|
||||
this.isProgressNotification = true;
|
||||
this.notification.on('progress', this.updateProgressBar)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
updateProgressBar(progressPerc, progressText) {
|
||||
this.progressPerc = progressPerc;
|
||||
this.progressText = progressText;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<div class="t-message-list c-overlay__contents">
|
||||
<div class="c-overlay__top-bar">
|
||||
<div class="c-overlay__dialog-title">Notifications</div>
|
||||
<div class="c-overlay__dialog-hint">
|
||||
{{ notificationsCountDisplayMessage(notifications.length) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-messages c-overlay__messages">
|
||||
<notification-message
|
||||
v-for="notification in notifications"
|
||||
:key="notification.model.timestamp"
|
||||
:notification="notification"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NotificationMessage from './NotificationMessage.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
NotificationMessage
|
||||
},
|
||||
inject: ['openmct'],
|
||||
props: {
|
||||
notifications: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
mounted() {
|
||||
this.openOverlay();
|
||||
},
|
||||
methods: {
|
||||
openOverlay() {
|
||||
this.overlay = this.openmct.overlays.overlay({
|
||||
element: this.$el,
|
||||
size: 'large',
|
||||
dismissable: true,
|
||||
buttons: [
|
||||
{
|
||||
label: 'Clear All Notifications',
|
||||
emphasis: true,
|
||||
callback:() => {
|
||||
this.$emit('clear-all');
|
||||
this.overlay.dismiss();
|
||||
}
|
||||
}
|
||||
],
|
||||
onDestroy: () => {
|
||||
this.$emit('close', false);
|
||||
}
|
||||
});
|
||||
},
|
||||
notificationsCountDisplayMessage(count) {
|
||||
if (count > 1 || count === 0) {
|
||||
return `Displaying ${count} notifications`;
|
||||
} else {
|
||||
return `Displaying ${count} notification`;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -1,5 +1,5 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2014-2018, United States Government
|
||||
* Open MCT, Copyright (c) 2014-2020, United States Government
|
||||
* as represented by the Administrator of the National Aeronautics and Space
|
||||
* Administration. All rights reserved.
|
||||
*
|
||||
@ -19,15 +19,25 @@
|
||||
* this source code distribution or the Licensing information page available
|
||||
* at runtime from the About dialog for additional information.
|
||||
*****************************************************************************/
|
||||
import Vue from 'vue';
|
||||
import NotificationIndicator from './components/NotificationIndicator.vue';
|
||||
|
||||
define(
|
||||
[],
|
||||
function () {
|
||||
export default function plugin() {
|
||||
return function install(openmct) {
|
||||
let component = new Vue ({
|
||||
provide: {
|
||||
openmct
|
||||
},
|
||||
components: {
|
||||
NotificationIndicator: NotificationIndicator
|
||||
},
|
||||
template: '<NotificationIndicator></NotificationIndicator>'
|
||||
}),
|
||||
indicator = {
|
||||
key: 'notifications-indicator',
|
||||
element: component.$mount().$el
|
||||
};
|
||||
|
||||
function NotificationIndicator() {}
|
||||
|
||||
NotificationIndicator.template = 'notificationIndicatorTemplate';
|
||||
|
||||
return NotificationIndicator;
|
||||
}
|
||||
);
|
||||
openmct.indicators.add(indicator);
|
||||
};
|
||||
}
|
71
src/plugins/notificationIndicator/pluginSpec.js
Normal file
71
src/plugins/notificationIndicator/pluginSpec.js
Normal file
@ -0,0 +1,71 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2014-2020, 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 NotificationIndicatorPlugin from './plugin.js';
|
||||
import Vue from 'vue';
|
||||
import {
|
||||
createOpenMct
|
||||
} from 'testUtils';
|
||||
|
||||
describe('the plugin', () => {
|
||||
let notificationIndicatorPlugin,
|
||||
openmct,
|
||||
indicatorObject,
|
||||
indicatorElement,
|
||||
parentElement,
|
||||
mockMessages = ['error', 'test', 'notifications'];
|
||||
|
||||
beforeEach((done) => {
|
||||
openmct = createOpenMct();
|
||||
|
||||
notificationIndicatorPlugin = new NotificationIndicatorPlugin();
|
||||
openmct.install(notificationIndicatorPlugin);
|
||||
|
||||
parentElement = document.createElement('div');
|
||||
|
||||
indicatorObject = openmct.indicators.indicatorObjects.find(indicator => indicator.key === 'notifications-indicator');
|
||||
indicatorElement = indicatorObject.element;
|
||||
|
||||
openmct.on('start', () => {
|
||||
mockMessages.forEach(message => {
|
||||
openmct.notifications.error(message);
|
||||
});
|
||||
done();
|
||||
});
|
||||
|
||||
openmct.startHeadless();
|
||||
});
|
||||
|
||||
describe('the indicator plugin element', () => {
|
||||
beforeEach(() => {
|
||||
parentElement.append(indicatorElement);
|
||||
return Vue.nextTick();
|
||||
});
|
||||
|
||||
it('notifies the user of the number of notifications', () => {
|
||||
let notificationCountElement = parentElement.querySelector('.c-indicator__count');
|
||||
|
||||
expect(notificationCountElement.innerText).toEqual(mockMessages.length.toString());
|
||||
});
|
||||
});
|
||||
|
||||
});
|
@ -51,7 +51,8 @@ define([
|
||||
'./conditionWidget/plugin',
|
||||
'./themes/espresso',
|
||||
'./themes/maelstrom',
|
||||
'./themes/snow'
|
||||
'./themes/snow',
|
||||
'./notificationIndicator/plugin'
|
||||
], function (
|
||||
_,
|
||||
UTCTimeSystem,
|
||||
@ -83,7 +84,8 @@ define([
|
||||
ConditionWidgetPlugin,
|
||||
Espresso,
|
||||
Maelstrom,
|
||||
Snow
|
||||
Snow,
|
||||
NotificationIndicator
|
||||
) {
|
||||
var bundleMap = {
|
||||
LocalStorage: 'platform/persistence/local',
|
||||
@ -192,6 +194,7 @@ define([
|
||||
plugins.Snow = Snow.default;
|
||||
plugins.Condition = ConditionPlugin.default;
|
||||
plugins.ConditionWidget = ConditionWidgetPlugin.default;
|
||||
plugins.NotificationIndicator = NotificationIndicator.default;
|
||||
|
||||
return plugins;
|
||||
});
|
||||
|
@ -91,6 +91,7 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
this.openmct.notifications.on('notification', this.showNotification);
|
||||
this.openmct.notifications.on('dismiss-all', this.clearModel);
|
||||
},
|
||||
methods: {
|
||||
showNotification(notification) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user