diff --git a/platform/commonUI/dialog/res/templates/overlay-message-list.html b/platform/commonUI/dialog/res/templates/overlay-message-list.html index 39aa0ca228..caabd7d4bf 100644 --- a/platform/commonUI/dialog/res/templates/overlay-message-list.html +++ b/platform/commonUI/dialog/res/templates/overlay-message-list.html @@ -6,6 +6,12 @@ ng-show="ngModel.dialog.messages.length > 1 || ngModel.dialog.messages.length == 0">s +
- {{dialogAction.label}} + {{ dialogAction.label }}
diff --git a/platform/commonUI/notification/bundle.js b/platform/commonUI/notification/bundle.js index 5410172d84..f8a2a3a566 100644 --- a/platform/commonUI/notification/bundle.js +++ b/platform/commonUI/notification/bundle.js @@ -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", diff --git a/platform/commonUI/notification/res/notification-indicator.html b/platform/commonUI/notification/res/notification-indicator.html deleted file mode 100644 index 75ec9be553..0000000000 --- a/platform/commonUI/notification/res/notification-indicator.html +++ /dev/null @@ -1,8 +0,0 @@ - -
- - - {{notifications.length}} -
diff --git a/platform/commonUI/notification/src/NotificationIndicatorController.js b/platform/commonUI/notification/src/NotificationIndicatorController.js deleted file mode 100644 index ced8b5b87e..0000000000 --- a/platform/commonUI/notification/src/NotificationIndicatorController.js +++ /dev/null @@ -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; - } -); - diff --git a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js b/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js deleted file mode 100644 index 9fe5ffb325..0000000000 --- a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js +++ /dev/null @@ -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(); - }); - }); - } -); diff --git a/report.20200527.134750.93992.001.json b/report.20200527.134750.93992.001.json new file mode 100644 index 0000000000..d9515d66d7 --- /dev/null +++ b/report.20200527.134750.93992.001.json @@ -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, std::__1::allocator >, v8::Local) [/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" + ] +} \ No newline at end of file diff --git a/src/MCT.js b/src/MCT.js index 9eedf2bee7..4ea629f5c2 100644 --- a/src/MCT.js +++ b/src/MCT.js @@ -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); diff --git a/src/api/notifications/NotificationAPI.js b/src/api/notifications/NotificationAPI.js index 505af91b47..ec092ec900 100644 --- a/src/api/notifications/NotificationAPI.js +++ b/src/api/notifications/NotificationAPI.js @@ -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 diff --git a/src/plugins/notificationIndicator/components/NotificationIndicator.vue b/src/plugins/notificationIndicator/components/NotificationIndicator.vue new file mode 100644 index 0000000000..a3a3cffa1a --- /dev/null +++ b/src/plugins/notificationIndicator/components/NotificationIndicator.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/plugins/notificationIndicator/components/NotificationMessage.vue b/src/plugins/notificationIndicator/components/NotificationMessage.vue new file mode 100644 index 0000000000..96fd02cfc7 --- /dev/null +++ b/src/plugins/notificationIndicator/components/NotificationMessage.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/plugins/notificationIndicator/components/NotificationsList.vue b/src/plugins/notificationIndicator/components/NotificationsList.vue new file mode 100644 index 0000000000..dadbf7074d --- /dev/null +++ b/src/plugins/notificationIndicator/components/NotificationsList.vue @@ -0,0 +1,69 @@ + + + diff --git a/platform/commonUI/notification/src/NotificationIndicator.js b/src/plugins/notificationIndicator/plugin.js similarity index 60% rename from platform/commonUI/notification/src/NotificationIndicator.js rename to src/plugins/notificationIndicator/plugin.js index af399985c9..d870d67c90 100644 --- a/platform/commonUI/notification/src/NotificationIndicator.js +++ b/src/plugins/notificationIndicator/plugin.js @@ -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: '' + }), + indicator = { + key: 'notifications-indicator', + element: component.$mount().$el + }; - function NotificationIndicator() {} - - NotificationIndicator.template = 'notificationIndicatorTemplate'; - - return NotificationIndicator; - } -); + openmct.indicators.add(indicator); + }; +} diff --git a/src/plugins/notificationIndicator/pluginSpec.js b/src/plugins/notificationIndicator/pluginSpec.js new file mode 100644 index 0000000000..61b6efa486 --- /dev/null +++ b/src/plugins/notificationIndicator/pluginSpec.js @@ -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()); + }); + }); + +}); diff --git a/src/plugins/plugins.js b/src/plugins/plugins.js index ca64422819..d177dcd9a8 100644 --- a/src/plugins/plugins.js +++ b/src/plugins/plugins.js @@ -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; }); diff --git a/src/ui/layout/status-bar/NotificationBanner.vue b/src/ui/layout/status-bar/NotificationBanner.vue index 49fdd927fc..d048a4e0ba 100644 --- a/src/ui/layout/status-bar/NotificationBanner.vue +++ b/src/ui/layout/status-bar/NotificationBanner.vue @@ -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) {